From 6d650b2ba07078b113ddeda89d6cf15ea56cd0c2 Mon Sep 17 00:00:00 2001 From: Alon Levy Date: Tue, 3 Mar 2015 23:43:59 +0200 Subject: 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). --- src/client/keyshortcuts.js | 40 ++++++++++++++++++++++++++++++++++++++++ src/client/main.js | 20 +++----------------- 2 files changed, 43 insertions(+), 17 deletions(-) create mode 100644 src/client/keyshortcuts.js (limited to 'src') 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. -- cgit v1.3.1