From 4219380146f98107fc829741f7650f56dd534c83 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 7 Dec 2015 21:34:54 -0800 Subject: [PATCH] Add basic service worker architecture --- src/home-assistant.js | 24 ++++++++++++++++++++---- src/service-worker/index.js | 23 +++++++++++++++++++++++ webpack.config.js | 23 ++++++++++++----------- 3 files changed, 55 insertions(+), 15 deletions(-) create mode 100644 src/service-worker/index.js diff --git a/src/home-assistant.js b/src/home-assistant.js index 1d9b257af4..5d184a79ba 100644 --- a/src/home-assistant.js +++ b/src/home-assistant.js @@ -62,6 +62,16 @@ export default new Polymer({ () => this.importHref(`/static/mdi.html`, success, success)); }, + created() { + this.registerServiceWorker(); + }, + + attached() { + // remove the HTML init message + const initMsg = document.getElementById('init'); + initMsg.parentElement.removeChild(initMsg); + }, + ready() { reactor.batch(() => { // if auth was given, tell the backend @@ -78,9 +88,15 @@ export default new Polymer({ this.loadIcons(); }, - attached() { - // remove the HTML init message - const initMsg = document.getElementById('init'); - initMsg.parentElement.removeChild(initMsg); + registerServiceWorker() { + if (!('serviceWorker' in navigator)) { + return; + } + + navigator.serviceWorker.register('./service_worker.js').then(reg => { + console.log('Service Worker registration succeeded.'); + }).catch(error => { + console.log(`Service Worker registration failed: ${error}`); + }); }, }); diff --git a/src/service-worker/index.js b/src/service-worker/index.js new file mode 100644 index 0000000000..40e94ec79c --- /dev/null +++ b/src/service-worker/index.js @@ -0,0 +1,23 @@ +if (__DEV__) { + console.log('Service Worker initialized.'); +} + +self.addEventListener('install', event => { + if (__DEV__) { + console.log('Service Worker installed.'); + } +}); + +self.addEventListener('activate', event => { + if (__DEV__) { + console.log('Service Worker activated.'); + // Force refresh service worker + event.waitUntil(global.clients.claim()); + } +}); + +self.addEventListener('onmessage', message => { + if (__DEV__) { + console.log('Message received', message); + } +}); diff --git a/webpack.config.js b/webpack.config.js index 76c9b25508..c08e066614 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,5 +1,3 @@ -'use strict'; - var webpack = require("webpack"); var definePlugin = new webpack.DefinePlugin({ @@ -8,22 +6,25 @@ var definePlugin = new webpack.DefinePlugin({ }); module.exports = { - entry: "./src/home-assistant.js", + entry: { + _app_compiled: './src/home-assistant.js', + service_worker: './src/service-worker/index.js', + }, output: { - path: 'build', - filename: "_app_compiled.js" + path: 'build', + filename: '[name].js', }, module: { loaders: [ { - loader: "babel-loader", + loader: 'babel-loader', test: /.js$/, - exclude: /node_modules\/(^home-assistant-js)/ - } - ] + exclude: /node_modules\/(^home-assistant-js)/, + }, + ], }, plugins: [ definePlugin, - new webpack.ContextReplacementPlugin(/moment[\/\\]locale$/, /no-other-locales-for-now/) - ] + new webpack.ContextReplacementPlugin(/moment[\/\\]locale$/, /no-other-locales-for-now/), + ], };