From 6a046755fc222cdb134455097ff81f5a3c27456d Mon Sep 17 00:00:00 2001 From: Moriel Schottlender Date: Mon, 18 Sep 2017 11:05:50 -0700 Subject: [PATCH] RCFilters: Actually check whether defaults are empty and update state Defaults come from either the backend or the saved queries, and that can also change during the session. Allow the system to update itself properly over whether defaults are empty at any given state, and hide/show the proper button at the correct state. Bug: T172387 Change-Id: I173c72a391886b41e899ac64621b504c5eb55b0c --- .../dm/mw.rcfilters.dm.FiltersViewModel.js | 20 ---------------- .../dm/mw.rcfilters.dm.SavedQueriesModel.js | 9 +++++++ .../mw.rcfilters.Controller.js | 17 ++++++++++++- ...rcfilters.ui.FilterTagMultiselectWidget.js | 5 ++-- .../dm.FiltersViewModel.test.js | 24 ------------------- 5 files changed, 28 insertions(+), 47 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 1f9fd39d9e..3b882a6ba7 100644 --- a/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js +++ b/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js @@ -774,26 +774,6 @@ } ); }; - /** - * Check whether the default values of the filters are all false. - * - * @return {boolean} Default filters are all false - */ - mw.rcfilters.dm.FiltersViewModel.prototype.areDefaultFiltersEmpty = function () { - var defaultFilters; - - 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 = $.isEmptyObject( defaultFilters ) || Object.keys( defaultFilters ).every( function ( filterName ) { - return !defaultFilters[ filterName ]; - } ); - } - - return this.defaultFiltersEmpty; - }; - /** * Get the item that matches the given name * diff --git a/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.SavedQueriesModel.js b/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.SavedQueriesModel.js index d87ef73407..f87894159f 100644 --- a/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.SavedQueriesModel.js +++ b/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.SavedQueriesModel.js @@ -45,6 +45,13 @@ * An item has changed */ + /** + * @event default + * @param {string} New default ID + * + * The default has changed + */ + /* Methods */ /** @@ -259,6 +266,8 @@ this.getItems().forEach( function ( item ) { item.toggleDefault( item.getID() === itemID ); } ); + + this.emit( 'default', itemID ); } }; diff --git a/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js b/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js index b07df579e3..507c97938b 100644 --- a/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js +++ b/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js @@ -366,6 +366,22 @@ this.updateChangesList(); }; + /** + * Check whether the default values of the filters are all false. + * + * @return {boolean} Defaults are all false + */ + mw.rcfilters.Controller.prototype.areDefaultsEmpty = function () { + var defaultFilters = this.filtersModel.getFiltersFromParameters( this._getDefaultParams() ); + + this._deleteExcludedValuesFromFilterState( defaultFilters ); + + // Defaults can change in a session, so we need to do this every time + return Object.keys( defaultFilters ).every( function ( filterName ) { + return !defaultFilters[ filterName ]; + } ); + }; + /** * Empty all selected filters */ @@ -1047,7 +1063,6 @@ queryHighlights = data.highlights || {}; savedParams = this.filtersModel.getParametersFromFilters( - // Merge filters with sticky values $.extend( true, {}, data.filters, this.filtersModel.getStickyFiltersState() ) ); 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 df3263a206..757a000387 100644 --- a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js +++ b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js @@ -99,7 +99,8 @@ } ); this.queriesModel.connect( this, { itemUpdate: 'onSavedQueriesItemUpdate', - initialize: 'onSavedQueriesInitialize' + initialize: 'onSavedQueriesInitialize', + 'default': 'reevaluateResetRestoreState' } ); } @@ -575,7 +576,7 @@ * Reevaluate the restore state for the widget between setting to defaults and clearing all filters */ mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.reevaluateResetRestoreState = function () { - var defaultsAreEmpty = this.model.areDefaultFiltersEmpty(), + var defaultsAreEmpty = this.controller.areDefaultsEmpty(), currFiltersAreEmpty = this.model.areCurrentFiltersEmpty(), hideResetButton = currFiltersAreEmpty && defaultsAreEmpty; 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 acbd0da88a..58e4d29c42 100644 --- a/tests/qunit/suites/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js +++ b/tests/qunit/suites/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js @@ -279,30 +279,6 @@ } ), '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