fix "Todo Completati"

statics instead of assets
This commit is contained in:
Paolo Arena
2019-03-05 23:44:48 +01:00
parent 6686e44297
commit 41edd96c8c
35 changed files with 184 additions and 2983 deletions

View File

@@ -13,3 +13,4 @@ TEST_USERNAME='paoloar77'
TEST_PASSWORD='mypassword@1A'
PUBLICKEY_PUSH='BGxRrFWnPoa_ImUaWXmeEOFVI9VNKVKaAPsvsM1XY6wn24yxp9MyOQ4crNYCJKxSXV65Y1GblW5_VLoamedcZ1I'
IN_CONSTRUCTION='0'
DEBUG='1'

7
.gitignore vendored
View File

@@ -2,6 +2,7 @@
.DS_Store
.thumbs.db
.env
.env.development
.env.production
.env.production.bak
.env.prod.bak
@@ -12,7 +13,6 @@ node_modules
/src-cordova/platforms
/src-cordova/plugins
/src-cordova/www
/src-pwa
/src-ssr
npm-debug.log*
yarn-debug.log*
@@ -34,3 +34,8 @@ deploy.sh
deploy_on_production.sh
deploy_on_test_server.sh
send_to_production.sh
compileandserve.sh
deploy_all.sh
deploy_frontend.sh
mongodb_delete_pc_locale_paolo.sh
serve_on_localhost.sh

6
package-lock.json generated
View File

