/*!
- * OOjs UI v0.1.0-pre (eaa1b7f06d)
+ * OOjs UI v0.1.0-pre (4975b8db90)
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2014 OOjs Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: Thu Apr 03 2014 16:56:21 GMT-0700 (PDT)
+ * Date: Mon Apr 07 2014 15:17:10 GMT-0700 (PDT)
*/
( function ( OO ) {
}
};
-/* Static Properties */
+/* Setup */
+
+OO.initClass( OO.ui.Element );
-OO.ui.Element.static = {};
+/* Static Properties */
/**
* HTML tag name.
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.Frame, OO.ui.Element );
-
OO.mixinClass( OO.ui.Frame, OO.EventEmitter );
/* Static Properties */
this.frame.connect( this, { 'load': 'initialize' } );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.Window, OO.ui.Element );
-
OO.mixinClass( OO.ui.Window, OO.EventEmitter );
/* Events */
this.$element.addClass( 'oo-ui-windowSet' );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.WindowSet, OO.ui.Element );
-
OO.mixinClass( OO.ui.WindowSet, OO.EventEmitter );
/* Events */
this.setSize( config.size );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.Dialog, OO.ui.Window );
this.$element.addClass( 'oo-ui-layout' );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.Layout, OO.ui.Element );
-
OO.mixinClass( OO.ui.Layout, OO.EventEmitter );
/**
* User interface control.
this.setDisabled( !!config.disabled );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.Widget, OO.ui.Element );
-
OO.mixinClass( OO.ui.Widget, OO.EventEmitter );
/* Events */
this.setIcon( config.icon || this.constructor.static.icon );
};
-/* Static Properties */
+/* Setup */
-OO.ui.IconedElement.static = {};
+OO.initClass( OO.ui.IconedElement );
+
+/* Static Properties */
/**
* Icon.
this.setIndicatorTitle( config.indicatorTitle || this.constructor.static.indicatorTitle );
};
-/* Static Properties */
+/* Setup */
+
+OO.initClass( OO.ui.IndicatedElement );
-OO.ui.IndicatedElement.static = {};
+/* Static Properties */
/**
* indicator.
this.autoFitLabel = config.autoFitLabel === undefined || !!config.autoFitLabel;
};
-/* Static Properties */
+/* Setup */
-OO.ui.LabeledElement.static = {};
+OO.initClass( OO.ui.LabeledElement );
+
+/* Static Properties */
/**
* Label.
this.setTitle( config.title || this.constructor.static.title );
};
-/* Static Properties */
+/* Setup */
+
+OO.initClass( OO.ui.TitledElement );
-OO.ui.TitledElement.static = {};
+/* Static Properties */
/**
* Title.
this.setTitle( config.title || this.constructor.static.title );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.Tool, OO.ui.Widget );
-
OO.mixinClass( OO.ui.Tool, OO.ui.IconedElement );
/* Events */
this.$element.addClass( 'oo-ui-toolbar' ).append( this.$bar );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.Toolbar, OO.ui.Element );
-
OO.mixinClass( OO.ui.Toolbar, OO.EventEmitter );
OO.mixinClass( OO.ui.Toolbar, OO.ui.GroupElement );
OO.ui.ToolFactory.super.call( this );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.ToolFactory, OO.Factory );
this.populate();
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.ToolGroup, OO.ui.Widget );
-
OO.mixinClass( OO.ui.ToolGroup, OO.ui.GroupElement );
/* Events */
}
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.ToolGroupFactory, OO.Factory );
}
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.FieldsetLayout, OO.ui.Layout );
-
OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.IconedElement );
OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.LabeledElement );
OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.GroupElement );
this.setAlignment( config.align );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.FieldLayout, OO.ui.Layout );
-
OO.mixinClass( OO.ui.FieldLayout, OO.ui.LabeledElement );
/* Methods */
}
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.GridLayout, OO.ui.Layout );
}
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.BookletLayout, OO.ui.Layout );
this.$element.addClass( 'oo-ui-' + OO.ui.Element.getDir( this.$.context ) );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.PanelLayout, OO.ui.Layout );
/**
this.$element.addClass( 'oo-ui-pageLayout' );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.PageLayout, OO.ui.PanelLayout );
}
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.StackLayout, OO.ui.PanelLayout );
-
OO.mixinClass( OO.ui.StackLayout, OO.ui.GroupElement );
/* Events */
this.$element.addClass( 'oo-ui-barToolGroup' );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.BarToolGroup, OO.ui.ToolGroup );
.prepend( this.$handle );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.PopupToolGroup, OO.ui.ToolGroup );
-
OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.IconedElement );
OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.IndicatedElement );
OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.LabeledElement );
this.$element.addClass( 'oo-ui-listToolGroup' );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.ListToolGroup, OO.ui.PopupToolGroup );
this.$element.addClass( 'oo-ui-menuToolGroup' );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.MenuToolGroup, OO.ui.PopupToolGroup );
.append( this.popup.$element );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.PopupTool, OO.ui.Tool );
-
OO.mixinClass( OO.ui.PopupTool, OO.ui.PopuppableElement );
/* Methods */
OO.ui.GroupWidget.super.call( this, $element, config );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.GroupWidget, OO.ui.GroupElement );
this.$element.addClass( 'oo-ui-iconWidget' );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.IconWidget, OO.ui.Widget );
-
OO.mixinClass( OO.ui.IconWidget, OO.ui.IconedElement );
OO.mixinClass( OO.ui.IconWidget, OO.ui.TitledElement );
this.$element.addClass( 'oo-ui-indicatorWidget' );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.IndicatorWidget, OO.ui.Widget );
-
OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.IndicatedElement );
OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.TitledElement );
}
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.ButtonGroupWidget, OO.ui.Widget );
-
OO.mixinClass( OO.ui.ButtonGroupWidget, OO.ui.GroupElement );
/**
* Creates an OO.ui.ButtonWidget object.
.append( this.$button );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.ButtonWidget, OO.ui.Widget );
-
OO.mixinClass( OO.ui.ButtonWidget, OO.ui.ButtonedElement );
OO.mixinClass( OO.ui.ButtonWidget, OO.ui.IconedElement );
OO.mixinClass( OO.ui.ButtonWidget, OO.ui.IndicatedElement );
this.setValue( config.value );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.InputWidget, OO.ui.Widget );
this.$element.addClass( 'oo-ui-checkboxInputWidget' );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.CheckboxInputWidget, OO.ui.InputWidget );
this.$element.addClass( 'oo-ui-labelWidget' );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.LabelWidget, OO.ui.Widget );
-
OO.mixinClass( OO.ui.LabelWidget, OO.ui.LabeledElement );
/* Static Properties */
* Lookup input widget.
*
* Mixin that adds a menu showing suggested values to a text input. Subclasses must handle `select`
- * events on #lookupMenu to make use of selections.
+ * and `choose` events on #lookupMenu to make use of selections.
*
* @class
* @abstract
*/
OO.ui.LookupInputWidget.prototype.initializeLookupMenuSelection = function () {
if ( !this.lookupMenu.getSelectedItem() ) {
- this.lookupMenu.intializeSelection( this.lookupMenu.getFirstSelectableItem() );
+ this.lookupMenu.selectItem( this.lookupMenu.getFirstSelectableItem() );
}
this.lookupMenu.highlightItem( this.lookupMenu.getSelectedItem() );
};
.append( this.$indicator );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.OptionWidget, OO.ui.Widget );
-
OO.mixinClass( OO.ui.OptionWidget, OO.ui.ItemWidget );
OO.mixinClass( OO.ui.OptionWidget, OO.ui.IconedElement );
OO.mixinClass( OO.ui.OptionWidget, OO.ui.LabeledElement );
}
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.SelectWidget, OO.ui.Widget );
// Need to mixin base class as well
OO.mixinClass( OO.ui.SelectWidget, OO.ui.GroupElement );
-
OO.mixinClass( OO.ui.SelectWidget, OO.ui.GroupWidget );
/* Events */
* @param {OO.ui.OptionWidget|null} item Selected item
*/
+/**
+ * @event choose
+ * @param {OO.ui.OptionWidget|null} item Chosen item
+ */
+
/**
* @event add
* @param {OO.ui.OptionWidget[]} items Added items
}
if ( !this.disabled && e.which === 1 && this.selecting ) {
this.pressItem( null );
- this.selectItem( this.selecting );
+ this.chooseItem( this.selecting );
this.selecting = null;
}
if ( !this.disabled ) {
item = this.getTargetItem( e );
- if ( item && item.isHighlightable() ) {
- this.highlightItem( item );
- }
+ this.highlightItem( item && item.isHighlightable() ? item : null );
}
return false;
};
};
/**
- * Setup selection and highlighting.
+ * Choose an item.
*
- * This should be used to synchronize the UI with the model without emitting events that would in
- * turn update the model.
+ * Identical to #selectItem, but may vary in subclasses that want to take additional action when
+ * an item is selected using the keyboard or mouse.
*
- * @param {OO.ui.OptionWidget} [item] Item to select
+ * @method
+ * @param {OO.ui.OptionWidget} item Item to choose
+ * @fires choose
* @chainable
*/
-OO.ui.SelectWidget.prototype.intializeSelection = function ( item ) {
- var i, len, selected;
-
- for ( i = 0, len = this.items.length; i < len; i++ ) {
- selected = this.items[i] === item;
- this.items[i].setSelected( selected );
- this.items[i].setHighlighted( selected );
- }
+OO.ui.SelectWidget.prototype.chooseItem = function ( item ) {
+ this.selectItem( item );
+ this.emit( 'choose', item );
return this;
};
this.$element.addClass( 'oo-ui-menuItemWidget' );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.MenuItemWidget, OO.ui.OptionWidget );
/**
this.$previousFocus = null;
this.isolated = !config.input;
this.visible = false;
+ this.flashing = false;
this.onKeyDownHandler = OO.ui.bind( this.onKeyDown, this );
// Initialization
this.$element.hide().addClass( 'oo-ui-menuWidget' );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.MenuWidget, OO.ui.SelectWidget );
-
OO.mixinClass( OO.ui.MenuWidget, OO.ui.ClippableElement );
/* Methods */
}
switch ( e.keyCode ) {
case OO.ui.Keys.ENTER:
- this.selectItem( highlightItem );
+ this.chooseItem( highlightItem );
handled = true;
break;
case OO.ui.Keys.UP:
};
/**
- * Select an item.
+ * Choose an item.
*
- * The menu will stay open if an item is silently selected.
+ * This will close the menu when done, unlike selectItem which only changes selection.
*
* @method
- * @param {OO.ui.OptionWidget} [item] Item to select, omit to deselect all
+ * @param {OO.ui.OptionWidget} item Item to choose
* @chainable
*/
-OO.ui.MenuWidget.prototype.selectItem = function ( item ) {
+OO.ui.MenuWidget.prototype.chooseItem = function ( item ) {
// Parent method
- OO.ui.SelectWidget.prototype.selectItem.call( this, item );
+ OO.ui.MenuWidget.super.prototype.chooseItem.call( this, item );
- if ( !this.disabled ) {
- if ( item ) {
- this.disabled = true;
- item.flash( OO.ui.bind( function () {
- this.hide();
- this.disabled = false;
- }, this ) );
- } else {
+ if ( item && !this.flashing ) {
+ this.flashing = true;
+ item.flash( OO.ui.bind( function () {
this.hide();
- }
+ this.flashing = false;
+ }, this ) );
+ } else {
+ this.hide();
}
return this;
.append( this.$handle, this.menu.$element );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.InlineMenuWidget, OO.ui.Widget );
-
OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.IconedElement );
OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.IndicatedElement );
OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.LabeledElement );
this.$element.addClass( 'oo-ui-menuSectionItemWidget' );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.MenuSectionItemWidget, OO.ui.OptionWidget );
+/* Static Properties */
+
OO.ui.MenuSectionItemWidget.static.selectable = false;
OO.ui.MenuSectionItemWidget.static.highlightable = false;
this.$element.addClass( 'oo-ui-outlineWidget' );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.OutlineWidget, OO.ui.SelectWidget );
/**
this.$element.append( this.$icon, this.$group, this.$movers );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.OutlineControlsWidget, OO.ui.Widget );
-
OO.mixinClass( OO.ui.OutlineControlsWidget, OO.ui.GroupElement );
OO.mixinClass( OO.ui.OutlineControlsWidget, OO.ui.IconedElement );
this.setLevel( config.level );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.OutlineItemWidget, OO.ui.OptionWidget );
this.$element.append( this.$button );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.ButtonOptionWidget, OO.ui.OptionWidget );
-
OO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.ButtonedElement );
OO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.FlaggableElement );
this.$element.addClass( 'oo-ui-buttonSelectWidget' );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.ButtonSelectWidget, OO.ui.SelectWidget );
/**
.append( this.$popup, this.$tail );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.PopupWidget, OO.ui.Widget );
-
OO.mixinClass( OO.ui.PopupWidget, OO.ui.LabeledElement );
-
OO.mixinClass( OO.ui.PopupWidget, OO.ui.ClippableElement );
/* Events */
.append( this.popup.$element );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.PopupButtonWidget, OO.ui.ButtonWidget );
-
OO.mixinClass( OO.ui.PopupButtonWidget, OO.ui.PopuppableElement );
/* Methods */
.append( this.$results, this.$query );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.SearchWidget, OO.ui.Widget );
}
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.TextInputWidget, OO.ui.InputWidget );
this.$element.addClass( 'oo-ui-textInputMenuWidget' );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.TextInputMenuWidget, OO.ui.MenuWidget );
this.$element.addClass( 'oo-ui-toggleButtonWidget' );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.ToggleButtonWidget, OO.ui.ButtonWidget );
-
OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.ToggleWidget );
/* Methods */
.append( this.$glow, this.$grip );
};
-/* Inheritance */
+/* Setup */
OO.inheritClass( OO.ui.ToggleSwitchWidget, OO.ui.Widget );
-
OO.mixinClass( OO.ui.ToggleSwitchWidget, OO.ui.ToggleWidget );
/* Methods */