Improve keyboard shortcuts handling
This commit is contained in:
parent
d459bec035
commit
d0dad82a27
|
|
@ -3,6 +3,7 @@ Version 1.0.37 (unreleased)
|
|||
|
||||
Improvements:
|
||||
|
||||
* Improve keyboard shortcuts handling
|
||||
* Larger task form
|
||||
* Rewrite dialog and confirmation boxes (inline popup)
|
||||
* Remove TaskGanttCreationController
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -1,9 +1,11 @@
|
|||
KB.keyboardShortcuts = function () {
|
||||
function goToLink (selector) {
|
||||
var element = KB.find(selector);
|
||||
if (! KB.modal.isOpen()) {
|
||||
var element = KB.find(selector);
|
||||
|
||||
if (element !== null) {
|
||||
window.location = element.attr('href');
|
||||
if (element !== null) {
|
||||
window.location = element.attr('href');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -22,7 +24,9 @@ KB.keyboardShortcuts = function () {
|
|||
}
|
||||
|
||||
KB.onKey('?', function () {
|
||||
KB.modal.open(KB.find('body').data('keyboardShortcutUrl'));
|
||||
if (! KB.modal.isOpen()) {
|
||||
KB.modal.open(KB.find('body').data('keyboardShortcutUrl'));
|
||||
}
|
||||
});
|
||||
|
||||
KB.onKey('Escape', function () {
|
||||
|
|
@ -32,55 +36,75 @@ KB.keyboardShortcuts = function () {
|
|||
}
|
||||
});
|
||||
|
||||
KB.onKey('Meta+Enter', submitForm, true);
|
||||
KB.onKey('Control+Enter', submitForm, true);
|
||||
KB.onKey('Enter', submitForm, true, true);
|
||||
KB.onKey('Enter', submitForm, true, false, true);
|
||||
|
||||
KB.onKey('b', function () {
|
||||
KB.trigger('board.selector.open');
|
||||
if (! KB.modal.isOpen()) {
|
||||
KB.trigger('board.selector.open');
|
||||
}
|
||||
});
|
||||
|
||||
if (KB.exists('#board')) {
|
||||
KB.onKey('c', function () {
|
||||
_KB.get('BoardHorizontalScrolling').toggle();
|
||||
if (! KB.modal.isOpen()) {
|
||||
_KB.get('BoardHorizontalScrolling').toggle();
|
||||
}
|
||||
});
|
||||
|
||||
KB.onKey('s', function () {
|
||||
_KB.get('BoardCollapsedMode').toggle();
|
||||
if (! KB.modal.isOpen()) {
|
||||
_KB.get('BoardCollapsedMode').toggle();
|
||||
}
|
||||
});
|
||||
|
||||
KB.onKey('n', function () {
|
||||
KB.modal.open(KB.find('#board').data('taskCreationUrl'), 'large', false);
|
||||
if (! KB.modal.isOpen()) {
|
||||
KB.modal.open(KB.find('#board').data('taskCreationUrl'), 'large', false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (KB.exists('#task-view')) {
|
||||
KB.onKey('e', function () {
|
||||
KB.modal.open(KB.find('#task-view').data('editUrl'), 'large');
|
||||
if (! KB.modal.isOpen()) {
|
||||
KB.modal.open(KB.find('#task-view').data('editUrl'), 'large', false);
|
||||
}
|
||||
});
|
||||
|
||||
KB.onKey('c', function () {
|
||||
KB.modal.open(KB.find('#task-view').data('commentUrl'));
|
||||
if (! KB.modal.isOpen()) {
|
||||
KB.modal.open(KB.find('#task-view').data('commentUrl'), 'medium', false);
|
||||
}
|
||||
});
|
||||
|
||||
KB.onKey('s', function () {
|
||||
KB.modal.open(KB.find('#task-view').data('subtaskUrl'));
|
||||
if (! KB.modal.isOpen()) {
|
||||
KB.modal.open(KB.find('#task-view').data('subtaskUrl'), 'medium', false);
|
||||
}
|
||||
});
|
||||
|
||||
KB.onKey('l', function () {
|
||||
KB.modal.open(KB.find('#task-view').data('internalLinkUrl'));
|
||||
if (! KB.modal.isOpen()) {
|
||||
KB.modal.open(KB.find('#task-view').data('internalLinkUrl'), 'medium', false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
KB.onKey('f', function () {
|
||||
KB.focus('#form-search');
|
||||
if (! KB.modal.isOpen()) {
|
||||
KB.focus('#form-search');
|
||||
}
|
||||
});
|
||||
|
||||
KB.onKey('r', function () {
|
||||
var reset = $(".filter-reset").data("filter");
|
||||
var input = $("#form-search");
|
||||
if (! KB.modal.isOpen()) {
|
||||
var reset = $(".filter-reset").data("filter");
|
||||
var input = $("#form-search");
|
||||
|
||||
input.val(reset);
|
||||
$("form.search").submit();
|
||||
input.val(reset);
|
||||
$("form.search").submit();
|
||||
}
|
||||
});
|
||||
|
||||
KB.onKey('v+o', function () {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ var KB = {
|
|||
listeners: {
|
||||
clicks: {},
|
||||
changes: {},
|
||||
keys: {},
|
||||
keys: [],
|
||||
internals: {}
|
||||
}
|
||||
};
|
||||
|
|
@ -35,11 +35,14 @@ KB.onChange = function (selector, callback) {
|
|||
this.listeners.changes[selector] = callback;
|
||||
};
|
||||
|
||||
KB.onKey = function (key, callback, ignoreInputField) {
|
||||
this.listeners.keys[key] = {
|
||||
KB.onKey = function (combination, callback, ignoreInputField, ctrlKey, metaKey) {
|
||||
this.listeners.keys.push({
|
||||
'combination': combination,
|
||||
'callback': callback,
|
||||
'ignoreInputField': ignoreInputField || false
|
||||
};
|
||||
'ignoreInputField': ignoreInputField || false,
|
||||
'ctrlKey': ctrlKey || false,
|
||||
'metaKey': metaKey || false
|
||||
});
|
||||
};
|
||||
|
||||
KB.listen = function () {
|
||||
|
|
@ -67,32 +70,32 @@ KB.listen = function () {
|
|||
var key = KB.utils.getKey(e);
|
||||
var isInputField = KB.utils.isInputField(e);
|
||||
|
||||
if (! isInputField || ['Escape', 'Meta', 'Enter', 'Control'].indexOf(key) !== -1) {
|
||||
if (! isInputField || ['Escape', 'Enter'].indexOf(key) !== -1) {
|
||||
keysQueue.push(key);
|
||||
}
|
||||
|
||||
if (keysQueue.length > 0) {
|
||||
var reset = true;
|
||||
|
||||
for (var combination in self.listeners.keys) {
|
||||
if (self.listeners.keys.hasOwnProperty(combination)) {
|
||||
var keyboardListener = self.listeners.keys[combination];
|
||||
var sequence = combination.split('+');
|
||||
for (var i = 0; i < self.listeners.keys.length; i++) {
|
||||
var params = self.listeners.keys[i];
|
||||
var combination = params.combination;
|
||||
var sequence = combination.split('+');
|
||||
|
||||
if (KB.utils.arraysIdentical(keysQueue, sequence)) {
|
||||
if (isInputField && !keyboardListener.ignoreInputField) {
|
||||
keysQueue = [];
|
||||
return;
|
||||
}
|
||||
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
if (KB.utils.arraysIdentical(keysQueue, sequence) &&
|
||||
e.ctrlKey === params.ctrlKey && e.metaKey === params.metaKey) {
|
||||
if (isInputField && !params.ignoreInputField) {
|
||||
keysQueue = [];
|
||||
keyboardListener.callback(e);
|
||||
break;
|
||||
} else if (KB.utils.arraysStartsWith(keysQueue, sequence)) {
|
||||
reset = false;
|
||||
return;
|
||||
}
|
||||
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
keysQueue = [];
|
||||
params.callback(e);
|
||||
break;
|
||||
} else if (KB.utils.arraysStartsWith(keysQueue, sequence) && keysQueue.length < sequence.length) {
|
||||
reset = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -113,6 +113,7 @@
|
|||
}
|
||||
|
||||
function destroy() {
|
||||
isOpen = false;
|
||||
var overlayElement = KB.find('#modal-overlay');
|
||||
|
||||
if (overlayElement) {
|
||||
|
|
@ -156,7 +157,6 @@
|
|||
});
|
||||
},
|
||||
close: function () {
|
||||
isOpen = false;
|
||||
destroy();
|
||||
},
|
||||
isOpen: function () {
|
||||
|
|
|
|||
Loading…
Reference in New Issue