# all files / src/widgets/ ActionWidget.js

94.12% Statements 16/17
75% Branches 3/4
75% Functions 3/4
94.12% Lines 16/17

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82

    1×

    9×

    9×

    9×

    9×
    9×
    9×
    9×

    9×

    1×
    1×

    1×

    1×
    9×

    1×
    9×

     /**
     * 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.mixin.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.parent.call( this, config );

    	// Mixin constructors
    	OO.ui.mixin.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.mixin.PendingElement );

    /* 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();
    };