From 930f8f7a4ac2f5f7559f50484f8a06e81b854df8 Mon Sep 17 00:00:00 2001 From: Moriel Schottlender Date: Mon, 15 May 2017 12:10:07 -0700 Subject: [PATCH] RCFilters: Actually be consistent when storing 'highlight' state Saved queries are storing *filter* definitions, not parameters, so highlight state (dictating whether highlights are enabled) are supposed to be stored as boolean. A previous fix that was meant to make sure we store and handle all *parameters* as strings '0' and '1' was a bit overzealous, and stored highlight state in saved queries as '1' and '0' too. The current state then compared that to the filter-state, which produces false/true. This resulting in saved queries only being matched to the current state as never true, because the comparison goes by actual obejct key-values, not symbolic values. Bug: T165381 Change-Id: Ifdec3a8c058a0e004304e48a857c58639928b36f --- .../dm/mw.rcfilters.dm.SavedQueriesModel.js | 10 ++++++++++ .../src/mediawiki.rcfilters/mw.rcfilters.Controller.js | 10 +++++----- 2 files changed, 15 insertions(+), 5 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 04fb52b699..b8f2db5dda 100644 --- a/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.SavedQueriesModel.js +++ b/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.SavedQueriesModel.js @@ -77,6 +77,16 @@ this.clearItems(); $.each( savedQueries.queries || {}, function ( id, obj ) { var normalizedData = $.extend( true, {}, baseState, obj.data ); + + // Backwards-compat fix: We stored the 'highlight' state with + // "1" and "0" instead of true/false; for already-stored states, + // we need to fix that. + // NOTE: Since this feature is only available in beta, we should + // not need this line when we release this to the general wikis. + // This method will automatically fix all saved queries anyways + // for existing users, who are only betalabs users at the moment. + normalizedData.highlights.highlight = !!Number( normalizedData.highlight ); + items.push( new mw.rcfilters.dm.SavedQueryItemModel( id, diff --git a/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js b/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js index 4a9e780660..e9274f53b9 100644 --- a/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js +++ b/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js @@ -179,8 +179,8 @@ highlightedItems[ item.getName() ] = highlightEnabled ? item.getHighlightColor() : null; } ); - // Stored as a string '0' or '1' - highlightedItems.highlight = String( Number( this.filtersModel.isHighlightEnabled() ) ); + // These are filter states; highlight is stored as boolean + highlightedItems.highlight = this.filtersModel.isHighlightEnabled(); // Add item this.savedQueriesModel.addNewQuery( @@ -259,7 +259,7 @@ this.filtersModel.toggleFiltersSelected( data.filters ); // Update highlight state - this.filtersModel.toggleHighlight( !!highlights.highlight ); + this.filtersModel.toggleHighlight( !!Number( highlights.highlight ) ); this.filtersModel.getItems().forEach( function ( filterItem ) { var color = highlights[ filterItem.getName() ]; if ( color ) { @@ -482,7 +482,7 @@ ); // Update highlight state - this.filtersModel.toggleHighlight( !!parameters.highlight ); + this.filtersModel.toggleHighlight( !!Number( parameters.highlight ) ); this.filtersModel.getItems().forEach( function ( filterItem ) { var color = parameters[ filterItem.getName() + '_color' ]; if ( color ) { @@ -517,7 +517,7 @@ savedParams = this.filtersModel.getParametersFromFilters( data.filters || {} ); // Translate highlights to parameters - savedHighlights.highlight = queryHighlights.highlight; + savedHighlights.highlight = String( Number( queryHighlights.highlight ) ); $.each( queryHighlights, function ( filterName, color ) { if ( filterName !== 'highlights' ) { savedHighlights[ filterName + '_color' ] = color; -- 2.20.1