Merge pull request #10 from paoloar77/localstorage-1

Localstorage 1
This commit is contained in:
Paolo Arena
2019-01-05 23:37:40 +01:00
committed by GitHub
31 changed files with 831 additions and 161 deletions

View File

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

View File

@@ -34,6 +34,9 @@ Thanks to the Quasar Framework and TypeScript !
[![js-standard-style](https://cdn.rawgit.com/standard/standard/master/badge.svg)](https://github.com/standard/standard)
[![Build](https://img.shields.io/circleci/project/github/paoloar77/freeplanet/master.svg?style=for-the-badge)](https://circleci.com/gh/paoloar77/freeplanet/tree/master)
[![Coverage](https://img.shields.io/codecov/c/github/paoloar77/freeplanet/master.svg?style=for-the-badge)](https://codecov.io/gh/paoloar77/freeplanet/branch/master)
</div>
## Features ⚡️

425
package-lock.json generated
View File

@@ -4788,6 +4788,15 @@
"integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
"dev": true
},
"ansi-align": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
"integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
"dev": true,
"requires": {
"string-width": "2.1.1"
}
},
"ansi-colors": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz",
@@ -6230,6 +6239,29 @@
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
},
"boxen": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
"integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==",
"dev": true,
"requires": {
"ansi-align": "2.0.0",
"camelcase": "4.1.0",
"chalk": "2.4.1",
"cli-boxes": "1.0.0",
"string-width": "2.1.1",
"term-size": "1.2.0",
"widest-line": "2.0.1"
},
"dependencies": {
"camelcase": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
"integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
"dev": true
}
}
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -6801,6 +6833,12 @@
}
}
},
"cli-boxes": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
"integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=",
"dev": true
},
"cli-cursor": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
@@ -7527,6 +7565,12 @@
"randomfill": "1.0.4"
}
},
"crypto-random-string": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
"integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
"dev": true
},
"css": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz",
@@ -8088,6 +8132,12 @@
"integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=",
"dev": true
},
"deep-extend": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
"dev": true
},
"deep-is": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
@@ -8274,6 +8324,11 @@
"integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==",
"dev": true
},
"dexie": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/dexie/-/dexie-2.0.4.tgz",
"integrity": "sha512-aQ/s1U2wHxwBKRrt2Z/mwFNHMQWhESerFsMYzE+5P5OsIe5o1kgpFMWkzKTtkvkyyEni6mWr/T4HUJuY9xIHLA=="
},
"diff": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
@@ -11151,6 +11206,11 @@
"integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
"dev": true
},
"immediate": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
"integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
},
"import-cwd": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
@@ -11179,6 +11239,12 @@
"resolve-from": "3.0.0"
}
},
"import-lazy": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
"integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
"dev": true
},
"import-local": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz",
@@ -11580,6 +11646,12 @@
}
}
},
"is-npm": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
"integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=",
"dev": true
},
"is-number": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
@@ -13432,6 +13504,15 @@
"webpack-sources": "1.3.0"
}
},
"latest-version": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
"integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=",
"dev": true,
"requires": {
"package-json": "4.0.1"
}
},
"launch-editor": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.2.1.tgz",
@@ -13487,6 +13568,14 @@
"type-check": "0.3.2"
}
},
"lie": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz",
"integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=",
"requires": {
"immediate": "3.0.6"
}
},
"listr": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/listr/-/listr-0.12.0.tgz",
@@ -13764,6 +13853,14 @@
}
}
},
"localforage": {
"version": "1.7.3",
"resolved": "https://registry.npmjs.org/localforage/-/localforage-1.7.3.tgz",
"integrity": "sha512-1TulyYfc4udS7ECSBT2vwJksWbkwwTX8BzeUIiq8Y07Riy7bDAAnxDaPU/tWyOVmQAcWJIEIFP9lPfBGqVoPgQ==",
"requires": {
"lie": "3.1.1"
}
},
"locate-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
@@ -13776,8 +13873,7 @@
"lodash": {
"version": "4.17.11",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
"dev": true
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
},
"lodash._reinterpolate": {
"version": "3.0.0",
@@ -18208,6 +18304,18 @@
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
"integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ=="
},
"package-json": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
"integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
"dev": true,
"requires": {
"got": "6.7.1",
"registry-auth-token": "3.3.2",
"registry-url": "3.1.0",
"semver": "5.6.0"
}
},
"pako": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.7.tgz",
@@ -20966,6 +21074,26 @@
}
}
},
"rc": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
"integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
"dev": true,
"requires": {
"deep-extend": "0.6.0",
"ini": "1.3.5",
"minimist": "1.2.0",
"strip-json-comments": "2.0.1"
},
"dependencies": {
"minimist": {
"version": "1.2.0",
"resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"dev": true
}
}
},
"read-pkg": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
@@ -21192,6 +21320,25 @@
"resolved": "https://registry.npmjs.org/register-service-worker/-/register-service-worker-1.5.2.tgz",
"integrity": "sha512-XNqSZHJsFGnvEGkg/2IrCp6G8Ya3qLj4mq0bSHil/dfdO82LOxGnMnJjAD9MYCvf/8cDCO8pL+1i65yzmP7rPQ=="
},
"registry-auth-token": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
"integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
"dev": true,
"requires": {
"rc": "1.2.8",
"safe-buffer": "5.1.2"
}
},
"registry-url": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
"integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
"dev": true,
"requires": {
"rc": "1.2.8"
}
},
"regjsgen": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz",
@@ -21564,6 +21711,21 @@
"aproba": "1.2.0"
}
},
"rx-lite": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
"integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
"dev": true
},
"rx-lite-aggregates": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
"integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
"dev": true,
"requires": {
"rx-lite": "4.0.8"
}
},
"rxjs": {
"version": "5.5.12",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz",
@@ -21810,6 +21972,15 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
"integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg=="
},
"semver-diff": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
"integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
"dev": true,
"requires": {
"semver": "5.6.0"
}
},
"send": {
"version": "0.16.2",
"resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
@@ -22810,6 +22981,43 @@
"inherits": "2.0.3"
}
},
"term-size": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
"integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
"dev": true,
"requires": {
"execa": "0.7.0"
},
"dependencies": {
"cross-spawn": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
"integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
"dev": true,
"requires": {
"lru-cache": "4.1.5",
"shebang-command": "1.2.0",
"which": "1.3.1"
}
},
"execa": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
"integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
"dev": true,
"requires": {
"cross-spawn": "5.1.0",
"get-stream": "3.0.0",
"is-stream": "1.1.0",
"npm-run-path": "2.0.2",
"p-finally": "1.0.0",
"signal-exit": "3.0.2",
"strip-eof": "1.0.0"
}
}
}
},
"terser": {
"version": "3.11.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-3.11.0.tgz",
@@ -23686,6 +23894,15 @@
"imurmurhash": "0.1.4"
}
},
"unique-string": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
"integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
"dev": true,
"requires": {
"crypto-random-string": "1.0.0"
}
},
"universalify": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
@@ -23754,6 +23971,66 @@
"integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==",
"dev": true
},
"update-notifier": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz",
"integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==",
"dev": true,
"requires": {
"boxen": "1.3.0",
"chalk": "2.4.1",
"configstore": "3.1.2",
"import-lazy": "2.1.0",
"is-ci": "1.0.10",
"is-installed-globally": "0.1.0",
"is-npm": "1.0.0",
"latest-version": "3.1.0",
"semver-diff": "2.1.0",
"xdg-basedir": "3.0.0"
},
"dependencies": {
"configstore": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz",
"integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==",
"dev": true,
"requires": {
"dot-prop": "4.2.0",
"graceful-fs": "4.1.15",
"make-dir": "1.3.0",
"unique-string": "1.0.0",
"write-file-atomic": "2.3.0",
"xdg-basedir": "3.0.0"
}
},
"dot-prop": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
"integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
"dev": true,
"requires": {
"is-obj": "1.0.1"
}
},
"write-file-atomic": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz",
"integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==",
"dev": true,
"requires": {
"graceful-fs": "4.1.15",
"imurmurhash": "0.1.4",
"signal-exit": "3.0.2"
}
},
"xdg-basedir": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
"integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=",
"dev": true
}
}
},
"upper-case": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
@@ -23956,6 +24233,17 @@
"resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.4.0.tgz",
"integrity": "sha512-MiBI1v2pY22aAEbNrcy7GX9qigoUQE9PbmrAydrBuYNRwn0RbD1RZpMemtmGW3Ju6LBA1yn7TZOPa3lxWrT0Eg=="
},
"vue-idb": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/vue-idb/-/vue-idb-0.2.0.tgz",
"integrity": "sha1-Mtqa+N8ZxG/1HYo8xJbfvm6JDTU=",
"requires": {
"dexie": "2.0.4",
"lodash": "4.17.11",
"vue": "2.5.21",
"vuex": "3.0.1"
}
},
"vue-jest": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/vue-jest/-/vue-jest-3.0.2.tgz",
@@ -25030,6 +25318,15 @@
"string-width": "2.1.1"
}
},
"widest-line": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz",
"integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==",
"dev": true,
"requires": {
"string-width": "2.1.1"
}
},
"wordwrap": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
@@ -25150,6 +25447,130 @@
"workbox-core": "3.6.3"
}
},
"workbox-cli": {
"version": "3.6.3",
"resolved": "https://registry.npmjs.org/workbox-cli/-/workbox-cli-3.6.3.tgz",
"integrity": "sha512-l97OZ4sGnnHzlHsqHCOuK0s2hh7OjZTPhP3w6iKqzD9uR2JctXvUB7gB2MmD00ihD3kTyaR8HLCmEI2uZCzkbw==",
"dev": true,
"requires": {
"chalk": "2.4.1",
"common-tags": "1.4.0",
"fs-extra": "4.0.3",
"glob": "7.1.3",
"inquirer": "3.3.0",
"meow": "3.7.0",
"ora": "1.4.0",
"pretty-bytes": "4.0.2",
"update-notifier": "2.5.0",
"workbox-build": "3.6.3"
},
"dependencies": {
"ansi-escapes": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
"integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==",
"dev": true
},
"chardet": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
"integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
"dev": true
},
"external-editor": {
"version": "2.2.0",
"resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
"integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
"dev": true,
"requires": {
"chardet": "0.4.2",
"iconv-lite": "0.4.24",
"tmp": "0.0.33"
}
},
"figures": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
"integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
"dev": true,
"requires": {
"escape-string-regexp": "1.0.5"
}
},
"fs-extra": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
"integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
"dev": true,
"requires": {
"graceful-fs": "4.1.15",
"jsonfile": "4.0.0",
"universalify": "0.1.2"
}
},
"inquirer": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
"integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
"dev": true,
"requires": {
"ansi-escapes": "3.1.0",
"chalk": "2.4.1",
"cli-cursor": "2.1.0",
"cli-width": "2.2.0",
"external-editor": "2.2.0",
"figures": "2.0.0",
"lodash": "4.17.11",
"mute-stream": "0.0.7",
"run-async": "2.3.0",
"rx-lite": "4.0.8",
"rx-lite-aggregates": "4.0.8",
"string-width": "2.1.1",
"strip-ansi": "4.0.0",
"through": "2.3.8"
}
},
"jsonfile": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
"integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
"dev": true,
"requires": {
"graceful-fs": "4.1.15"
}
},
"ora": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/ora/-/ora-1.4.0.tgz",
"integrity": "sha512-iMK1DOQxzzh2MBlVsU42G80mnrvUhqsMh74phHtDlrcTZPK0pH6o7l7DRshK+0YsxDyEuaOkziVdvM3T0QTzpw==",
"dev": true,
"requires": {
"chalk": "2.4.1",
"cli-cursor": "2.1.0",
"cli-spinners": "1.3.1",
"log-symbols": "2.2.0"
}
},
"strip-ansi": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
"integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
"dev": true,
"requires": {
"ansi-regex": "3.0.0"
}
},
"tmp": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
"integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
"dev": true,
"requires": {
"os-tmpdir": "1.0.2"
}
}
}
},
"workbox-core": {
"version": "3.6.3",
"resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-3.6.3.tgz",

View File

@@ -10,15 +10,13 @@
"pwa": "NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 DEBUG=v8:* quasar dev -m pwa",
"test:unit": "jest",
"test:cover": "jest --coverage",
"build": "quasar build -m pwa",
"build": "quasar build -m pwa && workbox generateSW workbox-config.js",
"build:clean": "quasar clean",
"serve": "quasar serve ./dist/pwa-mat",
"serve:coverage": "quasar serve test/coverage/lcov-report/ --cache 0 --port 8788",
"deploy": "deploy.sh"
},
"dependencies": {
"quasar-extras": "^2.0.8",
"quasar-framework": "0.17.17",
"@types/vuelidate": "^0.7.0",
"acorn": "^6.0.0",
"axios": "^0.18.0",
@@ -26,19 +24,23 @@
"bcrypt": "^3.0.2",
"bcryptjs": "^2.4.3",
"dotenv": "^6.1.0",
"graphql": "^0.13.2",
"graphql-tag": "^2.8.0",
"element-ui": "^2.3.6",
"google-translate-api": "^2.3.0",
"graphql": "^0.13.2",
"graphql-tag": "^2.8.0",
"js-cookie": "^2.2.0",
"localforage": "^1.7.3",
"normalize.css": "^8.0.0",
"npm": "^6.4.1",
"nprogress": "^0.2.0",
"quasar-extras": "^2.0.8",
"quasar-framework": "0.17.17",
"register-service-worker": "^1.0.0",
"vee-validate": "^2.1.2",
"vue": "^2.5.17",
"vue-class-component": "^6.3.2",
"vue-i18n": "^8.1.0",
"vue-idb": "^0.2.0",
"vue-property-decorator": "^7.2.0",
"vue-router": "^3.0.1",
"vue-svgicon": "^3.1.0",
@@ -50,25 +52,24 @@
"vuex-typex": "^3.0.1"
},
"devDependencies": {
"@babel/runtime": "7.0.0-beta.54",
"@babel/core": "7.0.0-beta.50",
"@babel/code-frame": "7.0.0-beta.54",
"@babel/core": "7.0.0-beta.50",
"@babel/generator": "7.0.0-beta.54",
"@babel/helpers": "7.0.0-beta.54",
"@babel/parser": "7.0.0-beta.54",
"@babel/preset-env": "7.0.0-beta.54",
"@babel/preset-react": "7.0.0",
"@babel/runtime": "7.0.0-beta.54",
"@babel/template": "7.0.0-beta.54",
"@babel/traverse": "7.0.0-beta.54",
"@babel/types": "7.0.0-beta.54",
"@babel/preset-env": "7.0.0-beta.54",
"@vue/babel-preset-app": "3.1.1",
"@babel/preset-react": "7.0.0",
"babel-plugin-transform-imports": "1.5.1",
"@types/dotenv": "^4.0.3",
"@types/jest": "^23.1.4",
"@types/js-cookie": "^2.1.0",
"@types/node": "^10.12.2",
"@types/nprogress": "^0.0.29",
"@types/webpack-env": "^1.13.6",
"@vue/babel-preset-app": "3.1.1",
"@vue/cli-plugin-babel": "^3.0.1",
"@vue/cli-plugin-e2e-cypress": "^3.0.1",
"@vue/cli-plugin-pwa": "^3.0.1",
@@ -77,14 +78,15 @@
"@vue/cli-service": "^3.0.1",
"@vue/test-utils": "^1.0.0-beta.20",
"babel-loader": "^8.0.0-beta.2",
"babel-plugin-transform-imports": "1.5.1",
"eslint": "^5.5.0",
"html-webpack-plugin": "^2.8.1",
"http-proxy-middleware": "^0.17.0",
"jest": "^23.6.0",
"json-loader": "^0.5.4",
"node-sass": "^4.9.0",
"node-sass": "^4.11.0",
"quasar-cli": "^0.17.20",
"sass-loader": "^7.0.1",
"sass-loader": "^7.1.0",
"strip-ansi": "=3.0.1",
"ts-jest": "^23.0.0",
"ts-loader": "^5.3.0",
@@ -98,7 +100,8 @@
"webpack": "^4.0.0",
"webpack-dev-middleware": "^3.2.0",
"webpack-hot-middleware": "^2.24.3",
"webpack-merge": "^4.0.0"
"webpack-merge": "^4.0.0",
"workbox-cli": "^3.6.3"
},
"engines": {
"node": ">= 8.9.0",

View File

@@ -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'],
plugins: ['i18n', 'axios', 'vee-validate', 'myconfig', 'local-storage', 'error-handler', 'indexdb', 'vue-idb'],
css: [
'app.styl'
],
@@ -145,6 +145,7 @@ module.exports = function (ctx) {
'QInnerLoading',
'QSpinnerGears',
'QDatetime',
'QSlideTransition',
],
directives: [
'Ripple',

View File

@@ -18,9 +18,9 @@
<script lang="ts">
import Vue from "vue"
import { Component } from 'vue-property-decorator'
import { UserStore } from '@store'
import { EventBus, RootState, storeBuilder, DebugMode } from '@store'
import router from "./router"
import { UserStore } from '@store'
import $ from "jquery"
@@ -37,16 +37,21 @@
created() {
//this.title = 'My Vue and CosmosDB Heroes App'
if (process.env.DEV){
if (process.env.DEV) {
console.info("SESSIONE IN SVILUPPO ! (DEV)")
console.info(process.env)
}
if (process.env.PROD){
if (process.env.PROD) {
console.info("SESSIONE IN PRODUZIONE!")
console.info(process.env)
}
UserStore.mutations.autologin()
UserStore.actions.autologin()
.then((loginEseguito) => {
if (loginEseguito) {
// this.$router.replace('/')
}
})
}
}
</script>

View File

@@ -74,7 +74,7 @@
id="g4561-6-7-0">
<g
transform="translate(16.233481,0)"
style="font-style:normal;font-weight:normal;font-size:50.25774765px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#263238;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
style="font-style:normal;font-weight:normal;font-size:50.25774765px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#2632AA;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="flowRoot4513-6-6-08">
<path
d="m -402.73125,631.46823 q -0.6125,0.0438 -1.3125,0.0875 -0.65625,0 -1.4,0 l -9.31875,0 q -12.81875,0 -12.81875,-8.44375 l 0,-13.475 q 0,-8.26875 12.6,-8.26875 l 9.75625,0 q 12.6,0 12.6,8.26875 l 0,13.475 q 0,5.03125 -4.4625,7.04375 l 3.10625,2.14375 q 1.35625,0.83125 1.35625,1.70625 0,0.875 -0.7,1.3125 -0.65625,0.48125 -1.88125,0.48125 -0.30625,0 -0.7875,-0.13125 -0.4375,-0.0875 -1.05,-0.48125 l -5.6875,-3.71875 z m 5.38125,-21.74375 q 0,-4.76875 -7.9625,-4.76875 l -9.58125,0 q -7.9625,0 -7.9625,4.76875 l 0,13.3875 q 0,4.94375 8.3125,4.94375 l 8.88125,0 q 8.3125,0 8.3125,-4.94375 l 0,-13.3875 z"

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -1,5 +1,6 @@
<template>
<div>
<q-layout-header>
<q-toolbar
color="primary"
@@ -40,10 +41,9 @@
</q-layout-header>
<q-layout-drawer side="left"
v-model="leftDrawerOpen"
:content-class="['bg-grey-3', 'q-pa-sm']"
:content-class="['bg-grey-1', 'q-pa-sm']"
:content-style="{padding: '0px'}"
>
<drawer></drawer>
@@ -59,6 +59,9 @@
import drawer from '../layouts/drawer/drawer.vue'
import messagePopover from '../layouts/toolbar/messagePopover/messagePopover.vue'
import { GlobalStore } from '@modules'
import { rescodes } from '../store/Modules/rescodes'
@Component({
components: {
drawer,
@@ -76,7 +79,15 @@
{ label: 'Spanish', icon: 'fa-flag-es', value: 'es' },
{ label: 'Italian', icon: 'fa-facebook', value: 'it' }
]
public leftDrawerOpen = false;
get leftDrawerOpen() {
return GlobalStore.state.leftDrawerOpen
}
set leftDrawerOpen(value) {
GlobalStore.state.leftDrawerOpen = value
localStorage.setItem(rescodes.localStorage.leftDrawerOpen, value.toString())
}
get lang() {
return this.$q.i18n.lang
@@ -103,17 +114,23 @@
</script>
<style>
<style lang="scss">
.layout-padding {
padding: 1em 4em;
}
.item-content {
font-size: 0.8rem;
font-weight: 350;
}
@media screen and (max-width: 600px) {
.layout-padding {
padding: 1.5em .5em;
}
}
/*
@-webkit-keyframes moveFromLeftFade {
from {
opacity: 0.3;
@@ -129,6 +146,21 @@
}
}
@-webkit-keyframes moveFromTopFade {
from {
opacity: 0.3;
-webkit-transform: translateY(0%);
}
}
@keyframes moveFromTopFade {
from {
opacity: 0.3;
-webkit-transform: translateY(0%);
transform: translateY(-50%);
}
}
@-webkit-keyframes moveToRight {
from {
}
@@ -167,6 +199,25 @@
}
}
@-webkit-keyframes moveToBottom {
from {
}
to {
opacity: .5;
-webkit-transform: translateY(-100%);
}
}
@keyframes moveToBottom {
from {
}
to {
opacity: .5;
-webkit-transform: translateY(-100%);
transform: translateY(-100%);
}
}
@-webkit-keyframes moveFromRight {
from {
opacity: .7;
@@ -181,17 +232,18 @@
transform: translateX(100%);
}
}
*/
.drawer-closer .item-content {
margin-left: 50px !important;
margin-left: 20px !important;
}
.drawer-content .list-label {
line-height: 45px;
line-height: 25px;
}
.drawer-content .item {
height: 45px;
height: 25px;
}
.router-link-active .item-primary {
@@ -272,7 +324,7 @@
}
.toolbar {
min-height: 40px;
min-height: 30px;
}
.right-itens a, .right-itens button {
@@ -291,4 +343,6 @@
.fa-flag-it:before {
content: url('../statics/icons/flag_it.svg');
}
</style>

View File

@@ -0,0 +1,3 @@
.mycard {
visibility: hidden;
}

View File

@@ -0,0 +1,67 @@
import Vue from 'vue'
import { Component } from 'vue-property-decorator'
require('./category.scss')
@Component({})
export default class Category extends Vue {
filter: boolean = false
category: string = ''
categories_arr: any[] = null
created() {
this.loadCat()
}
async loadCat() {
await this.$db.categories.toArray().then(ris => this.categories_arr = ris)
this.updatetable()
}
async insertCategory() {
let myid = 0
const mycat = this.category
// Add to Indexdb
await this.$db.categories.add(
{ descr_it: mycat }
).then(ris => {
myid = ris
})
// created_at: new Date(),
// Add into the memory
this.categories_arr.push({ descr_it: mycat, id: myid })
this.updatetable()
}
updatetable() {
this.filterCategories()
}
async filterCategories() {
if (this.filter) {
// #Todo If need to filter the output database ...
this.$db.categories
.where('descr_it').notEqual('nonlovedi')
.toArray()
.then((response) => {
Promise.all(response.map(key => key))
.then((myarr) => {
this.categories_arr = [...myarr]
return this.categories_arr
})
})
} else {
return this.categories_arr
}
}
}

View File

@@ -0,0 +1,20 @@
<template>
<q-page>
<div class="panel">
<p class="caption">Category:</p>
<q-input v-model="category" inverted float-label="Inserisci la Categoria"
:after="[{icon: 'arrow_forward', content: true, handler () {}}]"
v-on:keyup.enter="insertCategory"/>
<ul>
Lista:
<li v-for="item in categories_arr" :key="item.id"> {{ item.descr_it }} </li>
</ul>
</div>
</q-page>
</template>
<script lang="ts" src="./category.ts">
</script>

View File

@@ -1 +1,4 @@
// app global css
/*------------------------------------------------------------------
[Table of contents]
# overwrite some style of stylus

View File

@@ -14,6 +14,7 @@ const messages = {
SignIn: 'Login',
vreg: 'Verifica Reg',
Test: 'Test',
Category: 'Categorie',
},
components: {
authentication:{
@@ -98,6 +99,7 @@ const messages = {
SignIn: 'SignIn',
vreg: 'Verify Reg',
Test: 'Test',
Category: 'Category',
},
components: {
authentication:{

View File

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

View File

@@ -1,25 +0,0 @@
<template lang="pug">
q-layout(view="lHh Lpr lFf")
q-layout-header
q-toolbar.row(color="primary", glossy)
q-toolbar-title.col
span Quasar TypeScript
div(slot="subtitle") Quasar v{{ $q.version }}
q-btn-dropdown(ref="selectLanguages", v-if="hasMultipleLanguages", icon="language", :label="currentLanguage.code", flat, dense)
q-list(link)
q-item(v-close-overlay, v-for="(language, index) in availableLanguages", :key="index", @click.native="setLanguage(language.code)")
q-item-main
q-item-tile(label) {{ language.name }}
q-item-side(v-if="language.code === currentLanguage.code", right, icon="done", color="primary")
q-page-container
router-view
</template>
<script lang="ts">
import { Vue, Component, Mixins } from 'vue-property-decorator'
import { Mixin as i18nMixin } from '@/plugins/i18n'
@Component
export default class MainLayout extends Mixins(i18nMixin) {}
</script>

View File

@@ -7,8 +7,8 @@
<span class="text-white"> {{ Username }} </span>
<hr>
<span class="text-white" v-if="Verificato"> {{$t('reg.verificato')}} </span>
<span class="text-white" v-else> {{$t('reg.non_verificato')}} </span>
<span class="text-white"> {{ Email }} </span>
<span class="text-white background-red" v-else> {{$t('reg.non_verificato')}} </span>
<!-- <span class="text-white"> {{ Email }} </span>-->
</div>
<div id="user-actions">
<q-btn round color="primary" icon="person"></q-btn>
@@ -19,6 +19,10 @@
<menu-one :links="links"></menu-one>
<!--<footer>
<small>- Small</small>
</footer>-->
<div class="fixed-bottom text-center light text-italic">
Powered by Perseo
</div>
@@ -31,8 +35,8 @@
import Vue from 'vue'
import { Component, Watch, Prop } from 'vue-property-decorator'
import {Store} from 'vuex'
import { UserStore } from '@modules';
import { Store } from 'vuex'
import { UserStore } from '@modules'
import { GlobalStore } from '@modules'
@@ -43,9 +47,9 @@
})
export default class Drawer extends Vue {
public $q
$t: any;
$t: any
created () {
created() {
console.log('Drawer created...')
}
@@ -54,34 +58,36 @@
links = {
Dashboard: {
routes: [
{route: '/', faIcon: 'fa fa-home', materialIcon: 'home', name: 'pages.home'},
{route: '/signup', faIcon: 'fa fa-signup', materialIcon: 'login', name: 'pages.SignUp'},
{route: '/signin', faIcon: 'fa fa-login', materialIcon: 'login', name: 'pages.SignIn'},
{ route: '/', faIcon: 'fa fa-home', materialIcon: 'home', name: 'pages.home' },
{ route: '/category', faIcon: 'fa fa-list-alt', materialIcon: 'category', name: 'pages.Category' },
{ route: '/signup', faIcon: 'fa fa-registered', materialIcon: 'home', name: 'pages.SignUp' },
{ route: '/signin', faIcon: 'fa fa-anchor', materialIcon: 'home', name: 'pages.SignIn' },
/* {route: '/vreg?idlink=aaa', faIcon: 'fa fa-login', materialIcon: 'login', name: 'pages.vreg'},*/
],
],
show: true
},
Forms: {
routes: [
{route: '/prec', faIcon: 'fa fa-search', materialIcon: 'search', name: 'pages.Test'},
],
{ route: '/prec', faIcon: 'fa fa-search', materialIcon: 'search', name: 'pages.Test' },
],
show: false
},
}
get MenuCollapse () {
get MenuCollapse() {
return GlobalStore.state.menuCollapse
// return true
}
get Username () {
get Username() {
return UserStore.state.username
}
get Verificato () {
get Verificato() {
return UserStore.state.verifiedEmail
}
get Email () {
get Email() {
return UserStore.state.email
}
@@ -91,7 +97,12 @@
}
}
</script>
<style scoped>
<style scoped lang="scss">
.background-red {
background-color: red;
padding: 2px;
}
.fixed-bottom {
margin-bottom: 1%;
}
@@ -127,4 +138,10 @@
#menu-collapse {
margin-top: 5%;
}
footer {
small {
color: red;
}
}
</style>

View File

@@ -1,23 +1,24 @@
<template>
<div class="list no-border platform-delimiter light-paragraph">
<q-icon name="action"/>
<template v-for="(parent, index) in links">
<q-list>
<div class="list-label cursor-pointer" @click="parent.show = !parent.show">
{{replaceUnderlineToSpace(index)}}
{{replaceUnderlineToSpace(index)}} <div class="menu_freccina"><i aria-hidden="true" class="v-icon material-icons theme--light">keyboard_arrow_down</i></div>
</div>
<template v-for="child in parent.routes">
<transition name="menu">
<q-slide-transition :duration=200>
<div v-show="parent.show">
<q-item link :to="child.route" exact class="item item-link drawer-closer cursor-pointer">
<i :class="child.faIcon" class="item-primary"></i>
<div class="item-content">{{$t(child.name)}}</div>
</q-item>
<q-item link :to="child.route" exact
class="item item-link drawer-closer cursor-pointer">
<i :class="child.faIcon" class="item-primary"></i>
<div class="item-content">{{$t(child.name)}}</div>
</q-item>
</div>
</transition>
</q-slide-transition>
</template>
</q-list>
<hr>
</template>
</div>
</template>
@@ -60,6 +61,11 @@
</script>
<style scoped>
.menu-hr{
border-color: #dedede;
height: 0.5px;
}
.router-link-active {
color: #027be3;
background-color: #dadada !important;
@@ -68,19 +74,21 @@
.list-label:first-child {
line-height: 20px;
padding:5px;
margin:1px;
padding: 5px;
margin: 1px;
}
/*
.menu-enter-active, .scale-enter {
-webkit-animation: moveFromLeftFade .2s ease both;
animation: moveFromLeftFade .2s ease both;
-webkit-animation: moveFromTopFade .5s ease both;
animation: moveFromTopFade .5s ease both;
}
.menu-leave-to, .scale-leave-active {
-webkit-animation: moveToLeft .2s ease both;
animation: moveToLeft .2s ease both;
-webkit-animation: moveToBottom .5s ease both;
animation: moveToBottom .5s ease both;
}
*/
.router-link-active {
color: #027be3;
@@ -91,4 +99,14 @@
.router-link-active .item-primary {
color: #027be3;
}
.menu_freccina {
position: absolute;
right: 10px;
display: inline-block;
padding: 0 0px 0px 0px;
-webkit-transform: rotate(-180deg);
transform: rotate(-180deg);
}
</style>

View File

@@ -8,6 +8,7 @@ export interface IGlobalState {
layoutNeeded: boolean
mobileMode: boolean
menuCollapse: boolean
leftDrawerOpen: boolean
posts: IPost[]
}

View File

@@ -1,10 +0,0 @@
<template>
<q-page>Prova pagina</q-page>
</template>
<script>
export default {
// name: 'PageName',
}
</script>

5
src/plugins/indexdb.js Normal file
View File

@@ -0,0 +1,5 @@
import VueIdb from 'vue-idb'
export default ({ Vue }) => {
Vue.use(VueIdb)
}

28
src/plugins/vue-idb.js Normal file
View File

@@ -0,0 +1,28 @@
import Vue from 'vue'
import VueIdb from 'vue-idb'
export default ({ Vue }) => {
Vue.use(VueIdb)
// Insert here the database for IndexDB
new VueIdb({
version: 1,
database: 'test',
schemas: [
{ categories: '++id, sub_categ_id, descr_it' }
]
})
}
/*
export default new VueIdb({
version: 1,
database: 'test',
schemas: [
{ categories: '++id, sub_categ_id, descr_it' }
]
})
*/

View File

@@ -28,6 +28,11 @@ export const RouteConfig: VueRouteConfig[] = [
path: '/vreg',
component: () => import('@/views/login/vreg/vreg.vue'),
meta: { name: 'Verify Reg' }
},
{
path: '/category',
component: () => import('@/components/categories/category/category.vue'),
meta: { name: 'Categories' }
}
/*
{

View File

@@ -8,6 +8,7 @@ const state: IGlobalState = {
layoutNeeded: true,
mobileMode: false,
menuCollapse: true,
leftDrawerOpen: true,
posts: []
}
@@ -31,8 +32,13 @@ namespace Mutations {
state.conta = num
}
function setleftDrawerOpen(state: IGlobalState, bool: boolean) {
state.leftDrawerOpen = bool
}
export const mutations = {
setConta: b.commit(setConta)
setConta: b.commit(setConta),
setleftDrawerOpen: b.commit(setleftDrawerOpen)
}
}

View File

@@ -6,7 +6,7 @@ import router from '@router'
import { serv_constants } from '../Modules/serv_constants'
import { rescodes } from '../Modules/rescodes'
import { UserStore } from "@store"
import { GlobalStore, UserStore } from '@store'
const bcrypt = require('bcryptjs')
@@ -109,37 +109,6 @@ namespace Mutations {
state.verifiedEmail = false
}
function autologin (state: IUserState) {
// INIT
UserStore.mutations.setlang(process.env.LANG_DEFAULT)
// ++Todo: Estrai la Lang dal Localstorage
const lang = localStorage.getItem('lang')
if (lang) {
UserStore.mutations.setlang(lang)
}
const token = localStorage.getItem('token')
if (!token) {
return
}
const expirationDateStr = localStorage.getItem('expirationDate')
let expirationDate = new Date(String(expirationDateStr))
const now = new Date()
if (now >= expirationDate) {
return
}
const userId = Number(localStorage.getItem('userId'))
const username = String(localStorage.getItem('username'))
const verifiedEmail = localStorage.getItem('verificato') === '1'
mutations.authUser({
username: username,
userId: userId,
idToken: token,
verifiedEmail: verifiedEmail
})
}
export const mutations = {
authUser: b.commit(authUser),
setpassword: b.commit(setpassword),
@@ -147,8 +116,7 @@ namespace Mutations {
setlang: b.commit(setlang),
UpdatePwd: b.commit(UpdatePwd),
setServerCode: b.commit(setServerCode),
clearAuthData: b.commit(clearAuthData),
autologin: b.commit(autologin)
clearAuthData: b.commit(clearAuthData)
}
}
@@ -200,7 +168,7 @@ namespace Actions {
})
.then((body) => {
Mutations.mutations.UpdatePwd({ idToken: x_auth_token })
localStorage.setItem('token', x_auth_token)
localStorage.setItem(rescodes.localStorage.token, x_auth_token)
return { code: body.code, msg: body.msg }
}).catch((err) => {
@@ -278,7 +246,10 @@ namespace Actions {
// console.log("RITORNO 2 ");
// mutations.setServerCode(myres);
if (body.code === serv_constants.RIS_CODE_EMAIL_VERIFIED) {
localStorage.setItem('verificato', '1')
console.log('VERIFICATO !!')
localStorage.setItem(rescodes.localStorage.verifiedEmail, '1')
} else {
console.log('Risultato di vreg: ', body.code)
}
return { code: body.code, msg: body.msg }
}).catch((err) => {
@@ -353,12 +324,12 @@ namespace Actions {
const now = new Date()
// const expirationDate = new Date(now.getTime() + myres.data.expiresIn * 1000);
const expirationDate = new Date(now.getTime() + 1000)
localStorage.setItem('username', username)
localStorage.setItem('token', x_auth_token)
localStorage.setItem('userId', iduser)
localStorage.setItem('expirationDate', expirationDate.toString())
localStorage.setItem('verificato', '0')
const expirationDate = new Date(now.getTime() * 1000)
localStorage.setItem(rescodes.localStorage.username, username)
localStorage.setItem(rescodes.localStorage.token, x_auth_token)
localStorage.setItem(rescodes.localStorage.userId, iduser)
localStorage.setItem(rescodes.localStorage.expirationDate, expirationDate.toString())
localStorage.setItem(rescodes.localStorage.verifiedEmail, '0')
// dispatch('storeUser', authData);
// dispatch('setLogoutTimer', myres.data.expiresIn);
@@ -438,7 +409,7 @@ namespace Actions {
if (myres.status === 200) {
let iduser = body._id
let username = authData.username
let verifiedEmail = body.verifiedEmail === 'true' || body.verifiedEmail === true
let verifiedEmail = body.verified_email === 'true' || body.verified_email === true
if (process.env.DEV) {
console.log('USERNAME = ' + username)
console.log('IDUSER= ' + iduser)
@@ -452,13 +423,13 @@ namespace Actions {
const now = new Date()
// const expirationDate = new Date(now.getTime() + myres.data.expiresIn * 1000);
const expirationDate = new Date(now.getTime() + 1000)
localStorage.setItem('username', username)
localStorage.setItem('token', x_auth_token)
localStorage.setItem('userId', iduser)
localStorage.setItem('expirationDate', expirationDate.toString())
localStorage.setItem('isLoggedin', String(true))
localStorage.setItem('verificato', String(verifiedEmail))
const expirationDate = new Date(now.getTime() * 1000)
localStorage.setItem(rescodes.localStorage.username, username)
localStorage.setItem(rescodes.localStorage.token, x_auth_token)
localStorage.setItem(rescodes.localStorage.userId, iduser)
localStorage.setItem(rescodes.localStorage.expirationDate, expirationDate.toString())
localStorage.setItem(rescodes.localStorage.isLogged, String(true))
localStorage.setItem(rescodes.localStorage.verifiedEmail, Number(verifiedEmail).toString())
// dispatch('storeUser', authData);
// dispatch('setLogoutTimer', myres.data.expiresIn);
@@ -507,16 +478,60 @@ namespace Actions {
Mutations.mutations.clearAuthData()
})
localStorage.removeItem('expirationDate')
localStorage.removeItem('token')
localStorage.removeItem('userId')
localStorage.removeItem('username')
localStorage.removeItem('isLoggedin')
localStorage.removeItem('verifiedEmail')
localStorage.removeItem(rescodes.localStorage.expirationDate)
localStorage.removeItem(rescodes.localStorage.token)
localStorage.removeItem(rescodes.localStorage.userId)
localStorage.removeItem(rescodes.localStorage.username)
localStorage.removeItem(rescodes.localStorage.isLogged)
// localStorage.removeItem(rescodes.localStorage.leftDrawerOpen)
localStorage.removeItem(rescodes.localStorage.verifiedEmail)
router.push('/signin')
}
function setGlobal() {
GlobalStore.mutations.setleftDrawerOpen(localStorage.getItem(rescodes.localStorage.leftDrawerOpen) === 'true')
}
async function autologin (context) {
try {
// INIT
UserStore.mutations.setlang(process.env.LANG_DEFAULT)
// ++Todo: Estrai la Lang dal Localstorage
const lang = localStorage.getItem('lang')
if (lang) {
UserStore.mutations.setlang(lang)
}
const token = localStorage.getItem(rescodes.localStorage.token)
if (!token) {
return false
}
const expirationDateStr = localStorage.getItem(rescodes.localStorage.expirationDate)
let expirationDate = new Date(String(expirationDateStr))
const now = new Date()
if (now >= expirationDate) {
return false
}
const userId = Number(localStorage.getItem(rescodes.localStorage.userId))
const username = String(localStorage.getItem(rescodes.localStorage.username))
const verifiedEmail = localStorage.getItem(rescodes.localStorage.verifiedEmail) === '1'
setGlobal()
Mutations.mutations.authUser({
username: username,
userId: userId,
idToken: token,
verifiedEmail: verifiedEmail
})
return true
} catch (e) {
console.error('ERR autologin ', e.message)
return false
}
}
export const actions = {
resetpwd: b.dispatch(resetpwd),
@@ -524,7 +539,8 @@ namespace Actions {
vreg: b.dispatch(vreg),
signup: b.dispatch(signup),
signin: b.dispatch(signin),
logout: b.dispatch(logout)
logout: b.dispatch(logout),
autologin: b.dispatch(autologin)
}
}

View File

@@ -3,5 +3,15 @@ export const rescodes = {
OK: 20,
ERR_GENERICO: -1,
DUPLICATE_EMAIL_ID: 11000,
DUPLICATE_USERNAME_ID: 11100
DUPLICATE_USERNAME_ID: 11100,
localStorage: {
verifiedEmail: 'vf',
isLogged: 'ilog',
expirationDate: 'expdate',
leftDrawerOpen: 'ldo',
userId: 'uid',
token: 'tk',
username: 'uname'
}
}

7
src/typings/libs/vue-idb.d.ts vendored Normal file
View File

@@ -0,0 +1,7 @@
import { VueIdb } from 'vue-idb'
declare module 'vue/types/vue' {
interface Vue {
$db: VueIdb
}
}

View File

@@ -85,7 +85,7 @@
}
}
</script>
<style>
<style scoped>
#map {
height: 180px;
}

View File

@@ -30,6 +30,7 @@
>
<q-input
v-model="signin.password"
type="password"
:before="[{icon: 'vpn_key', handler () {}}]"
@blur="$v.signin.password.$touch"
:error="$v.signin.password.$error"

View File

@@ -72,7 +72,8 @@
riscode: 0,
emailsent: false,
form: {
email: '',
password: '',
repeatPassword: '',
tokenforgot: 0,
},
}
@@ -87,8 +88,12 @@
},
validations: {
form: {
email: {
required, email,
password: {
required,
},
repeatPassword: {
required,
sameAsPassword: sameAs('password')
},
}
},

View File

@@ -51,7 +51,7 @@ export default class Vreg extends Vue {
if (this.verificatook) {
setTimeout(() => {
this.$router.replace('/')
this.$router.replace('/signin')
}, 3000)
}

View File

@@ -35,6 +35,7 @@
"@modules": ["./store/Modules/index.ts"]
},
"sourceMap": true,
// "usePostCSS": true,
"allowJs": true,
"skipLibCheck": true,
"types": [