Browse Source

Fix how the keymap handler is resolved

pull/540/head
Artur Arseniev 9 years ago
parent
commit
41bf910efa
  1. 6
      src/editor/index.js
  2. 1
      src/editor/model/Editor.js
  3. 25
      src/keymaps/index.js

6
src/editor/index.js

@ -172,6 +172,12 @@ module.exports = config => {
*/
Commands: em.get('Commands'),
/**
* @property {Keymaps}
* @private
*/
Keymaps: em.get('Keymaps'),
/**
* @property {Modal}
* @private

1
src/editor/model/Editor.js

@ -2,6 +2,7 @@ import { isUndefined, defaults } from 'underscore';
const deps = [
require('utils'),
require('keymaps'),
require('storage_manager'),
require('device_manager'),
require('parser'),

25
src/keymap/index.js → src/keymaps/index.js

@ -5,9 +5,12 @@ module.exports = () => {
let config;
const configDef = {};
const keymaps = {};
console.log('called');
return {
keymaster,
name: 'Keymaps',
@ -48,20 +51,20 @@ module.exports = () => {
add(id, keys, handler) {
const em = this.em;
const cmd = em.get('Commands');
const keymap = { keys, handler };
const editor = em.getEditor();
const keymap = { id, keys, handler };
const pk = keymaps[id];
pk && this.remove(id);
keymaps[id] = keymap;
keymaster(keys, id, () => {
keymaster(keys, (e, h) => {
// It's safer putting handlers resolution inside the callback
handler = isString(handler) ? cmd.get(handler) : handler;
handler(em.getEditor());
em.trigger(`keymap:emit`, id, keymap);
em.trigger(`keymap:emit:${id}`, keymap);
console.log('executed', id);
typeof handler == 'object' ? handler.run(editor) : handler(editor);
const args = [id, h.shortcut, e];
em.trigger('keymap:emit', ...args);
em.trigger(`keymap:emit:${id}`, ...args);
});
em.trigger('keymap:add', id, keymap);
// emit
//keymaster.unbind(keys, id);
em.trigger('keymap:add', keymap);
},
@ -101,8 +104,8 @@ module.exports = () => {
if (keymap) {
delete keymaps[id];
keymaster.unbind(keymap.keys, id);
em && em.trigger('keymap:remove', id, keymap);
keymaster.unbind(keymap.keys);
em && em.trigger('keymap:remove', keymap);
return keymap;
}
},
Loading…
Cancel
Save