diff --git a/app/javascript/packs/application.ts b/app/javascript/packs/application.ts index 4d292a2e..eb7044a4 100644 --- a/app/javascript/packs/application.ts +++ b/app/javascript/packs/application.ts @@ -5,6 +5,7 @@ import { definitionsFromContext } from '@hotwired/stimulus-webpack-helpers'; import start from 'retrospring/common'; import initAnswerbox from 'retrospring/features/answerbox/index'; +import initCapabilities from 'retrospring/features/capabilities'; import initInbox from 'retrospring/features/inbox/index'; import initUser from 'retrospring/features/user'; import initSettings from 'retrospring/features/settings/index'; @@ -18,6 +19,7 @@ import initFront from 'retrospring/features/front'; import initWebpush from 'retrospring/features/webpush'; start(); +document.addEventListener('turbo:load', initCapabilities); document.addEventListener('DOMContentLoaded', initAnswerbox); document.addEventListener('DOMContentLoaded', initInbox); document.addEventListener('DOMContentLoaded', initUser); diff --git a/app/javascript/retrospring/features/answerbox/index.ts b/app/javascript/retrospring/features/answerbox/index.ts index c67de9e7..b0a3a897 100644 --- a/app/javascript/retrospring/features/answerbox/index.ts +++ b/app/javascript/retrospring/features/answerbox/index.ts @@ -7,10 +7,6 @@ import { answerboxSmileHandler } from './smile'; import { answerboxSubscribeHandler } from './subscribe'; export default (): void => { - if ('share' in navigator) { - document.body.classList.add('cap-web-share'); - } - registerEvents([ { type: 'click', target: '[name=ab-share]', handler: shareEventHandler, global: true }, { type: 'click', target: '[data-action=ab-submarine]', handler: answerboxSubscribeHandler, global: true }, diff --git a/app/javascript/retrospring/features/capabilities/index.ts b/app/javascript/retrospring/features/capabilities/index.ts new file mode 100644 index 00000000..bc0c29f8 --- /dev/null +++ b/app/javascript/retrospring/features/capabilities/index.ts @@ -0,0 +1,13 @@ +export default (): void => { + if ('share' in navigator) { + document.body.classList.add('cap-web-share'); + } + + if ('serviceWorker' in navigator) { + document.body.classList.add('cap-service-worker'); + } + + if ('Notification' in window) { + document.body.classList.add('cap-notification'); + } +} diff --git a/app/javascript/retrospring/features/webpush/index.ts b/app/javascript/retrospring/features/webpush/index.ts index 8b438699..2c10566b 100644 --- a/app/javascript/retrospring/features/webpush/index.ts +++ b/app/javascript/retrospring/features/webpush/index.ts @@ -3,15 +3,8 @@ import { enableHandler } from './enable'; import { dismissHandler } from "./dismiss"; export default (): void => { - const swCapable = 'serviceWorker' in navigator; - if (swCapable) { - document.body.classList.add('cap-service-worker'); - } - - const notificationCapable = 'Notification' in window; - if (notificationCapable) { - document.body.classList.add('cap-notification'); - } + const swCapable = document.body.classList.contains('cap-service-worker'); + const notificationCapable = document.body.classList.contains('cap-notification'); if (swCapable && notificationCapable) { navigator.serviceWorker.getRegistration().then(registration => {