* @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(
)
);
+ this.filtersModel.toggleInvertedNamespaces( !!Number( parameters.invert ) );
+
// Update highlight state
this.filtersModel.toggleHighlight( !!Number( parameters.highlight ) );
this.filtersModel.getItems().forEach( function ( filterItem ) {
{},
this.filtersModel.getParametersFromFilters(),
this.filtersModel.getHighlightParameters(),
- { highlight: String( Number( this.filtersModel.isHighlightEnabled() ) ) }
+ {
+ highlight: String( Number( this.filtersModel.isHighlightEnabled() ) ),
+ invert: String( Number( this.filtersModel.areNamespacesInverted() ) )
+ }
);
};
uriQuery,
this.filtersModel.getParametersFromFilters( filterRepresentation ),
this.filtersModel.extractHighlightValues( uriQuery ),
- { highlight: String( Number( uriQuery.highlight ) ) }
+ {
+ highlight: String( Number( uriQuery.highlight ) ),
+ invert: String( Number( uriQuery.invert ) )
+ }
);
};
// 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() );
};
/**
{},
emptyParams,
emptyHighlights,
- { highlight: '0' }
+ { highlight: '0', invert: '0' }
);
};
}( mediaWiki, jQuery ) );