blob: 5f37ddd0e71f1681023f4331bf6cc526a4fc2488 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
mapKeyRegistry = {}
# NOTE: "?" here for the tests.
Utils?.monitorChromeStorage "mapKeyRegistry", (value) => mapKeyRegistry = value
KeyboardUtils =
# This maps event.key key names to Vimium key names.
keyNames:
"ArrowLeft": "left", "ArrowUp": "up", "ArrowRight": "right", "ArrowDown": "down", " ": "space", "Backspace": "backspace"
init: ->
if (navigator.userAgent.indexOf("Mac") != -1)
@platform = "Mac"
else if (navigator.userAgent.indexOf("Linux") != -1)
@platform = "Linux"
else
@platform = "Windows"
getKeyChar: (event) ->
if event.key of @keyNames
@keyNames[event.key]
# It appears that event.key is not always defined (see #2453).
else if not event.key?
""
else if event.key.length == 1
event.key
else if event.key.length == 2 and "F1" <= event.key <= "F9"
event.key.toLowerCase() # F1 to F9.
else if event.key.length == 3 and "F10" <= event.key <= "F12"
event.key.toLowerCase() # F10 to F12.
else
""
getKeyCharString: (event) ->
if keyChar = @getKeyChar event
modifiers = []
keyChar = keyChar.toUpperCase() if event.shiftKey and keyChar.length == 1
# These must be in alphabetical order (to match the sorted modifier order in Commands.normalizeKey).
modifiers.push "a" if event.altKey
modifiers.push "c" if event.ctrlKey
modifiers.push "m" if event.metaKey
keyChar = [modifiers..., keyChar].join "-"
keyChar = "<#{keyChar}>" if 1 < keyChar.length
keyChar = mapKeyRegistry[keyChar] ? keyChar
keyChar
isEscape: (event) ->
# <c-[> is mapped to Escape in Vim by default.
event.key == "Escape" || @getKeyCharString(event) == "<c-[>"
isBackspace: (event) ->
event.key in ["Backspace", "Delete"]
isPrintable: (event) ->
@getKeyCharString(event)?.length == 1
KeyboardUtils.init()
root = exports ? window
root.KeyboardUtils = KeyboardUtils
|