--- /dev/null
+</script>
+/**
+ * Copyright 2015 Google Inc. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// Source: https://github.com/GoogleChrome/sw-precache/blob/master/demo/app/js/service-worker-registration.js
+/* eslint-env browser */
+'use strict';
+if ('serviceWorker' in navigator) {
+ // Delay registration until after the page has loaded, to ensure that our
+ // precaching requests don't degrade the first visit experience.
+ // See https://developers.google.com/web/fundamentals/instant-and-offline/service-worker/registration
+ window.addEventListener('load', function() {
+ // Your service-worker.js *must* be located at the top-level directory relative to your site.
+ // It won't be able to control pages unless it's located at the same level or higher than them.
+ // *Don't* register service worker file in, e.g., a scripts/ sub-directory!
+ // See https://github.com/slightlyoff/ServiceWorker/issues/468
+ navigator.serviceWorker.register('/sw.js').then(function(reg) {
+ // updatefound is fired if service-worker.js changes.
+ reg.onupdatefound = function() {
+ // The updatefound event implies that reg.installing is set; see
+ // https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#service-worker-container-updatefound-event
+ var installingWorker = reg.installing;
+ installingWorker.onstatechange = function() {
+ switch (installingWorker.state) {
+ case 'installed':
+ if (navigator.serviceWorker.controller) {
+ // At this point, the old content will have been purged and the fresh content will
+ // have been added to the cache.
+ // It's the perfect time to display a "New content is available; please refresh."
+ // message in the page's interface.
+ console.log('New or updated content is available.');
+ } else {
+ // At this point, everything has been precached.
+ // It's the perfect time to display a "Content is cached for offline use." message.
+ console.log('Content is now available offline!');
+ }
+ break;
+ case 'redundant':
+ console.error('The installing service worker became redundant.');
+ break;
+ }
+ };
+ };
+ }).catch(function(e) {
+ console.error('Error during service worker registration:', e);
+ });
+ });
+}
+</script>
--- /dev/null
+module.exports = {
+ staticFileGlobs: [
+ '/openils/var/web/favicon.ico',
+ '/openils/var/web/offline.html',
+ '/openils/var/web/js/sw-register.js',
+ '/openils/var/web/css/skin/default/opac/semiauto.css',
+ '/openils/var/web/js/ui/default/opac/simple.js',
+ '/openils/var/web/opac/images/small_logo.png',
+ '/openils/var/web/opac/images/progressbar_green.png',
+ '/openils/var/web/opac/images/main_logo.png',
+ '/openils/var/web/opac/images/eg_tiny_logo.png'
+ ],
+ stripPrefix: '/openils/var/web/',
+ runtimeCaching: [
+ // aggressively cache images
+ {
+ urlPattern: /\.(gif|jpg|jpeg|png)$/,
+ handler: 'cacheFirst'
+ },
+ // aggressively cache stylesheets and JavaScript
+ {
+ urlPattern: /\.(css|js)$/,
+ handler: 'cacheFirst'
+ },
+ // cache added content too
+ {
+ urlPattern: /\/opac\/extras\/ac\//,
+ handler: 'cacheFirst'
+ },
+ // prefer the network, but fall back to the cache
+ // for safety, add https:\/\/hostname to the start of the urlPattern
+ {
+ urlPattern: /\/(eg|js|opac|staff)\//,
+ handler: 'networkFirst'
+ }
+ ]
+};