update command manager for cloud9

This commit is contained in:
nightwing 2012-04-21 21:28:59 +04:00
commit 54b1f3f9ac
5 changed files with 42 additions and 41 deletions

View file

@ -84,16 +84,17 @@ exports.defaultCommands = [{
exec: function(editor) { editor.multiSelect.splitIntoLines(); }, exec: function(editor) { editor.multiSelect.splitIntoLines(); },
bindKey: {win: "Ctrl-Shift-L", mac: "Ctrl-Shift-L"}, bindKey: {win: "Ctrl-Shift-L", mac: "Ctrl-Shift-L"},
readonly: true readonly: true
}]; }, {
// commands active in multiselect mode
exports.multiEditCommands = [{
name: "singleSelection", name: "singleSelection",
bindKey: "esc", bindKey: "esc",
exec: function(editor) { editor.exitMultiSelectMode(); }, exec: function(editor) { editor.exitMultiSelectMode(); },
readonly: true readonly: true,
isAvailable: function(editor) {return editor.inMultiSelectMode}
}]; }];
// commands active in multiselect mode
exports.multiEditCommands = {"singleSelection": "esc"};
var HashHandler = require("../keyboard/hash_handler").HashHandler; var HashHandler = require("../keyboard/hash_handler").HashHandler;
exports.keyboardHandler = new HashHandler(exports.multiEditCommands); exports.keyboardHandler = new HashHandler(exports.multiEditCommands);

View file

