forked from phcode-dev/staging.phcode.dev
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCommandManager.js
More file actions
1 lines (1 loc) · 3.54 KB
/
CommandManager.js
File metadata and controls
1 lines (1 loc) · 3.54 KB
1
define(function(require,exports,module){const EventDispatcher=require("utils/EventDispatcher"),EVENT_BEFORE_EXECUTE_COMMAND="beforeExecuteCommand",SOURCE_KEYBOARD_SHORTCUT="keyboardShortcut",SOURCE_UI_MENU_CLICK="uiMenuClick",SOURCE_OTHER="otherExecAction";let _commands={},_commandsOriginal={};function Command(name,id,commandFn,options={}){this._name=name,this._id=id,this._commandFn=commandFn,this._checked=void 0,this._enabled=!0,this._options=options}function register(name,id,commandFn,options={}){if(_commands[id])return console.log("Attempting to register an already-registered command: "+id),null;if(!name||!id||!commandFn)return console.error("Attempting to register a command with a missing name, id, or command function:"+name+" "+id),null;var command=new Command(name,id,commandFn,options);return _commands[id]=command,exports.trigger("commandRegistered",command),command}function registerInternal(id,commandFn){if(_commands[id])return console.log("Attempting to register an already-registered command: "+id),null;if(!id||!commandFn)return console.error("Attempting to register an internal command with a missing id, or command function: "+id),null;var command=new Command(null,id,commandFn);return _commands[id]=command,exports.trigger("commandRegistered",command),command}function _testReset(){_commandsOriginal=_commands,_commands={}}function _testRestore(){_commands=_commandsOriginal,_commandsOriginal={}}function get(id){return _commands[id]}function getAll(){return Object.keys(_commands)}function execute(id){var command=_commands[id];if(command){try{exports.trigger(EVENT_BEFORE_EXECUTE_COMMAND,id)}catch(err){console.error(err)}let args=Array.prototype.slice.call(arguments,1);if(command._options.eventSource&&(!args.length||"object"!=typeof args[0]||!args[0].eventSource)){const event={eventSource:SOURCE_OTHER};args=[event].concat(args)}return command.execute.apply(command,args)}return(new $.Deferred).reject().promise()}EventDispatcher.makeEventDispatcher(Command.prototype),Command.prototype.getID=function(){return this._id},Command.prototype.execute=function(){if(!this._enabled)return(new $.Deferred).reject().promise();let args=arguments;if(this._options.eventSource&&(!args.length||"object"!=typeof args[0]||!args[0].eventSource)){const event={eventSource:SOURCE_OTHER};args=[event].concat(args)}let result=this._commandFn.apply(this,args);return result||(new $.Deferred).resolve().promise()},Command.prototype.getEnabled=function(){return this._enabled},Command.prototype.getOptions=function(){return this._options||{}},Command.prototype.setEnabled=function(enabled){var changed=this._enabled!==enabled;this._enabled=enabled,changed&&this.trigger("enabledStateChange")},Command.prototype.setChecked=function(checked){var changed=this._checked!==checked;this._checked=checked,changed&&this.trigger("checkedStateChange")},Command.prototype.getChecked=function(){return this._checked},Command.prototype.setName=function(name,htmlName){let changed=this._name!==name;this._name=name,this._options.htmlName!==htmlName&&(changed=!0,this._options.htmlName=htmlName),changed&&this.trigger("nameChange")},Command.prototype.getName=function(){return this._name},EventDispatcher.makeEventDispatcher(exports),exports.register=register,exports.registerInternal=registerInternal,exports.execute=execute,exports.get=get,exports.getAll=getAll,exports._testReset=_testReset,exports._testRestore=_testRestore,exports.EVENT_BEFORE_EXECUTE_COMMAND=EVENT_BEFORE_EXECUTE_COMMAND,exports.SOURCE_KEYBOARD_SHORTCUT="keyboardShortcut",exports.SOURCE_UI_MENU_CLICK="uiMenuClick",exports.SOURCE_OTHER=SOURCE_OTHER});