1 var ItemMenuOptionWidget
= require( './ItemMenuOptionWidget.js' ),
2 FilterMenuOptionWidget
;
5 * A widget representing a single toggle filter
7 * @class mw.rcfilters.ui.FilterMenuOptionWidget
8 * @extends mw.rcfilters.ui.ItemMenuOptionWidget
11 * @param {mw.rcfilters.Controller} controller RCFilters controller
12 * @param {mw.rcfilters.dm.FiltersViewModel} filtersViewModel
13 * @param {mw.rcfilters.dm.FilterItem} invertModel
14 * @param {mw.rcfilters.dm.FilterItem} itemModel Filter item model
15 * @param {mw.rcfilters.ui.HighlightPopupWidget} highlightPopup Shared highlight color picker popup
16 * @param {Object} config Configuration object
18 FilterMenuOptionWidget
= function MwRcfiltersUiFilterMenuOptionWidget(
19 controller
, filtersViewModel
, invertModel
, itemModel
, highlightPopup
, config
21 config
= config
|| {};
23 this.controller
= controller
;
24 this.invertModel
= invertModel
;
25 this.model
= itemModel
;
28 FilterMenuOptionWidget
.parent
.call( this, controller
, filtersViewModel
, this.invertModel
, itemModel
, highlightPopup
, config
);
31 this.model
.getGroupModel().connect( this, { update
: 'onGroupModelUpdate' } );
34 .addClass( 'mw-rcfilters-ui-filterMenuOptionWidget' );
38 OO
.inheritClass( FilterMenuOptionWidget
, ItemMenuOptionWidget
);
40 /* Static properties */
42 // We do our own scrolling to top
43 FilterMenuOptionWidget
.static.scrollIntoViewOnSelect
= false;
50 FilterMenuOptionWidget
.prototype.updateUiBasedOnState = function () {
52 FilterMenuOptionWidget
.parent
.prototype.updateUiBasedOnState
.call( this );
54 this.setCurrentMuteState();
58 * Respond to item group model update event
60 FilterMenuOptionWidget
.prototype.onGroupModelUpdate = function () {
61 this.setCurrentMuteState();
65 * Set the current muted view of the widget based on its state
67 FilterMenuOptionWidget
.prototype.setCurrentMuteState = function () {
69 this.model
.getGroupModel().getView() === 'namespaces' &&
70 this.invertModel
.isSelected()
72 // This is an inverted behavior than the other rules, specifically
73 // for inverted namespaces
75 muted
: this.model
.isSelected()
80 this.model
.isConflicted() ||
82 // Item is also muted when any of the items in its group is active
83 this.model
.getGroupModel().isActive() &&
84 // But it isn't selected
85 !this.model
.isSelected() &&
86 // And also not included
87 !this.model
.isIncluded()
94 module
.exports
= FilterMenuOptionWidget
;