Add basic service worker architecture

This commit is contained in:
Paulus Schoutsen 2015-12-07 21:34:54 -08:00
parent 044a6d9810
commit 4219380146
3 changed files with 55 additions and 15 deletions

View File

@ -62,6 +62,16 @@ export default new Polymer({
() => this.importHref(`/static/mdi.html`, success, success)); () => 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() { ready() {
reactor.batch(() => { reactor.batch(() => {
// if auth was given, tell the backend // if auth was given, tell the backend
@ -78,9 +88,15 @@ export default new Polymer({
this.loadIcons(); this.loadIcons();
}, },
attached() { registerServiceWorker() {
// remove the HTML init message if (!('serviceWorker' in navigator)) {
const initMsg = document.getElementById('init'); return;
initMsg.parentElement.removeChild(initMsg); }
navigator.serviceWorker.register('./service_worker.js').then(reg => {
console.log('Service Worker registration succeeded.');
}).catch(error => {
console.log(`Service Worker registration failed: ${error}`);
});
}, },
}); });

View File

@ -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);
}
});

View File

@ -1,5 +1,3 @@
'use strict';
var webpack = require("webpack"); var webpack = require("webpack");
var definePlugin = new webpack.DefinePlugin({ var definePlugin = new webpack.DefinePlugin({
@ -8,22 +6,25 @@ var definePlugin = new webpack.DefinePlugin({
}); });
module.exports = { module.exports = {
entry: "./src/home-assistant.js", entry: {
_app_compiled: './src/home-assistant.js',
service_worker: './src/service-worker/index.js',
},
output: { output: {
path: 'build', path: 'build',
filename: "_app_compiled.js" filename: '[name].js',
}, },
module: { module: {
loaders: [ loaders: [
{ {
loader: "babel-loader", loader: 'babel-loader',
test: /.js$/, test: /.js$/,
exclude: /node_modules\/(^home-assistant-js)/ exclude: /node_modules\/(^home-assistant-js)/,
} },
] ],
}, },
plugins: [ plugins: [
definePlugin, definePlugin,
new webpack.ContextReplacementPlugin(/moment[\/\\]locale$/, /no-other-locales-for-now/) new webpack.ContextReplacementPlugin(/moment[\/\\]locale$/, /no-other-locales-for-now/),
] ],
}; };