Merge "Live Preview: Cope with the edit summary being an OOjs UI widget"
[lhc/web/wiklou.git] / resources / src / mediawiki.rcfilters / mw.rcfilters.UriProcessor.js
index b7852d0..a1ef981 100644 (file)
         * @param {Object} [uriQuery] URI query
         */
        mw.rcfilters.UriProcessor.prototype.updateModelBasedOnQuery = function ( uriQuery ) {
-               var parameters = this._getNormalizedQueryParams( uriQuery || new mw.Uri().query );
+               var parameters;
+
+               uriQuery = uriQuery || new mw.Uri().query;
+
+               // For arbitrary numeric single_option values, check the uri and see if it's beyond the limit
+               $.each( this.filtersModel.getFilterGroups(), function ( groupName, groupModel ) {
+                       if (
+                               groupModel.getType() === 'single_option' &&
+                               groupModel.isAllowArbitrary()
+                       ) {
+                               if (
+                                       groupModel.getMaxValue() !== null &&
+                                       uriQuery[ groupName ] > groupModel.getMaxValue()
+                               ) {
+                                       // Change the value to the actual max value
+                                       uriQuery[ groupName ] = String( groupModel.getMaxValue() );
+                               } else if (
+                                       groupModel.getMinValue() !== null &&
+                                       uriQuery[ groupName ] < groupModel.getMinValue()
+                               ) {
+                                       // Change the value to the actual min value
+                                       uriQuery[ groupName ] = String( groupModel.getMinValue() );
+                               }
+                       }
+               } );
+
+               // Normalize
+               parameters = this._getNormalizedQueryParams( uriQuery );
 
                // Update filter states
                this.filtersModel.toggleFiltersSelected(
                // wiki default.
                // Any subsequent change of the URL through the RCFilters
                // system will receive 'urlversion=2'
-               var base = this.getVersion( uriQuery ) === 2 ?
-                       {} :
-                       this.filtersModel.getDefaultParams();
+               var hiddenParamDefaults = {},
+                       base = this.getVersion( uriQuery ) === 2 ?
+                               {} :
+                               this.filtersModel.getDefaultParams();
+
+               // Go over the model and get all hidden parameters' defaults
+               // These defaults should be applied regardless of the urlversion
+               // but be overridden by the URL params if they exist
+               $.each( this.filtersModel.getFilterGroups(), function ( groupName, groupModel ) {
+                       if ( groupModel.isHidden() ) {
+                               $.extend( true, hiddenParamDefaults, groupModel.getDefaultParams() );
+                       }
+               } );
 
                return this.minimizeQuery(
-                       $.extend( true, {}, base, uriQuery, { urlversion: '2' } )
+                       $.extend( true, {}, hiddenParamDefaults, base, uriQuery, { urlversion: '2' } )
                );
        };
 
         * @return {Object} Empty parameter state
         */
        mw.rcfilters.UriProcessor.prototype._getEmptyParameterState = function () {
-               return this.emptyParameterState;
+               // Override empty parameter state with the sticky parameter values
+               return $.extend( true, {}, this.emptyParameterState, this.filtersModel.getStickyParams() );
        };
 
        /**