} );
// Collect views
- allViews = {
+ allViews = $.extend( true, {
'default': {
- label: mw.msg( 'rcfilters-filterlist-title' ),
+ title: mw.msg( 'rcfilters-filterlist-title' ),
groups: filterGroups
}
- };
-
- if ( views && mw.config.get( 'wgStructuredChangeFiltersEnableExperimentalViews' ) ) {
- // If we have extended views, add them in
- $.extend( true, allViews, views );
- }
+ }, views );
// Go over all views
$.each( allViews, function ( viewName, viewData ) {
viewData.groups.forEach( function ( groupData ) {
var group = groupData.name;
- model.groups[ group ] = new mw.rcfilters.dm.FilterGroup(
- group,
- $.extend( true, {}, groupData, { view: viewName } )
- );
+ if ( !model.groups[ group ] ) {
+ model.groups[ group ] = new mw.rcfilters.dm.FilterGroup(
+ group,
+ $.extend( true, {}, groupData, { view: viewName } )
+ );
+ }
model.groups[ group ].initializeFilters( groupData.filters, groupData.default );
items = items.concat( model.groups[ group ].getItems() );
// Create a map between known parameters and their models
$.each( this.groups, function ( group, groupModel ) {
- if ( groupModel.getType() === 'send_unselected_if_any' ) {
+ if (
+ groupModel.getType() === 'send_unselected_if_any' ||
+ groupModel.getType() === 'boolean'
+ ) {
// Individual filters
groupModel.getItems().forEach( function ( filterItem ) {
model.parameterMap[ filterItem.getParamName() ] = filterItem;
} );
- } else if ( groupModel.getType() === 'string_options' ) {
+ } else if (
+ groupModel.getType() === 'string_options' ||
+ groupModel.getType() === 'single_option'
+ ) {
// Group
model.parameterMap[ groupModel.getName() ] = groupModel;
}
// group2: "param4|param5"
// }
$.each( params, function ( paramName, paramValue ) {
- var itemOrGroup = model.parameterMap[ paramName ];
-
- if ( itemOrGroup instanceof mw.rcfilters.dm.FilterItem ) {
- groupMap[ itemOrGroup.getGroupName() ] = groupMap[ itemOrGroup.getGroupName() ] || {};
- groupMap[ itemOrGroup.getGroupName() ][ itemOrGroup.getParamName() ] = paramValue;
- } else if ( itemOrGroup instanceof mw.rcfilters.dm.FilterGroup ) {
- // This parameter represents a group (values are the filters)
- // this is equivalent to checking if the group is 'string_options'
- groupMap[ itemOrGroup.getName() ] = groupMap[ itemOrGroup.getName() ] || {};
- groupMap[ itemOrGroup.getName() ] = paramValue;
+ var groupName,
+ itemOrGroup = model.parameterMap[ paramName ];
+
+ if ( itemOrGroup ) {
+ groupName = itemOrGroup instanceof mw.rcfilters.dm.FilterItem ?
+ itemOrGroup.getGroupName() : itemOrGroup.getName();
+
+ groupMap[ groupName ] = groupMap[ groupName ] || {};
+ groupMap[ groupName ][ paramName ] = paramValue;
}
} );
/**
* 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 () {
*
* @param {Object} representation Object containing representation of
* some or all highlight values
- * @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. The returned object
* contains all available filters either with a color value
* or with null.
// Check if there are either any selected items or any items
// that have highlight enabled
return !this.getItems().some( function ( filterItem ) {
- return filterItem.isSelected() || filterItem.isHighlighted();
+ return !filterItem.getGroupModel().isHidden() && ( filterItem.isSelected() || filterItem.isHighlighted() );
} );
};
} );
};
+ /**
+ * Get all selected items
+ *
+ * @return {mw.rcfilters.dm.FilterItem[]} Selected items
+ */
+ mw.rcfilters.dm.FiltersViewModel.prototype.getSelectedItems = function () {
+ var allSelected = [];
+
+ $.each( this.getFilterGroups(), function ( groupName, groupModel ) {
+ allSelected = allSelected.concat( groupModel.getSelectedItems() );
+ } );
+
+ return allSelected;
+ };
/**
* Switch the current view
*
/**
* Get the label for the current view
*
+ * @param {string} viewName View name
* @return {string} Label for the current view
*/
- mw.rcfilters.dm.FiltersViewModel.prototype.getCurrentViewLabel = function () {
- return this.views[ this.getCurrentView() ].title;
+ mw.rcfilters.dm.FiltersViewModel.prototype.getViewTitle = function ( viewName ) {
+ viewName = viewName || this.getCurrentView();
+
+ return this.views[ viewName ] && this.views[ viewName ].title;
};
/**