From 0e530143cc0bdd1aeda1d07d2b0f33e8c6328738 Mon Sep 17 00:00:00 2001 From: Moriel Schottlender Date: Wed, 21 Jun 2017 18:21:56 -0700 Subject: [PATCH] RCFilters: Actually recognize a saved query default and delete when removed Compare ID to saved default even if those were saved in different formats (number vs string) when setting default on initialization and when deleting the default when deleting the item. Change-Id: Ia211a7166b3ff514c0e2a34bb370cf2d50057745 --- .../dm/mw.rcfilters.dm.SavedQueriesModel.js | 48 +++++++++++++++---- .../mw.rcfilters.Controller.js | 9 +--- 2 files changed, 39 insertions(+), 18 deletions(-) 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 3ffc12e5eb..efccc11053 100644 --- a/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.SavedQueriesModel.js +++ b/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.SavedQueriesModel.js @@ -68,7 +68,8 @@ * @fires initialize */ mw.rcfilters.dm.SavedQueriesModel.prototype.initialize = function ( savedQueries, baseState ) { - var items = []; + var items = [], + defaultItem = null; savedQueries = savedQueries || {}; @@ -76,7 +77,9 @@ this.clearItems(); $.each( savedQueries.queries || {}, function ( id, obj ) { - var normalizedData = $.extend( true, {}, baseState, obj.data ); + var item, + normalizedData = $.extend( true, {}, baseState, obj.data ), + isDefault = String( savedQueries.default ) === String( id ); // Backwards-compat fix: We stored the 'highlight' state with // "1" and "0" instead of true/false; for already-stored states, @@ -87,17 +90,23 @@ // for existing users, who are only betalabs users at the moment. normalizedData.highlights.highlight = !!Number( normalizedData.highlights.highlight ); - items.push( - new mw.rcfilters.dm.SavedQueryItemModel( - id, - obj.label, - normalizedData, - { 'default': savedQueries.default === id } - ) + item = new mw.rcfilters.dm.SavedQueryItemModel( + id, + obj.label, + normalizedData, + { 'default': isDefault } ); + + if ( isDefault ) { + defaultItem = item; + } + + items.push( item ); } ); - this.default = savedQueries.default; + if ( defaultItem ) { + this.default = defaultItem.getID(); + } this.addItems( items ); @@ -124,6 +133,25 @@ ] ); }; + /** + * Remove query from model + * + * @param {string} queryID Query ID + */ + mw.rcfilters.dm.SavedQueriesModel.prototype.removeQuery = function ( queryID ) { + var query = this.getItemByID( queryID ); + + if ( query ) { + // Check if this item was the default + if ( String( this.getDefault() ) === String( queryID ) ) { + // Nulify the default + this.savedQueriesModel.setDefault( null ); + } + + this.savedQueriesModel.removeItems( [ query ] ); + } + }; + /** * Get an item that matches the requested query * diff --git a/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js b/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js index 95e11d59f3..ebf22014c8 100644 --- a/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js +++ b/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js @@ -257,15 +257,8 @@ * @param {string} queryID Query id */ mw.rcfilters.Controller.prototype.removeSavedQuery = function ( queryID ) { - var query = this.savedQueriesModel.getItemByID( queryID ); + this.savedQueriesModel.removeQuery( queryID ); - this.savedQueriesModel.removeItems( [ query ] ); - - // Check if this item was the default - if ( this.savedQueriesModel.getDefault() === queryID ) { - // Nulify the default - this.savedQueriesModel.setDefault( null ); - } this._saveSavedQueries(); }; -- 2.20.1