Merge "Allow programmatic input in Command"
[lhc/web/wiklou.git] / resources / src / mediawiki.rcfilters / dm / mw.rcfilters.dm.SavedQueriesModel.js
index 29585e9..77d5961 100644 (file)
                                isDefault = String( savedQueries.default ) === String( id );
 
                        if ( normalizedData && normalizedData.params ) {
-                               // Backwards-compat fix: Remove excluded parameters from
+                               // Backwards-compat fix: Remove sticky parameters from
                                // the given data, if they exist
-                               normalizedData.params = model.filtersModel.removeExcludedParams( normalizedData.params );
+                               normalizedData.params = model.filtersModel.removeStickyParams( normalizedData.params );
+
+                               // Correct the invert state for effective selection
+                               if ( normalizedData.params.invert && !normalizedData.params.namespace ) {
+                                       delete normalizedData.params.invert;
+                               }
+
+                               model.cleanupHighlights( normalizedData );
 
                                id = String( id );
 
                this.emit( 'initialize' );
        };
 
+       /**
+        * Clean up highlight parameters.
+        * 'highlight' used to be stored, it's not inferred based on the presence of absence of
+        * filter colors.
+        *
+        * @param {Object} data Saved query data
+        */
+       mw.rcfilters.dm.SavedQueriesModel.prototype.cleanupHighlights = function ( data ) {
+               if (
+                       data.params.highlight === '0' &&
+                       data.highlights && Object.keys( data.highlights ).length
+               ) {
+                       data.highlights = {};
+               }
+               delete data.params.highlight;
+       };
+
        /**
         * Convert from representation of filters to representation of parameters
         *
                        this.filtersModel.getParametersFromFilters( fullFilterRepresentation )
                );
 
-               // Highlights (taking out 'highlight' itself, appending _color to keys)
+               // Highlights: appending _color to keys
                newData.highlights = {};
                $.each( data.highlights, function ( highlightedFilterName, value ) {
                        if ( value ) {
                        }
                } );
 
+               // Correct the invert state for effective selection
+               if ( normalizedData.params.invert && !this.filtersModel.areNamespacesEffectivelyInverted() ) {
+                       delete normalizedData.params.invert;
+               }
+
                // Add item
                this.addItems( [
                        new mw.rcfilters.dm.SavedQueryItemModel(
                // Minimize before comparison
                fullQueryComparison = this.filtersModel.getMinimizedParamRepresentation( fullQueryComparison );
 
+               // Correct the invert state for effective selection
+               if ( fullQueryComparison.invert && !this.filtersModel.areNamespacesEffectivelyInverted() ) {
+                       delete fullQueryComparison.invert;
+               }
+
                return this.getItems().filter( function ( item ) {
                        return OO.compare(
                                item.getCombinedData(),
        /**
         * Get the full data representation of the default query, if it exists
         *
-        * @param {boolean} [excludeHiddenParams] Exclude hidden parameters in the result
         * @return {Object|null} Representation of the default params if exists.
         *  Null if default doesn't exist or if the user is not logged in.
         */
-       mw.rcfilters.dm.SavedQueriesModel.prototype.getDefaultParams = function ( excludeHiddenParams ) {
-               var data = ( !mw.user.isAnon() && this.getItemParams( this.getDefault() ) ) || {};
-
-               if ( excludeHiddenParams ) {
-                       Object.keys( this.filtersModel.getDefaultHiddenParams() ).forEach( function ( paramName ) {
-                               delete data[ paramName ];
-                       } );
-               }
-
-               return data;
+       mw.rcfilters.dm.SavedQueriesModel.prototype.getDefaultParams = function () {
+               return ( !mw.user.isAnon() && this.getItemParams( this.getDefault() ) ) || {};
        };
 
        /**
         * @return {Object} Full param representation
         */
        mw.rcfilters.dm.SavedQueriesModel.prototype.buildParamsFromData = function ( data ) {
-               // Merge saved filter state with sticky filter values
-               var savedFilters;
-
                data = data || {};
-
-               // In order to merge sticky filters with the data, we have to
-               // transform this to filters first, merge, and then back to
-               // parameters
-               savedFilters = $.extend(
-                       true, {},
-                       this.filtersModel.getFiltersFromParameters( data.params ),
-                       this.filtersModel.getStickyFiltersState()
-               );
-
                // Return parameter representation
                return this.filtersModel.getMinimizedParamRepresentation( $.extend( true, {},
-                       this.filtersModel.getParametersFromFilters( savedFilters ),
-                       data.highlights,
-                       { highlight: data.params.highlight }
+                       data.params,
+                       data.highlights
                ) );
        };