--- /dev/null
+<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>
+ 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',
+ 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',
'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'
},
}).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);
+ }
+ });
}
});