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'), Commands: em.get('Commands'),
/**
* @property {Keymaps}
* @private
*/
Keymaps: em.get('Keymaps'),
/** /**
* @property {Modal} * @property {Modal}
* @private * @private

1
src/editor/model/Editor.js

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

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

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