diff --git a/.env.development b/.env.development index acbd665..211e8d9 100644 --- a/.env.development +++ b/.env.development @@ -13,3 +13,4 @@ TEST_USERNAME='paoloar77' TEST_PASSWORD='mypassword@1A' PUBLICKEY_PUSH='BGxRrFWnPoa_ImUaWXmeEOFVI9VNKVKaAPsvsM1XY6wn24yxp9MyOQ4crNYCJKxSXV65Y1GblW5_VLoamedcZ1I' IN_CONSTRUCTION='0' +DEBUG='1' diff --git a/.gitignore b/.gitignore index b327f0b..de79285 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/package-lock.json b/package-lock.json index ff0c07c..3532751 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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", diff --git a/quasar.conf.js b/quasar.conf.js index e4e9ede..328b023 100644 --- a/quasar.conf.js +++ b/quasar.conf.js @@ -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' // } // ], diff --git a/src-pwa/custom-service-worker.js b/src-pwa/custom-service-worker.js index b140498..b7fd3b4 100644 --- a/src-pwa/custom-service-worker.js +++ b/src-pwa/custom-service-worker.js @@ -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, diff --git a/src/assets/i18n.js b/src/assets/i18n.js deleted file mode 100644 index e4ae674..0000000 --- a/src/assets/i18n.js +++ /dev/null @@ -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; diff --git a/src/assets/images/freeplanet-logo-full.svg b/src/assets/images/freeplanet-logo-full.svg deleted file mode 100644 index b9c10df..0000000 --- a/src/assets/images/freeplanet-logo-full.svg +++ /dev/null @@ -1,1186 +0,0 @@ - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/assets/images/freeplanet.png b/src/assets/images/freeplanet.png deleted file mode 100644 index b5e10db..0000000 Binary files a/src/assets/images/freeplanet.png and /dev/null differ diff --git a/src/assets/js/fetch.js b/src/assets/js/fetch.js deleted file mode 100644 index 6bac6b3..0000000 --- a/src/assets/js/fetch.js +++ /dev/null @@ -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); diff --git a/src/assets/js/idb.js b/src/assets/js/idb.js deleted file mode 100644 index 9835513..0000000 --- a/src/assets/js/idb.js +++ /dev/null @@ -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; - } -}()); diff --git a/src/assets/js/material.min.js b/src/assets/js/material.min.js deleted file mode 100644 index 46524fb..0000000 --- a/src/assets/js/material.min.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * material-design-lite - Material Design Components in CSS, JS and HTML - * @version v1.3.0 - * @license Apache-2.0 - * @copyright 2015 Google, Inc. - * @link https://github.com/google/material-design-lite - */ -!function(){"use strict";function e(e,t){if(e){if(t.element_.classList.contains(t.CssClasses_.MDL_JS_RIPPLE_EFFECT)){var s=document.createElement("span");s.classList.add(t.CssClasses_.MDL_RIPPLE_CONTAINER),s.classList.add(t.CssClasses_.MDL_JS_RIPPLE_EFFECT);var i=document.createElement("span");i.classList.add(t.CssClasses_.MDL_RIPPLE),s.appendChild(i),e.appendChild(s)}e.addEventListener("click",function(s){if("#"===e.getAttribute("href").charAt(0)){s.preventDefault();var i=e.href.split("#")[1],n=t.element_.querySelector("#"+i);t.resetTabState_(),t.resetPanelState_(),e.classList.add(t.CssClasses_.ACTIVE_CLASS),n.classList.add(t.CssClasses_.ACTIVE_CLASS)}})}}function t(e,t,s,i){function n(){var n=e.href.split("#")[1],a=i.content_.querySelector("#"+n);i.resetTabState_(t),i.resetPanelState_(s),e.classList.add(i.CssClasses_.IS_ACTIVE),a.classList.add(i.CssClasses_.IS_ACTIVE)}if(i.tabBar_.classList.contains(i.CssClasses_.JS_RIPPLE_EFFECT)){var a=document.createElement("span");a.classList.add(i.CssClasses_.RIPPLE_CONTAINER),a.classList.add(i.CssClasses_.JS_RIPPLE_EFFECT);var l=document.createElement("span");l.classList.add(i.CssClasses_.RIPPLE),a.appendChild(l),e.appendChild(a)}i.tabBar_.classList.contains(i.CssClasses_.TAB_MANUAL_SWITCH)||e.addEventListener("click",function(t){"#"===e.getAttribute("href").charAt(0)&&(t.preventDefault(),n())}),e.show=n}var s={upgradeDom:function(e,t){},upgradeElement:function(e,t){},upgradeElements:function(e){},upgradeAllRegistered:function(){},registerUpgradedCallback:function(e,t){},register:function(e){},downgradeElements:function(e){}};s=function(){function e(e,t){for(var s=0;s0&&l(t.children))}function o(t){var s="undefined"==typeof t.widget&&"undefined"==typeof t.widget,i=!0;s||(i=t.widget||t.widget);var n={classConstructor:t.constructor||t.constructor,className:t.classAsString||t.classAsString,cssClass:t.cssClass||t.cssClass,widget:i,callbacks:[]};if(c.forEach(function(e){if(e.cssClass===n.cssClass)throw new Error("The provided cssClass has already been registered: "+e.cssClass);if(e.className===n.className)throw new Error("The provided className has already been registered")}),t.constructor.prototype.hasOwnProperty(C))throw new Error("MDL component classes must not have "+C+" defined as a property.");var a=e(t.classAsString,n);a||c.push(n)}function r(t,s){var i=e(t);i&&i.callbacks.push(s)}function _(){for(var e=0;e0&&this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)&&(e.keyCode===this.Keycodes_.UP_ARROW?(e.preventDefault(),t[t.length-1].focus()):e.keyCode===this.Keycodes_.DOWN_ARROW&&(e.preventDefault(),t[0].focus()))}},d.prototype.handleItemKeyboardEvent_=function(e){if(this.element_&&this.container_){var t=this.element_.querySelectorAll("."+this.CssClasses_.ITEM+":not([disabled])");if(t&&t.length>0&&this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)){var s=Array.prototype.slice.call(t).indexOf(e.target);if(e.keyCode===this.Keycodes_.UP_ARROW)e.preventDefault(),s>0?t[s-1].focus():t[t.length-1].focus();else if(e.keyCode===this.Keycodes_.DOWN_ARROW)e.preventDefault(),t.length>s+1?t[s+1].focus():t[0].focus();else if(e.keyCode===this.Keycodes_.SPACE||e.keyCode===this.Keycodes_.ENTER){e.preventDefault();var i=new MouseEvent("mousedown");e.target.dispatchEvent(i),i=new MouseEvent("mouseup"),e.target.dispatchEvent(i),e.target.click()}else e.keyCode===this.Keycodes_.ESCAPE&&(e.preventDefault(),this.hide())}}},d.prototype.handleItemClick_=function(e){e.target.hasAttribute("disabled")?e.stopPropagation():(this.closing_=!0,window.setTimeout(function(e){this.hide(),this.closing_=!1}.bind(this),this.Constant_.CLOSE_TIMEOUT))},d.prototype.applyClip_=function(e,t){this.element_.classList.contains(this.CssClasses_.UNALIGNED)?this.element_.style.clip="":this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)?this.element_.style.clip="rect(0 "+t+"px 0 "+t+"px)":this.element_.classList.contains(this.CssClasses_.TOP_LEFT)?this.element_.style.clip="rect("+e+"px 0 "+e+"px 0)":this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)?this.element_.style.clip="rect("+e+"px "+t+"px "+e+"px "+t+"px)":this.element_.style.clip=""},d.prototype.removeAnimationEndListener_=function(e){e.target.classList.remove(d.prototype.CssClasses_.IS_ANIMATING)},d.prototype.addAnimationEndListener_=function(){this.element_.addEventListener("transitionend",this.removeAnimationEndListener_),this.element_.addEventListener("webkitTransitionEnd",this.removeAnimationEndListener_)},d.prototype.show=function(e){if(this.element_&&this.container_&&this.outline_){var t=this.element_.getBoundingClientRect().height,s=this.element_.getBoundingClientRect().width;this.container_.style.width=s+"px",this.container_.style.height=t+"px",this.outline_.style.width=s+"px",this.outline_.style.height=t+"px";for(var i=this.Constant_.TRANSITION_DURATION_SECONDS*this.Constant_.TRANSITION_DURATION_FRACTION,n=this.element_.querySelectorAll("."+this.CssClasses_.ITEM),a=0;a0&&this.showSnackbar(this.queuedNotifications_.shift())},C.prototype.cleanup_=function(){this.element_.classList.remove(this.cssClasses_.ACTIVE),setTimeout(function(){this.element_.setAttribute("aria-hidden","true"),this.textElement_.textContent="",Boolean(this.actionElement_.getAttribute("aria-hidden"))||(this.setActionHidden_(!0),this.actionElement_.textContent="",this.actionElement_.removeEventListener("click",this.actionHandler_)),this.actionHandler_=void 0,this.message_=void 0,this.actionText_=void 0,this.active=!1,this.checkQueue_()}.bind(this),this.Constant_.ANIMATION_LENGTH)},C.prototype.setActionHidden_=function(e){e?this.actionElement_.setAttribute("aria-hidden","true"):this.actionElement_.removeAttribute("aria-hidden")},s.register({constructor:C,classAsString:"MaterialSnackbar",cssClass:"mdl-js-snackbar",widget:!0});var u=function(e){this.element_=e,this.init()};window.MaterialSpinner=u,u.prototype.Constant_={MDL_SPINNER_LAYER_COUNT:4},u.prototype.CssClasses_={MDL_SPINNER_LAYER:"mdl-spinner__layer",MDL_SPINNER_CIRCLE_CLIPPER:"mdl-spinner__circle-clipper",MDL_SPINNER_CIRCLE:"mdl-spinner__circle",MDL_SPINNER_GAP_PATCH:"mdl-spinner__gap-patch",MDL_SPINNER_LEFT:"mdl-spinner__left",MDL_SPINNER_RIGHT:"mdl-spinner__right"},u.prototype.createLayer=function(e){var t=document.createElement("div");t.classList.add(this.CssClasses_.MDL_SPINNER_LAYER),t.classList.add(this.CssClasses_.MDL_SPINNER_LAYER+"-"+e);var s=document.createElement("div");s.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER),s.classList.add(this.CssClasses_.MDL_SPINNER_LEFT);var i=document.createElement("div");i.classList.add(this.CssClasses_.MDL_SPINNER_GAP_PATCH);var n=document.createElement("div");n.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER),n.classList.add(this.CssClasses_.MDL_SPINNER_RIGHT);for(var a=[s,i,n],l=0;l=this.maxRows&&e.preventDefault()},L.prototype.onFocus_=function(e){this.element_.classList.add(this.CssClasses_.IS_FOCUSED)},L.prototype.onBlur_=function(e){this.element_.classList.remove(this.CssClasses_.IS_FOCUSED)},L.prototype.onReset_=function(e){this.updateClasses_()},L.prototype.updateClasses_=function(){this.checkDisabled(),this.checkValidity(),this.checkDirty(),this.checkFocus()},L.prototype.checkDisabled=function(){this.input_.disabled?this.element_.classList.add(this.CssClasses_.IS_DISABLED):this.element_.classList.remove(this.CssClasses_.IS_DISABLED)},L.prototype.checkDisabled=L.prototype.checkDisabled,L.prototype.checkFocus=function(){Boolean(this.element_.querySelector(":focus"))?this.element_.classList.add(this.CssClasses_.IS_FOCUSED):this.element_.classList.remove(this.CssClasses_.IS_FOCUSED)},L.prototype.checkFocus=L.prototype.checkFocus,L.prototype.checkValidity=function(){this.input_.validity&&(this.input_.validity.valid?this.element_.classList.remove(this.CssClasses_.IS_INVALID):this.element_.classList.add(this.CssClasses_.IS_INVALID))},L.prototype.checkValidity=L.prototype.checkValidity,L.prototype.checkDirty=function(){this.input_.value&&this.input_.value.length>0?this.element_.classList.add(this.CssClasses_.IS_DIRTY):this.element_.classList.remove(this.CssClasses_.IS_DIRTY)},L.prototype.checkDirty=L.prototype.checkDirty,L.prototype.disable=function(){this.input_.disabled=!0,this.updateClasses_()},L.prototype.disable=L.prototype.disable,L.prototype.enable=function(){this.input_.disabled=!1,this.updateClasses_()},L.prototype.enable=L.prototype.enable,L.prototype.change=function(e){this.input_.value=e||"",this.updateClasses_()},L.prototype.change=L.prototype.change,L.prototype.init=function(){if(this.element_&&(this.label_=this.element_.querySelector("."+this.CssClasses_.LABEL),this.input_=this.element_.querySelector("."+this.CssClasses_.INPUT),this.input_)){this.input_.hasAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE)&&(this.maxRows=parseInt(this.input_.getAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE),10),isNaN(this.maxRows)&&(this.maxRows=this.Constant_.NO_MAX_ROWS)),this.input_.hasAttribute("placeholder")&&this.element_.classList.add(this.CssClasses_.HAS_PLACEHOLDER),this.boundUpdateClassesHandler=this.updateClasses_.bind(this),this.boundFocusHandler=this.onFocus_.bind(this),this.boundBlurHandler=this.onBlur_.bind(this),this.boundResetHandler=this.onReset_.bind(this),this.input_.addEventListener("input",this.boundUpdateClassesHandler),this.input_.addEventListener("focus",this.boundFocusHandler),this.input_.addEventListener("blur",this.boundBlurHandler),this.input_.addEventListener("reset",this.boundResetHandler),this.maxRows!==this.Constant_.NO_MAX_ROWS&&(this.boundKeyDownHandler=this.onKeyDown_.bind(this),this.input_.addEventListener("keydown",this.boundKeyDownHandler));var e=this.element_.classList.contains(this.CssClasses_.IS_INVALID);this.updateClasses_(),this.element_.classList.add(this.CssClasses_.IS_UPGRADED),e&&this.element_.classList.add(this.CssClasses_.IS_INVALID),this.input_.hasAttribute("autofocus")&&(this.element_.focus(),this.checkFocus())}},s.register({constructor:L,classAsString:"MaterialTextfield",cssClass:"mdl-js-textfield",widget:!0});var I=function(e){this.element_=e,this.init()};window.MaterialTooltip=I,I.prototype.Constant_={},I.prototype.CssClasses_={IS_ACTIVE:"is-active",BOTTOM:"mdl-tooltip--bottom",LEFT:"mdl-tooltip--left",RIGHT:"mdl-tooltip--right",TOP:"mdl-tooltip--top"},I.prototype.handleMouseEnter_=function(e){var t=e.target.getBoundingClientRect(),s=t.left+t.width/2,i=t.top+t.height/2,n=-1*(this.element_.offsetWidth/2),a=-1*(this.element_.offsetHeight/2);this.element_.classList.contains(this.CssClasses_.LEFT)||this.element_.classList.contains(this.CssClasses_.RIGHT)?(s=t.width/2,i+a<0?(this.element_.style.top="0",this.element_.style.marginTop="0"):(this.element_.style.top=i+"px",this.element_.style.marginTop=a+"px")):s+n<0?(this.element_.style.left="0",this.element_.style.marginLeft="0"):(this.element_.style.left=s+"px",this.element_.style.marginLeft=n+"px"),this.element_.classList.contains(this.CssClasses_.TOP)?this.element_.style.top=t.top-this.element_.offsetHeight-10+"px":this.element_.classList.contains(this.CssClasses_.RIGHT)?this.element_.style.left=t.left+t.width+10+"px":this.element_.classList.contains(this.CssClasses_.LEFT)?this.element_.style.left=t.left-this.element_.offsetWidth-10+"px":this.element_.style.top=t.top+t.height+10+"px",this.element_.classList.add(this.CssClasses_.IS_ACTIVE)},I.prototype.hideTooltip_=function(){this.element_.classList.remove(this.CssClasses_.IS_ACTIVE)},I.prototype.init=function(){if(this.element_){var e=this.element_.getAttribute("for")||this.element_.getAttribute("data-mdl-for");e&&(this.forElement_=document.getElementById(e)),this.forElement_&&(this.forElement_.hasAttribute("tabindex")||this.forElement_.setAttribute("tabindex","0"),this.boundMouseEnterHandler=this.handleMouseEnter_.bind(this),this.boundMouseLeaveAndScrollHandler=this.hideTooltip_.bind(this),this.forElement_.addEventListener("mouseenter",this.boundMouseEnterHandler,!1),this.forElement_.addEventListener("touchend",this.boundMouseEnterHandler,!1),this.forElement_.addEventListener("mouseleave",this.boundMouseLeaveAndScrollHandler,!1),window.addEventListener("scroll",this.boundMouseLeaveAndScrollHandler,!0),window.addEventListener("touchstart",this.boundMouseLeaveAndScrollHandler))}},s.register({constructor:I,classAsString:"MaterialTooltip",cssClass:"mdl-tooltip"});var f=function(e){this.element_=e,this.init()};window.MaterialLayout=f,f.prototype.Constant_={MAX_WIDTH:"(max-width: 1024px)",TAB_SCROLL_PIXELS:100,RESIZE_TIMEOUT:100,MENU_ICON:"",CHEVRON_LEFT:"chevron_left",CHEVRON_RIGHT:"chevron_right"},f.prototype.Keycodes_={ENTER:13,ESCAPE:27,SPACE:32},f.prototype.Mode_={STANDARD:0,SEAMED:1,WATERFALL:2,SCROLL:3},f.prototype.CssClasses_={CONTAINER:"mdl-layout__container",HEADER:"mdl-layout__header",DRAWER:"mdl-layout__drawer",CONTENT:"mdl-layout__content",DRAWER_BTN:"mdl-layout__drawer-button",ICON:"material-icons",JS_RIPPLE_EFFECT:"mdl-js-ripple-effect",RIPPLE_CONTAINER:"mdl-layout__tab-ripple-container",RIPPLE:"mdl-ripple",RIPPLE_IGNORE_EVENTS:"mdl-js-ripple-effect--ignore-events",HEADER_SEAMED:"mdl-layout__header--seamed",HEADER_WATERFALL:"mdl-layout__header--waterfall",HEADER_SCROLL:"mdl-layout__header--scroll",FIXED_HEADER:"mdl-layout--fixed-header",OBFUSCATOR:"mdl-layout__obfuscator",TAB_BAR:"mdl-layout__tab-bar",TAB_CONTAINER:"mdl-layout__tab-bar-container",TAB:"mdl-layout__tab",TAB_BAR_BUTTON:"mdl-layout__tab-bar-button",TAB_BAR_LEFT_BUTTON:"mdl-layout__tab-bar-left-button",TAB_BAR_RIGHT_BUTTON:"mdl-layout__tab-bar-right-button",TAB_MANUAL_SWITCH:"mdl-layout__tab-manual-switch",PANEL:"mdl-layout__tab-panel",HAS_DRAWER:"has-drawer",HAS_TABS:"has-tabs",HAS_SCROLLING_HEADER:"has-scrolling-header",CASTING_SHADOW:"is-casting-shadow",IS_COMPACT:"is-compact",IS_SMALL_SCREEN:"is-small-screen",IS_DRAWER_OPEN:"is-visible",IS_ACTIVE:"is-active",IS_UPGRADED:"is-upgraded",IS_ANIMATING:"is-animating",ON_LARGE_SCREEN:"mdl-layout--large-screen-only",ON_SMALL_SCREEN:"mdl-layout--small-screen-only"},f.prototype.contentScrollHandler_=function(){if(!this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)){var e=!this.element_.classList.contains(this.CssClasses_.IS_SMALL_SCREEN)||this.element_.classList.contains(this.CssClasses_.FIXED_HEADER);this.content_.scrollTop>0&&!this.header_.classList.contains(this.CssClasses_.IS_COMPACT)?(this.header_.classList.add(this.CssClasses_.CASTING_SHADOW),this.header_.classList.add(this.CssClasses_.IS_COMPACT),e&&this.header_.classList.add(this.CssClasses_.IS_ANIMATING)):this.content_.scrollTop<=0&&this.header_.classList.contains(this.CssClasses_.IS_COMPACT)&&(this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW),this.header_.classList.remove(this.CssClasses_.IS_COMPACT),e&&this.header_.classList.add(this.CssClasses_.IS_ANIMATING))}},f.prototype.keyboardEventHandler_=function(e){e.keyCode===this.Keycodes_.ESCAPE&&this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)&&this.toggleDrawer()},f.prototype.screenSizeHandler_=function(){this.screenSizeMediaQuery_.matches?this.element_.classList.add(this.CssClasses_.IS_SMALL_SCREEN):(this.element_.classList.remove(this.CssClasses_.IS_SMALL_SCREEN),this.drawer_&&(this.drawer_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN),this.obfuscator_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN)))},f.prototype.drawerToggleHandler_=function(e){if(e&&"keydown"===e.type){if(e.keyCode!==this.Keycodes_.SPACE&&e.keyCode!==this.Keycodes_.ENTER)return;e.preventDefault()}this.toggleDrawer()},f.prototype.headerTransitionEndHandler_=function(){this.header_.classList.remove(this.CssClasses_.IS_ANIMATING)},f.prototype.headerClickHandler_=function(){this.header_.classList.contains(this.CssClasses_.IS_COMPACT)&&(this.header_.classList.remove(this.CssClasses_.IS_COMPACT),this.header_.classList.add(this.CssClasses_.IS_ANIMATING))},f.prototype.resetTabState_=function(e){for(var t=0;t0?c.classList.add(this.CssClasses_.IS_ACTIVE):c.classList.remove(this.CssClasses_.IS_ACTIVE),this.tabBar_.scrollLeft0)return;this.setFrameCount(1);var i,n,a=e.currentTarget.getBoundingClientRect();if(0===e.clientX&&0===e.clientY)i=Math.round(a.width/2),n=Math.round(a.height/2);else{var l=void 0!==e.clientX?e.clientX:e.touches[0].clientX,o=void 0!==e.clientY?e.clientY:e.touches[0].clientY;i=Math.round(l-a.left),n=Math.round(o-a.top)}this.setRippleXY(i,n),this.setRippleStyles(!0),window.requestAnimationFrame(this.animFrameHandler.bind(this))}},S.prototype.upHandler_=function(e){e&&2!==e.detail&&window.setTimeout(function(){this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE)}.bind(this),0)},S.prototype.init=function(){if(this.element_){var e=this.element_.classList.contains(this.CssClasses_.RIPPLE_CENTER);this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT_IGNORE_EVENTS)||(this.rippleElement_=this.element_.querySelector("."+this.CssClasses_.RIPPLE),this.frameCount_=0,this.rippleSize_=0,this.x_=0,this.y_=0,this.ignoringMouseDown_=!1,this.boundDownHandler=this.downHandler_.bind(this),this.element_.addEventListener("mousedown",this.boundDownHandler),this.element_.addEventListener("touchstart",this.boundDownHandler),this.boundUpHandler=this.upHandler_.bind(this),this.element_.addEventListener("mouseup",this.boundUpHandler),this.element_.addEventListener("mouseleave",this.boundUpHandler),this.element_.addEventListener("touchend",this.boundUpHandler),this.element_.addEventListener("blur",this.boundUpHandler),this.getFrameCount=function(){return this.frameCount_},this.setFrameCount=function(e){this.frameCount_=e},this.getRippleElement=function(){return this.rippleElement_},this.setRippleXY=function(e,t){this.x_=e,this.y_=t},this.setRippleStyles=function(t){if(null!==this.rippleElement_){var s,i,n,a="translate("+this.x_+"px, "+this.y_+"px)";t?(i=this.Constant_.INITIAL_SCALE,n=this.Constant_.INITIAL_SIZE):(i=this.Constant_.FINAL_SCALE,n=this.rippleSize_+"px",e&&(a="translate("+this.boundWidth/2+"px, "+this.boundHeight/2+"px)")),s="translate(-50%, -50%) "+a+i,this.rippleElement_.style.webkitTransform=s,this.rippleElement_.style.msTransform=s,this.rippleElement_.style.transform=s,t?this.rippleElement_.classList.remove(this.CssClasses_.IS_ANIMATING):this.rippleElement_.classList.add(this.CssClasses_.IS_ANIMATING)}},this.animFrameHandler=function(){this.frameCount_-- >0?window.requestAnimationFrame(this.animFrameHandler.bind(this)):this.setRippleStyles(!1)})}},s.register({constructor:S,classAsString:"MaterialRipple",cssClass:"mdl-js-ripple-effect",widget:!1})}(); -//# sourceMappingURL=material.min.js.map diff --git a/src/assets/js/promise.js b/src/assets/js/promise.js deleted file mode 100644 index dd5e735..0000000 --- a/src/assets/js/promise.js +++ /dev/null @@ -1,372 +0,0 @@ -/** - * setImmediate polyfill v1.0.1, supports IE9+ - * © 2014–2015 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 - * - * © 2014–2015 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)); \ No newline at end of file diff --git a/src/assets/js/storage.js b/src/assets/js/storage.js deleted file mode 100644 index 5dc436f..0000000 --- a/src/assets/js/storage.js +++ /dev/null @@ -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)) - }; -} diff --git a/src/components/Header.vue b/src/components/Header.vue index bf4a524..adc4926 100644 --- a/src/components/Header.vue +++ b/src/components/Header.vue @@ -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 () { }) }) } diff --git a/src/components/logo/logo.ts b/src/components/logo/logo.ts index c70501e..5c43ec4 100644 --- a/src/components/logo/logo.ts +++ b/src/components/logo/logo.ts @@ -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() } diff --git a/src/components/offline/offline.ts b/src/components/offline/offline.ts index 455a3a0..1a3cd52 100644 --- a/src/components/offline/offline.ts +++ b/src/components/offline/offline.ts @@ -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() } diff --git a/src/components/todos/todo/todo.ts b/src/components/todos/todo/todo.ts index 59c8f7d..fc9671f 100644 --- a/src/components/todos/todo/todo.ts +++ b/src/components/todos/todo/todo.ts @@ -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) } diff --git a/src/globalroutines/util.js b/src/globalroutines/util.js index 4e50d98..565e4c5 100644 --- a/src/globalroutines/util.js +++ b/src/globalroutines/util.js @@ -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('.') diff --git a/src/index.template.html b/src/index.template.html index b50f0e9..ba11dae 100644 --- a/src/index.template.html +++ b/src/index.template.html @@ -13,12 +13,12 @@ - - - - - - + + + + + + diff --git a/src/middleware/auth.js b/src/middleware/auth.js new file mode 100644 index 0000000..b01c5cf --- /dev/null +++ b/src/middleware/auth.js @@ -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(); +} diff --git a/src/plugins/guard.js b/src/plugins/guard.js index 1dc69bc..45dde93 100644 --- a/src/plugins/guard.js +++ b/src/plugins/guard.js @@ -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('/') } } - }) - */ + })*/ + } diff --git a/src/plugins/i18n.js b/src/plugins/i18n.js index 60a1a0a..8ca36c0 100644 --- a/src/plugins/i18n.js +++ b/src/plugins/i18n.js @@ -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 }) => { diff --git a/src/root/home/home.scss b/src/root/home/home.scss index 6c5e9fa..365d49a 100644 --- a/src/root/home/home.scss +++ b/src/root/home/home.scss @@ -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 } diff --git a/src/root/home/home.ts b/src/root/home/home.ts index 4579132..20508b3 100644 --- a/src/root/home/home.ts +++ b/src/root/home/home.ts @@ -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], diff --git a/src/root/home/home.vue b/src/root/home/home.vue index 6a97d94..5c6cb7c 100644 --- a/src/root/home/home.vue +++ b/src/root/home/home.vue @@ -18,16 +18,6 @@
{{$t('msg.sottoTitoloApp3')}}
-
- - - - -
+ + + + diff --git a/src/root/home/old-home.vue b/src/root/home/old-home.vue index efdb3be..a80a15e 100644 --- a/src/root/home/old-home.vue +++ b/src/root/home/old-home.vue @@ -50,7 +50,7 @@ - + diff --git a/src/router/route-config.ts b/src/router/route-config.ts index e789834..382d662 100644 --- a/src/router/route-config.ts +++ b/src/router/route-config.ts @@ -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' } }*/ ] - diff --git a/src/store/Api/Inst-Pao.ts b/src/store/Api/Inst-Pao.ts index cb1b04c..328ba05 100644 --- a/src/store/Api/Inst-Pao.ts +++ b/src/store/Api/Inst-Pao.ts @@ -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') diff --git a/src/store/Api/Instance.ts b/src/store/Api/Instance.ts index a67cdce..a916607 100644 --- a/src/store/Api/Instance.ts +++ b/src/store/Api/Instance.ts @@ -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) diff --git a/src/store/Modules/GlobalStore.ts b/src/store/Modules/GlobalStore.ts index 5a79b45..57598ba 100644 --- a/src/store/Modules/GlobalStore.ts +++ b/src/store/Modules/GlobalStore.ts @@ -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 = { diff --git a/src/store/Modules/Todos.ts b/src/store/Modules/Todos.ts index 23af60e..5eea7ae 100644 --- a/src/store/Modules/Todos.ts +++ b/src/store/Modules/Todos.ts @@ -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 { diff --git a/src/store/Modules/UserStore.ts b/src/store/Modules/UserStore.ts index bccf12e..696ab60 100644 --- a/src/store/Modules/UserStore.ts +++ b/src/store/Modules/UserStore.ts @@ -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) diff --git a/src/views/login/signin/signin.ts b/src/views/login/signin/signin.ts index 43aa868..3028988 100644 --- a/src/views/login/signin/signin.ts +++ b/src/views/login/signin/signin.ts @@ -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) diff --git a/tsconfig.json b/tsconfig.json index 829275f..145a20a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -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"], diff --git a/yarn.lock b/yarn.lock index 3afa1a7..223b6bb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -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"