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') -%>'
'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());
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
optional: true
}),
- new BaseFilters.Filter({
- property: 'resolved',
- type: ContextFilterView,
- enabled: true,
- optional: false
- }),
-
new BaseFilters.Filter({
property: 'actionPlans',
type: ContextFilterView,
--- /dev/null
+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;
+ }
+
+ });
+
+});
className: 'navigator-filter',
- initialize: function() {
+ initialize: function(options) {
BaseFilters.BaseFilterView.prototype.initialize.call(this, {
- detailsView: DetailsSelectFilterView
+ detailsView: (options && options.detailsView) ? options.detailsView : DetailsSelectFilterView
});