X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=resources%2Fsrc%2Fmediawiki.rcfilters%2Fui%2Fmw.rcfilters.ui.ItemMenuOptionWidget.js;h=15085105f07db6275af79e44405835fcbea6f967;hp=36bc6cb9fec47c8fa4d65046cb47283d8e1b5916;hb=95667ea4e141b6dcd5b1c943ce12e03a09717d6f;hpb=c9a71813b828b22c3ea58c16731449dca3eacd53 diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ItemMenuOptionWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ItemMenuOptionWidget.js index 36bc6cb9fe..15085105f0 100644 --- a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ItemMenuOptionWidget.js +++ b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ItemMenuOptionWidget.js @@ -6,11 +6,14 @@ * * @constructor * @param {mw.rcfilters.Controller} controller RCFilters controller + * @param {mw.rcfilters.dm.FiltersViewModel} filtersViewModel * @param {mw.rcfilters.dm.ItemModel} invertModel - * @param {mw.rcfilters.dm.ItemModel} model Item model + * @param {mw.rcfilters.dm.ItemModel} itemModel Item model * @param {Object} config Configuration object */ - mw.rcfilters.ui.ItemMenuOptionWidget = function MwRcfiltersUiItemMenuOptionWidget( controller, invertModel, model, config ) { + mw.rcfilters.ui.ItemMenuOptionWidget = function MwRcfiltersUiItemMenuOptionWidget( + controller, filtersViewModel, invertModel, itemModel, config + ) { var layout, classes = [], $label = $( '
' ) @@ -19,20 +22,21 @@ config = config || {}; this.controller = controller; + this.filtersViewModel = filtersViewModel; this.invertModel = invertModel; - this.model = model; + this.itemModel = itemModel; // Parent mw.rcfilters.ui.ItemMenuOptionWidget.parent.call( this, $.extend( { // Override the 'check' icon that OOUI defines icon: '', - data: this.model.getName(), - label: this.model.getLabel() + data: this.itemModel.getName(), + label: this.itemModel.getLabel() }, config ) ); this.checkboxWidget = new mw.rcfilters.ui.CheckboxInputWidget( { - value: this.model.getName(), - selected: this.model.isSelected() + value: this.itemModel.getName(), + selected: this.itemModel.isSelected() } ); $label.append( @@ -40,28 +44,32 @@ .addClass( 'mw-rcfilters-ui-itemMenuOptionWidget-label-title' ) .append( this.$label ) ); - if ( this.model.getDescription() ) { + if ( this.itemModel.getDescription() ) { $label.append( $( '
' ) .addClass( 'mw-rcfilters-ui-itemMenuOptionWidget-label-desc' ) - .text( this.model.getDescription() ) + .text( this.itemModel.getDescription() ) ); } this.highlightButton = new mw.rcfilters.ui.FilterItemHighlightButton( this.controller, - this.model, + this.itemModel, { $overlay: config.$overlay || this.$element, title: mw.msg( 'rcfilters-highlightmenu-help' ) } ); - this.highlightButton.toggle( this.model.isHighlightEnabled() ); + this.highlightButton.toggle( this.filtersViewModel.isHighlightEnabled() ); this.excludeLabel = new OO.ui.LabelWidget( { label: mw.msg( 'rcfilters-filter-excluded' ) } ); - this.excludeLabel.toggle( this.model.isSelected() && this.invertModel.isSelected() ); + this.excludeLabel.toggle( + this.itemModel.getGroupModel().getView() === 'namespaces' && + this.itemModel.isSelected() && + this.invertModel.isSelected() + ); layout = new OO.ui.FieldLayout( this.checkboxWidget, { label: $label, @@ -69,8 +77,9 @@ } ); // Events - this.invertModel.connect( this, { update: 'onModelUpdate' } ); - this.model.connect( this, { update: 'onModelUpdate' } ); + this.filtersViewModel.connect( this, { highlightChange: 'updateUiBasedOnState' } ); + this.invertModel.connect( this, { update: 'updateUiBasedOnState' } ); + this.itemModel.connect( this, { update: 'updateUiBasedOnState' } ); // HACK: Prevent defaults on 'click' for the label so it // doesn't steal the focus away from the input. This means // we can continue arrow-movement after we click the label @@ -80,7 +89,7 @@ this.$element .addClass( 'mw-rcfilters-ui-itemMenuOptionWidget' ) - .addClass( 'mw-rcfilters-ui-itemMenuOptionWidget-view-' + this.model.getGroupModel().getView() ) + .addClass( 'mw-rcfilters-ui-itemMenuOptionWidget-view-' + this.itemModel.getGroupModel().getView() ) .append( $( '
' ) .addClass( 'mw-rcfilters-ui-table' ) @@ -101,13 +110,15 @@ ) ); - if ( this.model.getIdentifiers() ) { - this.model.getIdentifiers().forEach( function ( ident ) { + if ( this.itemModel.getIdentifiers() ) { + this.itemModel.getIdentifiers().forEach( function ( ident ) { classes.push( 'mw-rcfilters-ui-itemMenuOptionWidget-identifier-' + ident ); } ); this.$element.addClass( classes.join( ' ' ) ); } + + this.updateUiBasedOnState(); }; /* Initialization */ @@ -124,11 +135,16 @@ /** * Respond to item model update event */ - mw.rcfilters.ui.ItemMenuOptionWidget.prototype.onModelUpdate = function () { - this.checkboxWidget.setSelected( this.model.isSelected() ); - - this.highlightButton.toggle( this.model.isHighlightEnabled() ); - this.excludeLabel.toggle( this.model.isSelected() && this.invertModel.isSelected() ); + mw.rcfilters.ui.ItemMenuOptionWidget.prototype.updateUiBasedOnState = function () { + this.checkboxWidget.setSelected( this.itemModel.isSelected() ); + + this.highlightButton.toggle( this.filtersViewModel.isHighlightEnabled() ); + this.excludeLabel.toggle( + this.itemModel.getGroupModel().getView() === 'namespaces' && + this.itemModel.isSelected() && + this.invertModel.isSelected() + ); + this.toggle( this.itemModel.isVisible() ); }; /** @@ -137,11 +153,11 @@ * @return {string} Filter name */ mw.rcfilters.ui.ItemMenuOptionWidget.prototype.getName = function () { - return this.model.getName(); + return this.itemModel.getName(); }; mw.rcfilters.ui.ItemMenuOptionWidget.prototype.getModel = function () { - return this.model; + return this.itemModel; }; }( mediaWiki ) );