1 { interfaces: Ci } = Components
5 # Extract keyChar from keyCode taking into account the shift modifier
6 keyCharFromCode = (keyCode, shiftKey = false) ->
8 if keyCode >= KE.DOM_VK_A and keyCode <= KE.DOM_VK_Z
9 keyChar = String.fromCharCode(keyCode)
11 keyChar = keyChar.toUpperCase()
13 keyChar = keyChar.toLowerCase()
15 fn = (code, codeWithShift, char, charWithShift) ->
17 return if shiftKey then charWithShift else char
18 else if keyCode == codeWithShift
22 [ KE.DOM_VK_ESCAPE, KE.DOM_VK_ESCAPE, 'Esc', 'Shift-Esc' ],
23 [ KE.DOM_VK_BACK_SPACE, KE.DOM_VK_BACK_SPACE, 'Backspace', 'Shift-Backspace' ],
24 [ KE.DOM_VK_SPACE, KE.DOM_VK_SPACE, 'Space', 'Shift-Space' ],
25 [ KE.DOM_VK_TAB, KE.DOM_VK_TAB, 'Tab', 'Shift-Tab' ],
26 [ KE.DOM_VK_RETURN, KE.DOM_VK_RETURN, 'Return', 'Shift-Return' ],
28 [ KE.DOM_VK_1, KE.DOM_VK_EXCLAMATION, '1', '!' ],
29 [ KE.DOM_VK_2, KE.DOM_VK_AT, '2', '@' ],
30 [ KE.DOM_VK_3, KE.DOM_VK_HASH, '3', '#' ],
31 [ KE.DOM_VK_4, KE.DOM_VK_DOLLAR, '4', '$' ],
32 [ KE.DOM_VK_5, KE.DOM_VK_PERCENT, '5', '%' ],
33 [ KE.DOM_VK_6, KE.DOM_VK_CIRCUMFLEX, '6', '^' ],
34 [ KE.DOM_VK_7, KE.DOM_VK_AMPERSAND, '7', '&' ],
35 [ KE.DOM_VK_8, KE.DOM_VK_ASTERISK, '8', '*' ],
36 [ KE.DOM_VK_9, KE.DOM_VK_OPEN_PAREN, '9', '(' ],
37 [ KE.DOM_VK_0, KE.DOM_VK_CLOSE_PAREN, '0', ')' ],
39 [ KE.DOM_VK_OPEN_BRACKET, KE.DOM_VK_OPEN_CURLY_BRACKET, '[', '{' ],
40 [ KE.DOM_VK_CLOSE_BRACKET, KE.DOM_VK_CLOSE_CURLY_BRACKET, ']', '}' ],
41 [ KE.DOM_VK_SEMICOLON, KE.DOM_VK_COLON, ';', ':' ],
42 [ KE.DOM_VK_QUOTE, KE.DOM_VK_DOUBLEQUOTE, "'", '"' ],
43 [ KE.DOM_VK_BACK_QUOTE, KE.DOM_VK_TILDE, '`', '~' ],
44 [ KE.DOM_VK_BACK_SLASH, KE.DOM_VK_PIPE, '\\', '|' ],
45 [ KE.DOM_VK_COMMA, KE.DOM_VK_LESS_THAN, ',', '<' ],
46 [ KE.DOM_VK_PERIOD, KE.DOM_VK_GREATER_THAN, '.', '>' ],
47 [ KE.DOM_VK_SLASH, KE.DOM_VK_QUESTION_MARK, '/', '?' ],
48 [ KE.DOM_VK_HYPHEN_MINUS, KE.DOM_VK_UNDERSCORE, '-', '_' ],
49 [ KE.DOM_VK_EQUALS, KE.DOM_VK_PLUS, '=', '+' ],
59 # Format keyChar that arrives during `keypress` into keyStr
60 applyModifiers = (keyChar, ctrlKey = false, altKey = false, metaKey = false) ->
65 modifier += 'c' if ctrlKey
66 modifier += 'm' if metaKey
67 modifier += 'a' if altKey
69 if modifier.length > 0
70 return "#{ modifier }-#{ keyChar }"
74 exports.keyCharFromCode = keyCharFromCode
75 exports.applyModifiers = applyModifiers