Diffdown is a real-time collaborative Markdown editor/previewer built on the AT Protocol diffdown.com
at main 119 lines 2.6 kB view raw
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}