resources: Strip '$' and 'mw' from file closures
[lhc/web/wiklou.git] / resources / src / mediawiki.rcfilters / ui / mw.rcfilters.ui.FilterMenuOptionWidget.js
1 ( function () {
2 /**
3 * A widget representing a single toggle filter
4 *
5 * @extends mw.rcfilters.ui.ItemMenuOptionWidget
6 *
7 * @constructor
8 * @param {mw.rcfilters.Controller} controller RCFilters controller
9 * @param {mw.rcfilters.dm.FiltersViewModel} filtersViewModel
10 * @param {mw.rcfilters.dm.FilterItem} invertModel
11 * @param {mw.rcfilters.dm.FilterItem} itemModel Filter item model
12 * @param {mw.rcfilters.ui.HighlightPopupWidget} highlightPopup Shared highlight color picker popup
13 * @param {Object} config Configuration object
14 */
15 mw.rcfilters.ui.FilterMenuOptionWidget = function MwRcfiltersUiFilterMenuOptionWidget(
16 controller, filtersViewModel, invertModel, itemModel, highlightPopup, config
17 ) {
18 config = config || {};
19
20 this.controller = controller;
21 this.invertModel = invertModel;
22 this.model = itemModel;
23
24 // Parent
25 mw.rcfilters.ui.FilterMenuOptionWidget.parent.call( this, controller, filtersViewModel, this.invertModel, itemModel, highlightPopup, config );
26
27 // Event
28 this.model.getGroupModel().connect( this, { update: 'onGroupModelUpdate' } );
29
30 this.$element
31 .addClass( 'mw-rcfilters-ui-filterMenuOptionWidget' );
32 };
33
34 /* Initialization */
35 OO.inheritClass( mw.rcfilters.ui.FilterMenuOptionWidget, mw.rcfilters.ui.ItemMenuOptionWidget );
36
37 /* Static properties */
38
39 // We do our own scrolling to top
40 mw.rcfilters.ui.FilterMenuOptionWidget.static.scrollIntoViewOnSelect = false;
41
42 /* Methods */
43
44 /**
45 * @inheritdoc
46 */
47 mw.rcfilters.ui.FilterMenuOptionWidget.prototype.updateUiBasedOnState = function () {
48 // Parent
49 mw.rcfilters.ui.FilterMenuOptionWidget.parent.prototype.updateUiBasedOnState.call( this );
50
51 this.setCurrentMuteState();
52 };
53
54 /**
55 * Respond to item group model update event
56 */
57 mw.rcfilters.ui.FilterMenuOptionWidget.prototype.onGroupModelUpdate = function () {
58 this.setCurrentMuteState();
59 };
60
61 /**
62 * Set the current muted view of the widget based on its state
63 */
64 mw.rcfilters.ui.FilterMenuOptionWidget.prototype.setCurrentMuteState = function () {
65 if (
66 this.model.getGroupModel().getView() === 'namespaces' &&
67 this.invertModel.isSelected()
68 ) {
69 // This is an inverted behavior than the other rules, specifically
70 // for inverted namespaces
71 this.setFlags( {
72 muted: this.model.isSelected()
73 } );
74 } else {
75 this.setFlags( {
76 muted: (
77 this.model.isConflicted() ||
78 (
79 // Item is also muted when any of the items in its group is active
80 this.model.getGroupModel().isActive() &&
81 // But it isn't selected
82 !this.model.isSelected() &&
83 // And also not included
84 !this.model.isIncluded()
85 )
86 )
87 } );
88 }
89 };
90 }() );