diff --git a/home-assistant-js b/home-assistant-js index 4f22ce18a7..bf4adea645 160000 --- a/home-assistant-js +++ b/home-assistant-js @@ -1 +1 @@ -Subproject commit 4f22ce18a788888bff1cbdafb3586edc715ba29e +Subproject commit bf4adea64549d0adb95597f1846d90bc47648c0e diff --git a/package.json b/package.json index 50de0901b5..9a406fffbe 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "scripts": { "setup_js_dev": "git submodule init && git submodule update && cd home-assistant-js && npm install", "clean": "rm -rf build/* build-temp/*", - "js_dev": "script/sw-dev.js && npm run watch_ru_all", + "js_dev": "script/sw-precache.js && npm run watch_ru_all", "js_dev_demo": "BUILD_DEMO=1 npm run watch_ru_all", "js_prod": "BUILD_DEV=0 npm run ru_all", "js_demo": "BUILD_DEV=0 BUILD_DEMO=1 npm run ru_all", diff --git a/script/sw-dev.js b/script/sw-dev.js deleted file mode 100755 index 0d7c304835..0000000000 --- a/script/sw-dev.js +++ /dev/null @@ -1,10 +0,0 @@ -#! /usr/bin/env node - -var fs = require('fs'); -var path = require('path'); - -var content = ` -console.warn('Service worker disabled in dev mode'); -`; - -fs.writeFileSync(path.join('build', 'service_worker.js'), content); diff --git a/script/sw-precache.js b/script/sw-precache.js index e9dfe3bc75..ce85f898d3 100755 --- a/script/sw-precache.js +++ b/script/sw-precache.js @@ -15,9 +15,10 @@ var path = require('path'); var swPrecache = require('sw-precache'); var uglifyJS = require('uglify-js'); +const DEV = !!JSON.parse(process.env.BUILD_DEV || 'true'); + var rootDir = '..'; var panelDir = rootDir + '/panels'; -// var panels = fs.readdirSync(panelDir); var dynamicUrlToDependencies = { '/': [rootDir + '/frontend.html', rootDir + '/core.js'], @@ -55,9 +56,9 @@ panelsFingerprinted.forEach(panel => { dynamicUrlToDependencies[url] = [fpath]; }); -var options = { +const options = { navigateFallback: '/', - navigateFallbackWhitelist: [/^((?!(static|api|local|service_worker.js)).)*$/], + navigateFallbackWhitelist: [/^((?!(static|api|local|service_worker.js|manifest.json)).)*$/], dynamicUrlToDependencies: dynamicUrlToDependencies, staticFileGlobs: [ rootDir + '/icons/favicon.ico', @@ -74,9 +75,55 @@ var options = { verbose: true, }; -var genPromise = swPrecache.generate(options); +const devBase = 'console.warn("Service worker caching disabled in development")'; -if (true) { +const notify = ` +self.addEventListener("push", function(event) { + var data; + if (event.data) { + data = event.data.json(); + event.waitUntil(self.registration.showNotification(data.title, data)); + } +}); +self.addEventListener('notificationclick', function(event) { + var url; + + if (!event.notification.data || !event.notification.data.url) { + return; + } + + event.notification.close(); + url = event.notification.data.url; + + if (!url) return; + + event.waitUntil( + clients.matchAll({ + type: 'window', + }) + .then(function (windowClients) { + var i; + var client; + for (i = 0; i < windowClients.length; i++) { + client = windowClients[i]; + if (client.url === url && 'focus' in client) { + return client.focus(); + } + } + if (clients.openWindow) { + return clients.openWindow(url); + } + return undefined; + }) + ); +}); +`; + +let genPromise = DEV ? Promise.resolve(devBase) : swPrecache.generate(options); + +genPromise = genPromise.then(swString => swString + '\n' + notify); + +if (!DEV) { genPromise = genPromise.then( swString => uglifyJS.minify(swString, { fromString: true }).code); } diff --git a/src/components/ha-sidebar.html b/src/components/ha-sidebar.html index f50abbdc2d..69b2aa4822 100644 --- a/src/components/ha-sidebar.html +++ b/src/components/ha-sidebar.html @@ -78,7 +78,7 @@ opacity: var(--dark-divider-opacity) } - .streaming { + .setting { @apply(--sidebar-text); } @@ -120,8 +120,18 @@