combokeys
Version:
Handles keyboard shortcuts in the browser
52 lines (42 loc) • 1.22 kB
JavaScript
/* eslint-env node, browser */
/**
* adds a bindGlobal method to Combokeys that allows you to
* bind specific keyboard shortcuts that will still work
* inside a text input field
*
* usage:
* Combokeys.bindGlobal("ctrl+s", _saveChanges)
*/
module.exports = function (Combokeys) {
var globalCallbacks = {}
var originalStopCallback = Combokeys.stopCallback
var originalUnbind = Combokeys.unbind
Combokeys.stopCallback = function (e, element, combo, sequence) {
if (globalCallbacks[combo] || globalCallbacks[sequence]) {
return false
}
return originalStopCallback(e, element, combo)
}
Combokeys.bindGlobal = function (keys, callback, action) {
this.bind(keys, callback, action)
if (keys instanceof Array) {
for (var i = 0; i < keys.length; i++) {
globalCallbacks[keys[i]] = true
}
return
}
globalCallbacks[keys] = true
}
Combokeys.unbind = function (keys, action) {
originalUnbind.call(this, keys, action)
if (keys instanceof Array) {
for (var i = 0; i < keys.length; i++) {
globalCallbacks[keys[i]] = false
}
return
}
globalCallbacks[keys] = false
}
return Combokeys
}