- Activated Workbox precache PWA !

importScripts('https://storage.googleapis.com/workbox-cdn/releases/3.0.0/workbox-sw.js');

  if (!workbox) {
    workbox = new self.WorkboxSW();
  }

  if (workbox) {
    workbox.core.setCacheNameDetails({prefix: "freeplanet"});

    /**
     * The workboxSW.precacheAndRoute() method efficiently caches and responds to
     * requests for URLs in the manifest.
     * See https://goo.gl/S9QRab
     */
    self.__precacheManifest = [].concat(self.__precacheManifest || []);
    workbox.precaching.suppressWarnings();
    workbox.precaching.precacheAndRoute(self.__precacheManifest, {});

    workbox.routing.registerRoute(/^http/, workbox.strategies.networkFirst(), 'GET');

  }
This commit is contained in:
Paolo Arena
2019-01-31 13:52:52 +01:00
parent c3739e2b32
commit fa7247a338
16 changed files with 128 additions and 59 deletions

View File

@@ -1,4 +1,4 @@
SERVICE_WORKER_FILE='sw.js' SERVICE_WORKER_FILE='service-worker.js'
APP_ID='1' APP_ID='1'
VUE_APP_URL='prova SVILUPPO!' VUE_APP_URL='prova SVILUPPO!'
PROVA_PAOLO='PROVA SVILUPPO' PROVA_PAOLO='PROVA SVILUPPO'

22
package-lock.json generated
View File

