diff options
author | Nolan Lawson <nolan@nolanlawson.com> | 2019-11-04 04:03:09 -0800 |
---|---|---|
committer | Eugen Rochko <eugen@zeonfederated.com> | 2019-11-04 13:03:09 +0100 |
commit | 1e232e455cfa75621264a0b90b783b21ebd5ea87 (patch) | |
tree | 25342543a5aa5574442622a86bca85fd560531f6 /app/javascript | |
parent | e37358b3bcc6d8a5d29e2bcdcc862e0561abec17 (diff) |
fix: support KaiOS arrow navigation on public pages (#12251)
Diffstat (limited to 'app/javascript')
-rw-r--r-- | app/javascript/mastodon/load_keyboard_extensions.js | 16 | ||||
-rw-r--r-- | app/javascript/packs/public.js | 10 |
2 files changed, 23 insertions, 3 deletions
diff --git a/app/javascript/mastodon/load_keyboard_extensions.js b/app/javascript/mastodon/load_keyboard_extensions.js new file mode 100644 index 000000000..2dd0e45fa --- /dev/null +++ b/app/javascript/mastodon/load_keyboard_extensions.js @@ -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(); +} diff --git a/app/javascript/packs/public.js b/app/javascript/packs/public.js index ed713f335..6a7f8831d 100644 --- a/app/javascript/packs/public.js +++ b/app/javascript/packs/public.js @@ -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); + }); |