@@ -17708,9 +17708,9 @@
"wordwrap": "0.0.3"
}
},
"optimize-css-assets-webpack-plugin": {
"optimize-css-statics-webpack-plugin": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.1.tgz",
"resolved": "https://registry.npmjs.org/optimize-css-statics-webpack-plugin/-/optimize-css-statics-webpack-plugin-5.0.1.tgz",
"integrity": "sha512-Rqm6sSjWtx9FchdP0uzTQDc7GXDKnwVEGoSxjezPkzMewx7gEWE9IMUYKmigTRC4U3RaNSwYVnUDLuIdtTpm0A==",
"dev": true,
"requires": {
@@ -19341,7 +19341,7 @@
"net": "1.0.2",
"node-loader": "0.6.0",
"opn": "5.3.0",
"optimize-css-assets-webpack-plugin": "5.0.1",
"optimize-css-statics-webpack-plugin": "5.0.1",
"ouch": "2.0.0",
"postcss-loader": "3.0.0",
"postcss-rtl": "1.3.2",

View File

@@ -17,9 +17,9 @@ const extendTypescriptToWebpack = (config) => {
.set('@views', helpers.root('src/components/views/index.ts'))
// .set('@views', helpers.root('src/components/views'))
.set('@src', helpers.root('src'))
.set('@css', helpers.root('src/assets/css/*'))
.set('@css', helpers.root('src/statics/css/*'))
.set('@icons', helpers.root('src/statics/icons/*'))
.set('@images', helpers.root('src/assets/images/*'))
.set('@images', helpers.root('src/statics/images/*'))
.set('@classes', helpers.root('src/classes/index.ts'))
.set('@utils', helpers.root('src/utils/index.ts'))
.set('@utils', helpers.root('src/utils/*'))
@@ -59,7 +59,7 @@ module.exports = function (ctx) {
store: 'src/store/index.ts'
},
// app plugins (/src/plugins)
plugins: ['i18n', 'axios', 'vee-validate', 'myconfig', 'local-storage', 'error-handler', 'globalroutines', 'vue-idb', 'dragula'],
plugins: ['i18n', 'axios', 'vee-validate', 'myconfig', 'local-storage', 'error-handler', 'globalroutines', 'vue-idb', 'dragula', 'guard'],
css: [
'app.styl'
],
@@ -72,6 +72,12 @@ module.exports = function (ctx) {
'fontawesome'
],
supportIE: false,
aliases: {
quasar: path.resolve(__dirname, '../node_modules/quasar-framework/'),
src: path.resolve(__dirname, '../src'),
statics: path.resolve(__dirname, '../src/statics'),
components: path.resolve(__dirname, '../src/components')
},
build: {
showProgress: true,
env: envparser(),
@@ -180,7 +186,7 @@ module.exports = function (ctx) {
pwa: {
runtimeCaching: [
{
urlPattern: '/assets',
urlPattern: '/statics',
handler: 'networkFirst'
}
]
@@ -189,7 +195,7 @@ module.exports = function (ctx) {
pwa: {
// runtimeCaching: [
// {
// urlPattern: '/assets',
// urlPattern: '/statics',
// handler: 'networkFirst'
// }
// ],

View File

@@ -8,8 +8,8 @@
console.log(' [ VER-0.0.27 ] _---------________------ PAO: this is my custom service worker');
importScripts('../assets/js/idb.js');
importScripts('../assets/js/storage.js');
importScripts('../statics/js/idb.js');
importScripts('../statics/js/storage.js');
importScripts('https://storage.googleapis.com/workbox-cdn/releases/3.0.0/workbox-sw.js'); //++Todo: Replace with local workbox.js
@@ -206,7 +206,7 @@ if (workbox) {
});
workbox.routing.registerRoute(
new RegExp(/.*\/(?:assets\/icons).*$/),
new RegExp(/.*\/(?:statics\/icons).*$/),
workbox.strategies.cacheFirst({
cacheName: 'image-cache',
plugins: [
@@ -258,9 +258,9 @@ if (workbox) {
);
workbox.routing.registerRoute(
new RegExp(/.*\/(?:assets).*$/),
new RegExp(/.*\/(?:statics).*$/),
workbox.strategies.cacheFirst({
cacheName: 'assets',
cacheName: 'statics',
plugins: [
new workbox.expiration.Plugin({
maxAgeSeconds: 10 * 24 * 60 * 60,

View File

@@ -1,418 +0,0 @@
const messages = {
it: {
dialog: {
ok: 'Ok',
yes: 'Si',
no: 'No',
delete: 'Elimina',
cancel: 'Annulla',
msg: {
titledeleteTask: 'Elimina Task',
deleteTask: "Vuoi Eliminare {mytodo}?"
}
},
comp:{
Conta: "Conta",
},
msg: {
hello: 'Buongiorno',
myAppName: 'FreePlanet',
underconstruction: 'App in costruzione...',
myDescriz: '',
sottoTitoloApp: 'Il primo Vero Social',
sottoTitoloApp2: 'Libero, Equo e Solidale',
sottoTitoloApp3: 'dove Vive Consapevolezza e Aiuto Comunitario'
},
pages: {
home: 'Principale',
SignUp: 'Registrazione',
SignIn: 'Login',
vreg: 'Verifica Reg',
Test: 'Test',
Category: 'Categorie',
Todo: 'Todo',
personal: 'Personale',
work: 'Lavoro',
shopping: 'Spesa',
Admin: 'Admin',
Test1: 'Test1',
Test2: 'Test2',
},
components: {
authentication:{
login: {
facebook: 'Facebook'
},
email_verification: {
title: 'Inizia la tua registrazione',
introduce_email: 'inserisci la tua email',
email: 'Email',
invalid_email: 'La tua email è invalida',
verify_email: 'Verifica la tua email',
go_login: 'Torna al Login',
incorrect_input: 'Inserimento incorretto.',
link_sent: 'Per confermare la Registrazione, leggi la tua casella di posta e Clicca su "Verifica Email".\nSe non la trovi, cerca nella cartella Spam.'
}
}
},
fetch: {
errore_generico: 'Errore Generico',
errore_server: 'Impossibile accedere al Server. Riprovare Grazie',
error_doppiologin: 'Rieseguire il Login. Accesso aperto da un altro dispositivo.',
},
user: {
notregistered: 'Devi registrarti al servizio prima di porter memorizzare i dati'
},
reg: {
incorso: 'Registrazione in corso...',
richiesto: 'Campo Richiesto',
email: 'Email',
username : 'Nome Utente',
username_login : 'Nome Utente o email',
password: 'Password',
repeatPassword: 'Ripeti password',
terms: "Accetto i termini e le condizioni",
submit: "Registrati",
title_verif_reg: "Verifica Registrazione",
verificato: "Verificato",
non_verificato: "Non Verificato",
forgetpassword:"Password dimenticata?",
err: {
required: 'è richiesto',
email: 'dev\'essere una email valida',
errore_generico: 'Si prega di compilare correttamente i campi',
atleast: 'dev\'essere lungo almeno di',
complexity: 'deve contenere almeno 1 carattere minuscolo, 1 maiuscola e 1 cifra',
notmore: 'non dev\'essere lungo più di',
char: 'caratteri',
terms: 'Devi accettare le condizioni, per continuare.',
duplicate_email: 'l\'Email è già stata registrata',
duplicate_username: 'L\'Username è stato già utilizzato',
sameaspassword: 'Le password devono essere identiche',
}
},
login:{
incorso: 'Login in corso',
enter: 'Login',
errato: "Username o password errata. Riprovare",
completato: 'Login effettuato!',
},
reset: {
title_reset_pwd: "Reimposta la tua Password",
send_reset_pwd: 'Invia Reimposta la password',
incorso: 'Richiesta Nuova Email...',
email_sent:'Email inviata',
check_email: 'Controlla la tua email, ti arriverà un messaggio con un link per reimpostare la tua password. Questo link, per sicurezza, scadrà dopo 4 ore.',
title_update_pwd: 'Aggiorna la tua password',
update_password: 'Aggiorna Password',
},
logout:{
uscito: 'Sei Uscito',
},
errors: {
graphql: {
undefined: 'non definito'
}
},
todo: {
titleprioritymenu: 'Priorità:',
inserttop: 'Inserisci il Task in alto',
insertbottom: 'Inserisci il Task in basso',
edit: 'Descrizione Task:',
completed: 'Ultimi Completati',
usernotdefined: 'Attenzione, occorre essere Loggati per poter aggiungere un Todo'
},
notification : {
status: 'Stato',
ask: 'Attiva le Notifiche',
waitingconfirm: 'Conferma la richiesta di Notifica',
confirmed: 'Notifiche Attivate!',
denied: 'Notifiche Disabilitate! Attenzione così non vedrai arrivarti i messaggi. Riabilitali per vederli.',
titlegranted: 'Permesso Notifiche Abilitato!',
statusnot: 'Stato Notifiche',
titledenied: 'Permesso Notifiche Disabilitato!',
title_subscribed: 'Sottoscrizione a FreePlanet.app!',
subscribed: 'Ora potrai ricevere i messaggi e le notifiche.',
newVersionAvailable: 'Nuova Versione!'
},
connection: 'Connessione',
},
'esEs': {
dialog: {
ok: 'Vale',
yes: 'Sí',
no: 'No',
delete: 'Borrar',
cancel: 'Cancelar',
msg: {
titledeleteTask: 'Borrar Tarea',
deleteTask: 'Quieres borrar {mytodo}?'
}
},
comp:{
Conta: "Conta",
},
msg: {
hello: 'Buenos Días',
myAppName: 'FreePlanet',
underconstruction: 'App en construcción...',
myDescriz: '',
sottoTitoloApp: 'El primer Verdadero Social',
sottoTitoloApp2: 'Libre, justo y Solidario',
sottoTitoloApp3: 'Donde vive Conciencia y Ayuda comunitaria'
},
pages: {
home: 'Principal',
SignUp: 'Nueva Cuenta',
SignIn: 'Entrar',
vreg: 'Verifica Reg',
Test: 'Test',
Category: 'Categorías',
Todo: 'Tareas',
personal: 'Personal',
work: 'Trabajo',
shopping: 'Compras',
Admin: 'Administración',
Test1: 'Test1',
Test2: 'Test2',
},
components: {
authentication:{
login: {
facebook: 'Facebook'
},
email_verification: {
title: 'Crea una cuenta',
introduce_email: 'ingrese su dirección de correo electrónico',
email: 'Email',
invalid_email: 'Tu correo electrónico no es válido',
verify_email: 'Revisa tu email',
go_login: 'Vuelve al Login',
incorrect_input: 'Entrada correcta.',
link_sent: 'Para confirmar el registro, lea su buzón y haga clic en "Verificar correo electrónico".\n' + 'Si no lo encuentras, busca en la carpeta Spam.'
}
}
},
fetch: {
errore_generico: 'Error genérico',
errore_server: 'No se puede acceder al Servidor. Inténtalo de nuevo, Gracias',
error_doppiologin: 'Vuelva a iniciar sesión. Acceso abierto por otro dispositivo.',
},
user: {
notregistered: 'Debe registrarse en el servicio antes de poder almacenar los datos'
},
reg: {
incorso: 'Registro en curso...',
richiesto: 'Campo requerido',
email: 'Email',
username : 'Nombre usuario',
username_login : 'Nombre usuario o email',
password: 'contraseña',
repeatPassword: 'Repetir contraseña',
terms: "Acepto los términos y condiciones",
submit: "Registrarse",
title_verif_reg: "Verifica registro",
verificato: "Verificado",
non_verificato: "No Verificado",
forgetpassword:"¿Olvidaste tu contraseña?",
err: {
required: 'se requiere',
email: 'Debe ser una email válida.',
errore_generico: 'Por favor, rellene los campos correctamente',
atleast: 'debe ser al menos largo',
complexity: 'debe contener al menos 1 minúscula, 1 mayúscula y 1 dígito',
notmore: 'no tiene que ser más largo que',
char: 'caracteres',
terms: 'Debes aceptar las condiciones, para continuar..',
duplicate_email: 'La email ya ha sido registrada',
duplicate_username: 'El nombre de usuario ya ha sido utilizado',
sameaspassword: 'Las contraseñas deben ser idénticas',
}
},
login:{
incorso: 'Login en curso',
enter: 'Entrar',
errato: "Nombre de usuario, correo o contraseña incorrectos. inténtelo de nuevo",
completato: 'Login realizado!',
},
reset: {
title_reset_pwd: "Restablece tu contraseña",
send_reset_pwd: 'Enviar restablecer contraseña',
incorso: 'Solicitar nueva Email...',
email_sent:'Email enviada',
check_email: 'Revise su correo electrónico, recibirá un mensaje con un enlace para restablecer su contraseña. Este enlace, por razones de seguridad, expirará después de 4 horas.',
title_update_pwd: 'Actualiza tu contraseña',
update_password: 'Actualizar contraseña',
},
logout:{
uscito: 'Estás desconectado',
},
errors: {
graphql: {
undefined: 'no definido'
}
},
todo: {
titleprioritymenu: 'Prioridad:',
inserttop: 'Ingrese una nueva Tarea arriba',
insertbottom: 'Ingrese una nueva Tarea abajo',
edit: 'Descripción Tarea:',
completed: 'Ultimos Completados',
usernotdefined: 'Atención, debes iniciar sesión para agregar una Tarea'
},
notification : {
status: 'Estado',
ask: 'Activar notificaciones',
waitingconfirm: 'Confirmar la solicitud de notificación.',
confirmed: 'Notificaciones activadas!',
denied: 'Notificaciones deshabilitadas! Ten cuidado, así no verás llegar los mensajes. Rehabilítalos para verlos.',
titlegranted: 'Notificaciones permitidas habilitadas!',
statusnot: 'Estado Notificaciones',
titledenied: 'Notificaciones permitidas deshabilitadas!',
title_subscribed: 'Suscripción a FreePlanet.app!',
subscribed: 'Ahora puedes recibir mensajes y notificaciones.',
newVersionAvailable: 'Nueva Versión!'
},
connection: 'Connection',
},
'enUs': {
dialog: {
ok: 'Ok',
yes: 'Yes',
no: 'No',
delete: 'Delete',
cancel: 'Cancel',
msg: {
titledeleteTask: 'Delete Task',
deleteTask: 'Delete Task {mytodo}?'
}
},
comp:{
Conta: "Count",
},
msg: {
hello: 'Hello!',
myAppName: 'FreePlanet',
underconstruction: 'App in constuction...',
myDescriz: '',
sottoTitoloApp: 'The first Real Social',
sottoTitoloApp2: 'Free, Fair and solidarity',
sottoTitoloApp3: 'Where the conscience and community help live'
},
pages: {
home: 'Dashboard',
SignUp: 'SignUp',
SignIn: 'SignIn',
vreg: 'Verify Reg',
Test: 'Test',
Category: 'Category',
Todo: 'Todo',
personal: 'Personal',
work: 'Work',
shopping: 'Shopping',
Admin: 'Admin',
Test1: 'Test1',
Test2: 'Test2',
},
components: {
authentication:{
login: {
facebook: 'Facebook'
},
email_verification: {
title: 'Begin your registration',
introduce_email: 'Enter your email',
email: 'Email',
invalid_email: 'Your email is invalid',
verify_email: 'Verify your email',
go_login: 'Back to Login',
incorrect_input: 'Incorrect input.',
link_sent: 'To confirm the Registration, read your mailbox and click on "Verify email".\nIf you can not find it check your junk mail or spam.'
}
}
},
fetch: {
errore_generico: 'Generic Error',
errore_server: 'Unable to access to the Server. Retry. Thank you.',
error_doppiologin: 'Signup again. Another access was made with another device.',
},
user: {
notregistered: 'You need first to SignUp before storing data'
},
reg: {
incorso: 'Registration please wait...',
richiesto: 'Field Required',
email: 'Email',
username_login : 'Username or email',
username : 'Username',
password: 'Password',
repeatPassword: 'Repeat password',
terms: "I agree with the terms and conditions",
submit: "Submit",
title_verif_reg: "Verify Registration",
verificato: "Verified",
non_verificato: "Not Verified",
forgetpassword:"Forget Password?",
err: {
required: 'is required',
email: 'must be a valid email',
errore_generico: 'Please review fields again',
atleast: 'must be at least',
complexity: 'must contains at least 1 lowercase letter, 1 uppercase letter, and 1 digit',
notmore: 'must not be more than',
char: 'characters long',
terms: 'You need to agree with the terms & conditions.',
duplicate_email: 'Email was already registered',
duplicate_username: 'Username is already taken',
sameaspassword: 'Passwords must be identical',
}
},
login:{
incorso: 'Login...',
enter: 'Login',
errato: "Username or password wrong. Please retry again",
completato: 'Login successfully!',
},
reset: {
title_reset_pwd: "Reset your Password",
send_reset_pwd: 'Send password request',
incorso: 'Request New Email...',
email_sent:'Email sent',
check_email: 'Check your email for a message with a link to update your password. This link will expire in 4 hours for security reasons.',
title_update_pwd: 'Update your password',
update_password: 'Update Password',
},
logout:{
uscito: 'Logout successfully',
},
errors: {
graphql: {
undefined: 'undefined'
}
},
todo: {
titleprioritymenu: 'Priority:',
inserttop: 'Insert Task at the top',
insertbottom: 'Insert Task at the bottom',
edit: 'Task Description:',
completed: 'Lasts Completed',
usernotdefined: 'Attention, you need to be Signed In to add a new Task'
},
notification : {
status: 'Status',
ask: 'Enable Notification',
waitingconfirm: 'Confirm the Request Notification',
confirmed: 'Notifications Enabled!',
denied: 'Notifications Disabled! Attention, you will not see your messages incoming. Reenable it for see it',
titlegranted: 'Notification Permission Granted!',
statusnot: 'status Notification',
titledenied: 'Notification Permission Denied!',
title_subscribed: 'Subscribed to FreePlanet.app!',
subscribed: 'You can now receive Notification and Messages.',
newVersionAvailable: 'New Version!'
},
connection: 'Conexión',
},
};
export default messages;

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

View File

@@ -1,461 +0,0 @@
(function(self) {
'use strict';
if (self.fetch) {
return
}
var support = {
searchParams: 'URLSearchParams' in self,
iterable: 'Symbol' in self && 'iterator' in Symbol,
blob: 'FileReader' in self && 'Blob' in self && (function() {
try {
new Blob()
return true
} catch(e) {
return false
}
})(),
formData: 'FormData' in self,
arrayBuffer: 'ArrayBuffer' in self
}
if (support.arrayBuffer) {
var viewClasses = [
'[object Int8Array]',
'[object Uint8Array]',
'[object Uint8ClampedArray]',
'[object Int16Array]',
'[object Uint16Array]',
'[object Int32Array]',
'[object Uint32Array]',
'[object Float32Array]',
'[object Float64Array]'
]
var isDataView = function(obj) {
return obj && DataView.prototype.isPrototypeOf(obj)
}
var isArrayBufferView = ArrayBuffer.isView || function(obj) {
return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1
}
}
function normalizeName(name) {
if (typeof name !== 'string') {
name = String(name)
}
if (/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name)) {
throw new TypeError('Invalid character in header field name')
}
return name.toLowerCase()
}
function normalizeValue(value) {
if (typeof value !== 'string') {
value = String(value)
}
return value
}
// Build a destructive iterator for the value list
function iteratorFor(items) {
var iterator = {
next: function() {
var value = items.shift()
return {done: value === undefined, value: value}
}
}
if (support.iterable) {
iterator[Symbol.iterator] = function() {
return iterator
}
}
return iterator
}
function Headers(headers) {
this.map = {}
if (headers instanceof Headers) {
headers.forEach(function(value, name) {
this.append(name, value)
}, this)
} else if (Array.isArray(headers)) {
headers.forEach(function(header) {
this.append(header[0], header[1])
}, this)
} else if (headers) {
Object.getOwnPropertyNames(headers).forEach(function(name) {
this.append(name, headers[name])
}, this)
}
}
Headers.prototype.append = function(name, value) {
name = normalizeName(name)
value = normalizeValue(value)
var oldValue = this.map[name]
this.map[name] = oldValue ? oldValue+','+value : value
}
Headers.prototype['delete'] = function(name) {
delete this.map[normalizeName(name)]
}
Headers.prototype.get = function(name) {
name = normalizeName(name)
return this.has(name) ? this.map[name] : null
}
Headers.prototype.has = function(name) {
return this.map.hasOwnProperty(normalizeName(name))
}
Headers.prototype.set = function(name, value) {
this.map[normalizeName(name)] = normalizeValue(value)
}
Headers.prototype.forEach = function(callback, thisArg) {
for (var name in this.map) {
if (this.map.hasOwnProperty(name)) {
callback.call(thisArg, this.map[name], name, this)
}
}
}
Headers.prototype.keys = function() {
var items = []
this.forEach(function(value, name) { items.push(name) })
return iteratorFor(items)
}
Headers.prototype.values = function() {
var items = []
this.forEach(function(value) { items.push(value) })
return iteratorFor(items)
}
Headers.prototype.entries = function() {
var items = []
this.forEach(function(value, name) { items.push([name, value]) })
return iteratorFor(items)
}
if (support.iterable) {
Headers.prototype[Symbol.iterator] = Headers.prototype.entries
}
function consumed(body) {
if (body.bodyUsed) {
return Promise.reject(new TypeError('Already read'))
}
body.bodyUsed = true
}
function fileReaderReady(reader) {
return new Promise(function(resolve, reject) {
reader.onload = function() {
resolve(reader.result)
}
reader.onerror = function() {
reject(reader.error)
}
})
}
function readBlobAsArrayBuffer(blob) {
var reader = new FileReader()
var promise = fileReaderReady(reader)
reader.readAsArrayBuffer(blob)
return promise
}
function readBlobAsText(blob) {
var reader = new FileReader()
var promise = fileReaderReady(reader)
reader.readAsText(blob)
return promise
}
function readArrayBufferAsText(buf) {
var view = new Uint8Array(buf)
var chars = new Array(view.length)
for (var i = 0; i < view.length; i++) {
chars[i] = String.fromCharCode(view[i])
}
return chars.join('')
}
function bufferClone(buf) {
if (buf.slice) {
return buf.slice(0)
} else {
var view = new Uint8Array(buf.byteLength)
view.set(new Uint8Array(buf))
return view.buffer
}
}
function Body() {
this.bodyUsed = false
this._initBody = function(body) {
this._bodyInit = body
if (!body) {
this._bodyText = ''
} else if (typeof body === 'string') {
this._bodyText = body
} else if (support.blob && Blob.prototype.isPrototypeOf(body)) {
this._bodyBlob = body
} else if (support.formData && FormData.prototype.isPrototypeOf(body)) {
this._bodyFormData = body
} else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
this._bodyText = body.toString()
} else if (support.arrayBuffer && support.blob && isDataView(body)) {
this._bodyArrayBuffer = bufferClone(body.buffer)
// IE 10-11 can't handle a DataView body.
this._bodyInit = new Blob([this._bodyArrayBuffer])
} else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {
this._bodyArrayBuffer = bufferClone(body)
} else {
throw new Error('unsupported BodyInit type')
}
if (!this.headers.get('content-type')) {
if (typeof body === 'string') {
this.headers.set('content-type', 'text/plain;charset=UTF-8')
} else if (this._bodyBlob && this._bodyBlob.type) {
this.headers.set('content-type', this._bodyBlob.type)
} else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')
}
}
}
if (support.blob) {
this.blob = function() {
var rejected = consumed(this)
if (rejected) {
return rejected
}
if (this._bodyBlob) {
return Promise.resolve(this._bodyBlob)
} else if (this._bodyArrayBuffer) {
return Promise.resolve(new Blob([this._bodyArrayBuffer]))
} else if (this._bodyFormData) {
throw new Error('could not read FormData body as blob')
} else {
return Promise.resolve(new Blob([this._bodyText]))
}
}
this.arrayBuffer = function() {
if (this._bodyArrayBuffer) {
return consumed(this) || Promise.resolve(this._bodyArrayBuffer)
} else {
return this.blob().then(readBlobAsArrayBuffer)
}
}
}
this.text = function() {
var rejected = consumed(this)
if (rejected) {
return rejected
}
if (this._bodyBlob) {
return readBlobAsText(this._bodyBlob)
} else if (this._bodyArrayBuffer) {
return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))
} else if (this._bodyFormData) {
throw new Error('could not read FormData body as text')
} else {
return Promise.resolve(this._bodyText)
}
}
if (support.formData) {
this.formData = function() {
return this.text().then(decode)
}
}
this.json = function() {
return this.text().then(JSON.parse)
}
return this
}
// HTTP methods whose capitalization should be normalized
var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']
function normalizeMethod(method) {
var upcased = method.toUpperCase()
return (methods.indexOf(upcased) > -1) ? upcased : method
}
function Request(input, options) {
options = options || {}
var body = options.body
if (input instanceof Request) {
if (input.bodyUsed) {
throw new TypeError('Already read')
}
this.url = input.url
this.credentials = input.credentials
if (!options.headers) {
this.headers = new Headers(input.headers)
}
this.method = input.method
this.mode = input.mode
if (!body && input._bodyInit != null) {
body = input._bodyInit
input.bodyUsed = true
}
} else {
this.url = String(input)
}
this.credentials = options.credentials || this.credentials || 'omit'
if (options.headers || !this.headers) {
this.headers = new Headers(options.headers)
}
this.method = normalizeMethod(options.method || this.method || 'GET')
this.mode = options.mode || this.mode || null
this.referrer = null
if ((this.method === 'GET' || this.method === 'HEAD') && body) {
throw new TypeError('Body not allowed for GET or HEAD requests')
}
this._initBody(body)
}
Request.prototype.clone = function() {
return new Request(this, { body: this._bodyInit })
}
function decode(body) {
var form = new FormData()
body.trim().split('&').forEach(function(bytes) {
if (bytes) {
var split = bytes.split('=')
var name = split.shift().replace(/\+/g, ' ')
var value = split.join('=').replace(/\+/g, ' ')
form.append(decodeURIComponent(name), decodeURIComponent(value))
}
})
return form
}
function parseHeaders(rawHeaders) {
var headers = new Headers()
rawHeaders.split(/\r?\n/).forEach(function(line) {
var parts = line.split(':')
var key = parts.shift().trim()
if (key) {
var value = parts.join(':').trim()
headers.append(key, value)
}
})
return headers
}
Body.call(Request.prototype)
function Response(bodyInit, options) {
if (!options) {
options = {}
}
this.type = 'default'
this.status = 'status' in options ? options.status : 200
this.ok = this.status >= 200 && this.status < 300
this.statusText = 'statusText' in options ? options.statusText : 'OK'
this.headers = new Headers(options.headers)
this.url = options.url || ''
this._initBody(bodyInit)
}
Body.call(Response.prototype)
Response.prototype.clone = function() {
return new Response(this._bodyInit, {
status: this.status,
statusText: this.statusText,
headers: new Headers(this.headers),
url: this.url
})
}
Response.error = function() {
var response = new Response(null, {status: 0, statusText: ''})
response.type = 'error'
return response
}
var redirectStatuses = [301, 302, 303, 307, 308]
Response.redirect = function(url, status) {
if (redirectStatuses.indexOf(status) === -1) {
throw new RangeError('Invalid status code')
}
return new Response(null, {status: status, headers: {location: url}})
}
self.Headers = Headers
self.Request = Request
self.Response = Response
self.fetch = function(input, init) {
return new Promise(function(resolve, reject) {
var request = new Request(input, init)
var xhr = new XMLHttpRequest()
xhr.onload = function() {
var options = {
status: xhr.status,
statusText: xhr.statusText,
headers: parseHeaders(xhr.getAllResponseHeaders() || '')
}
options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')
var body = 'response' in xhr ? xhr.response : xhr.responseText
resolve(new Response(body, options))
}
xhr.onerror = function() {
reject(new TypeError('Network request failed'))
}
xhr.ontimeout = function() {
reject(new TypeError('Network request failed'))
}
xhr.open(request.method, request.url, true)
if (request.credentials === 'include') {
xhr.withCredentials = true
}
if ('responseType' in xhr && support.blob) {
xhr.responseType = 'blob'
}
request.headers.forEach(function(value, name) {
xhr.setRequestHeader(name, value)
})
xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)
})
}
self.fetch.polyfill = true
})(typeof self !== 'undefined' ? self : this);

View File

@@ -1,311 +0,0 @@
'use strict';
(function() {
function toArray(arr) {
return Array.prototype.slice.call(arr);
}
function promisifyRequest(request) {
return new Promise(function(resolve, reject) {
request.onsuccess = function() {
resolve(request.result);
};
request.onerror = function() {
reject(request.error);
};
});
}
function promisifyRequestCall(obj, method, args) {
var request;
var p = new Promise(function(resolve, reject) {
request = obj[method].apply(obj, args);
promisifyRequest(request).then(resolve, reject);
});
p.request = request;
return p;
}
function promisifyCursorRequestCall(obj, method, args) {
var p = promisifyRequestCall(obj, method, args);
return p.then(function(value) {
if (!value) return;
return new Cursor(value, p.request);
});
}
function proxyProperties(ProxyClass, targetProp, properties) {
properties.forEach(function(prop) {
Object.defineProperty(ProxyClass.prototype, prop, {
get: function() {
return this[targetProp][prop];
},
set: function(val) {
this[targetProp][prop] = val;
}
});
});
}
function proxyRequestMethods(ProxyClass, targetProp, Constructor, properties) {
properties.forEach(function(prop) {
if (!(prop in Constructor.prototype)) return;
ProxyClass.prototype[prop] = function() {
return promisifyRequestCall(this[targetProp], prop, arguments);
};
});
}
function proxyMethods(ProxyClass, targetProp, Constructor, properties) {
properties.forEach(function(prop) {
if (!(prop in Constructor.prototype)) return;
ProxyClass.prototype[prop] = function() {
return this[targetProp][prop].apply(this[targetProp], arguments);
};
});
}
function proxyCursorRequestMethods(ProxyClass, targetProp, Constructor, properties) {
properties.forEach(function(prop) {
if (!(prop in Constructor.prototype)) return;
ProxyClass.prototype[prop] = function() {
return promisifyCursorRequestCall(this[targetProp], prop, arguments);
};
});
}
function Index(index) {
this._index = index;
}
proxyProperties(Index, '_index', [
'name',
'keyPath',
'multiEntry',
'unique'
]);
proxyRequestMethods(Index, '_index', IDBIndex, [
'get',
'getKey',
'getAll',
'getAllKeys',
'count'
]);
proxyCursorRequestMethods(Index, '_index', IDBIndex, [
'openCursor',
'openKeyCursor'
]);
function Cursor(cursor, request) {
this._cursor = cursor;
this._request = request;
}
proxyProperties(Cursor, '_cursor', [
'direction',
'key',
'primaryKey',
'value'
]);
proxyRequestMethods(Cursor, '_cursor', IDBCursor, [
'update',
'delete'
]);
// proxy 'next' methods
['advance', 'continue', 'continuePrimaryKey'].forEach(function(methodName) {
if (!(methodName in IDBCursor.prototype)) return;
Cursor.prototype[methodName] = function() {
var cursor = this;
var args = arguments;
return Promise.resolve().then(function() {
cursor._cursor[methodName].apply(cursor._cursor, args);
return promisifyRequest(cursor._request).then(function(value) {
if (!value) return;
return new Cursor(value, cursor._request);
});
});
};
});
function ObjectStore(store) {
this._store = store;
}
ObjectStore.prototype.createIndex = function() {
return new Index(this._store.createIndex.apply(this._store, arguments));
};
ObjectStore.prototype.index = function() {
return new Index(this._store.index.apply(this._store, arguments));
};
proxyProperties(ObjectStore, '_store', [
'name',
'keyPath',
'indexNames',
'autoIncrement'
]);
proxyRequestMethods(ObjectStore, '_store', IDBObjectStore, [
'put',
'add',
'delete',
'clear',
'get',
'getAll',
'getKey',
'getAllKeys',
'count'
]);
proxyCursorRequestMethods(ObjectStore, '_store', IDBObjectStore, [
'openCursor',
'openKeyCursor'
]);
proxyMethods(ObjectStore, '_store', IDBObjectStore, [
'deleteIndex'
]);
function Transaction(idbTransaction) {
this._tx = idbTransaction;
this.complete = new Promise(function(resolve, reject) {
idbTransaction.oncomplete = function() {
resolve();
};
idbTransaction.onerror = function() {
reject(idbTransaction.error);
};
idbTransaction.onabort = function() {
reject(idbTransaction.error);
};
});
}
Transaction.prototype.objectStore = function() {
return new ObjectStore(this._tx.objectStore.apply(this._tx, arguments));
};
proxyProperties(Transaction, '_tx', [
'objectStoreNames',
'mode'
]);
proxyMethods(Transaction, '_tx', IDBTransaction, [
'abort'
]);
function UpgradeDB(db, oldVersion, transaction) {
this._db = db;
this.oldVersion = oldVersion;
this.transaction = new Transaction(transaction);
}
UpgradeDB.prototype.createObjectStore = function() {
return new ObjectStore(this._db.createObjectStore.apply(this._db, arguments));
};
proxyProperties(UpgradeDB, '_db', [
'name',
'version',
'objectStoreNames'
]);
proxyMethods(UpgradeDB, '_db', IDBDatabase, [
'deleteObjectStore',
'close'
]);
function DB(db) {
this._db = db;
}
DB.prototype.transaction = function() {
return new Transaction(this._db.transaction.apply(this._db, arguments));
};
proxyProperties(DB, '_db', [
'name',
'version',
'objectStoreNames'
]);
proxyMethods(DB, '_db', IDBDatabase, [
'close'
]);
// Add cursor iterators
// TODO: remove this once browsers do the right thing with promises
['openCursor', 'openKeyCursor'].forEach(function(funcName) {
[ObjectStore, Index].forEach(function(Constructor) {
Constructor.prototype[funcName.replace('open', 'iterate')] = function() {
var args = toArray(arguments);
var callback = args[args.length - 1];
var nativeObject = this._store || this._index;
var request = nativeObject[funcName].apply(nativeObject, args.slice(0, -1));
request.onsuccess = function() {
callback(request.result);
};
};
});
});
// polyfill getAll
[Index, ObjectStore].forEach(function(Constructor) {
if (Constructor.prototype.getAll) return;
Constructor.prototype.getAll = function(query, count) {
var instance = this;
var items = [];
return new Promise(function(resolve) {
instance.iterateCursor(query, function(cursor) {
if (!cursor) {
resolve(items);
return;
}
items.push(cursor.value);
if (count !== undefined && items.length == count) {
resolve(items);
return;
}
cursor.continue();
});
});
};
});
var exp = {
open: function(name, version, upgradeCallback) {
var p = promisifyRequestCall(indexedDB, 'open', [name, version]);
var request = p.request;
request.onupgradeneeded = function(event) {
if (upgradeCallback) {
upgradeCallback(new UpgradeDB(request.result, event.oldVersion, request.transaction));
}
};
return p.then(function(db) {
return new DB(db);
});
},
delete: function(name) {
return promisifyRequestCall(indexedDB, 'deleteDatabase', [name]);
}
};
if (typeof module !== 'undefined') {
module.exports = exp;
module.exports.default = module.exports;
}
else {
self.idb = exp;
}
}());

File diff suppressed because one or more lines are too long

View File

@@ -1,372 +0,0 @@
/**
* setImmediate polyfill v1.0.1, supports IE9+
* © 20142015 Dmitry Korobkin
* Released under the MIT license
* github.com/Octane/setImmediate
*/
window.setImmediate || function () {'use strict';
var uid = 0;
var storage = {};
var firstCall = true;
var slice = Array.prototype.slice;
var message = 'setImmediatePolyfillMessage';
function fastApply(args) {
var func = args[0];
switch (args.length) {
case 1:
return func();
case 2:
return func(args[1]);
case 3:
return func(args[1], args[2]);
}
return func.apply(window, slice.call(args, 1));
}
function callback(event) {
var key = event.data;
var data;
if (typeof key == 'string' && key.indexOf(message) == 0) {
data = storage[key];
if (data) {
delete storage[key];
fastApply(data);
}
}
}
window.setImmediate = function setImmediate() {
var id = uid++;
var key = message + id;
var i = arguments.length;
var args = new Array(i);
while (i--) {
args[i] = arguments[i];
}
storage[key] = args;
if (firstCall) {
firstCall = false;
window.addEventListener('message', callback);
}
window.postMessage(key, '*');
return id;
};
window.clearImmediate = function clearImmediate(id) {
delete storage[message + id];
};
}();
/**
* Promise polyfill v1.0.10
* requires setImmediate
*
* © 20142015 Dmitry Korobkin
* Released under the MIT license
* github.com/Octane/Promise
*/
(function (global) {'use strict';
var STATUS = '[[PromiseStatus]]';
var VALUE = '[[PromiseValue]]';
var ON_FUlFILLED = '[[OnFulfilled]]';
var ON_REJECTED = '[[OnRejected]]';
var ORIGINAL_ERROR = '[[OriginalError]]';
var PENDING = 'pending';
var INTERNAL_PENDING = 'internal pending';
var FULFILLED = 'fulfilled';
var REJECTED = 'rejected';
var NOT_ARRAY = 'not an array.';
var REQUIRES_NEW = 'constructor Promise requires "new".';
var CHAINING_CYCLE = 'then() cannot return same Promise that it resolves.';
var setImmediate = global.setImmediate || require('timers').setImmediate;
var isArray = Array.isArray || function (anything) {
return Object.prototype.toString.call(anything) == '[object Array]';
};
function InternalError(originalError) {
this[ORIGINAL_ERROR] = originalError;
}
function isInternalError(anything) {
return anything instanceof InternalError;
}
function isObject(anything) {
//Object.create(null) instanceof Object → false
return Object(anything) === anything;
}
function isCallable(anything) {
return typeof anything == 'function';
}
function isPromise(anything) {
return anything instanceof Promise;
}
function identity(value) {
return value;
}
function thrower(reason) {
throw reason;
}
function enqueue(promise, onFulfilled, onRejected) {
if (!promise[ON_FUlFILLED]) {
promise[ON_FUlFILLED] = [];
promise[ON_REJECTED] = [];
}
promise[ON_FUlFILLED].push(onFulfilled);
promise[ON_REJECTED].push(onRejected);
}
function clearAllQueues(promise) {
delete promise[ON_FUlFILLED];
delete promise[ON_REJECTED];
}
function callEach(queue) {
var i;
var length = queue.length;
for (i = 0; i < length; i++) {
queue[i]();
}
}
function call(resolve, reject, value) {
var anything = toPromise(value);
if (isPromise(anything)) {
anything.then(resolve, reject);
} else if (isInternalError(anything)) {
reject(anything[ORIGINAL_ERROR]);
} else {
resolve(value);
}
}
function toPromise(anything) {
var then;
if (isPromise(anything)) {
return anything;
}
if(isObject(anything)) {
try {
then = anything.then;
} catch (error) {
return new InternalError(error);
}
if (isCallable(then)) {
return new Promise(function (resolve, reject) {
setImmediate(function () {
try {
then.call(anything, resolve, reject);
} catch (error) {
reject(error);
}
});
});
}
}
return null;
}
function resolvePromise(promise, resolver) {
function resolve(value) {
if (promise[STATUS] == PENDING) {
fulfillPromise(promise, value);
}
}
function reject(reason) {
if (promise[STATUS] == PENDING) {
rejectPromise(promise, reason);
}
}
try {
resolver(resolve, reject);
} catch(error) {
reject(error);
}
}
function fulfillPromise(promise, value) {
var queue;
var anything = toPromise(value);
if (isPromise(anything)) {
promise[STATUS] = INTERNAL_PENDING;
anything.then(
function (value) {
fulfillPromise(promise, value);
},
function (reason) {
rejectPromise(promise, reason);
}
);
} else if (isInternalError(anything)) {
rejectPromise(promise, anything[ORIGINAL_ERROR]);
} else {
promise[STATUS] = FULFILLED;
promise[VALUE] = value;
queue = promise[ON_FUlFILLED];
if (queue && queue.length) {
clearAllQueues(promise);
callEach(queue);
}
}
}
function rejectPromise(promise, reason) {
var queue = promise[ON_REJECTED];
promise[STATUS] = REJECTED;
promise[VALUE] = reason;
if (queue && queue.length) {
clearAllQueues(promise);
callEach(queue);
}
}
function Promise(resolver) {
var promise = this;
if (!isPromise(promise)) {
throw new TypeError(REQUIRES_NEW);
}
promise[STATUS] = PENDING;
promise[VALUE] = undefined;
resolvePromise(promise, resolver);
}
Promise.prototype.then = function (onFulfilled, onRejected) {
var promise = this;
var nextPromise;
onFulfilled = isCallable(onFulfilled) ? onFulfilled : identity;
onRejected = isCallable(onRejected) ? onRejected : thrower;
nextPromise = new Promise(function (resolve, reject) {
function tryCall(func) {
var value;
try {
value = func(promise[VALUE]);
} catch (error) {
reject(error);
return;
}
if (value === nextPromise) {
reject(new TypeError(CHAINING_CYCLE));
} else {
call(resolve, reject, value);
}
}
function asyncOnFulfilled() {
setImmediate(tryCall, onFulfilled);
}
function asyncOnRejected() {
setImmediate(tryCall, onRejected);
}
switch (promise[STATUS]) {
case FULFILLED:
asyncOnFulfilled();
break;
case REJECTED:
asyncOnRejected();
break;
default:
enqueue(promise, asyncOnFulfilled, asyncOnRejected);
}
});
return nextPromise;
};
Promise.prototype['catch'] = function (onRejected) {
return this.then(identity, onRejected);
};
Promise.resolve = function (value) {
var anything = toPromise(value);
if (isPromise(anything)) {
return anything;
}
return new Promise(function (resolve, reject) {
if (isInternalError(anything)) {
reject(anything[ORIGINAL_ERROR]);
} else {
resolve(value);
}
});
};
Promise.reject = function (reason) {
return new Promise(function (resolve, reject) {
reject(reason);
});
};
Promise.race = function (values) {
return new Promise(function (resolve, reject) {
var i;
var length;
if (isArray(values)) {
length = values.length;
for (i = 0; i < length; i++) {
call(resolve, reject, values[i]);
}
} else {
reject(new TypeError(NOT_ARRAY));
}
});
};
Promise.all = function (values) {
return new Promise(function (resolve, reject) {
var fulfilledCount = 0;
var promiseCount = 0;
var anything;
var length;
var value;
var i;
if (isArray(values)) {
values = values.slice(0);
length = values.length;
for (i = 0; i < length; i++) {
value = values[i];
anything = toPromise(value);
if (isPromise(anything)) {
promiseCount++;
anything.then(
function (index) {
return function (value) {
values[index] = value;
fulfilledCount++;
if (fulfilledCount == promiseCount) {
resolve(values);
}
};
}(i),
reject
);
} else if (isInternalError(anything)) {
reject(anything[ORIGINAL_ERROR]);
} else {
//[1, , 3] → [1, undefined, 3]
values[i] = value;
}
}
if (!promiseCount) {
resolve(values);
}
} else {
reject(new TypeError(NOT_ARRAY));
}
});
};
if (typeof module != 'undefined' && module.exports) {
module.exports = global.Promise || Promise;
} else if (!global.Promise) {
global.Promise = Promise;
}
}(this));

View File

@@ -1,126 +0,0 @@
let idbKeyval = (() => {
let db;
// console.log('idbKeyval...')
function getDB() {
if (!db) {
// console.log('CREO DB STORAGE JS !')
db = new Promise((resolve, reject) => {
const openreq = indexedDB.open('mydb3', 11);
openreq.onerror = () => {
reject(openreq.error);
};
openreq.onupgradeneeded = () => {
// First time setup: create an empty object store
openreq.result.createObjectStore('todos', { keyPath: '_id' });
openreq.result.createObjectStore('categories', { keyPath: '_id' });
openreq.result.createObjectStore('sync_todos', { keyPath: '_id' });
openreq.result.createObjectStore('sync_todos_patch', { keyPath: '_id' });
openreq.result.createObjectStore('delete_todos', { keyPath: '_id' });
openreq.result.createObjectStore('config', { keyPath: '_id' });
openreq.result.createObjectStore('swmsg', { keyPath: '_id' });
};
openreq.onsuccess = () => {
resolve(openreq.result);
};
});
}
return db;
}
async function withStore(type, table, callback, ) {
const db = await getDB();
return new Promise((resolve, reject) => {
const transaction = db.transaction(table, type);
transaction.oncomplete = () => resolve();
transaction.onerror = () => reject(transaction.error);
callback(transaction.objectStore(table));
});
}
return {
async get(key) {
let req;
await withStore('readonly', 'keyval', store => {
req = store.get(key);
});
return req.result;
},
// jsonCopy(src) {
// return JSON.parse(JSON.stringify(src));
// },
// contains(a, b) {
// // array matches
// if (Array.isArray(b)) {
// return b.some(x => a.indexOf(x) > -1);
// }
// // string match
// return a.indexOf(b) > -1;
// },
async getdata(table, key) {
let req;
await withStore('readonly', table, store => {
// console.log('store', store, 'key', key)
req = store.get(key);
});
return req.result;
},
async getalldata(table) {
let req;
await withStore('readonly', table, store => {
req = store.getAll();
});
return req.result;
},
async set(key, value) {
let req;
await withStore('readwrite', 'keyval', store => {
req = store.put(value, key);
});
return req.result;
},
async setdata(table, value) {
let req;
// console.log('setdata', table, value)
await withStore('readwrite', table, store => {
req = store.put(value);
});
return req.result;
},
async delete(key) {
return await withStore('readwrite', 'keyval', store => {
store.delete(key);
});
},
async deletedata(table, key) {
return await withStore('readwrite', table, store => {
store.delete(key);
});
},
async clearalldata(table) {
// console.log('clearalldata', table)
return await withStore('readwrite', table, store => {
store.clear();
});
}
};
})();
// iOS add-to-homescreen is missing IDB, or at least it used to.
// I haven't tested this in a while.
if (!self.indexedDB) {
idbKeyval = {
get: key => Promise.resolve(localStorage.getItem(key)),
set: (key, val) => Promise.resolve(localStorage.setItem(key, val)),
delete: key => Promise.resolve(localStorage.removeItem(key))
};
}

View File

@@ -237,10 +237,10 @@
}
public selectOpLang = [
{ label: 'English', icon: 'fa-flag-us', value: 'enUs', image: '../assets/images/gb.png', short: 'EN' },
// { label: 'German', icon: 'fa-flag-de', value: 'de', image: '../assets/images/de.png', short: 'DE' },
{ label: 'Italiano', icon: 'fa-facebook', value: 'it', image: '../assets/images/it.png', short: 'IT' },
{ label: 'Español', icon: 'fa-flag-es', value: 'esEs', image: '../assets/images/es.png', short: 'ES' }
{ label: 'English', icon: 'fa-flag-us', value: 'enUs', image: '../statics/images/gb.png', short: 'EN' },
// { label: 'German', icon: 'fa-flag-de', value: 'de', image: '../statics/images/de.png', short: 'DE' },
{ label: 'Italiano', icon: 'fa-facebook', value: 'it', image: '../statics/images/it.png', short: 'IT' },
{ label: 'Español', icon: 'fa-flag-es', value: 'esEs', image: '../statics/images/es.png', short: 'ES' }
]
@@ -329,7 +329,7 @@
// dynamic import, so loading on demand only
import(`quasar-framework/i18n/${mylangtopass}`).then(lang => {
this.$q.i18n.set(lang.default)
import(`src/assets/i18n`).then(function () {
import(`src/statics/i18n`).then(function () {
})
})
}

View File

@@ -13,7 +13,7 @@ export default class Logo extends Vue {
logoimg: string = ''
created() {
this.logoimg = 'assets/images/' + process.env.LOGO_REG
this.logoimg = 'statics/images/' + process.env.LOGO_REG
this.animate()
}

View File

@@ -13,7 +13,7 @@ export default class Offline extends Vue {
logoimg: string = ''
created() {
this.logoimg = '/assets/images/' + process.env.LOGO_REG
this.logoimg = '/statics/images/' + process.env.LOGO_REG
this.animate()
}

View File

@@ -69,7 +69,7 @@ export default class Todo extends Vue {
}
set showtype (value) {
// console.log('showtype', value)
console.log('showtype', value)
GlobalStore.mutations.setShowType(value)
}

View File

@@ -1,5 +1,5 @@
import { UserStore } from "../store/Modules";
import messages from "../assets/i18n";
import messages from "../statics/i18n";
function translate(params) {
let msg = params.split('.')

View File

@@ -13,12 +13,12 @@
<link rel="icon" href="<%= htmlWebpackPlugin.files.publicPath %>statics/icons/favicon.ico" type="image/x-icon">
<link rel="icon" type="image/png" sizes="32x32" href="<%= htmlWebpackPlugin.files.publicPath %>statics/icons/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="<%= htmlWebpackPlugin.files.publicPath %>statics/icons/favicon-16x16.png">
<link rel="stylesheet" type="text/css" href="<%= htmlWebpackPlugin.files.publicPath %>assets/css/dragula.css">
<script defer src="<%= htmlWebpackPlugin.files.publicPath %>assets/js/material.min.js"></script>
<!--<script src="<%= htmlWebpackPlugin.files.publicPath %>assets/js/promise.js"></script>-->
<!--<script src="<%= htmlWebpackPlugin.files.publicPath %>assets/js/fetch.js"></script>-->
<!--<script src="<%= htmlWebpackPlugin.files.publicPath %>assets/js/idb.js"></script>-->
<!--<script src="<%= htmlWebpackPlugin.files.publicPath %>assets/js/storage.js"></script>-->
<link rel="stylesheet" type="text/css" href="<%= htmlWebpackPlugin.files.publicPath %>statics/css/dragula.css">
<script defer src="<%= htmlWebpackPlugin.files.publicPath %>statics/js/material.min.js"></script>
<!--<script src="<%= htmlWebpackPlugin.files.publicPath %>statics/js/promise.js"></script>-->
<!--<script src="<%= htmlWebpackPlugin.files.publicPath %>statics/js/fetch.js"></script>-->
<!--<script src="<%= htmlWebpackPlugin.files.publicPath %>statics/js/idb.js"></script>-->
<!--<script src="<%= htmlWebpackPlugin.files.publicPath %>statics/js/storage.js"></script>-->
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</head>

12
src/middleware/auth.js Normal file
View File

@@ -0,0 +1,12 @@
import { tools } from "../store/Modules/tools";
import { RouteNames } from '../router/route-names'
export default function auth({ next, router }) {
const tok = tools.getItemLS(tools.localStorage.token)
if (!tok) {
return router.push({ name: RouteNames.login });
}
return next();
}

View File

@@ -8,8 +8,47 @@ export default ({ app, router, store, Vue }) => {
// *** Per non permettere di accedere alle pagine in cui è necessario essere Loggati ! ***
// ******************************************
/*
// Creates a `nextMiddleware()` function which not only
// runs the default `next()` callback but also triggers
// the subsequent Middleware function.
function nextFactory(context, middleware, index) {
const subsequentMiddleware = middleware[index]
// If no subsequent Middleware exists,
// the default `next()` callback is returned.
if (!subsequentMiddleware) return context.next
return (...parameters) => {
// Run the default Vue Router `next()` callback first.
context.next(...parameters)
// Then run the subsequent Middleware with a new
// `nextMiddleware()` callback.
const nextMiddleware = nextFactory(context, middleware, index + 1)
subsequentMiddleware({ ...context, next: nextMiddleware })
};
}
router.beforeEach((to, from, next) => {
if (to.meta.middleware) {
const middleware = Array.isArray(to.meta.middleware)
? to.meta.middleware
: [to.meta.middleware];
const context = {
from,
next,
router,
to,
};
const nextMiddleware = nextFactory(context, middleware, 1)
return middleware[0]({ ...context, next: nextMiddleware })
}
return next()
})
/*router.beforeEach((to, from, next) => {
var accessToken = store.state.session.userSession.accessToken
// ESTANDO LOGEADO
if (accessToken) {
@@ -45,6 +84,6 @@ export default ({ app, router, store, Vue }) => {
next('/')
}
}
})
*/
})*/
}

View File

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

View File

@@ -3,7 +3,7 @@
}
.landing {
background: #000 url(../../assets/images/cover.jpg) no-repeat 50% fixed;
background: #000 url(../../statics/images/cover.jpg) no-repeat 50% fixed;
background-size: cover
}
@@ -142,7 +142,7 @@ body.mobile .landing:before {
right: 0;
bottom: 0;
z-index: -1;
background: #000 url(../../assets/images/cover.jpg) 50%;
background: #000 url(../../statics/images/cover.jpg) 50%;
background-size: cover
}

View File

@@ -112,7 +112,7 @@ export default class Home extends Vue {
options = {
body: 'You successfully subscribed to our Notification service!',
icon: '/statics/icons/app-icon-96x96.png',
image: '/assets/images/sf-boat.jpg',
image: '/statics/images/sf-boat.jpg',
dir: 'ltr',
lang: 'enUs', // BCP 47,
vibrate: [100, 50, 200],
@@ -169,7 +169,7 @@ export default class Home extends Vue {
options = {
body: mythis.$t('notification.subscribed'),
icon: '/statics/icons/android-chrome-192x192.png',
image: '/assets/images/freeplanet.png',
image: '/statics/images/freeplanet.png',
dir: 'ltr',
lang: 'enUs', // BCP 47,
vibrate: [100, 50, 200],

View File

@@ -18,16 +18,6 @@
<div class="text-subtitle2 shadow text-italic q-pl-sm ">{{$t('msg.sottoTitoloApp3')}}
</div>
<div>
<q-btn v-if="getPermission() !== 'granted'" class="enable-notifications shadow"
color="primary" rounded
size="lg"
icon="notifications" @click="askfornotification"
:label="$t('notification.ask')"/>
<!--<q-btn v-if="getPermission() === 'granted'" class="enable-notifications" color="primary" rounded size="lg" icon="notifications" @click="showNotificationExample" label="Send Notification"/>-->
<!--<q-btn v-if="getPermission() === 'granted'" class="enable-notifications" color="secondary" rounded size="lg" icon="notifications" @click="createPushSubscription" label="Create Push Subscription !"/>-->
</div>
<!--
<q-btn>
@@ -75,6 +65,17 @@
</q-field>
</div>
<div>
<q-btn v-if="getPermission() !== 'granted'" class="enable-notifications shadow"
color="primary" rounded
size="lg"
icon="notifications" @click="askfornotification"
:label="$t('notification.ask')"/>
<!--<q-btn v-if="getPermission() === 'granted'" class="enable-notifications" color="primary" rounded size="lg" icon="notifications" @click="showNotificationExample" label="Send Notification"/>-->
<!--<q-btn v-if="getPermission() === 'granted'" class="enable-notifications" color="secondary" rounded size="lg" icon="notifications" @click="createPushSubscription" label="Create Push Subscription !"/>-->
</div>
<!--<div class="q-pt-md q-pl-sm">-->
<!--<div class="landing__hero-btns q-gutter-md row items-center"><a tabindex="0"-->
<!--type="button"-->

View File

@@ -50,7 +50,7 @@
<!--<div>-->
<!--&lt;!&ndash; the row with a type of gutter &ndash;&gt;-->
<!--<q-alert-->
<!--avatar="assets/boy-avatar.png"-->
<!--avatar="statics/boy-avatar.png"-->
<!--color="primary"-->
<!--message="Jack"-->
<!--detail="Per un mondo più Consapevole"-->

View File

@@ -1,54 +1,59 @@
import { RouteConfig as VueRouteConfig } from 'vue-router'
import { RouteNames } from './route-names'
import { tools } from '@src/store/Modules/tools'
import auth from '../middleware/auth'
export const RouteConfig: VueRouteConfig[] = [
{
component: () => import('@/root/home/home.vue'),
name: RouteNames.home,
path: '/',
meta: { name: 'Home' }
name: RouteNames.home,
component: () => import('@/root/home/home.vue')
},
{
path: '/signup',
component: () => import('@/views/login/signup/signup.vue'),
meta: { name: 'Registration' }
name: 'Registration',
component: () => import('@/views/login/signup/signup.vue')
},
{
path: '/signin',
component: () => import('@/views/login/signin/signin.vue'),
meta: { name: 'Login' }
name: RouteNames.login,
component: () => import('@/views/login/signin/signin.vue')
},
{
path: '/vreg',
component: () => import('@/views/login/vreg/vreg.vue'),
meta: { name: 'Verify Reg' }
name: 'Verify Reg',
component: () => import('@/views/login/vreg/vreg.vue')
},
{
path: '/todo/:category',
name: 'Todos',
component: () => import('@/components/todos/todo/todo.vue'),
// props: { category: 'personal' },
meta: { name: 'Todos' }
meta: {
middleware: [auth]
}
},
{
path: '/category',
component: () => import('@/components/categories/category/category.vue'),
meta: { name: 'Categories' }
name: 'category',
component: () => import('@/components/categories/category/category.vue')
},
{
path: '/admin/cfgserv',
component: () => import('@/components/admin/cfgServer/cfgServer.vue'),
meta: { name: 'Categories' }
name: 'cfgserv',
component: () => import('@/components/admin/cfgServer/cfgServer.vue')
},
{
path: '/admin/testp1/:category',
component: () => import('@/components/admin/testp1/testp1.vue'),
meta: { name: 'Categories' }
name: 'Categories',
component: () => import('@/components/admin/testp1/testp1.vue')
},
{
path: '/offline',
component: () => import('@/components/offline/offline.vue'),
meta: { name: 'Offline' }
name: 'Offline',
component: () => import('@/components/offline/offline.vue')
}
/*
{
@@ -74,4 +79,3 @@ export const RouteConfig: VueRouteConfig[] = [
meta: { name: 'Embeeded' }
}*/
]

View File

@@ -4,7 +4,8 @@ import * as Types from '@src/store/Api/ApiTypes'
async function sendRequest(url: string, method: string, mydata: any) {
console.log('sendRequest', method, url)
if (!process.env.DEBUG)
console.log('sendRequest', method, url)
let request
if (method === 'GET')

View File

@@ -17,12 +17,14 @@ export const axiosInstance: AxiosInstance = axios.create({
axiosInstance.interceptors.response.use(
(response) => {
console.log(response)
if (process.env.DEBUG === '1')
console.log(response)
return response
},
(error) => {
if (error.response) {
console.log(error.response.status)
if (process.env.DEBUG === '1')
console.log(error.response.status)
console.log('Request Error: ', error.response)
}
return Promise.reject(error)

View File

@@ -7,7 +7,7 @@ import translate from './../../globalroutines/util'
import urlBase64ToUint8Array from '../../js/utility'
import messages from '../../assets/i18n'
import messages from '../../statics/i18n'
import { GlobalStore, Todos, UserStore } from '@store'
import globalroutines from './../../globalroutines/index'
import Api from '@api'
@@ -62,11 +62,15 @@ async function getConfig(id) {
async function getstateConnSaved() {
const config = await getConfig(costanti.CONFIG_ID_CFG)
console.log('config', config)
if (config.length > 1) {
const cfgstateconn = config[1]
return cfgstateconn.stateconn
if (config) {
if (config.length > 1) {
const cfgstateconn = config[1]
return cfgstateconn.stateconn
} else {
return 'online'
}
} else {
return 'online'
return 'offline'
}
}
@@ -84,12 +88,12 @@ namespace Getters {
const testpao1_getter_array = b.read(state => param1 => state.testp1.mioarray.filter(item => item).map(item => item.valore), 'testpao1_getter_array')
const getConfigbyId = b.read(state => id => state.arrConfig.find(item => item._id === id), 'getConfigbyId')
const getConfigStringbyId = b.read(state => id => {
const config = state.arrConfig.find(item => item._id === id)
const getConfigStringbyId = b.read(state => params => {
const config = state.arrConfig.find(item => item._id === params.id)
if (config) {
return config.value
} else {
return ''
return params.default
}
}, 'getConfigStringbyId')
@@ -199,15 +203,18 @@ namespace Mutations {
}
function setShowType(state: IGlobalState, showtype: number) {
// console.log('setShowType', showtype)
console.log('setShowType', showtype)
const config = Getters.getters.getConfigbyId(costanti.CONFIG_ID_SHOW_TYPE_TODOS)
// console.log('config', config)
console.log('config', config)
if (config) {
config.value = String(showtype)
Todos.state.showtype = parseInt(config.value)
// console.log('Todos.state.showtype', Todos.state.showtype)
GlobalStore.mutations.saveConfig({ _id: costanti.CONFIG_ID_SHOW_TYPE_TODOS, value: String(showtype) })
} else {
Todos.state.showtype = showtype
}
console.log('Todos.state.showtype', Todos.state.showtype)
GlobalStore.mutations.saveConfig({ _id: costanti.CONFIG_ID_SHOW_TYPE_TODOS, value: String(showtype) })
}
export const mutations = {

View File

@@ -404,7 +404,8 @@ namespace Actions {
return sendSwMsgIfAvailable()
.then(something => {
if (something) {
console.log('something')
if (process.env.DEBUG === '1')
console.log('something')
// Refresh data
return waitAndRefreshData(context)
}
@@ -482,13 +483,13 @@ namespace Actions {
// console.log('PRIMA showtype = ', state.showtype)
state.showtype = parseInt(GlobalStore.getters.getConfigStringbyId(costanti.CONFIG_ID_SHOW_TYPE_TODOS))
state.showtype = parseInt(GlobalStore.getters.getConfigStringbyId({id: costanti.CONFIG_ID_SHOW_TYPE_TODOS, default: costanti.ShowTypeTask.SHOW_LAST_N_COMPLETED }))
// console.log('showtype = ', state.showtype)
// console.log('ARRAY TODOS = ', state.todos)
console.log('dbLoadTodo', 'state.todos', state.todos, 'state.categories', state.categories)
if (process.env.DEBUG === '1')
console.log('dbLoadTodo', 'state.todos', state.todos, 'state.categories', state.categories)
return res
})
@@ -499,7 +500,8 @@ namespace Actions {
})
if (ris.status !== 200) {
console.log('ris.status', ris.status)
if (process.env.DEBUG === '1')
console.log('ris.status', ris.status)
if (ris.status === serv_constants.RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN) {
consolelogpao('UNAUTHORIZING... TOKEN EXPIRED... !! ')
} else {

View File

@@ -367,7 +367,7 @@ namespace Actions {
}
async function signin(context, authData: ISigninOptions) {
console.log('LOGIN signin')
// console.log('LOGIN signin')
// console.log('MYLANG = ' + state.lang)
@@ -406,8 +406,8 @@ namespace Actions {
}
// console.log('PASSO 4')
console.log(usertosend)
if (process.env.DEBUG === '1')
console.log(usertosend)
Mutations.mutations.setServerCode(tools.CALLING)

View File

@@ -147,11 +147,16 @@ export default class Signin extends Vue {
return
}
this.$q.loading.show({ message: this.$t('login.incorso') })
let msg = this.$t('login.incorso')
if (process.env.DEBUG)
msg += ' ' + process.env.MONGODB_HOST
this.$q.loading.show({ message: msg})
// disable Button Login:
this.iswaitingforRes = true
console.log(this.signin)
if (process.env.DEBUG)
console.log('this.signin', this.signin)
UserStore.actions.signin(this.signin)
.then((riscode) => {
// console.log('signin FINITO CALL: riscode=', riscode)

View File

@@ -25,10 +25,10 @@
"paths": {
"@src/*": ["./*"],
"@components": ["./components/index.ts"],
"@css/*": ["./assets/css/*"],
"@css/*": ["./statics/css/*"],
"@icons/*": ["./statics/icons/*"],
"@images/*": ["./assets/images/*"],
"@js/*": ["./assets/js/*"],
"@images/*": ["./statics/images/*"],
"@js/*": ["./statics/js/*"],
"@classes": ["./classes/index.ts"],
"@utils/*": ["./utils/*"],
"@validators": ["./utils/validators.ts"],

View File

@@ -10189,9 +10189,9 @@ optimist@^0.6.1:
minimist "~0.0.1"
wordwrap "~0.0.2"
optimize-css-assets-webpack-plugin@5.0.1:
optimize-css-statics-webpack-plugin@5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.1.tgz#9eb500711d35165b45e7fd60ba2df40cb3eb9159"
resolved "https://registry.yarnpkg.com/optimize-css-statics-webpack-plugin/-/optimize-css-statics-webpack-plugin-5.0.1.tgz#9eb500711d35165b45e7fd60ba2df40cb3eb9159"
integrity sha512-Rqm6sSjWtx9FchdP0uzTQDc7GXDKnwVEGoSxjezPkzMewx7gEWE9IMUYKmigTRC4U3RaNSwYVnUDLuIdtTpm0A==
dependencies:
cssnano "^4.1.0"
@@ -11751,7 +11751,7 @@ quasar-cli@^0.17.23:
net "1.0.2"
node-loader "0.6.0"
opn "5.3.0"
optimize-css-assets-webpack-plugin "5.0.1"
optimize-css-statics-webpack-plugin "5.0.1"
ouch "2.0.0"
postcss-loader "3.0.0"
postcss-rtl "1.3.2"