@@ -1,6 +1,6 @@
{ {
"name": "freeplanet", "name": "freeplanet",
"version": "0.0.1", "version": "0.0.2",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
@@ -21098,7 +21098,7 @@
"dependencies": { "dependencies": {
"minimist": { "minimist": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"dev": true "dev": true
} }
@@ -24014,7 +24014,7 @@
"graceful-fs": "4.1.15", "graceful-fs": "4.1.15",
"make-dir": "1.3.0", "make-dir": "1.3.0",
"unique-string": "1.0.0", "unique-string": "1.0.0",
"write-file-atomic": "2.3.0", "write-file-atomic": "2.4.2",
"xdg-basedir": "3.0.0" "xdg-basedir": "3.0.0"
} }
}, },
@@ -24028,9 +24028,9 @@
} }
}, },
"write-file-atomic": { "write-file-atomic": {
"version": "2.3.0", "version": "2.4.2",
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.2.tgz",
"integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", "integrity": "sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g==",
"dev": true, "dev": true,
"requires": { "requires": {
"graceful-fs": "4.1.15", "graceful-fs": "4.1.15",
@@ -25489,9 +25489,9 @@
}, },
"dependencies": { "dependencies": {
"ansi-escapes": { "ansi-escapes": {
"version": "3.1.0", "version": "3.2.0",
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
"integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
"dev": true "dev": true
}, },
"chardet": { "chardet": {
@@ -25502,7 +25502,7 @@
}, },
"external-editor": { "external-editor": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
"integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
"dev": true, "dev": true,
"requires": { "requires": {
@@ -25537,7 +25537,7 @@
"integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"ansi-escapes": "3.1.0", "ansi-escapes": "3.2.0",
"chalk": "2.4.1", "chalk": "2.4.1",
"cli-cursor": "2.1.0", "cli-cursor": "2.1.0",
"cli-width": "2.2.0", "cli-width": "2.2.0",

View File

@@ -1,7 +1,13 @@
{ {
"name": "freeplanet", "name": "freeplanet",
"version": "0.0.1", "version": "0.0.2",
"private": true, "private": true,
"keywords": [
"freeplanet",
"free social"
],
"author": "Paolo Arena",
"license": "MIT",
"scripts": { "scripts": {
"lint": "tslint --project tsconfig.json", "lint": "tslint --project tsconfig.json",
"lint:fix": "tslint --project tsconfig.json --fix", "lint:fix": "tslint --project tsconfig.json --fix",
@@ -10,11 +16,12 @@
"pwa": "NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 DEBUG=v8:* quasar dev -m pwa", "pwa": "NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 DEBUG=v8:* quasar dev -m pwa",
"test:unit": "jest", "test:unit": "jest",
"test:cover": "jest --coverage", "test:cover": "jest --coverage",
"build": "quasar build -m pwa && workbox generateSW workbox-config.js", "build": "quasar build -m pwa",
"build:clean": "quasar clean", "build:clean": "quasar clean",
"serve": "quasar serve ./dist/pwa-mat", "serve": "quasar serve ./dist/pwa-mat",
"serve:coverage": "quasar serve test/coverage/lcov-report/ --cache 0 --port 8788", "serve:coverage": "quasar serve test/coverage/lcov-report/ --cache 0 --port 8788",
"deploy": "deploy.sh" "deploy": "deploy.sh",
"generate-sw": "workbox generateSW workbox-config.js"
}, },
"dependencies": { "dependencies": {
"@types/vuelidate": "^0.7.0", "@types/vuelidate": "^0.7.0",

View File

@@ -180,8 +180,18 @@ module.exports = function (ctx) {
} }
}, },
pwa: { pwa: {
// runtimeCaching: [
// {
// urlPattern: '/statics',
// handler: 'networkFirst'
// }
// ],
// workboxPluginMode: 'GenerateSW',
workboxPluginMode: 'InjectManifest', workboxPluginMode: 'InjectManifest',
// workboxOptions: {}, workboxOptions: {
// swSrc: 'src/sw.js',
},
manifest: { manifest: {
name: 'Free Planet', name: 'Free Planet',
short_name: 'freeplanet', short_name: 'freeplanet',

View File

@@ -4,21 +4,45 @@
* quasar.conf > pwa > workboxPluginMode is set to "InjectManifest" * quasar.conf > pwa > workboxPluginMode is set to "InjectManifest"
*/ */
self.addEventListener('install', function(event) { // Questo è il swSrc
console.log('[Service Worker] Installing Service Worker ...', event);
});
self.addEventListener('activate', function(event) { console.log('___________________________ PAO: this is my custom service worker');
console.log('[Service Worker] Activating Service Worker ...', event);
return self.clients.claim();
});
self.addEventListener('fetch', function(event) { importScripts('https://storage.googleapis.com/workbox-cdn/releases/3.0.0/workbox-sw.js');
//console.log('[Service Worker] Fetching something ....', event);
if (event.request.cache === 'only-if-cached' && event.request.mode !== 'same-origin') { if (!workbox) {
console.log('SAME ORIGIN!', event); workbox = new self.WorkboxSW();
return; }
}
event.respondWith(fetch(event.request)); if (workbox) {
}); workbox.core.setCacheNameDetails({prefix: "freeplanet"});
/**
* The workboxSW.precacheAndRoute() method efficiently caches and responds to
* requests for URLs in the manifest.
* See https://goo.gl/S9QRab
*/
self.__precacheManifest = [].concat(self.__precacheManifest || []);
workbox.precaching.suppressWarnings();
workbox.precaching.precacheAndRoute(self.__precacheManifest, {});
workbox.routing.registerRoute(/^http/, workbox.strategies.networkFirst(), 'GET');
}
if ('serviceWorker' in navigator) {
console.log('***************** Entering in custom-service-worker.js:')
self.addEventListener('fetch', function (event) {
console.log('[Service Worker] Fetching something ....', event);
console.log('event.request.cache=', event.request.cache)
if (event.request.cache === 'only-if-cached' && event.request.mode !== 'same-origin') {
console.log('SAME ORIGIN!', event);
return;
}
event.respondWith(fetch(event.request));
});
}

View File

@@ -8,9 +8,11 @@ import {register} from 'register-service-worker'
register(process.env.SERVICE_WORKER_FILE, { register(process.env.SERVICE_WORKER_FILE, {
ready() { ready() {
console.log('READY::: App is being served from cache by a service worker.') console.log('READY::: App is being served from cache by a service worker.')
}, },
registered(registration) { // registration -> a ServiceWorkerRegistration instance registered(registration) { // registration -> a ServiceWorkerRegistration instance
console.log('REGISTERED::: !!!') console.log('REGISTERED::: !!!', process.env.SERVICE_WORKER_FILE)
}, },
cached(registration) { // registration -> a ServiceWorkerRegistration instance cached(registration) { // registration -> a ServiceWorkerRegistration instance
console.log('CACHED::: Content has been cached for offline use.') console.log('CACHED::: Content has been cached for offline use.')
@@ -33,3 +35,6 @@ register(process.env.SERVICE_WORKER_FILE, {
// ServiceWorkerRegistration: https://developer.mozilla.org/en-uk/docs/Web/API/ServiceWorkerRegistration // ServiceWorkerRegistration: https://developer.mozilla.org/en-uk/docs/Web/API/ServiceWorkerRegistration
// "build": "quasar build -m pwa && workbox generateSW workbox-config.js",

View File

@@ -106,7 +106,7 @@
// dynamic import, so loading on demand only // dynamic import, so loading on demand only
import(`quasar-framework/i18n/${lang}`).then(lang => { import(`quasar-framework/i18n/${lang}`).then(lang => {
this.$q.i18n.set(lang.default) this.$q.i18n.set(lang.default)
import(`src/i18n`).then(function () { import(`src/statics/i18n`).then(function () {
}) })
}) })
} }

View File

@@ -284,7 +284,7 @@ export default class SingleTodo extends Vue {
} }
updateicon() { updateicon() {
console.log('updateicon') // console.log('updateicon')
if (this.itemtodo.completed) if (this.itemtodo.completed)
this.iconCompleted = 'check_circle' this.iconCompleted = 'check_circle'
else else

View File

@@ -6,7 +6,7 @@ import { ITodo } from '@src/model'
import { rescodes } from '../../../store/Modules/rescodes' import { rescodes } from '../../../store/Modules/rescodes'
import { UserStore } from '@modules' import { UserStore } from '@store'
import _ from 'lodash' import _ from 'lodash'
@@ -45,7 +45,7 @@ export default class Todo extends Vue {
} }
@Watch('$route.params.category') changecat() { @Watch('$route.params.category') changecat() {
console.log('changecat') // console.log('changecat')
this.load() this.load()
} }
@@ -90,7 +90,7 @@ export default class Todo extends Vue {
async updateLinkedList(init: boolean, arr: ITodo[] = this.todos_arr) { async updateLinkedList(init: boolean, arr: ITodo[] = this.todos_arr) {
console.log('updateLinkedList', this.todos_arr) // console.log('updateLinkedList', this.todos_arr)
let idprev = -1 let idprev = -1
let idnext = -1 let idnext = -1
@@ -123,7 +123,7 @@ export default class Todo extends Vue {
pos++ pos++
this.logelem('updateLinked', elem) // this.logelem('updateLinked', elem)
}) })
} }
@@ -240,7 +240,7 @@ export default class Todo extends Vue {
arr.forEach(rec => { arr.forEach(rec => {
this.arrPrior.push(rec.value) this.arrPrior.push(rec.value)
}) })
console.log('Array PRIOR:', this.arrPrior) // console.log('Array PRIOR:', this.arrPrior)
} }
@@ -251,15 +251,17 @@ export default class Todo extends Vue {
for (let todosKey in rescodes.Todos) { for (let todosKey in rescodes.Todos) {
this.listPriorityLabel.push(rescodes.Todos[todosKey]) this.listPriorityLabel.push(rescodes.Todos[todosKey])
} }
console.log('Priority:' + this.listPriorityLabel) // console.log('Priority:' + this.listPriorityLabel)
this.setarrPriority() this.setarrPriority()
this.clearArr() this.clearArr()
await this.updatetable() await this.updatetable()
/*
this.todos_arr.forEach((elem, index) => { this.todos_arr.forEach((elem, index) => {
this.logelem('LOAD ' + index, elem) this.logelem('LOAD ' + index, elem)
}) })
*/
} }
@@ -273,8 +275,8 @@ export default class Todo extends Vue {
priority: rescodes.Todos.PRIORITY_NORMAL, priority: rescodes.Todos.PRIORITY_NORMAL,
completed: false, completed: false,
created_at: new Date(), created_at: new Date(),
category: '',
modify_at: new Date(), modify_at: new Date(),
category: '',
expiring_at: mydateexp, expiring_at: mydateexp,
enableExpiring: false, enableExpiring: false,
id_prev: 0, id_prev: 0,
@@ -310,6 +312,12 @@ export default class Todo extends Vue {
objtodo.pos = (lastelem !== null) ? lastelem.pos + 1 : 1 objtodo.pos = (lastelem !== null) ? lastelem.pos + 1 : 1
objtodo.modified = true objtodo.modified = true
if (objtodo.userId === undefined) {
this.$q.notify(this.$t('todo.usernotdefined'))
return
}
// Add to Indexdb // Add to Indexdb
await this.$db.todos.add(objtodo await this.$db.todos.add(objtodo
).then((id) => { ).then((id) => {
@@ -442,7 +450,7 @@ export default class Todo extends Vue {
} }
async filtertodos(refresh: boolean = false) { async filtertodos(refresh: boolean = false) {
console.log('filtertodos') // console.log('filtertodos')
let arrtemp = [] let arrtemp = []
@@ -515,7 +523,7 @@ export default class Todo extends Vue {
// //
deselectAllRows(item, check, onlythis: boolean = false) { deselectAllRows(item, check, onlythis: boolean = false) {
console.log('deselectAllRows : ', item) // console.log('deselectAllRows : ', item)
for (let i = 0; i < this.$refs.single.length; i++) { for (let i = 0; i < this.$refs.single.length; i++) {
@@ -574,7 +582,7 @@ export default class Todo extends Vue {
if (miorec.modified) { if (miorec.modified) {
miorec.modify_at = new Date() miorec.modify_at = new Date()
this.logelem('modify', miorec) // this.logelem('modify', miorec)
await this.$db.todos.put(miorec) await this.$db.todos.put(miorec)

View File

@@ -10,15 +10,15 @@
<meta name="viewport" <meta name="viewport"
content="user-scalable=no, initial-scale=1, minimum-scale=1, width=device-width<% if (htmlWebpackPlugin.options.ctx.mode.cordova) { %>, viewport-fit=cover<% } %>"> content="user-scalable=no, initial-scale=1, minimum-scale=1, width=device-width<% if (htmlWebpackPlugin.options.ctx.mode.cordova) { %>, viewport-fit=cover<% } %>">
<link rel="icon" href="statics/freeplanet-logo.png" type="image/x-icon"> <link rel="icon" href="/statics/freeplanet-logo.png" type="image/x-icon">
<link rel="icon" type="image/png" sizes="32x32" href="statics/icons/favicon-32x32.png"> <link rel="icon" type="image/png" sizes="32x32" href="/statics/icons/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="statics/icons/favicon-16x16.png"> <link rel="icon" type="image/png" sizes="16x16" href="/statics/icons/favicon-16x16.png">
<script defer src="statics/js/material.min.js"></script> <script defer src="/statics/js/material.min.js"></script>
<script src="statics/js/promise.js"></script> <script src="/statics/js/promise.js"></script>
<script src="statics/js/fetch.js"></script> <script src="/statics/js/fetch.js"></script>
<script src="statics/js/idb.js"></script> <script src="/statics/js/idb.js"></script>
<link type="text/css" rel="stylesheet" href="statics/firebaseui.css" /> <!--<link type="text/css" rel="stylesheet" href="statics/firebaseui.css" />-->
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</head> </head>

View File

@@ -55,7 +55,7 @@
links links
created() { created() {
console.log('Drawer created...') // console.log('Drawer created...')
let listatodo = [] let listatodo = []

View File

@@ -1,6 +1,6 @@
// src/plugins/i18n.js // src/plugins/i18n.js
import VueI18n from 'vue-i18n'; import VueI18n from 'vue-i18n';
import messages from 'src/i18n'; import messages from 'src/statics/i18n';
export default ({ app, store, Vue }) => { export default ({ app, store, Vue }) => {
Vue.use(VueI18n); Vue.use(VueI18n);

View File

@@ -19,12 +19,12 @@ export default class Home extends Vue {
constructor() { constructor() {
super() super()
console.log('Home constructor...') // console.log('Home constructor...')
this.initprompt() this.initprompt()
} }
created() { created() {
console.log('Home created...') // console.log('Home created...')
} }
mystilecard() { mystilecard() {

View File

@@ -101,7 +101,8 @@ const messages = {
titleprioritymenu: 'Priorità:', titleprioritymenu: 'Priorità:',
insert: 'Inserisci il Task', insert: 'Inserisci il Task',
edit: 'Descrizione Task:', edit: 'Descrizione Task:',
completed: 'Completati' completed: 'Completati',
usernotdefined: 'Attenzione, occorre essere Loggati per poter aggiungere un Todo'
} }
}, },
enUk: { enUk: {
@@ -206,7 +207,8 @@ const messages = {
titleprioritymenu: 'Priority:', titleprioritymenu: 'Priority:',
insert: 'Insert Task', insert: 'Insert Task',
edit: 'Task Description:', edit: 'Task Description:',
completed: 'Completed' completed: 'Completed',
usernotdefined: 'Attention, you need to be Signed In to add a new Task'
} }
}, },
}; };

View File

@@ -39,7 +39,7 @@ export default class Vreg extends Vue {
} }
load() { load() {
console.log('load') // console.log('load')
let param: ILinkReg let param: ILinkReg
param = { idlink: this.$route.query.idlink.toString() } param = { idlink: this.$route.query.idlink.toString() }
console.log('idlink = ', param) console.log('idlink = ', param)

13
workbox-config.js Normal file
View File

@@ -0,0 +1,13 @@
module.exports = {
"globDirectory": "dist/pwa-mat/",
"globPatterns": [
"**/*.{css,woff2,woff,svg,html,js,json,ico}"
// "src/images/*.{jpg,png}"
],
// "swSrc": "dist/pwa-mat/src-sw.js",
"swDest": "dist/pwa-mat/service-worker.js",
"globIgnores": [
"../workbox-config.js",
"help/**"
],
};