mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-29 10:20:08 +00:00
split out modifier normalization in keyboard.js...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
34d9ab4ba2
commit
15bf8173be
@ -115,6 +115,39 @@ function doc(text, func){
|
||||
}
|
||||
|
||||
|
||||
// Build or normalize a modifier string.
|
||||
//
|
||||
// Acceptable argument sets:
|
||||
// - none -> ""
|
||||
// - true, false, true -> "ctrl+shift"
|
||||
// - true, false -> "ctrl"
|
||||
// - [true, false] -> "ctrl"
|
||||
// - 'alt+shift' -> "alt+shift"
|
||||
// - 'shift - alt' -> "alt+shift"
|
||||
//
|
||||
function normalizeModifiers(c, a, s){
|
||||
if(c != null && c.constructor.name == 'Array'){
|
||||
a = c[1]
|
||||
s = c[2]
|
||||
c = c[0]
|
||||
}
|
||||
if(typeof(c) == typeof('str')){
|
||||
var modifiers = c
|
||||
} else {
|
||||
var modifiers = (c ? 'ctrl' : '')
|
||||
+ (a ? ' alt' : '')
|
||||
+ (s ? ' shift' : '')
|
||||
}
|
||||
|
||||
// build the dormalized modifier string...
|
||||
var res = /ctrl/i.test(modifiers) ? 'ctrl' : ''
|
||||
res += /alt/i.test(modifiers) ? (res != '' ? '+alt' : 'alt') : ''
|
||||
res += /shift/i.test(modifiers) ? (res != '' ? '+shift' : 'shift') : ''
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
|
||||
/* Key handler getter
|
||||
*
|
||||
* For doc on format see makeKeyboardHandler(...)
|
||||
@ -135,6 +168,8 @@ function doc(text, func){
|
||||
* Ex:
|
||||
* 'ctrl+shift'
|
||||
* NOTE: 'shift+ctrl' is wrong.
|
||||
* NOTE: normalizeModifiers(...) can be used as
|
||||
* a reference, if in doubt.
|
||||
*
|
||||
* This will also resolve several shifted keys by name, for example:
|
||||
* 'shift-/' is the same as '?', and either can be used, but the shorter
|
||||
@ -153,6 +188,8 @@ function doc(text, func){
|
||||
* present in the resulting object.
|
||||
* NOTE: this will not unwrap lisp-style (see below) handlers.
|
||||
* NOTE: modes are prioritized by order of occurrence.
|
||||
* NOTE: modifiers can be a list of three bools...
|
||||
* (see: normalizeModifiers(...) for further information)
|
||||
*
|
||||
* XXX need an explicit way to prioritize modes, avoiding object attr
|
||||
* ordering...
|
||||
@ -166,6 +203,7 @@ function getKeyHandlers(key, modifiers, keybindings, modes, shifted_keys){
|
||||
var s_chr = null
|
||||
var did_handling = false
|
||||
modifiers = modifiers == null ? '' : modifiers
|
||||
modifiers = modifiers != '?' ? normalizeModifiers(modifiers) : modifiers
|
||||
modes = modes == null ? 'any' : modes
|
||||
shifted_keys = shifted_keys == null ? _SHIFT_KEYS : shifted_keys
|
||||
|
||||
@ -342,12 +380,14 @@ function getKeyHandlers(key, modifiers, keybindings, modes, shifted_keys){
|
||||
* default: <callback> | <key-def-x>,
|
||||
*
|
||||
* // a modifier can be any single modifier, like shift or a
|
||||
* // combination of modifiers like 'ctrl+shift', given in order
|
||||
* // combination of modifiers like 'ctrl+shift', in order
|
||||
* // of priority.
|
||||
* // supported modifiers are (in order of priority):
|
||||
* // supported modifiers, ordered by priority, are:
|
||||
* // - ctrl
|
||||
* // - alt
|
||||
* // - shift
|
||||
* // NOTE: if in doubt use normalizeModifiers(..) as a
|
||||
* // reference...
|
||||
* <modifer>: [...],
|
||||
* ...
|
||||
* },
|
||||
@ -402,10 +442,8 @@ function makeKeyboardHandler(keybindings, unhandled){
|
||||
// key data...
|
||||
var key = evt.keyCode
|
||||
|
||||
// normalize the modifiers...
|
||||
var modifiers = evt.ctrlKey ? 'ctrl' : ''
|
||||
modifiers += evt.altKey ? (modifiers != '' ? '+alt' : 'alt') : ''
|
||||
modifiers += evt.shiftKey ? (modifiers != '' ? '+shift' : 'shift') : ''
|
||||
// get modifiers...
|
||||
var modifiers = [evt.ctrlKey, evt.altKey, evt.shiftKey]
|
||||
|
||||
//window.DEBUG && console.log('KEY:', key, chr, modifiers)
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user