]> source.dussan.org Git - sonarqube.git/blob
bae22f95073cb20cbbd75257ce33f3caf58b7054
[sonarqube.git] /
1 define [
2   'backbone.marionette',
3   'handlebars'
4 ], (
5   Marionette,
6   Handlebars
7 ) ->
8
9   class QualityGateDetailConditionView extends Marionette.ItemView
10     tagName: 'tr'
11     template: Handlebars.compile jQuery('#quality-gate-detail-condition-template').html()
12     spinner: '<i class="spinner"></i>'
13
14
15     modelEvents:
16       'change:id': 'render'
17
18
19     ui:
20       periodSelect: '[name=period]'
21       operatorSelect: '[name=operator]'
22       warningInput: '[name=warning]'
23       errorInput: '[name=error]'
24       actionsBox: '.quality-gate-condition-actions'
25       updateButton: '.update-condition'
26
27
28     events:
29       'click @ui.updateButton': 'saveCondition'
30       'click .delete-condition': 'deleteCondition'
31       'click .add-condition': 'saveCondition'
32       'click .cancel-add-condition': 'cancelAddCondition'
33       'keyup :input': 'enableUpdate'
34       'change :input': 'enableUpdate'
35
36
37     initialize: ->
38       @populateMetric()
39
40
41     populateMetric: ->
42       metricKey = @model.get('metric')
43       metric = @options.app.metrics.findWhere key: metricKey
44       @model.set { metric: metric.toJSON() }, { silent: true }
45
46
47     onRender: ->
48       @ui.periodSelect.val @model.get('period') || '0'
49       @ui.operatorSelect.val @model.get('op')
50       @ui.warningInput.val @model.get('warning')
51       @ui.errorInput.val @model.get('error')
52
53       @ui.periodSelect.select2
54         allowClear: false
55         minimumResultsForSearch: 999
56         width: '200px'
57
58       @ui.operatorSelect.select2
59         allowClear: false
60         minimumResultsForSearch: 999
61         width: '150px'
62
63       @ui.periodSelect.select2('open') if @model.isNew()
64
65
66     showSpinner: ->
67       jQuery(@spinner).prependTo @ui.actionsBox
68       @ui.actionsBox.find(':not(.spinner)').hide()
69
70
71     hideSpinner: ->
72       @ui.actionsBox.find('.spinner').remove()
73       @ui.actionsBox.find(':not(.spinner)').show()
74
75
76     saveCondition: ->
77       @showSpinner()
78       @model.set
79         period: @ui.periodSelect.val()
80         op: @ui.operatorSelect.val()
81         warning: @ui.warningInput.val()
82         error: @ui.errorInput.val()
83       @model.save()
84         .always =>
85           @ui.updateButton.prop 'disabled', true
86           @hideSpinner()
87         .done =>
88           @options.collectionView.updateConditions()
89
90
91     deleteCondition: ->
92       if confirm t('are_you_sure')
93         @showSpinner()
94         @model.delete().done =>
95           @options.collectionView.updateConditions()
96           @close()
97
98
99     cancelAddCondition: ->
100       @close()
101
102
103     enableUpdate: ->
104       @ui.updateButton.prop 'disabled', false
105
106
107     serializeData: ->
108       period = _.findWhere(@options.app.periods, key: '' + this.model.get('period'))
109       _.extend super,
110         canEdit: @options.app.canEdit
111         periods: @options.app.periods
112         periodText: period?.text