]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5935 Implement tag edition on issues
authorJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Mon, 15 Dec 2014 11:03:30 +0000 (12:03 +0100)
committerJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Tue, 16 Dec 2014 08:29:21 +0000 (09:29 +0100)
server/sonar-web/src/main/coffee/issues/workspace-list-item-view.coffee
server/sonar-web/src/main/hbs/issue/issue.hbs

index 92eb8d53625113fba257d55715b424e4b60495c7..886194a6679529050ab0d96f9a3390f6b56097ad 100644 (file)
@@ -6,12 +6,21 @@ define [
 
   class extends IssueView
 
+    ui:
+      tagsChange: '.issue-tags-change'
+      tagInput: '.issue-tag-input'
+      tagsEdit: '.issue-tag-edit'
+      tagsEditDone: '.issue-tag-edit-done'
+      tagsEditCancel: '.issue-tag-edit-cancel'
+      tagsList: '.issue-tag-list'
 
     events: ->
       _.extend super,
         'click': 'selectCurrent'
         'click .js-issue-navigate': 'openComponentViewer'
-
+        'click @ui.tagsChange': 'changeTags'
+        'click @ui.tagsEditDone': 'editDone'
+        'click @ui.tagsEditCancel': 'cancelEdit'
 
     initialize: (options) ->
       @listenTo options.app.state, 'change:selectedIndex', @select
@@ -19,6 +28,9 @@ define [
 
     onRender: ->
       super
+
+      @ui.tagsEdit.hide()
+
       @$el.addClass 'issue-navigate-right'
       @select()
 
@@ -53,6 +65,51 @@ define [
         @options.app.controller.showComponentViewer @model
 
 
+    changeTags: ->
+      jQuery.ajax
+        url: "#{baseUrl}/api/issues/tags?ps=0"
+      .done (r) =>
+        if @ui.tagInput.select2
+          # Prevent synchronization issue with navigation
+          @ui.tagInput.select2
+            tags: (_.difference r.tags, @model.get 'tags')
+            width: '300px'
+        if @ui.tagsEdit.show
+          @ui.tagsEdit.show()
+        if @ui.tagsList.hide
+          @ui.tagsList.hide()
+        @tagsBuffer = @ui.tagInput.select2 'val'
+        key.setScope 'tags'
+        key 'escape', 'tags', => @cancelEdit()
+
+
+    cancelEdit: ->
+      key.unbind 'escape', 'tags'
+      if @ui.tagsList.show
+        @ui.tagsList.show()
+      if @ui.tagInput.select2
+        @ui.tagInput.select2 'val', @tagsBuffer
+        @ui.tagInput.select2 'close'
+      if @ui.tagsEdit.hide
+        @ui.tagsEdit.hide()
+
+
+    editDone: ->
+      @ui.tagsEdit.html '<i class="spinner"></i>'
+      tags = @ui.tagInput.val()
+      jQuery.ajax
+        type: 'POST'
+        url: "#{baseUrl}/api/issues/set_tags"
+        data:
+          key: @model.get 'key'
+          tags: tags
+      .done (r) =>
+          @model.set 'tags', r.tags
+          @cancelEdit()
+      .always =>
+        @render()
+
+
     serializeData: ->
       _.extend super,
         showComponent: true
index 7bc2370c00a12951e9d411509cae3c8fd19b2f54..cb14198bc27528fe06692bcb893f7a5e3ee6f597 100644 (file)
@@ -1,8 +1,10 @@
 <div class="issue-message">{{message}}</div>
 
 <div class="issue-tags">
-  <i class="icon-tags"></i>
-  <span class="issue-meta">{{#if tags}}{{join tags ', '}}{{else}}{{t 'coding_rules.no_tags'}}{{/if}}</span>
+  <span class="issue-tag-list {{#inArray actions "set_tags"}}issue-tags-change{{/inArray}}">
+    <i class="icon-tags"></i>
+    <span class="issue-meta">{{#if tags}}{{join tags ', '}}{{else}}{{t 'coding_rules.no_tags'}}{{/if}}</span>
+  </span>
   {{#inArray actions "set_tags"}}<span class="issue-meta issue-tag-edit">
     <input class="issue-tag-input" type="text" value="{{#if tags}}{{join tags ','}}{{/if}}">
     <div class="button-group">