diff options
Diffstat (limited to 'vendor/oojs/oojs-ui/src/widgets/ActionWidget.js')
-rw-r--r-- | vendor/oojs/oojs-ui/src/widgets/ActionWidget.js | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/vendor/oojs/oojs-ui/src/widgets/ActionWidget.js b/vendor/oojs/oojs-ui/src/widgets/ActionWidget.js new file mode 100644 index 00000000..789f04f1 --- /dev/null +++ b/vendor/oojs/oojs-ui/src/widgets/ActionWidget.js @@ -0,0 +1,170 @@ +/** + * An ActionWidget is a {@link OO.ui.ButtonWidget button widget} that executes an action. + * Action widgets are used with OO.ui.ActionSet, which manages the behavior and availability + * of the actions. + * + * Both actions and action sets are primarily used with {@link OO.ui.Dialog Dialogs}. + * Please see the [OOjs UI documentation on MediaWiki] [1] for more information + * and examples. + * + * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Process_Dialogs#Action_sets + * + * @class + * @extends OO.ui.ButtonWidget + * @mixins OO.ui.PendingElement + * + * @constructor + * @param {Object} [config] Configuration options + * @cfg {string} [action] Symbolic name of the action (e.g., ‘continue’ or ‘cancel’). + * @cfg {string[]} [modes] Symbolic names of the modes (e.g., ‘edit’ or ‘read’) in which the action + * should be made available. See the action set's {@link OO.ui.ActionSet#setMode setMode} method + * for more information about setting modes. + * @cfg {boolean} [framed=false] Render the action button with a frame + */ +OO.ui.ActionWidget = function OoUiActionWidget( config ) { + // Configuration initialization + config = $.extend( { framed: false }, config ); + + // Parent constructor + OO.ui.ActionWidget.super.call( this, config ); + + // Mixin constructors + OO.ui.PendingElement.call( this, config ); + + // Properties + this.action = config.action || ''; + this.modes = config.modes || []; + this.width = 0; + this.height = 0; + + // Initialization + this.$element.addClass( 'oo-ui-actionWidget' ); +}; + +/* Setup */ + +OO.inheritClass( OO.ui.ActionWidget, OO.ui.ButtonWidget ); +OO.mixinClass( OO.ui.ActionWidget, OO.ui.PendingElement ); + +/* Events */ + +/** + * A resize event is emitted when the size of the widget changes. + * + * @event resize + */ + +/* Methods */ + +/** + * Check if the action is configured to be available in the specified `mode`. + * + * @param {string} mode Name of mode + * @return {boolean} The action is configured with the mode + */ +OO.ui.ActionWidget.prototype.hasMode = function ( mode ) { + return this.modes.indexOf( mode ) !== -1; +}; + +/** + * Get the symbolic name of the action (e.g., ‘continue’ or ‘cancel’). + * + * @return {string} + */ +OO.ui.ActionWidget.prototype.getAction = function () { + return this.action; +}; + +/** + * Get the symbolic name of the mode or modes for which the action is configured to be available. + * + * The current mode is set with the action set's {@link OO.ui.ActionSet#setMode setMode} method. + * Only actions that are configured to be avaiable in the current mode will be visible. All other actions + * are hidden. + * + * @return {string[]} + */ +OO.ui.ActionWidget.prototype.getModes = function () { + return this.modes.slice(); +}; + +/** + * Emit a resize event if the size has changed. + * + * @private + * @chainable + */ +OO.ui.ActionWidget.prototype.propagateResize = function () { + var width, height; + + if ( this.isElementAttached() ) { + width = this.$element.width(); + height = this.$element.height(); + + if ( width !== this.width || height !== this.height ) { + this.width = width; + this.height = height; + this.emit( 'resize' ); + } + } + + return this; +}; + +/** + * @inheritdoc + */ +OO.ui.ActionWidget.prototype.setIcon = function () { + // Mixin method + OO.ui.IconElement.prototype.setIcon.apply( this, arguments ); + this.propagateResize(); + + return this; +}; + +/** + * @inheritdoc + */ +OO.ui.ActionWidget.prototype.setLabel = function () { + // Mixin method + OO.ui.LabelElement.prototype.setLabel.apply( this, arguments ); + this.propagateResize(); + + return this; +}; + +/** + * @inheritdoc + */ +OO.ui.ActionWidget.prototype.setFlags = function () { + // Mixin method + OO.ui.FlaggedElement.prototype.setFlags.apply( this, arguments ); + this.propagateResize(); + + return this; +}; + +/** + * @inheritdoc + */ +OO.ui.ActionWidget.prototype.clearFlags = function () { + // Mixin method + OO.ui.FlaggedElement.prototype.clearFlags.apply( this, arguments ); + this.propagateResize(); + + return this; +}; + +/** + * Toggle the visibility of the action button. + * + * @param {boolean} [show] Show button, omit to toggle visibility + * @chainable + */ +OO.ui.ActionWidget.prototype.toggle = function () { + // Parent method + OO.ui.ActionWidget.super.prototype.toggle.apply( this, arguments ); + this.propagateResize(); + + return this; +}; |