@ -58,12 +58,13 @@ var EventEmitter = require("./lib/event_emitter").EventEmitter;
var CommandManager = require("./commands/command_manager").CommandManager; var CommandManager = require("./commands/command_manager").CommandManager;
var defaultCommands = require("./commands/default_commands").commands; var defaultCommands = require("./commands/default_commands").commands;
var Editor = function(renderer, session, listenElement) { var Editor = function(renderer, session) {
var container = renderer.getContainerElement(); var container = renderer.getContainerElement();
this.container = container; this.container = container;
this.renderer = renderer; this.renderer = renderer;
this.textInput = new TextInput(renderer.getTextAreaContainer(), this, listenElement); this.commands = new CommandManager(useragent.isMac ? "mac" : "win", defaultCommands);
this.textInput = new TextInput(renderer.getTextAreaContainer(), this);
this.keyBinding = new KeyBinding(this); this.keyBinding = new KeyBinding(this);
// TODO detect touch event support // TODO detect touch event support
@ -78,8 +79,7 @@ var Editor = function(renderer, session, listenElement) {
this.$search = new Search().set({ this.$search = new Search().set({
wrap: true wrap: true
}); });
this.commands = new CommandManager(useragent.isMac ? "mac" : "win", defaultCommands);
this.setSession(session || new EditSession("")); this.setSession(session || new EditSession(""));
}; };

View file

@ -78,6 +78,18 @@ function HashHandler(config, platform) {
} }
}; };
this.bindKey = function(key, command) {
if(!key)
return;
var ckb = this.commmandKeyBinding;
key.split("|").forEach(function(keyPart) {
var binding = parseKeys(keyPart, command);
var hashId = binding.hashId;
(ckb[hashId] || (ckb[hashId] = {}))[binding.key] = command;
});
};
this.addCommands = function(commands) { this.addCommands = function(commands) {
commands && Object.keys(commands).forEach(function(name) { commands && Object.keys(commands).forEach(function(name) {
var command = commands[name]; var command = commands[name];
@ -100,18 +112,6 @@ function HashHandler(config, platform) {
}, this); }, this);
}; };
this.bindKey = function(key, command) {
if(!key)
return;
var ckb = this.commmandKeyBinding;
key.split("|").forEach(function(keyPart) {
var binding = parseKeys(keyPart, command);
var hashId = binding.hashId;
(ckb[hashId] || (ckb[hashId] = {}))[binding.key] = command;
});
};
this.bindKeys = function(keyList) { this.bindKeys = function(keyList) {
Object.keys(keyList).forEach(function(key) { Object.keys(keyList).forEach(function(key) {
this.bindKey(key, keyList[key]); this.bindKey(key, keyList[key]);
@ -127,10 +127,10 @@ function HashHandler(config, platform) {
this.bindKey(key, command); this.bindKey(key, command);
}; };
function parseKeys(keys, val, ret) { function parseKeys(keys, val) {
var key; var key;
var hashId = 0; var hashId = 0;
var parts = splitSafe(keys.toLowerCase()); var parts = keys.toLowerCase().trim().split(/\s*\-\s*/);
for (var i = 0, l = parts.length; i < l; i++) { for (var i = 0, l = parts.length; i < l; i++) {
if (keyUtil.KEY_MODS[parts[i]]) if (keyUtil.KEY_MODS[parts[i]])
@ -143,17 +143,12 @@ function HashHandler(config, platform) {
key: key, key: key,
hashId: hashId hashId: hashId
}; };
} };
function splitSafe(s) {
return (s.trim()
.split(new RegExp("[\\s ]*\\-[\\s ]*", "g"), 999));
}
this.findKeyCommand = function findKeyCommand(hashId, keyString) { this.findKeyCommand = function findKeyCommand(hashId, keyString) {
var ckbr = this.commmandKeyBinding; var ckbr = this.commmandKeyBinding;
return ckbr[hashId] && ckbr[hashId][keyString.toLowerCase()]; return ckbr[hashId] && ckbr[hashId][keyString.toLowerCase()];
} };
this.handleKeyboard = function(data, hashId, keyString, keyCode) { this.handleKeyboard = function(data, hashId, keyString, keyCode) {
return { return {

View file

@ -47,15 +47,27 @@ require("../commands/default_commands");
var KeyBinding = function(editor) { var KeyBinding = function(editor) {
this.$editor = editor; this.$editor = editor;
this.$data = { }; this.$data = { };
this.$handlers = [this]; this.$handlers = [];
this.setDefaultHandler(editor.commands);
}; };
(function() { (function() {
this.setDefaultHandler = function(keyboardHandler) {
this.removeKeyboardHandler(this.$defaultHandler);
this.$defaultHandler = keyboardHandler;
if (keyboardHandler)
this.$handlers.unshift(keyboardHandler);
this.$data = { };
};
this.setKeyboardHandler = function(keyboardHandler) { this.setKeyboardHandler = function(keyboardHandler) {
if (this.$handlers[this.$handlers.length - 1] == keyboardHandler) if (this.$handlers[this.$handlers.length - 1] == keyboardHandler)
return; return;
this.$data = { }; this.$data = { };
this.$handlers = keyboardHandler ? [this, keyboardHandler] : [this]; this.$handlers = [];
this.setDefaultHandler(this.$defaultHandler);
if (keyboardHandler)
this.$handlers.push(keyboardHandler);
}; };
this.addKeyboardHandler = function(keyboardHandler) { this.addKeyboardHandler = function(keyboardHandler) {
@ -103,12 +115,6 @@ var KeyBinding = function(editor) {
return success; return success;
}; };
this.handleKeyboard = function(data, hashId, keyString) {
return {
command: this.$editor.commands.findKeyCommand(hashId, keyString)
};
};
this.onCommandKey = function(e, hashId, keyCode) { this.onCommandKey = function(e, hashId, keyCode) {
var keyString = keyUtil.keyCodeToString(keyCode); var keyString = keyUtil.keyCodeToString(keyCode);
this.$callKeyboardHandlers(hashId, keyString, keyCode, e); this.$callKeyboardHandlers(hashId, keyString, keyCode, e);

View file

@ -44,7 +44,7 @@ var event = require("../lib/event");
var useragent = require("../lib/useragent"); var useragent = require("../lib/useragent");
var dom = require("../lib/dom"); var dom = require("../lib/dom");
var TextInput = function(parentNode, host, listenElement) { var TextInput = function(parentNode, host) {
var text = dom.createElement("textarea"); var text = dom.createElement("textarea");
if (useragent.isTouchPad) if (useragent.isTouchPad)
@ -159,8 +159,7 @@ var TextInput = function(parentNode, host, listenElement) {
}, 0); }, 0);
}; };
if (listenElement != false) event.addCommandKeyListener(text, host.onCommandKey.bind(host));
event.addCommandKeyListener(listenElement || text, host.onCommandKey.bind(host));
if (useragent.isOldIE) { if (useragent.isOldIE) {
var keytable = { 13:1, 27:1 }; var keytable = { 13:1, 27:1 };