From 3e891c9c0be6873e036abb205230a6809ed94237 Mon Sep 17 00:00:00 2001 From: dtw-waleee Date: Mon, 14 Oct 2019 20:55:06 +0200 Subject: [PATCH 1/3] Fix keyboard layout issue with help-modal Some keyboard layouts produces a different ev.which value in firefox for ? than 191, eg. the Swedish QWERTY one produces 171. Chrome/chromium doesn't have this issue. --- lib/std/special/docs/main.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/lib/std/special/docs/main.js b/lib/std/special/docs/main.js index 3650d46ec..caa675167 100644 --- a/lib/std/special/docs/main.js +++ b/lib/std/special/docs/main.js @@ -1210,9 +1210,20 @@ renderSearchCursor(); } + function getKeyValue(ev) { + if("key" in ev && typeof ev.key != "undefined") { + return ev.key + } + var code = ev.charCode || ev.keyCode; + if(code == 27) { + return "escape" + } + return String.fromCharCode(code) + } + function onWindowKeyDown(ev) { - switch (ev.which) { - case 27: + switch (getKeyValue(ev)) { + case "escape": if (ev.shiftKey || ev.ctrlKey || ev.altKey) return; if (!domHelpModal.classList.contains("hidden")) { domHelpModal.classList.add("hidden"); @@ -1220,7 +1231,7 @@ ev.stopPropagation(); } break; - case 83: + case "s": if (ev.shiftKey || ev.ctrlKey || ev.altKey) return; domSearch.focus(); domSearch.select(); @@ -1228,7 +1239,7 @@ ev.stopPropagation(); startAsyncSearch(); break; - case 191: + case "?": if (!ev.shiftKey || ev.ctrlKey || ev.altKey) return; ev.preventDefault(); ev.stopPropagation(); From 725c873e81460ce2b19bde98fae4473e4321c9fb Mon Sep 17 00:00:00 2001 From: dtw-waleee Date: Tue, 15 Oct 2019 19:35:53 +0200 Subject: [PATCH 2/3] fix small misstake, 'escape' v. 'Escape' --- lib/std/special/docs/main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/std/special/docs/main.js b/lib/std/special/docs/main.js index caa675167..409fc7322 100644 --- a/lib/std/special/docs/main.js +++ b/lib/std/special/docs/main.js @@ -1216,14 +1216,14 @@ } var code = ev.charCode || ev.keyCode; if(code == 27) { - return "escape" + return "Escape" } return String.fromCharCode(code) } function onWindowKeyDown(ev) { switch (getKeyValue(ev)) { - case "escape": + case "Escape": if (ev.shiftKey || ev.ctrlKey || ev.altKey) return; if (!domHelpModal.classList.contains("hidden")) { domHelpModal.classList.add("hidden"); From e6ca61bdd1031f13bd98bfe60bac6ef36f2cebbd Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Tue, 15 Oct 2019 18:37:09 -0400 Subject: [PATCH 3/3] generated docs: further clean up keyboard shortcut handling now it's harder to introduce a bug when modifying keyboard shortcut code. --- lib/std/special/docs/main.js | 58 +++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/lib/std/special/docs/main.js b/lib/std/special/docs/main.js index 409fc7322..58c956b3f 100644 --- a/lib/std/special/docs/main.js +++ b/lib/std/special/docs/main.js @@ -1141,10 +1141,8 @@ } function onSearchKeyDown(ev) { - switch (ev.which) { - case 13: - if (ev.shiftKey || ev.ctrlKey || ev.altKey) return; - + switch (getKeyString(ev)) { + case "Enter": // detect if this search changes anything var terms1 = getSearchTerms(); startSearch(); @@ -1157,9 +1155,7 @@ ev.preventDefault(); ev.stopPropagation(); return; - case 27: - if (ev.shiftKey || ev.ctrlKey || ev.altKey) return; - + case "Esc": domSearch.value = ""; domSearch.blur(); curSearchIndex = -1; @@ -1167,16 +1163,12 @@ ev.stopPropagation(); startSearch(); return; - case 38: - if (ev.shiftKey || ev.ctrlKey || ev.altKey) return; - + case "Up": moveSearchCursor(-1); ev.preventDefault(); ev.stopPropagation(); return; - case 40: - if (ev.shiftKey || ev.ctrlKey || ev.altKey) return; - + case "Down": moveSearchCursor(1); ev.preventDefault(); ev.stopPropagation(); @@ -1210,21 +1202,35 @@ renderSearchCursor(); } - function getKeyValue(ev) { - if("key" in ev && typeof ev.key != "undefined") { - return ev.key - } - var code = ev.charCode || ev.keyCode; - if(code == 27) { - return "Escape" - } - return String.fromCharCode(code) + function getKeyString(ev) { + var name; + var ignoreShift = false; + switch (ev.which) { + case 13: + name = "Enter"; + break; + case 27: + name = "Esc"; + break; + case 38: + name = "Up"; + break; + case 40: + name = "Down"; + break; + default: + ignoreShift = true; + name = (ev.key != null) ? ev.key : String.fromCharCode(ev.charCode || ev.keyCode); + } + if (!ignoreShift && ev.shiftKey) name = "Shift+" + name; + if (ev.altKey) name = "Alt+" + name; + if (ev.ctrlKey) name = "Ctrl+" + name; + return name; } function onWindowKeyDown(ev) { - switch (getKeyValue(ev)) { - case "Escape": - if (ev.shiftKey || ev.ctrlKey || ev.altKey) return; + switch (getKeyString(ev)) { + case "Esc": if (!domHelpModal.classList.contains("hidden")) { domHelpModal.classList.add("hidden"); ev.preventDefault(); @@ -1232,7 +1238,6 @@ } break; case "s": - if (ev.shiftKey || ev.ctrlKey || ev.altKey) return; domSearch.focus(); domSearch.select(); ev.preventDefault(); @@ -1240,7 +1245,6 @@ startAsyncSearch(); break; case "?": - if (!ev.shiftKey || ev.ctrlKey || ev.altKey) return; ev.preventDefault(); ev.stopPropagation(); showHelpModal();