/*!
 * VisualEditor UserInterface Action class.
 *
 * @copyright See AUTHORS.txt
 */

/**
 * Generic action.
 *
 * An action is built around a surface for one-time use. It is a generic way of extending the
 * functionality of a surface. Actions are accessible via {ve.ui.Surface.prototype.execute}.
 *
 * @class
 *
 * @constructor
 * @param {ve.ui.Surface} surface Surface to act on
 * @param {string} [source] Label for the source of the action.
 *  One of 'trigger', 'sequence', 'tool', or 'context'
 */
ve.ui.Action = function VeUiAction( surface, source ) {
	// Properties
	this.surface = surface;
	this.source = source;
};

/* Inheritance */

OO.initClass( ve.ui.Action );

/* Static Properties */

/**
 * @property {string[]} List of allowed methods for the action.
 *
 * To avoid use of methods not intended to be executed via surface.execute(), the allowed methods
 * must be listed here. This information is checked by ve.ui.Surface before executing an action.
 *
 * If a method returns a value, it will be cast to boolean and be used to determine if the action
 * was canceled. Not returning anything, or returning undefined will be treated the same as
 * returning true. A canceled action will yield to other default behavior. For example, when
 * triggering an action from a keystroke, a canceled action will allow normal insertion behavior to
 * be carried out.
 *
 * @static
 * @inheritable
 */
ve.ui.Action.static.methods = [];