// For example, see two groups with conflicts:
// userExpLevel: [
// {
- // name: 'experienced',
- // conflicts: [ 'unregistered' ]
+ // name: 'experienced',
+ // conflicts: [ 'unregistered' ]
// }
// ],
// registration: [
// {
- // name: 'registered',
+ // name: 'registered',
// },
// {
- // name: 'unregistered',
+ // name: 'unregistered',
// }
// ]
// If we select 'experienced', then 'unregistered' is in conflict (and vice versa),
* Set filters and preserve a group relationship based on
* the definition given by an object
*
- * @param {Object} filters Filter group definition
+ * @param {Array} filters Filter group definition
*/
mw.rcfilters.dm.FiltersViewModel.prototype.initializeFilters = function ( filters ) {
var i, filterItem, selectedFilterNames,
this.clearItems();
this.groups = {};
- $.each( filters, function ( group, data ) {
+ filters.forEach( function ( data ) {
+ var group = data.name;
+
if ( !model.groups[ group ] ) {
model.groups[ group ] = new mw.rcfilters.dm.FilterGroup( group, {
type: data.type,
- title: data.title,
+ title: mw.msg( data.title ),
separator: data.separator,
fullCoverage: !!data.fullCoverage
} );
selectedFilterNames = [];
for ( i = 0; i < data.filters.length; i++ ) {
+ data.filters[ i ].subset = data.filters[ i ].subset || [];
+ data.filters[ i ].subset = data.filters[ i ].subset.map( function ( el ) {
+ return el.filter;
+ } );
+
filterItem = new mw.rcfilters.dm.FilterItem( data.filters[ i ].name, model.groups[ group ], {
group: group,
- label: data.filters[ i ].label,
- description: data.filters[ i ].description,
+ label: mw.msg( data.filters[ i ].label ),
+ description: mw.msg( data.filters[ i ].description ),
subset: data.filters[ i ].subset,
- cssClass: data.filters[ i ].class
+ cssClass: data.filters[ i ].cssClass
} );
// For convenience, we should store each filter's "supersets" -- these are
mw.rcfilters.dm.FiltersViewModel.prototype.setFiltersToDefaults = function () {
var defaultFilterStates = this.getFiltersFromParameters( this.getDefaultParams() );
- this.updateFilters( defaultFilterStates );
+ this.toggleFiltersSelected( defaultFilterStates );
};
/**
}
}
- if ( values.length === 0 || values.length === filterItems.length ) {
+ if ( values.length === filterItems.length ) {
result[ group ] = 'all';
} else {
result[ group ] = values.join( model.getSeparator() );
* are the selected highlight colors.
*/
mw.rcfilters.dm.FiltersViewModel.prototype.getHighlightParameters = function () {
- var result = { highlight: this.isHighlightEnabled() };
+ var result = { highlight: Number( this.isHighlightEnabled() ) };
this.getItems().forEach( function ( filterItem ) {
result[ filterItem.getName() + '_color' ] = filterItem.getHighlightColor();
* @return {boolean} Current filters are all empty
*/
mw.rcfilters.dm.FiltersViewModel.prototype.areCurrentFiltersEmpty = function () {
- var model = this;
-
// Check if there are either any selected items or any items
// that have highlight enabled
return !this.getItems().some( function ( filterItem ) {
- return (
- filterItem.isSelected() ||
- ( model.isHighlightEnabled() && filterItem.getHighlightColor() )
- );
+ return filterItem.isSelected() || filterItem.isHighlighted();
} );
};
* This is equivalent to display all.
*/
mw.rcfilters.dm.FiltersViewModel.prototype.emptyAllFilters = function () {
- var filters = {};
-
this.getItems().forEach( function ( filterItem ) {
- filters[ filterItem.getName() ] = false;
- } );
+ this.toggleFilterSelected( filterItem.getName(), false );
+ }.bind( this ) );
+ };
- // Update filters
- this.updateFilters( filters );
+ /**
+ * Toggle selected state of one item
+ *
+ * @param {string} name Name of the filter item
+ * @param {boolean} [isSelected] Filter selected state
+ */
+ mw.rcfilters.dm.FiltersViewModel.prototype.toggleFilterSelected = function ( name, isSelected ) {
+ this.getItemByName( name ).toggleSelected( isSelected );
};
/**
*
* @param {Object} filterDef Filter definitions
*/
- mw.rcfilters.dm.FiltersViewModel.prototype.updateFilters = function ( filterDef ) {
- var name, filterItem;
-
- for ( name in filterDef ) {
- filterItem = this.getItemByName( name );
- filterItem.toggleSelected( filterDef[ name ] );
- }
+ mw.rcfilters.dm.FiltersViewModel.prototype.toggleFiltersSelected = function ( filterDef ) {
+ Object.keys( filterDef ).forEach( function ( name ) {
+ this.toggleFilterSelected( name, filterDef[ name ] );
+ }.bind( this ) );
};
/**
* @return {boolean}
*/
mw.rcfilters.dm.FiltersViewModel.prototype.isHighlightEnabled = function () {
- return this.highlightEnabled;
+ return !!this.highlightEnabled;
};
/**