/**
* Get the highlight parameters based on current filter configuration
*
- * @return {object} Object where keys are "<filter name>_color" and values
+ * @return {Object} Object where keys are "<filter name>_color" and values
* are the selected highlight colors.
*/
mw.rcfilters.dm.FiltersViewModel.prototype.getHighlightParameters = function () {
return result;
};
+ /**
+ * Extract the highlight values from given object. Since highlights are
+ * the same for filter and parameters, it doesn't matter which one is
+ * given; values will be returned with a full list of the highlights
+ * with colors or null values.
+ *
+ * @param {Object} representation Object containing representation of
+ * some or all highlight values
+ * @return {Object} Object where keys are "<filter name>_color" and values
+ * are the selected highlight colors. The returned object
+ * contains all available filters either with a color value
+ * or with null.
+ */
+ mw.rcfilters.dm.FiltersViewModel.prototype.extractHighlightValues = function ( representation ) {
+ var result = {};
+
+ this.getItems().forEach( function ( filterItem ) {
+ var highlightName = filterItem.getName() + '_color';
+ result[ highlightName ] = representation[ highlightName ] || null;
+ } );
+
+ return result;
+ };
+
/**
* Sanitize value group of a string_option groups type
* Remove duplicates and make sure to only use valid
*/
mw.rcfilters.Controller.prototype._updateURL = function ( params ) {
var currentFilterState, updatedFilterState, updatedUri,
+ uri = new mw.Uri(),
notEquivalent = function ( obj1, obj2 ) {
var keys = Object.keys( obj1 ).concat( Object.keys( obj2 ) );
return keys.some( function ( key ) {
// This will allow us to always have a proper check of whether
// the requested new url is one to change or not, regardless of
// actual parameter visibility/representation in the URL
- currentFilterState = this.filtersModel.getFiltersFromParameters( new mw.Uri().query );
+ currentFilterState = this.filtersModel.getFiltersFromParameters( uri.query );
updatedFilterState = this.filtersModel.getFiltersFromParameters( updatedUri.query );
+ // Include highlight states
+ $.extend( true,
+ currentFilterState,
+ this.filtersModel.extractHighlightValues( uri.query ),
+ { highlight: !!Number( uri.query.highlight ) }
+ );
+ $.extend( true,
+ updatedFilterState,
+ this.filtersModel.extractHighlightValues( updatedUri.query ),
+ { highlight: !!Number( updatedUri.query.highlight ) }
+ );
+
if ( notEquivalent( currentFilterState, updatedFilterState ) ) {
if ( this.initializing ) {
// Initially, when we just build the first page load