]> cat aescling's git repositories - mastodon.git/commitdiff
fix: support KaiOS arrow navigation on public pages (#12251)
authorNolan Lawson <nolan@nolanlawson.com>
Mon, 4 Nov 2019 12:03:09 +0000 (04:03 -0800)
committerEugen Rochko <eugen@zeonfederated.com>
Mon, 4 Nov 2019 12:03:09 +0000 (13:03 +0100)
app/javascript/mastodon/load_keyboard_extensions.js [new file with mode: 0644]
app/javascript/packs/public.js
package.json
yarn.lock

diff --git a/app/javascript/mastodon/load_keyboard_extensions.js b/app/javascript/mastodon/load_keyboard_extensions.js
new file mode 100644 (file)
index 0000000..2dd0e45
--- /dev/null
@@ -0,0 +1,16 @@
+// On KaiOS, we may not be able to use a mouse cursor or navigate using Tab-based focus, so we install
+// special left/right focus navigation keyboard listeners, at least on public pages (i.e. so folks
+// can at least log in using KaiOS devices).
+
+function importArrowKeyNavigation() {
+  return import(/* webpackChunkName: "arrow-key-navigation" */ 'arrow-key-navigation');
+}
+
+export default function loadKeyboardExtensions() {
+  if (/KAIOS/.test(navigator.userAgent)) {
+    return importArrowKeyNavigation().then(arrowKeyNav => {
+      arrowKeyNav.register();
+    });
+  }
+  return Promise.resolve();
+}
index ed713f335ae7ac6d685ae9a66e5799aca4f0f223..6a7f8831d23de28281404b36811b3c8b18911fd3 100644 (file)
@@ -2,6 +2,7 @@ import escapeTextContentForBrowser from 'escape-html';
 import loadPolyfills from '../mastodon/load_polyfills';
 import ready from '../mastodon/ready';
 import { start } from '../mastodon/common';
+import loadKeyboardExtensions from '../mastodon/load_keyboard_extensions';
 
 start();
 
@@ -259,6 +260,9 @@ function main() {
   });
 }
 
-loadPolyfills().then(main).catch(error => {
-  console.error(error);
-});
+loadPolyfills()
+  .then(main)
+  .then(loadKeyboardExtensions)
+  .catch(error => {
+    console.error(error);
+  });
index 8341ba2284d5fd5ecac4355c1d1917cb883ae49d..62929ad0a00b4e24a39169aec239c5aadab625d8 100644 (file)
@@ -73,6 +73,7 @@
     "@babel/runtime": "^7.5.4",
     "@clusterws/cws": "^0.15.2",
     "array-includes": "^3.0.3",
+    "arrow-key-navigation": "^1.0.2",
     "autoprefixer": "^9.6.1",
     "axios": "^0.19.0",
     "babel-loader": "^8.0.6",
index c9bd6ae7434648f2bf4ec3efa48f89bf81ae766b..35eb1ec33ac14bb833d2e0ed5f4cca69b89e6937 100644 (file)
--- a/yarn.lock
+++ b/yarn.lock
@@ -1657,6 +1657,11 @@ arrify@^1.0.1:
   resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
   integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
 
+arrow-key-navigation@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/arrow-key-navigation/-/arrow-key-navigation-1.0.2.tgz#c1b5886240819db6c0b2b84702de1313786ce53e"
+  integrity sha512-Wj67sJpfK7vrj0/aOstIsRMsUQtpVODBTQDcRaDvvPZdzZMotj8oYGsEsoYiDohShDlDU6ywVkHLtXGH4TfEtQ==
+
 asap@~2.0.3:
   version "2.0.6"
   resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"