You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
devdocs/assets/javascripts/app/serviceworker.js

69 lines
2.1 KiB

// TODO: This file was created by bulk-decaffeinate.
// Sanity-check the conversion and remove this comment.
/*
* decaffeinate suggestions:
* DS102: Remove unnecessary code created because of implicit returns
* DS206: Consider reworking classes to avoid initClass
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md
*/
const Cls = (app.ServiceWorker = class ServiceWorker {
static initClass() {
$.extend(this.prototype, Events);
}
static isEnabled() {
return !!navigator.serviceWorker && app.config.service_worker_enabled;
}
constructor() {
this.onUpdateFound = this.onUpdateFound.bind(this);
this.onStateChange = this.onStateChange.bind(this);
this.registration = null;
this.notifyUpdate = true;
navigator.serviceWorker.register(app.config.service_worker_path, {scope: '/'})
.then(
registration => this.updateRegistration(registration),
error => console.error('Could not register service worker:', error));
}
update() {
if (!this.registration) { return; }
this.notifyUpdate = true;
return this.registration.update().catch(function() {});
}
updateInBackground() {
if (!this.registration) { return; }
this.notifyUpdate = false;
return this.registration.update().catch(function() {});
}
reload() {
return this.updateInBackground().then(() => app.reboot());
}
updateRegistration(registration) {
this.registration = registration;
$.on(this.registration, 'updatefound', this.onUpdateFound);
}
onUpdateFound() {
if (this.installingRegistration) { $.off(this.installingRegistration, 'statechange', this.onStateChange()); }
this.installingRegistration = this.registration.installing;
$.on(this.installingRegistration, 'statechange', this.onStateChange);
}
onStateChange() {
if (this.installingRegistration && (this.installingRegistration.state === 'installed') && navigator.serviceWorker.controller) {
this.installingRegistration = null;
this.onUpdateReady();
}
}
onUpdateReady() {
if (this.notifyUpdate) { this.trigger('updateready'); }
}
});
Cls.initClass();