summaryrefslogtreecommitdiff
path: root/assets/js/components
diff options
context:
space:
mode:
authorFrederic Guillot <fred@kanboard.net>2016-12-30 20:14:36 -0500
committerFrederic Guillot <fred@kanboard.net>2016-12-30 20:14:36 -0500
commitff79ec72c16f4a9ad1b36601172a32e48c8b21d1 (patch)
tree3225f91a9cbcd9b3a74e184c929fe62aaa66863f /assets/js/components
parente1344e3e449430ac13ef79b03bfcaa2c0c82d150 (diff)
Remove dependency on Mousetrap
Diffstat (limited to 'assets/js/components')
-rw-r--r--assets/js/components/image-slideshow.js8
-rw-r--r--assets/js/components/keyboard-shortcuts.js109
-rw-r--r--assets/js/components/select-dropdown-autocomplete.js10
-rw-r--r--assets/js/components/suggest-menu.js10
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();