],
'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',
min-width: 16px;
min-height: 16px;
opacity: 0.5;
+ position: relative;
}
&-icon span {
&-buttons {
margin-top: 0.5em;
-
- .oo-ui-buttonWidget:not( :first-child ) {
- margin-left: 0.5em;
- }
}
}
--- /dev/null
+( 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 ) );
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 ]
} );
}
} );
- this.menu.aggregate( {
- click: 'menuItemClick',
- 'delete': 'menuItemDelete',
- 'default': 'menuItemDefault',
- edit: 'menuItemEdit'
- } );
-
// Events
this.model.connect( this, {
add: 'onModelAddItem',
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',
// Events
this.model.connect( this, { update: 'onModelUpdate' } );
- this.buttons.aggregate( { click: 'buttonClick' } );
this.buttons.connect( this, { buttonClick: 'onButtonClick' } );
this.$element