X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=resources%2Fsrc%2Fmediawiki.rcfilters%2Fdm%2Fmw.rcfilters.dm.SavedQueriesModel.js;h=a7f3d2312f907f23b5f4953aba9b2117ebd1fd5d;hp=3ffc12e5ebc2bf230d317faa527304944f8614f5;hb=fb79f30319b9ad2a7eb0f5f4d1668143ec8f963e;hpb=e166ba2abd240abed62b4f93bd9c9d4eeb72fa64 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..a7f3d2312f 100644 --- a/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.SavedQueriesModel.js +++ b/resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.SavedQueriesModel.js @@ -2,6 +2,7 @@ /** * View model for saved queries * + * @class * @mixins OO.EventEmitter * @mixins OO.EmitterList * @@ -65,18 +66,24 @@ * the above structure. * @param {Object} [baseState] An object representing the base state * so we can normalize the data + * @param {string[]} [ignoreFilters] Filters to ignore and remove from + * the data * @fires initialize */ - mw.rcfilters.dm.SavedQueriesModel.prototype.initialize = function ( savedQueries, baseState ) { - var items = []; + mw.rcfilters.dm.SavedQueriesModel.prototype.initialize = function ( savedQueries, baseState, ignoreFilters ) { + var items = [], + defaultItem = null; savedQueries = savedQueries || {}; + ignoreFilters = ignoreFilters || {}; this.baseState = baseState; 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 +94,28 @@ // 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 } - ) + // Backwards-compat fix: Remove sticky parameters from the 'ignoreFilters' list + ignoreFilters.forEach( function ( name ) { + delete normalizedData.filters[ name ]; + } ); + + 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 ); @@ -109,6 +127,7 @@ * * @param {string} label Label for the new query * @param {Object} data Data for the new query + * @return {string} ID of the newly added query */ mw.rcfilters.dm.SavedQueriesModel.prototype.addNewQuery = function ( label, data ) { var randomID = ( new Date() ).getTime(), @@ -122,6 +141,27 @@ normalizedData ) ] ); + + return randomID; + }; + + /** + * 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.setDefault( null ); + } + + this.removeItems( [ query ] ); + } }; /**