From: Moriel Schottlender Date: Fri, 13 Oct 2017 00:27:39 +0000 (-0700) Subject: RCFilters: Use GroupWidget for grouping buttons and aggregating events X-Git-Tag: 1.31.0-rc.0~1785^2 X-Git-Url: http://git.cyclocoop.org/%24image?a=commitdiff_plain;h=2902d05dbc311e1db8c7322438a6f9a32bd8c2fb;p=lhc%2Fweb%2Fwiklou.git RCFilters: Use GroupWidget for grouping buttons and aggregating events Bug: T168849 Change-Id: I3d68121aa4b281751f6ea6cce2c68147855d6c68 --- diff --git a/resources/Resources.php b/resources/Resources.php index 4df8194f0e..06012b8f9f 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -1786,6 +1786,7 @@ return [ ], 'mediawiki.rcfilters.filters.ui' => [ 'scripts' => [ + 'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.GroupWidget.js', 'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.CheckboxInputWidget.js', 'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js', 'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ItemMenuOptionWidget.js', diff --git a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SavedLinksListItemWidget.less b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SavedLinksListItemWidget.less index 9dccc2451c..6a20f5616f 100644 --- a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SavedLinksListItemWidget.less +++ b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SavedLinksListItemWidget.less @@ -22,6 +22,7 @@ min-width: 16px; min-height: 16px; opacity: 0.5; + position: relative; } &-icon span { diff --git a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ViewSwitchWidget.less b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ViewSwitchWidget.less index a6ce4cd88a..1896103970 100644 --- a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ViewSwitchWidget.less +++ b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ViewSwitchWidget.less @@ -6,9 +6,5 @@ &-buttons { margin-top: 0.5em; - - .oo-ui-buttonWidget:not( :first-child ) { - margin-left: 0.5em; - } } } diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.GroupWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.GroupWidget.js new file mode 100644 index 0000000000..167df09112 --- /dev/null +++ b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.GroupWidget.js @@ -0,0 +1,41 @@ +( function ( mw ) { + /** + * A group widget to allow for aggregation of events + * + * @extends OO.ui.Widget + * + * @constructor + * @param {Object} [config] Configuration object + * @param {Object} [events] Events to aggregate. The object represent the + * event name to aggregate and the event value to emit on aggregate for items. + */ + mw.rcfilters.ui.GroupWidget = function MwRcfiltersUiViewSwitchWidget( config ) { + var aggregate = {}; + + config = config || {}; + + // Parent constructor + mw.rcfilters.ui.GroupWidget.parent.call( this, config ); + + // Mixin constructors + OO.ui.mixin.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) ); + + if ( config.events ) { + // Aggregate events + $.each( config.events, function ( eventName, eventEmit ) { + aggregate[ eventName ] = eventEmit; + } ); + + this.aggregate( aggregate ); + } + + if ( Array.isArray( config.items ) ) { + this.addItems( config.items ); + } + }; + + /* Initialize */ + + OO.inheritClass( mw.rcfilters.ui.GroupWidget, OO.ui.Widget ); + OO.mixinClass( mw.rcfilters.ui.GroupWidget, OO.ui.mixin.GroupWidget ); +}( mediaWiki ) ); diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.SavedLinksListWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.SavedLinksListWidget.js index 7eda90a8f9..8287ef96c0 100644 --- a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.SavedLinksListWidget.js +++ b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.SavedLinksListWidget.js @@ -36,10 +36,14 @@ label: $labelNoEntries, icon: 'unClip' } ); - // The only reason we're using "ButtonGroupWidget" here is that - // straight-out "GroupWidget" is a mixin and cannot be initialized - // on its own, so we need something to be its widget. - this.menu = new OO.ui.ButtonGroupWidget( { + + this.menu = new mw.rcfilters.ui.GroupWidget( { + events: { + click: 'menuItemClick', + 'delete': 'menuItemDelete', + 'default': 'menuItemDefault', + edit: 'menuItemEdit' + }, classes: [ 'mw-rcfilters-ui-savedLinksListWidget-menu' ], items: [ this.placeholderItem ] } ); @@ -58,13 +62,6 @@ } } ); - this.menu.aggregate( { - click: 'menuItemClick', - 'delete': 'menuItemDelete', - 'default': 'menuItemDefault', - edit: 'menuItemEdit' - } ); - // Events this.model.connect( this, { add: 'onModelAddItem', diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ViewSwitchWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ViewSwitchWidget.js index fef856722f..aadded156f 100644 --- a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ViewSwitchWidget.js +++ b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ViewSwitchWidget.js @@ -18,7 +18,10 @@ this.controller = controller; this.model = model; - this.buttons = new OO.ui.ButtonGroupWidget( { + this.buttons = new mw.rcfilters.ui.GroupWidget( { + events: { + click: 'buttonClick' + }, items: [ new OO.ui.ButtonWidget( { data: 'namespaces', @@ -35,7 +38,6 @@ // Events this.model.connect( this, { update: 'onModelUpdate' } ); - this.buttons.aggregate( { click: 'buttonClick' } ); this.buttons.connect( this, { buttonClick: 'onButtonClick' } ); this.$element