make keyboard.js more general...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2013-06-02 01:48:09 +04:00
parent 2fe8479720
commit 3f65740c71
2 changed files with 19 additions and 18 deletions

View File

@ -147,13 +147,13 @@ var KEYBOARD_CONFIG = {
doc: 'These key bindings work in most other modes.',
// Actions...
'.next-screen': doc('Next screen',
'next-screen': doc('Next screen',
function(){
event.preventDefault()
nextScreenImages()
centerRibbons()
}),
'.prev-screen': doc('Previous screen',
'prev-screen': doc('Previous screen',
function(){
event.preventDefault()
prevScreenImages()
@ -179,7 +179,7 @@ var KEYBOARD_CONFIG = {
prevImage()
centerRibbons()
}),
ctrl: '.prev-screen',
ctrl: 'prev-screen',
},
Right: {
default: doc('Next image',
@ -198,7 +198,7 @@ var KEYBOARD_CONFIG = {
nextImage()
centerRibbons()
}),
ctrl: '.next-screen',
ctrl: 'next-screen',
},
Space: {
@ -206,14 +206,14 @@ var KEYBOARD_CONFIG = {
shift: 'Left',
// screen-oriented movement...
ctrl: 'Right',
'ctrl+shift': '.prev-screen',
'ctrl+shift': 'prev-screen',
},
Backspace: {
default: 'Left',
shift: 'Right',
// screen-oriented movement...
ctrl: 'Left',
'ctrl+shift': '.next-screen',
'ctrl+shift': 'next-screen',
},
Home: doc('First image',
function(){

View File

@ -68,7 +68,7 @@ var _SHIFT_KEYS = {
1: '!', 2: '@', 3: '#', 4: '$', 5: '%',
6:'^', 7:'&', 8: '*', 9: '(', 0: ')',
'[': '{', ']': '}i', '\\': '|',
'[': '{', ']': '}', '\\': '|',
';': ':', '\'': '"',
',': '<', '.': '>', '/': '?'
}
@ -351,14 +351,11 @@ function getKeyHandlers(key, modifiers, keybindings, modes, shifted_keys){
* - explicit key code, e.g. 65
* - key name, if present in _SPECIAL_KEYS, e.g. Enter
* - key char (uppercase), as is returned by String.fromCharCode(...) e.g. A
* - action -- any arbitrary string (recommended to start with a '.').
* - action -- any arbitrary string that is not in the above categories.
*
*
* NOTE: actions,the last case, are for alias referencing, it will never
* match a real key, but will get resolved in alias searches.
* NOTE: it is recommended to start actions with a '.' to prevent them
* from being included as keys in the generated docs.
* see: buildKeybindingsHelp(...)
* NOTE: actions,the last case, are used for alias referencing, they will
* never match a real key, but will get resolved in alias searches.
* NOTE: to rest what to use as <key-def> use toKeyCode(..) / toKeyName(..).
* NOTE: all fields are optional.
* NOTE: if a handler explicitly returns false then that will break the
@ -375,6 +372,7 @@ function getKeyHandlers(key, modifiers, keybindings, modes, shifted_keys){
* it will only assign .doc attr and return the original function.
*
* XXX need an explicit way to prioritize modes...
* XXX will aliases get resolved if they are in a different mode??
*/
function makeKeyboardHandler(keybindings, unhandled){
if(unhandled == null){
@ -436,8 +434,7 @@ function makeKeyboardHandler(keybindings, unhandled){
* <keys-spec> - list of key names.
*
*
* NOTE: this will not add keys (key names) that start with a '.', these
* are actions, intended for aliasing.
* NOTE: this will not add keys (key names) that are not explicit key names.
*/
function buildKeybindingsHelp(keybindings, shifted_keys){
shifted_keys = shifted_keys == null ? _SHIFT_KEYS : shifted_keys
@ -502,10 +499,14 @@ function buildKeybindingsHelp(keybindings, shifted_keys){
key = shifted_keys[key]
}
// skip keys that start with a dot...
if(!/\..+/.test(key)){
keys.push((mod == '' || mod == 'default') ? key : (mod +'+'+ key))
// skip anything that is not a key...
//if(key.length > 1 && (!(key in _KEY_CODES) || /\..+/.test(key))){
if(key.length > 1 && !(key in _KEY_CODES)){
console.log('### skipping:', key)
continue
}
keys.push((mod == '' || mod == 'default') ? key : (mod +'+'+ key))
}
}