From 164e7b8bd277e6e8cbe03c1567dc290d2364c101 Mon Sep 17 00:00:00 2001 From: Moriel Schottlender Date: Wed, 13 Sep 2017 17:13:26 -0700 Subject: [PATCH] RCFilters: Allow empty saved query For this, we also need to check for saved query visibility on the saved query model initialization, because since the model starts its life all-empty, if the saved query is also all-empty, it will not trigger any item updates on the main model. Bonus: Actually check whether defaults are empty; there was a typo and problem with the original test. Bug: T172387 Change-Id: Ibc536b577e4c3abcc04fa229f9978b651b2f9e61 --- .../dm/mw.rcfilters.dm.FiltersViewModel.js | 4 ++-- ...rcfilters.ui.FilterTagMultiselectWidget.js | 17 +++++++++---- .../dm.FiltersViewModel.test.js | 24 +++++++++++++++++++ 3 files changed, 38 insertions(+), 7 deletions(-) diff --git a/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js b/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js index 62ba002c1f..1f9fd39d9e 100644 --- a/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js +++ b/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js @@ -782,11 +782,11 @@ mw.rcfilters.dm.FiltersViewModel.prototype.areDefaultFiltersEmpty = function () { var defaultFilters; - if ( this.defaultFiltersEmpty !== null ) { + if ( this.defaultFiltersEmpty === null ) { // We only need to do this test once, // because defaults are set once per session defaultFilters = this.getFiltersFromParameters( this.getDefaultParams() ); - this.defaultFiltersEmpty = Object.keys( defaultFilters ).every( function ( filterName ) { + this.defaultFiltersEmpty = $.isEmptyObject( defaultFilters ) || Object.keys( defaultFilters ).every( function ( filterName ) { return !defaultFilters[ filterName ]; } ); } diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js index b15b03447f..76717e3cc3 100644 --- a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js +++ b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js @@ -97,7 +97,10 @@ click: 'onSaveQueryButtonClick', saveCurrent: 'setSavedQueryVisibility' } ); - this.queriesModel.connect( this, { itemUpdate: 'onSavedQueriesItemUpdate' } ); + this.queriesModel.connect( this, { + itemUpdate: 'onSavedQueriesItemUpdate', + initialize: 'onSavedQueriesInitialize' + } ); } this.emptyFilterMessage = new OO.ui.LabelWidget( { @@ -256,6 +259,13 @@ this.getMenu().toggle( false ); }; + /** + * Respond to save query model initialization + */ + mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.onSavedQueriesInitialize = function () { + this.setSavedQueryVisibility(); + }; + /** * Respond to save query item change. Mainly this is done to update the label in case * a query item has been edited @@ -393,10 +403,7 @@ this.matchingQuery ? this.matchingQuery.getLabel() : '' ); this.savedQueryTitle.toggle( !!this.matchingQuery ); - this.saveQueryButton.toggle( - !this.isEmpty() && - !this.matchingQuery - ); + this.saveQueryButton.toggle( !this.matchingQuery ); if ( this.matchingQuery ) { this.emphasize(); diff --git a/tests/qunit/suites/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js b/tests/qunit/suites/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js index 58e4d29c42..acbd0da88a 100644 --- a/tests/qunit/suites/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js +++ b/tests/qunit/suites/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js @@ -279,6 +279,30 @@ } ), 'Default parameters are stored properly per filter and group' ); + + assert.ok( + !model.areDefaultFiltersEmpty(), + 'Check if default filters are empty when defaults exist' + ); + + // Reset on special filter object that has no defaults + model = new mw.rcfilters.dm.FiltersViewModel(); + model.initializeFilters( + [ { + name: 'group1', + type: 'send_unselected_if_any', + filters: [ + { name: 'filter1', label: 'group1filter1-label', description: 'group1filter1-desc' }, + { name: 'filter2', label: 'group1filter2-label', description: 'group1filter2-desc' }, + { name: 'filter3', label: 'group1filter3-label', description: 'group1filter3-desc' } + ] + } ] + ); + + assert.ok( + model.areDefaultFiltersEmpty(), + 'Check if default filters are empty when defaults do not exist' + ); } ); QUnit.test( 'Finding matching filters', function ( assert ) { -- 2.20.1