diff options
| author | Alon Levy <alon@pobox.com> | 2015-03-03 23:43:59 +0200 |
|---|---|---|
| committer | Alon Levy <alon@pobox.com> | 2015-03-03 23:44:08 +0200 |
| commit | 6d650b2ba07078b113ddeda89d6cf15ea56cd0c2 (patch) | |
| tree | 32d3439841dfce3e214bccab41e7548c13bc78ee /src | |
| parent | cb132974c15ec1d2c53dda2f056d8a61963949e6 (diff) | |
client: add keyshortcuts.js, implement ctrl-a for selecting all
switch to onkeydown to capture ctrl-a before browser action
ctrl-a works on text fields since we only handle it if the target is the
body (which it is when svg is in focus, although that may be
accidental, don't know the logic).
Diffstat (limited to 'src')
| -rw-r--r-- | src/client/keyshortcuts.js | 40 | ||||
| -rw-r--r-- | src/client/main.js | 20 |
2 files changed, 43 insertions, 17 deletions
diff --git a/src/client/keyshortcuts.js b/src/client/keyshortcuts.js new file mode 100644 index 00000000..92f4182b --- /dev/null +++ b/src/client/keyshortcuts.js @@ -0,0 +1,40 @@ +define(['jquery', 'view/selection'], +function($, selection) +{ +var rz_core; // circular dependency + +function get_rz_core() +{ + if (rz_core === undefined) { + rz_core = require('rz_core'); + } + return rz_core; +} + +function install() { + document.body.onkeydown = function(e) { + var key = ((e.key && String(e.key)) + || (e.charCode && String.fromCharCode(e.charCode)) + || (e.which && String.fromCharCode(e.which))).toLowerCase(); + + if (e.altKey && e.ctrlKey && 'i' === key) { + $('#textanalyser').focus(); + } + if (e.altKey && e.ctrlKey && 'o' === key) { + search.focus(); + } + if (e.ctrlKey && 'a' === key && e.target === document.body) { + selection.update(get_rz_core().main_graph.nodes(), false); + e.preventDefault(); + e.stopPropagation(); + } + if (e.ctrlKey && 'z' === key && e.target.nodeName !== 'INPUT') { + // TODO: rz_core.main_graph.undo(); + } + }; +} +return { + install: install + }; +} +); diff --git a/src/client/main.js b/src/client/main.js index 0c1b4c98..640651dc 100644 --- a/src/client/main.js +++ b/src/client/main.js @@ -1,5 +1,5 @@ -define(['textanalysis.ui', 'textanalysis', 'buttons', 'history', 'drag_n_drop', 'robot', 'model/core', 'rz_core', 'view/selection', 'util', 'view/search', 'feedback'], -function(textanalysis_ui, textanalysis, buttons, history, drag_n_drop, robot, model_core, rz_core, selection, util, search, feedback) { +define(['textanalysis.ui', 'textanalysis', 'buttons', 'history', 'drag_n_drop', 'robot', 'model/core', 'rz_core', 'view/selection', 'util', 'view/search', 'feedback', 'keyshortcuts'], +function(textanalysis_ui, textanalysis, buttons, history, drag_n_drop, robot, model_core, rz_core, selection, util, search, feedback, keyshortcuts) { function expand(obj){ if (!obj.savesize) { @@ -31,21 +31,7 @@ function(textanalysis_ui, textanalysis, buttons, history, drag_n_drop, drag_n_drop.prevent_default_drop_behavior(); } - document.body.onkeyup = function(e) { - var key = ((e.key && String(e.key)) - || (e.charCode && String.fromCharCode(e.charCode)) - || (e.which && String.fromCharCode(e.which))).toLowerCase(); - - if (e.altKey && e.ctrlKey && key == 'i') { - $('#textanalyser').focus(); - } - if (e.altKey && e.ctrlKey && key == 'o') { - search.focus(); - } - if (e.ctrlKey && key == 'z' && e.target.nodeName !== 'INPUT') { - // TODO: rz_core.main_graph.undo(); - } - }; + keyshortcuts.install(); var intro_task_elem = $('#intro-task'); // TODO: messages (why tasks?) - this one is special but we want them to be handled in their own file. |
