Diffdown is a real-time collaborative Markdown editor/previewer built on the AT Protocol
diffdown.com
1export var base = {
2 8: "Backspace",
3 9: "Tab",
4 10: "Enter",
5 12: "NumLock",
6 13: "Enter",
7 16: "Shift",
8 17: "Control",
9 18: "Alt",
10 20: "CapsLock",
11 27: "Escape",
12 32: " ",
13 33: "PageUp",
14 34: "PageDown",
15 35: "End",
16 36: "Home",
17 37: "ArrowLeft",
18 38: "ArrowUp",
19 39: "ArrowRight",
20 40: "ArrowDown",
21 44: "PrintScreen",
22 45: "Insert",
23 46: "Delete",
24 59: ";",
25 61: "=",
26 91: "Meta",
27 92: "Meta",
28 106: "*",
29 107: "+",
30 108: ",",
31 109: "-",
32 110: ".",
33 111: "/",
34 144: "NumLock",
35 145: "ScrollLock",
36 160: "Shift",
37 161: "Shift",
38 162: "Control",
39 163: "Control",
40 164: "Alt",
41 165: "Alt",
42 173: "-",
43 186: ";",
44 187: "=",
45 188: ",",
46 189: "-",
47 190: ".",
48 191: "/",
49 192: "`",
50 219: "[",
51 220: "\\",
52 221: "]",
53 222: "'"
54}
55
56export var shift = {
57 48: ")",
58 49: "!",
59 50: "@",
60 51: "#",
61 52: "$",
62 53: "%",
63 54: "^",
64 55: "&",
65 56: "*",
66 57: "(",
67 59: ":",
68 61: "+",
69 173: "_",
70 186: ":",
71 187: "+",
72 188: "<",
73 189: "_",
74 190: ">",
75 191: "?",
76 192: "~",
77 219: "{",
78 220: "|",
79 221: "}",
80 222: "\""
81}
82
83var mac = typeof navigator != "undefined" && /Mac/.test(navigator.platform)
84var ie = typeof navigator != "undefined" && /MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent)
85
86// Fill in the digit keys
87for (var i = 0; i < 10; i++) base[48 + i] = base[96 + i] = String(i)
88
89// The function keys
90for (var i = 1; i <= 24; i++) base[i + 111] = "F" + i
91
92// And the alphabetic keys
93for (var i = 65; i <= 90; i++) {
94 base[i] = String.fromCharCode(i + 32)
95 shift[i] = String.fromCharCode(i)
96}
97
98// For each code that doesn't have a shift-equivalent, copy the base name
99for (var code in base) if (!shift.hasOwnProperty(code)) shift[code] = base[code]
100
101export function keyName(event) {
102 // On macOS, keys held with Shift and Cmd don't reflect the effect of Shift in `.key`.
103 // On IE, shift effect is never included in `.key`.
104 var ignoreKey = mac && event.metaKey && event.shiftKey && !event.ctrlKey && !event.altKey ||
105 ie && event.shiftKey && event.key && event.key.length == 1 ||
106 event.key == "Unidentified"
107 var name = (!ignoreKey && event.key) ||
108 (event.shiftKey ? shift : base)[event.keyCode] ||
109 event.key || "Unidentified"
110 // Edge sometimes produces wrong names (Issue #3)
111 if (name == "Esc") name = "Escape"
112 if (name == "Del") name = "Delete"
113 // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8860571/
114 if (name == "Left") name = "ArrowLeft"
115 if (name == "Up") name = "ArrowUp"
116 if (name == "Right") name = "ArrowRight"
117 if (name == "Down") name = "ArrowDown"
118 return name
119}