From 9c1b8da5730aefb7fb594df522dbf4eb70b3ae83 Mon Sep 17 00:00:00 2001 From: azivner Date: Mon, 26 Mar 2018 23:25:54 -0400 Subject: [PATCH] split out keybindings out of tree service --- src/public/javascripts/services/tree.js | 146 +----------------- .../javascripts/services/tree_keybindings.js | 137 ++++++++++++++++ 2 files changed, 143 insertions(+), 140 deletions(-) create mode 100644 src/public/javascripts/services/tree_keybindings.js diff --git a/src/public/javascripts/services/tree.js b/src/public/javascripts/services/tree.js index 5b48dfda2..35f912ce1 100644 --- a/src/public/javascripts/services/tree.js +++ b/src/public/javascripts/services/tree.js @@ -9,10 +9,10 @@ import treeUtils from './tree_utils.js'; import utils from './utils.js'; import server from './server.js'; import recentNotesDialog from '../dialogs/recent_notes.js'; -import editTreePrefixDialog from '../dialogs/edit_tree_prefix.js'; import treeCache from './tree_cache.js'; import infoService from "./info.js"; import treeBuilder from "./tree_builder.js"; +import treeKeyBindings from "./tree_keybindings.js"; import Branch from '../entities/branch.js'; const $tree = $("#tree"); @@ -287,135 +287,6 @@ async function treeInitialized() { function initFancyTree(branch) { utils.assertArguments(branch); - const keybindings = { - "del": node => { - treeChangesService.deleteNodes(getSelectedNodes(true)); - }, - "ctrl+up": node => { - const beforeNode = node.getPrevSibling(); - - if (beforeNode !== null) { - treeChangesService.moveBeforeNode([node], beforeNode); - } - - return false; - }, - "ctrl+down": node => { - let afterNode = node.getNextSibling(); - if (afterNode !== null) { - treeChangesService.moveAfterNode([node], afterNode); - } - - return false; - }, - "ctrl+left": node => { - treeChangesService.moveNodeUpInHierarchy(node); - - return false; - }, - "ctrl+right": node => { - let toNode = node.getPrevSibling(); - - if (toNode !== null) { - treeChangesService.moveToNode([node], toNode); - } - - return false; - }, - "shift+up": node => { - node.navigate($.ui.keyCode.UP, true).then(() => { - const currentNode = getCurrentNode(); - - if (currentNode.isSelected()) { - node.setSelected(false); - } - - currentNode.setSelected(true); - }); - - return false; - }, - "shift+down": node => { - node.navigate($.ui.keyCode.DOWN, true).then(() => { - const currentNode = getCurrentNode(); - - if (currentNode.isSelected()) { - node.setSelected(false); - } - - currentNode.setSelected(true); - }); - - return false; - }, - "f2": node => { - editTreePrefixDialog.showDialog(node); - }, - "alt+-": node => { - collapseTree(node); - }, - "alt+s": node => { - sortAlphabetically(node.data.noteId); - - return false; - }, - "ctrl+a": node => { - for (const child of node.getParent().getChildren()) { - child.setSelected(true); - } - - return false; - }, - "ctrl+c": () => { - contextMenuService.copy(getSelectedNodes()); - - return false; - }, - "ctrl+x": () => { - contextMenuService.cut(getSelectedNodes()); - - return false; - }, - "ctrl+v": node => { - contextMenuService.pasteInto(node); - - return false; - }, - "return": node => { - noteDetailService.focus(); - - return false; - }, - "backspace": node => { - if (!utils.isTopLevelNode(node)) { - node.getParent().setActive().then(clearSelectedNodes); - } - }, - // code below shouldn't be necessary normally, however there's some problem with interaction with context menu plugin - // after opening context menu, standard shortcuts don't work, but they are detected here - // so we essentially takeover the standard handling with our implementation. - "left": node => { - node.navigate($.ui.keyCode.LEFT, true).then(clearSelectedNodes); - - return false; - }, - "right": node => { - node.navigate($.ui.keyCode.RIGHT, true).then(clearSelectedNodes); - - return false; - }, - "up": node => { - node.navigate($.ui.keyCode.UP, true).then(clearSelectedNodes); - - return false; - }, - "down": node => { - node.navigate($.ui.keyCode.DOWN, true).then(clearSelectedNodes); - - return false; - } - }; - $tree.fancytree({ autoScroll: true, keyboard: false, // we takover keyboard handling in the hotkeys plugin @@ -449,17 +320,11 @@ function initFancyTree(branch) { showParentList(node.noteId, data.node); }, - expand: (event, data) => { - setExpandedToServer(data.node.data.branchId, true); - }, - collapse: (event, data) => { - setExpandedToServer(data.node.data.branchId, false); - }, - init: (event, data) => { - treeInitialized(); - }, + expand: (event, data) => setExpandedToServer(data.node.data.branchId, true), + collapse: (event, data) => setExpandedToServer(data.node.data.branchId, false), + init: (event, data) => treeInitialized, hotkeys: { - keydown: keybindings + keydown: treeKeyBindings }, filter: { autoApply: true, // Re-apply last filter if lazy data is loaded @@ -704,6 +569,7 @@ export default { createNewTopLevelNote, createNote, getSelectedNodes, + clearSelectedNodes, sortAlphabetically, showTree }; \ No newline at end of file diff --git a/src/public/javascripts/services/tree_keybindings.js b/src/public/javascripts/services/tree_keybindings.js new file mode 100644 index 000000000..2e298355f --- /dev/null +++ b/src/public/javascripts/services/tree_keybindings.js @@ -0,0 +1,137 @@ +import noteDetailService from "./note_detail.js"; +import utils from "./utils.js"; +import treeChangesService from "./tree_changes.js"; +import contextMenuService from "./context_menu.js"; +import treeService from "./tree.js"; +import editTreePrefixDialog from "../dialogs/edit_tree_prefix.js"; + +const keyBindings = { + "del": node => { + treeChangesService.deleteNodes(getSelectedNodes(true)); + }, + "ctrl+up": node => { + const beforeNode = node.getPrevSibling(); + + if (beforeNode !== null) { + treeChangesService.moveBeforeNode([node], beforeNode); + } + + return false; + }, + "ctrl+down": node => { + let afterNode = node.getNextSibling(); + if (afterNode !== null) { + treeChangesService.moveAfterNode([node], afterNode); + } + + return false; + }, + "ctrl+left": node => { + treeChangesService.moveNodeUpInHierarchy(node); + + return false; + }, + "ctrl+right": node => { + let toNode = node.getPrevSibling(); + + if (toNode !== null) { + treeChangesService.moveToNode([node], toNode); + } + + return false; + }, + "shift+up": node => { + node.navigate($.ui.keyCode.UP, true).then(() => { + const currentNode = getCurrentNode(); + + if (currentNode.isSelected()) { + node.setSelected(false); + } + + currentNode.setSelected(true); + }); + + return false; + }, + "shift+down": node => { + node.navigate($.ui.keyCode.DOWN, true).then(() => { + const currentNode = treeService.getCurrentNode(); + + if (currentNode.isSelected()) { + node.setSelected(false); + } + + currentNode.setSelected(true); + }); + + return false; + }, + "f2": node => { + editTreePrefixDialog.showDialog(node); + }, + "alt+-": node => { + treeService.collapseTree(node); + }, + "alt+s": node => { + treeService.sortAlphabetically(node.data.noteId); + + return false; + }, + "ctrl+a": node => { + for (const child of node.getParent().getChildren()) { + child.setSelected(true); + } + + return false; + }, + "ctrl+c": () => { + contextMenuService.copy(treeService.getSelectedNodes()); + + return false; + }, + "ctrl+x": () => { + contextMenuService.cut(treeService.getSelectedNodes()); + + return false; + }, + "ctrl+v": node => { + contextMenuService.pasteInto(node); + + return false; + }, + "return": node => { + noteDetailService.focus(); + + return false; + }, + "backspace": node => { + if (!utils.isTopLevelNode(node)) { + node.getParent().setActive().then(treeService.clearSelectedNodes); + } + }, + // code below shouldn't be necessary normally, however there's some problem with interaction with context menu plugin + // after opening context menu, standard shortcuts don't work, but they are detected here + // so we essentially takeover the standard handling with our implementation. + "left": node => { + node.navigate($.ui.keyCode.LEFT, true).then(treeService.clearSelectedNodes); + + return false; + }, + "right": node => { + node.navigate($.ui.keyCode.RIGHT, true).then(treeService.clearSelectedNodes); + + return false; + }, + "up": node => { + node.navigate($.ui.keyCode.UP, true).then(treeService.clearSelectedNodes); + + return false; + }, + "down": node => { + node.navigate($.ui.keyCode.DOWN, true).then(treeService.clearSelectedNodes); + + return false; + } +}; + +export default keyBindings; \ No newline at end of file