/*!
* VisualEditor UserInterface TriggerListener class.
*
* @copyright See AUTHORS.txt
*/
/**
* Trigger listener
*
* @class
*
* @constructor
* @param {string[]} commands Commands to listen to triggers for
* @param {ve.ui.CommandRegistry} commandRegistry Command registry to get commands from
*/
ve.TriggerListener = function VeTriggerListener( commands, commandRegistry ) {
// Properties
this.commands = commands;
this.commandsByTrigger = {};
this.triggers = {};
for ( let i = this.commands.length - 1; i >= 0; i-- ) {
const command = this.commands[ i ];
const triggers = ve.ui.triggerRegistry.lookup( command );
if ( triggers ) {
for ( let j = triggers.length - 1; j >= 0; j-- ) {
this.commandsByTrigger[ triggers[ j ].toString() ] = commandRegistry.lookup( command );
}
this.triggers[ command ] = triggers;
}
}
};
/* Inheritance */
OO.initClass( ve.TriggerListener );
/* Methods */
/**
* Get list of commands.
*
* @return {string[]} Commands
*/
ve.TriggerListener.prototype.getCommands = function () {
return this.commands;
};
/**
* Get command associated with trigger string.
*
* @param {string} trigger
* @return {ve.ui.Command|undefined}
*/
ve.TriggerListener.prototype.getCommandByTrigger = function ( trigger ) {
return this.commandsByTrigger[ trigger ];
};
/**
* Get triggers for a specified name.
*
* @param {string} name Trigger name
* @return {ve.ui.Trigger[]|undefined}
*/
ve.TriggerListener.prototype.getTriggers = function ( name ) {
return this.triggers[ name ];
};