diff options
Diffstat (limited to 'www/wiki/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.RclToOrFromWidget.js')
-rw-r--r-- | www/wiki/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.RclToOrFromWidget.js | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/www/wiki/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.RclToOrFromWidget.js b/www/wiki/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.RclToOrFromWidget.js new file mode 100644 index 00000000..4fce08c9 --- /dev/null +++ b/www/wiki/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.RclToOrFromWidget.js @@ -0,0 +1,73 @@ +( function ( mw ) { + /** + * Widget to select to view changes that link TO or FROM the target page + * on Special:RecentChangesLinked (AKA Related Changes) + * + * @extends OO.ui.DropdownWidget + * + * @constructor + * @param {mw.rcfilters.Controller} controller + * @param {mw.rcfilters.dm.FilterItem} showLinkedToModel model this widget is bound to + * @param {Object} [config] Configuration object + */ + mw.rcfilters.ui.RclToOrFromWidget = function MwRcfiltersUiRclToOrFromWidget( + controller, showLinkedToModel, config + ) { + config = config || {}; + + this.showLinkedFrom = new OO.ui.MenuOptionWidget( { + data: 'from', // default (showlinkedto=0) + label: new OO.ui.HtmlSnippet( mw.msg( 'rcfilters-filter-showlinkedfrom-option-label' ) ) + } ); + this.showLinkedTo = new OO.ui.MenuOptionWidget( { + data: 'to', // showlinkedto=1 + label: new OO.ui.HtmlSnippet( mw.msg( 'rcfilters-filter-showlinkedto-option-label' ) ) + } ); + + // Parent + mw.rcfilters.ui.RclToOrFromWidget.parent.call( this, $.extend( { + classes: [ 'mw-rcfilters-ui-rclToOrFromWidget' ], + menu: { items: [ this.showLinkedFrom, this.showLinkedTo ] } + }, config ) ); + + this.controller = controller; + this.model = showLinkedToModel; + + this.getMenu().connect( this, { choose: 'onUserChooseItem' } ); + this.model.connect( this, { update: 'onModelUpdate' } ); + + // force an initial update of the component based on the state + this.onModelUpdate(); + }; + + /* Initialization */ + + OO.inheritClass( mw.rcfilters.ui.RclToOrFromWidget, OO.ui.DropdownWidget ); + + /* Methods */ + + /** + * Respond to the user choosing an item in the menu + * + * @param {OO.ui.MenuOptionWidget} chosenItem + */ + mw.rcfilters.ui.RclToOrFromWidget.prototype.onUserChooseItem = function ( chosenItem ) { + this.controller.setShowLinkedTo( chosenItem.getData() === 'to' ); + }; + + /** + * Respond to model update + */ + mw.rcfilters.ui.RclToOrFromWidget.prototype.onModelUpdate = function () { + this.getMenu().selectItem( + this.model.isSelected() ? + this.showLinkedTo : + this.showLinkedFrom + ); + this.setLabel( mw.msg( + this.model.isSelected() ? + 'rcfilters-filter-showlinkedto-label' : + 'rcfilters-filter-showlinkedfrom-label' + ) ); + }; +}( mediaWiki ) ); |