From e28ad680d8fa786f62d7e603dbe084b234754f43 Mon Sep 17 00:00:00 2001 From: Gustaf Lundh Date: Fri, 8 May 2015 10:45:38 +0200 Subject: [PATCH] Fix: Only show Add/Remove Hashtags UI elements if user has capability MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The "Add #..." button is visible regardless if the user can add new hashtags or not. Already existing hashtags will also display a remove hashtag (×) button when the user does not have the capability to edit hashtags. Correct the UI to only show these elements when the user has the necessary capability. Change-Id: I6ad104f06f3c9ce4fffb8cdbe8a26b7f59381149 --- .../google/gerrit/client/change/Actions.java | 2 +- .../google/gerrit/client/change/Hashtags.java | 21 ++++++++++++------- .../gerrit/server/change/PostHashtags.java | 13 ++++++++++-- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Actions.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Actions.java index 532f8f7270..968dc8d658 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Actions.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Actions.java @@ -38,7 +38,7 @@ class Actions extends Composite { private static final String[] CORE = { "abandon", "restore", "revert", "topic", "cherrypick", "submit", "rebase", "message", - "publish", "followup", "/"}; + "publish", "followup", "hashtags", "/"}; interface Binder extends UiBinder {} private static final Binder uiBinder = GWT.create(Binder.class); diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Hashtags.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Hashtags.java index faba10dd70..df9cc5e6e3 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Hashtags.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Hashtags.java @@ -51,6 +51,8 @@ public class Hashtags extends Composite { private static final String REMOVE; private static final String DATA_ID = "data-id"; + private boolean canEdit; + static { REMOVE = DOM.createUniqueId().replace('-', '_'); init(REMOVE); @@ -121,9 +123,10 @@ public class Hashtags extends Composite { } void set(ChangeInfo info) { + canEdit = info.has_actions() && info.actions().containsKey("hashtags"); this.changeId = info.legacy_id(); display(info); - openForm.setVisible(Gerrit.isSignedIn()); + openForm.setVisible(canEdit); } @UiHandler("openForm") @@ -165,13 +168,15 @@ public class Hashtags extends Composite { "#" + PageLinks.toChangeQuery("hashtag:\"" + hashtagName + "\"")) .setAttribute("role", "listitem") .append("#").append(hashtagName) - .closeAnchor() - .openElement("button") - .setAttribute("title", "Remove hashtag") - .setAttribute("onclick", REMOVE + "(event)") - .append("×") - .closeElement("button") - .closeSpan(); + .closeAnchor(); + if (canEdit) { + html.openElement("button") + .setAttribute("title", "Remove hashtag") + .setAttribute("onclick", REMOVE + "(event)") + .append("×") + .closeElement("button"); + } + html.closeSpan(); if (itr.hasNext()) { html.append(' '); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/PostHashtags.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/PostHashtags.java index 567241a279..62520f49c3 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/PostHashtags.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/PostHashtags.java @@ -20,6 +20,7 @@ import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.ResourceConflictException; import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestModifyView; +import com.google.gerrit.extensions.webui.UiAction; import com.google.gerrit.server.validators.ValidationException; import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; @@ -29,7 +30,8 @@ import java.io.IOException; import java.util.Set; @Singleton -public class PostHashtags implements RestModifyView { +public class PostHashtags implements RestModifyView, + UiAction{ private HashtagsUtil hashtagsUtil; @Inject @@ -51,4 +53,11 @@ public class PostHashtags implements RestModifyView