update command manager for cloud9
This commit is contained in:
parent
93967294cf
commit
54b1f3f9ac
5 changed files with 42 additions and 41 deletions
|
|
@ -84,16 +84,17 @@ exports.defaultCommands = [{
|
|||
exec: function(editor) { editor.multiSelect.splitIntoLines(); },
|
||||
bindKey: {win: "Ctrl-Shift-L", mac: "Ctrl-Shift-L"},
|
||||
readonly: true
|
||||
}];
|
||||
|
||||
// commands active in multiselect mode
|
||||
exports.multiEditCommands = [{
|
||||
}, {
|
||||
name: "singleSelection",
|
||||
bindKey: "esc",
|
||||
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;
|
||||
exports.keyboardHandler = new HashHandler(exports.multiEditCommands);
|
||||
|
||||
|
|
|
|||
|
|
@ -58,12 +58,13 @@ var EventEmitter = require("./lib/event_emitter").EventEmitter;
|
|||
var CommandManager = require("./commands/command_manager").CommandManager;
|
||||
var defaultCommands = require("./commands/default_commands").commands;
|
||||
|
||||
var Editor = function(renderer, session, listenElement) {
|
||||
var Editor = function(renderer, session) {
|
||||
var container = renderer.getContainerElement();
|
||||
this.container = container;
|
||||
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);
|
||||
|
||||
// TODO detect touch event support
|
||||
|
|
@ -78,8 +79,7 @@ var Editor = function(renderer, session, listenElement) {
|
|||
this.$search = new Search().set({
|
||||
wrap: true
|
||||
});
|
||||
|
||||
this.commands = new CommandManager(useragent.isMac ? "mac" : "win", defaultCommands);
|
||||
|
||||
this.setSession(session || new EditSession(""));
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
commands && Object.keys(commands).forEach(function(name) {
|
||||
var command = commands[name];
|
||||
|
|
@ -100,18 +112,6 @@ function HashHandler(config, platform) {
|
|||
}, 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) {
|
||||
Object.keys(keyList).forEach(function(key) {
|
||||
this.bindKey(key, keyList[key]);
|
||||
|
|
@ -127,10 +127,10 @@ function HashHandler(config, platform) {
|
|||
this.bindKey(key, command);
|
||||
};
|
||||
|
||||
function parseKeys(keys, val, ret) {
|
||||
function parseKeys(keys, val) {
|
||||
var key;
|
||||
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++) {
|
||||
if (keyUtil.KEY_MODS[parts[i]])
|
||||
|
|
@ -143,17 +143,12 @@ function HashHandler(config, platform) {
|
|||
key: key,
|
||||
hashId: hashId
|
||||
};
|
||||
}
|
||||
|
||||
function splitSafe(s) {
|
||||
return (s.trim()
|
||||
.split(new RegExp("[\\s ]*\\-[\\s ]*", "g"), 999));
|
||||
}
|
||||
};
|
||||
|
||||
this.findKeyCommand = function findKeyCommand(hashId, keyString) {
|
||||
var ckbr = this.commmandKeyBinding;
|
||||
return ckbr[hashId] && ckbr[hashId][keyString.toLowerCase()];
|
||||
}
|
||||
};
|
||||
|
||||
this.handleKeyboard = function(data, hashId, keyString, keyCode) {
|
||||
return {
|
||||
|
|
|
|||
|
|
@ -47,15 +47,27 @@ require("../commands/default_commands");
|
|||
var KeyBinding = function(editor) {
|
||||
this.$editor = editor;
|
||||
this.$data = { };
|
||||
this.$handlers = [this];
|
||||
this.$handlers = [];
|
||||
this.setDefaultHandler(editor.commands);
|
||||
};
|
||||
|
||||
(function() {
|
||||
this.setDefaultHandler = function(keyboardHandler) {
|
||||
this.removeKeyboardHandler(this.$defaultHandler);
|
||||
this.$defaultHandler = keyboardHandler;
|
||||
if (keyboardHandler)
|
||||
this.$handlers.unshift(keyboardHandler);
|
||||
this.$data = { };
|
||||
};
|
||||
|
||||
this.setKeyboardHandler = function(keyboardHandler) {
|
||||
if (this.$handlers[this.$handlers.length - 1] == keyboardHandler)
|
||||
return;
|
||||
this.$data = { };
|
||||
this.$handlers = keyboardHandler ? [this, keyboardHandler] : [this];
|
||||
this.$handlers = [];
|
||||
this.setDefaultHandler(this.$defaultHandler);
|
||||
if (keyboardHandler)
|
||||
this.$handlers.push(keyboardHandler);
|
||||
};
|
||||
|
||||
this.addKeyboardHandler = function(keyboardHandler) {
|
||||
|
|
@ -103,12 +115,6 @@ var KeyBinding = function(editor) {
|
|||
return success;
|
||||
};
|
||||
|
||||
this.handleKeyboard = function(data, hashId, keyString) {
|
||||
return {
|
||||
command: this.$editor.commands.findKeyCommand(hashId, keyString)
|
||||
};
|
||||
};
|
||||
|
||||
this.onCommandKey = function(e, hashId, keyCode) {
|
||||
var keyString = keyUtil.keyCodeToString(keyCode);
|
||||
this.$callKeyboardHandlers(hashId, keyString, keyCode, e);
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ var event = require("../lib/event");
|
|||
var useragent = require("../lib/useragent");
|
||||
var dom = require("../lib/dom");
|
||||
|
||||
var TextInput = function(parentNode, host, listenElement) {
|
||||
var TextInput = function(parentNode, host) {
|
||||
|
||||
var text = dom.createElement("textarea");
|
||||
if (useragent.isTouchPad)
|
||||
|
|
@ -159,8 +159,7 @@ var TextInput = function(parentNode, host, listenElement) {
|
|||
}, 0);
|
||||
};
|
||||
|
||||
if (listenElement != false)
|
||||
event.addCommandKeyListener(listenElement || text, host.onCommandKey.bind(host));
|
||||
event.addCommandKeyListener(text, host.onCommandKey.bind(host));
|
||||
|
||||
if (useragent.isOldIE) {
|
||||
var keytable = { 13:1, 27:1 };
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue