From b31eff04aa945c9d8054d88f5c771269dc5cddfa Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Thu, 20 Jun 2019 20:52:58 +0000 Subject: [PATCH] Split list and editor logic --- architype.js | 104 +++++++++++++++++++++++++++------------------------ 1 file changed, 56 insertions(+), 48 deletions(-) diff --git a/architype.js b/architype.js index 99b78de..3e5b4c7 100644 --- a/architype.js +++ b/architype.js @@ -18,7 +18,7 @@ class ListenUtils { } } -class Editor { +class List { constructor(container) { this.container_ = container; } @@ -105,6 +105,52 @@ class Editor { elem.focus(); } + onKeyDown(e) { + switch (e.key) { + case 'd': + this.deleteSelected(); + return; + + case 'D': + this.deleteSelectedAndAfter(); + return; + + case 'j': + case 'ArrowDown': + this.selectNext(); + e.preventDefault(); + return; + + case 'k': + case 'ArrowUp': + this.selectPrev(); + e.preventDefault(); + return; + + case 'PageUp': + this.selectPrevPage(); + e.preventDefault(); + return; + + case 'PageDown': + this.selectNextPage(); + e.preventDefault(); + return; + + case 'Home': + this.selectFirst(); + e.preventDefault(); + return; + + case 'End': + this.selectLast(); + e.preventDefault(); + return; + } + } +} + +class Editor extends List { addNodeAfter() { Node.addAfter(this.container_, this.getSelected()); } @@ -120,69 +166,31 @@ class Editor { addGroupBefore() { Group.addBefore(this.container_, this.getSelected()); } - + onKeyDown(e) { switch (e.key) { - case 'd': - this.deleteSelected(); - break; - - case 'D': - this.deleteSelectedAndAfter(); - break; - case 'g': this.addGroupAfter(); e.preventDefault(); - break; - + return; + case 'G': this.addGroupBefore(); e.preventDefault(); - break; - - case 'j': - case 'ArrowDown': - this.selectNext(); - e.preventDefault(); - break; - - case 'k': - case 'ArrowUp': - this.selectPrev(); - e.preventDefault(); - break; + return; case 'n': this.addNodeAfter(); e.preventDefault(); - break; + return; case 'N': this.addNodeBefore(); e.preventDefault(); - break; - - case 'PageUp': - this.selectPrevPage(); - e.preventDefault(); - break; - - case 'PageDown': - this.selectNextPage(); - e.preventDefault(); - break; - - case 'Home': - this.selectFirst(); - e.preventDefault(); - break; - - case 'End': - this.selectLast(); - e.preventDefault(); - break; + return; } + + super.onKeyDown(e); } } @@ -375,4 +383,4 @@ class Group extends EditorEntryBase { } let editor = new Editor(document.getElementById('definition')); -document.addEventListener('keydown', e => { editor.onKeyDown(e); }); +document.addEventListener('keydown', e => { editor.onKeyDown(e); }); \ No newline at end of file