]> source.dussan.org Git - sonarqube.git/commitdiff
New Issues Page: plan
authorStas Vilchik <vilchiks@gmail.com>
Tue, 28 Jan 2014 06:50:58 +0000 (12:50 +0600)
committerStas Vilchik <vilchiks@gmail.com>
Tue, 28 Jan 2014 06:50:58 +0000 (12:50 +0600)
sonar-server/src/main/webapp/WEB-INF/app/views/issues/search.html.erb
sonar-server/src/main/webapp/WEB-INF/app/views/issues/templates/_issue_detail_assign_form.hbs.erb
sonar-server/src/main/webapp/WEB-INF/app/views/issues/templates/_issue_detail_plan_form.hbs.erb [new file with mode: 0644]
sonar-server/src/main/webapp/javascripts/navigator/issues.js

index 9db767693841976ae575dbd8f38c27aa8824ba98..ed069c846a7d2b8799df425d68adca6313c04dcd 100644 (file)
@@ -22,6 +22,7 @@
 <%= render :partial => '/issues/templates/issue_detail_rule.hbs' -%>
 <%= render :partial => '/issues/templates/issue_detail_set_severity_form.hbs' -%>
 <%= render :partial => '/issues/templates/issue_detail_assign_form.hbs' -%>
+<%= render :partial => '/issues/templates/issue_detail_plan_form.hbs' -%>
 
 <script>
   _.templateSettings = {
index 4f495e08b71ea68300ff5b902dce9d9daaad8a84..e1f9941126f3d932f5db1b19f966bb865204e829 100644 (file)
@@ -1,5 +1,5 @@
 <script id="issue-detail-assign-form-template" type="text/x-handlebars-template">
-  <table class="width100 123">
+  <table class="width100">
     <tr>
       <td>
         <input type="text" id="issue-assignee-select">
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/issues/templates/_issue_detail_plan_form.hbs.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/issues/templates/_issue_detail_plan_form.hbs.erb
new file mode 100644 (file)
index 0000000..1db6a58
--- /dev/null
@@ -0,0 +1,20 @@
+<script id="issue-detail-plan-form-template" type="text/x-handlebars-template">
+  {{#if items}}
+    <select id="issue-detail-plan-select">
+      {{#if issue.actionPlan}}
+        <option value=""><%= message('issue.unplan.submit') -%></option>
+      {{/if}}
+      {{#each items}}
+        <option value="{{this.key}}">{{this.name}} {{#if this.deadLine}}({{this.deadLine}}){{/if}}</option>
+      {{/each}}
+    </select>
+    <input id="issue-plan-submit" type="submit" value="<%= message('issue.plan.submit') -%>">
+  {{else}}
+    <% if is_admin? %>
+      <span class="error"><%= message('issue.plan.error.plan_must_be_created_first_for_admin') -%></span>
+    <% else %>
+      <span class="error"><%= message('issue.plan.error.plan_must_be_created_first_for_other') -%></span>
+    <% end %>
+  {{/if}}
+    <a id="issue-plan-cancel" class="link-action"><%= message('cancel') -%></a>
+</script>
index 29642bb33b41150a47d077617835004845db9357..f617c3b3fae037a6dca697603b23d01ebfb345d3 100644 (file)
@@ -130,6 +130,21 @@ jQuery(function() {
 
 
 
+  var ActionPlans = Backbone.Collection.extend({
+
+    url: function() {
+      return baseUrl + '/api/action_plans/search';
+    },
+
+
+    parse: function(r) {
+      return r.actionPlans;
+    }
+
+  });
+
+
+
   var IssueView = Backbone.Marionette.ItemView.extend({
     template: Handlebars.compile(jQuery('#issue-template').html() || ''),
     tagName: 'li',
@@ -587,6 +602,68 @@ jQuery(function() {
 
 
 
+  var IssueDetailPlanFormView = Backbone.Marionette.ItemView.extend({
+    template: Handlebars.compile(jQuery('#issue-detail-plan-form-template').html() || ''),
+
+
+    collectionEvents: {
+      'reset': 'render'
+    },
+
+
+    ui: {
+      select: '#issue-detail-plan-select'
+    },
+
+
+    events: {
+      'click #issue-plan-cancel': 'cancel',
+      'click #issue-plan-submit': 'submit'
+    },
+
+
+    onRender: function() {
+      this.ui.select.select2({
+        width: '250px',
+        minimumResultsForSearch: 100
+      });
+
+      this.$('.error a')
+          .prop('href', baseUrl + '/action_plans/index/' + this.options.issue.get('project'));
+    },
+
+
+    cancel: function() {
+      this.options.detailView.updateAfterAction(false);
+    },
+
+
+    submit: function() {
+      var that = this;
+
+      jQuery.ajax({
+        type: 'POST',
+        url: baseUrl + '/api/issues/plan',
+        data: {
+          issue: this.options.issue.get('key'),
+          plan: this.ui.select.val()
+        }
+      }).done(function() {
+            that.options.detailView.updateAfterAction(true);
+          });
+    },
+
+
+    serializeData: function() {
+      return {
+        items: this.collection.toJSON(),
+        issue: this.options.issue.toJSON()
+      }
+    }
+  });
+
+
+
   var IssueDetailRuleView = Backbone.Marionette.ItemView.extend({
     template: Handlebars.compile(jQuery('#issue-detail-rule-template').html() || ''),
     className: 'rule-desc',
@@ -614,7 +691,8 @@ jQuery(function() {
       'click .issue-transition': 'transition',
       'click #issue-set-severity': 'setSeverity',
       'click #issue-assign': 'assign',
-      'click #issue-assign-to-me': 'assignToMe'
+      'click #issue-assign-to-me': 'assignToMe',
+      'click #issue-plan': 'plan'
     },
 
 
@@ -763,6 +841,25 @@ jQuery(function() {
       }).done(function() {
             that.resetIssue();
           });
+    },
+
+
+    plan: function() {
+      var that = this,
+          actionPlans = new ActionPlans(),
+          planFormView = new IssueDetailPlanFormView({
+            collection: actionPlans,
+            issue: this.model,
+            detailView: this
+          });
+
+      actionPlans.fetch({
+        reset: true,
+        data: { project: this.model.get('project') },
+        success: function() {
+          that.showActionView(planFormView);
+        }
+      });
     }
 
   });