diff options
Diffstat (limited to 'assets/js/components')
-rw-r--r-- | assets/js/components/image-slideshow.js | 8 | ||||
-rw-r--r-- | assets/js/components/keyboard-shortcuts.js | 109 | ||||
-rw-r--r-- | assets/js/components/select-dropdown-autocomplete.js | 10 | ||||
-rw-r--r-- | assets/js/components/suggest-menu.js | 10 |
4 files changed, 119 insertions, 18 deletions
diff --git a/assets/js/components/image-slideshow.js b/assets/js/components/image-slideshow.js index 9d3fb0ad..9db72bb9 100644 --- a/assets/js/components/image-slideshow.js +++ b/assets/js/components/image-slideshow.js @@ -2,14 +2,14 @@ KB.component('image-slideshow', function (containerElement, options) { var currentImage; function onKeyDown(e) { - switch (e.keyCode) { - case 27: + switch (KB.utils.getKey(e)) { + case 'Escape': destroySlide(); break; - case 39: + case 'ArrowRight': renderNextSlide(); break; - case 37: + case 'ArrowLeft': renderPreviousSlide(); break; } diff --git a/assets/js/components/keyboard-shortcuts.js b/assets/js/components/keyboard-shortcuts.js index 49524a76..22859bd6 100644 --- a/assets/js/components/keyboard-shortcuts.js +++ b/assets/js/components/keyboard-shortcuts.js @@ -1,4 +1,105 @@ -// Open board selector: "b" -KB.onKey(98, function () { - KB.trigger('board.selector.open'); -}); +KB.keyboardShortcuts = function () { + function goToLink (selector) { + var element = KB.find(selector); + + if (element !== null) { + window.location = element.attr('href'); + } + } + + function submitForm() { + var forms = $("form"); + + if (forms.length == 1) { + forms.submit(); + } else if (forms.length > 1) { + if (document.activeElement.tagName === 'INPUT' || document.activeElement.tagName === 'TEXTAREA') { + $(document.activeElement).parents("form").submit(); + } else if (_KB.get("Popover").isOpen()) { + $("#popover-container form").submit(); + } + } + } + + KB.onKey('?', function () { + _KB.get("Popover").open($("body").data("keyboard-shortcut-url")); + }); + + KB.onKey('Escape', function () { + if (! KB.exists('#suggest-menu')) { + _KB.get("Popover").close(); + _KB.get("Dropdown").close(); + } + }); + + KB.onKey('Meta+Enter', submitForm, true); + KB.onKey('Control+Enter', submitForm, true); + + KB.onKey('b', function () { + KB.trigger('board.selector.open'); + }); + + if (KB.exists('#board')) { + KB.onKey('c', function () { + _KB.get('BoardHorizontalScrolling').toggle(); + }); + + KB.onKey('s', function () { + _KB.get('BoardCollapsedMode').toggle(); + }); + + KB.onKey('n', function () { + _KB.get("Popover").open($("#board").data("task-creation-url")); + }); + } + + if (KB.exists('#task-view')) { + KB.onKey('e', function () { + _KB.get("Popover").open(KB.find('#task-view').data('editUrl')); + }); + + KB.onKey('c', function () { + _KB.get("Popover").open(KB.find('#task-view').data('commentUrl')); + }); + + KB.onKey('s', function () { + _KB.get("Popover").open(KB.find('#task-view').data('subtaskUrl')); + }); + + KB.onKey('l', function () { + _KB.get("Popover").open(KB.find('#task-view').data('internalLinkUrl')); + }); + } + + KB.onKey('f', function () { + KB.focus('#form-search'); + }); + + KB.onKey('r', function () { + var reset = $(".filter-reset").data("filter"); + var input = $("#form-search"); + + input.val(reset); + $("form.search").submit(); + }); + + KB.onKey('v+o', function () { + goToLink('a.view-overview'); + }); + + KB.onKey('v+b', function () { + goToLink('a.view-board'); + }); + + KB.onKey('v+c', function () { + goToLink('a.view-calendar'); + }); + + KB.onKey('v+l', function () { + goToLink('a.view-listing'); + }); + + KB.onKey('v+g', function () { + goToLink('a.view-gantt'); + }); +}; diff --git a/assets/js/components/select-dropdown-autocomplete.js b/assets/js/components/select-dropdown-autocomplete.js index 5ed7ab9c..9a8df180 100644 --- a/assets/js/components/select-dropdown-autocomplete.js +++ b/assets/js/components/select-dropdown-autocomplete.js @@ -2,22 +2,22 @@ KB.component('select-dropdown-autocomplete', function(containerElement, options) var componentElement, inputElement, inputHiddenElement; function onKeyDown(e) { - switch (e.keyCode) { - case 27: + switch (KB.utils.getKey(e)) { + case 'Escape': inputElement.value = ''; destroyDropdownMenu(); break; - case 38: + case 'ArrowUp': e.preventDefault(); e.stopImmediatePropagation(); moveUp(); break; - case 40: + case 'ArrowDown': e.preventDefault(); e.stopImmediatePropagation(); moveDown(); break; - case 13: + case 'Enter': e.preventDefault(); e.stopImmediatePropagation(); insertSelectedItem(); diff --git a/assets/js/components/suggest-menu.js b/assets/js/components/suggest-menu.js index 07539d2c..238a7d77 100644 --- a/assets/js/components/suggest-menu.js +++ b/assets/js/components/suggest-menu.js @@ -1,21 +1,21 @@ KB.component('suggest-menu', function(containerElement, options) { function onKeyDown(e) { - switch (e.keyCode) { - case 27: + switch (KB.utils.getKey(e)) { + case 'Escape': destroy(); break; - case 38: + case 'ArrowUp': e.preventDefault(); e.stopImmediatePropagation(); moveUp(); break; - case 40: + case 'ArrowDown': e.preventDefault(); e.stopImmediatePropagation(); moveDown(); break; - case 13: + case 'Enter': e.preventDefault(); e.stopImmediatePropagation(); insertSelectedItem(); |