From f6feb90cab49b33aaa2fb16f029662272d7a5095 Mon Sep 17 00:00:00 2001 From: Stas Vilchik Date: Mon, 17 Feb 2014 17:18:13 +0600 Subject: [PATCH] SONAR-4854 Unresolved criteria --- .../WEB-INF/app/views/issues/search.html.erb | 1 + .../src/main/webapp/javascripts/issues.js | 14 ++-- .../navigator/filters/resolution-filters.js | 80 +++++++++++++++++++ .../navigator/filters/select-filters.js | 4 +- 4 files changed, 88 insertions(+), 11 deletions(-) create mode 100644 sonar-server/src/main/webapp/javascripts/navigator/filters/resolution-filters.js diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/issues/search.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/issues/search.html.erb index 722fae1fa1c..532c05b27dc 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/issues/search.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/issues/search.html.erb @@ -95,6 +95,7 @@ assignee: '<%= escape_javascript message('issue_filter.criteria.assignee') -%>', resolution: '<%= escape_javascript message('issue_filter.criteria.resolution') -%>', resolutions: { + 'UNRESOLVED': '<%= escape_javascript message('unresolved') -%>', 'FALSE-POSITIVE': '<%= escape_javascript message('issue.resolution.FALSE-POSITIVE') -%>', 'FIXED': '<%= escape_javascript message('issue.resolution.FIXED') -%>', 'REMOVED': '<%= escape_javascript message('issue.resolution.REMOVED') -%>' diff --git a/sonar-server/src/main/webapp/javascripts/issues.js b/sonar-server/src/main/webapp/javascripts/issues.js index 1a06a92f4ad..18704e2d3fa 100644 --- a/sonar-server/src/main/webapp/javascripts/issues.js +++ b/sonar-server/src/main/webapp/javascripts/issues.js @@ -30,13 +30,15 @@ requirejs( 'navigator/filters/checkbox-filters', 'navigator/filters/select-filters', 'navigator/filters/ajax-select-filters', + 'navigator/filters/resolution-filters', 'navigator/filters/favorite-filters', 'navigator/filters/range-filters', 'navigator/filters/context-filters', 'handlebars-extensions' ], - function (Backbone, Marionette, Handlebars, Extra, FilterBar, BaseFilters, CheckboxFilterView, SelectFilters, AjaxSelectFilters, FavoriteFilters, RangeFilters, ContextFilterView) { + function (Backbone, Marionette, Handlebars, Extra, FilterBar, BaseFilters, CheckboxFilterView, SelectFilters, + AjaxSelectFilters, ResolutionFilterView, FavoriteFilters, RangeFilters, ContextFilterView) { Handlebars.registerPartial('detailInnerTemplate', jQuery('#issue-detail-inner-template').html()); @@ -157,10 +159,11 @@ requirejs( new BaseFilters.Filter({ name: window.SS.phrases.resolution, property: 'resolutions', - type: SelectFilters.SelectFilterView, + type: ResolutionFilterView, enabled: false, optional: true, choices: { + 'UNRESOLVED': window.SS.phrases.resolutions.UNRESOLVED, 'FALSE-POSITIVE': window.SS.phrases.resolutions['FALSE-POSITIVE'], 'FIXED': window.SS.phrases.resolutions.FIXED, 'REMOVED': window.SS.phrases.resolutions.REMOVED @@ -184,13 +187,6 @@ requirejs( optional: true }), - new BaseFilters.Filter({ - property: 'resolved', - type: ContextFilterView, - enabled: true, - optional: false - }), - new BaseFilters.Filter({ property: 'actionPlans', type: ContextFilterView, diff --git a/sonar-server/src/main/webapp/javascripts/navigator/filters/resolution-filters.js b/sonar-server/src/main/webapp/javascripts/navigator/filters/resolution-filters.js new file mode 100644 index 00000000000..7977ff97e16 --- /dev/null +++ b/sonar-server/src/main/webapp/javascripts/navigator/filters/resolution-filters.js @@ -0,0 +1,80 @@ +define(['navigator/filters/base-filters', 'navigator/filters/select-filters'], function (BaseFilters, SelectFilters) { + + var UNRESOLVED = 'UNRESOLVED'; + + var ResolutionDetailFilterView = SelectFilters.DetailsSelectFilterView.extend({ + + addToSelection: function(e) { + var id = $j(e.target).val(), + model = this.options.filterView.choices.findWhere({ id: id }); + + if (this.model.get('multiple') && id !== UNRESOLVED) { + this.options.filterView.selection.add(model); + this.options.filterView.choices.remove(model); + + var unresolved = this.options.filterView.selection.findWhere({ id: UNRESOLVED }); + if (unresolved) { + this.options.filterView.choices.add(unresolved); + this.options.filterView.selection.remove(unresolved); + } + } else { + this.options.filterView.choices.add(this.options.filterView.selection.models); + this.options.filterView.choices.remove(model); + this.options.filterView.selection.reset([model]); + } + + this.updateValue(); + this.updateLists(); + } + + }); + + + return SelectFilters.SelectFilterView.extend({ + + initialize: function() { + SelectFilters.SelectFilterView.prototype.initialize.call(this, { + detailsView: ResolutionDetailFilterView + }); + }, + + + restoreFromQuery: function(q) { + var param = _.findWhere(q, { key: this.model.get('property') }), + resolved = _.findWhere(q, { key: 'resolved' }); + + if (!!resolved) { + if (!param) { + param = { value: UNRESOLVED }; + } else { + param.value += ',' + UNRESOLVED; + } + } + + if (param && param.value) { + this.model.set('enabled', true); + this.restore(param.value, param); + } else { + this.clear(); + } + }, + + + formatValue: function() { + var q = {}, + resolutions = this.model.get('value'); + if (this.model.has('property') && resolutions) { + var unresolved = resolutions.indexOf(UNRESOLVED) !== -1; + + if (unresolved) { + q.resolved = false; + } else { + q[this.model.get('property')] = resolutions.join(','); + } + } + return q; + } + + }); + +}); diff --git a/sonar-server/src/main/webapp/javascripts/navigator/filters/select-filters.js b/sonar-server/src/main/webapp/javascripts/navigator/filters/select-filters.js index 7517356cc4e..4998418e72f 100644 --- a/sonar-server/src/main/webapp/javascripts/navigator/filters/select-filters.js +++ b/sonar-server/src/main/webapp/javascripts/navigator/filters/select-filters.js @@ -179,9 +179,9 @@ define(['navigator/filters/base-filters'], function (BaseFilters) { className: 'navigator-filter', - initialize: function() { + initialize: function(options) { BaseFilters.BaseFilterView.prototype.initialize.call(this, { - detailsView: DetailsSelectFilterView + detailsView: (options && options.detailsView) ? options.detailsView : DetailsSelectFilterView }); -- 2.39.5