szurubooru/public_html/js/Keyboard.js

62 lines
1.6 KiB
JavaScript
Raw Normal View History

2014-09-19 17:37:10 +02:00
var App = App || {};
App.Keyboard = function(jQuery, mousetrap, browsingSettings) {
2014-09-19 17:37:10 +02:00
2015-06-28 10:07:11 +02:00
var enabled = browsingSettings.getSettings().keyboardShortcuts;
var oldStopCallback = mousetrap.stopCallback;
mousetrap.stopCallback = function(e, element, combo, sequence) {
if (combo.indexOf('ctrl') === -1 && e.ctrlKey) {
return true;
}
if (combo.indexOf('alt') === -1 && e.altKey) {
return true;
}
if (combo.indexOf('ctrl') !== -1) {
return false;
}
var $focused = jQuery(':focus').eq(0);
if ($focused.length) {
if ($focused.prop('tagName').match(/embed|object/i)) {
return true;
}
if ($focused.prop('tagName').toLowerCase() === 'input' &&
$focused.attr('type').match(/checkbox|radio/i)) {
return false;
}
}
return oldStopCallback.apply(mousetrap, arguments);
};
function keyup(key, callback) {
unbind(key);
if (enabled) {
mousetrap.bind(key, callback, 'keyup');
}
}
function keydown(key, callback) {
unbind(key);
if (enabled) {
mousetrap.bind(key, callback);
}
}
function reset() {
mousetrap.reset();
}
function unbind(key) {
mousetrap.unbind(key, 'keyup');
mousetrap.unbind(key);
}
return {
keydown: keydown,
keyup: keyup,
reset: reset,
unbind: unbind,
};
2014-09-19 17:37:10 +02:00
};
App.DI.register('keyboard', ['jQuery', 'mousetrap', 'browsingSettings'], App.Keyboard);