X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=resources%2Fsrc%2Fmediawiki.rcfilters%2Fmw.rcfilters.UriProcessor.js;h=1894b619d4ed4f47ee465255bd430e8a7aed9382;hb=971a50c4f3c61fb3a4bec60cd712317bb8ddcb9a;hp=b7852d04b792028cd2f8c031835867730f6082a2;hpb=447ba0260189568b5fc01a5d516e58561bd85137;p=lhc%2Fweb%2Fwiklou.git diff --git a/resources/src/mediawiki.rcfilters/mw.rcfilters.UriProcessor.js b/resources/src/mediawiki.rcfilters/mw.rcfilters.UriProcessor.js index b7852d04b7..1894b619d4 100644 --- a/resources/src/mediawiki.rcfilters/mw.rcfilters.UriProcessor.js +++ b/resources/src/mediawiki.rcfilters/mw.rcfilters.UriProcessor.js @@ -71,7 +71,34 @@ * @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( @@ -83,7 +110,6 @@ this.filtersModel.toggleInvertedNamespaces( !!Number( parameters.invert ) ); // Update highlight state - this.filtersModel.toggleHighlight( !!Number( parameters.highlight ) ); this.filtersModel.getItems().forEach( function ( filterItem ) { var color = parameters[ filterItem.getName() + '_color' ]; if ( color ) { @@ -92,6 +118,7 @@ filterItem.clearHighlightColor(); } } ); + this.filtersModel.toggleHighlight( !!Number( parameters.highlight ) ); // Check all filter interactions this.filtersModel.reassessFilterInteractions(); @@ -234,12 +261,22 @@ // 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' } ) ); }; @@ -250,7 +287,8 @@ * @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() ); }; /**