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(); },
|
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);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -79,7 +80,6 @@ var Editor = function(renderer, session, listenElement) {
|
||||||
wrap: true
|
wrap: true
|
||||||
});
|
});
|
||||||
|
|
||||||
this.commands = new CommandManager(useragent.isMac ? "mac" : "win", defaultCommands);
|
|
||||||
this.setSession(session || new EditSession(""));
|
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) {
|
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 {
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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 };
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue