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));
},
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}`);
});
},
});

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 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"
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/),
],
};