6
.babelrc
6
.babelrc
@@ -37,8 +37,10 @@
|
|||||||
[
|
[
|
||||||
"@babel/plugin-transform-runtime",
|
"@babel/plugin-transform-runtime",
|
||||||
{
|
{
|
||||||
"regenerator": true,
|
"corejs": false,
|
||||||
"helpers": true
|
"regenerator": false,
|
||||||
|
"helpers": true,
|
||||||
|
"useESModules": false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ $ npm run dev:pwa # Build your PWA
|
|||||||
```
|
```
|
||||||
|
|
||||||
## References
|
## References
|
||||||
|
* **Quasar TypeScript (Kevin Marrec proj)** : [GitHub](https://github.com/kevinmarrec/quasar-typescript)
|
||||||
* **Quasar 0.17.15** : [Website](https://quasar-framework.org) | [Documentation](https://quasar-framework.org/guide) | [Github](https://github.com/quasarframework/quasar)
|
* **Quasar 0.17.15** : [Website](https://quasar-framework.org) | [Documentation](https://quasar-framework.org/guide) | [Github](https://github.com/quasarframework/quasar)
|
||||||
* **Vue I18n 8.1.0** : [Website](https://kazupon.github.io/vue-i18n) | [Documentation](https://kazupon.github.io/vue-i18n/guide/started.html) | [Github](https://github.com/kazupon/vue-i18n)
|
* **Vue I18n 8.1.0** : [Website](https://kazupon.github.io/vue-i18n) | [Documentation](https://kazupon.github.io/vue-i18n/guide/started.html) | [Github](https://github.com/kazupon/vue-i18n)
|
||||||
|
|
||||||
@@ -77,3 +78,10 @@ $ npm run dev:pwa # Build your PWA
|
|||||||
[MIT](https://opensource.org/licenses/MIT)
|
[MIT](https://opensource.org/licenses/MIT)
|
||||||
|
|
||||||
Copyright (c) 2018-present, Paolo Arena
|
Copyright (c) 2018-present, Paolo Arena
|
||||||
|
|
||||||
|
This project using Vue.js and Typescript started in October 2018 using as a skeleton parts of the code of Kevin Marrec. So Thank you!
|
||||||
|
|
||||||
|
* Quasar TypeScript:
|
||||||
|
https://github.com/kevinmarrec/quasar-typescript
|
||||||
|
Copyright (c) 2018, Kevin Marrec
|
||||||
|
|
||||||
|
|||||||
8279
package-lock.json
generated
8279
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
45
package.json
45
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "vue-order-admin",
|
"name": "freeplanet",
|
||||||
"version": "0.1.0",
|
"version": "0.0.1",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"lint": "tslint --project tsconfig.json",
|
"lint": "tslint --project tsconfig.json",
|
||||||
@@ -11,28 +11,28 @@
|
|||||||
"pwa": "NODE_OPTIONS=--max_old_space_size=4096 DEBUG=v8:* quasar dev -m pwa",
|
"pwa": "NODE_OPTIONS=--max_old_space_size=4096 DEBUG=v8:* quasar dev -m pwa",
|
||||||
"test:unit": "jest",
|
"test:unit": "jest",
|
||||||
"test:cover": "jest --coverage",
|
"test:cover": "jest --coverage",
|
||||||
"build": "quasar build",
|
"build": "quasar build -m pwa",
|
||||||
"build:ssr": "quasar build -m ssr",
|
|
||||||
"build:clean": "quasar clean",
|
"build:clean": "quasar clean",
|
||||||
"serve": "quasar serve ./dist/spa-mat",
|
"serve": "quasar serve ./dist/pwa-mat",
|
||||||
"serve:ssr": "quasar serve ./dist/ssr-mat",
|
|
||||||
"serve:coverage": "quasar serve test/coverage/lcov-report/ --cache 0 --port 8788",
|
"serve:coverage": "quasar serve test/coverage/lcov-report/ --cache 0 --port 8788",
|
||||||
"deploy": "now dist/spa-mat",
|
"deploy": "now dist/pwa-mat"
|
||||||
"deploy:ssr": "now dist/ssr-mat"
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"quasar-extras": "^2.0.8",
|
||||||
|
"quasar-framework": "0.17.17",
|
||||||
"@types/vuelidate": "^0.7.0",
|
"@types/vuelidate": "^0.7.0",
|
||||||
|
"acorn": "^6.0.0",
|
||||||
"axios": "^0.18.0",
|
"axios": "^0.18.0",
|
||||||
"babel-runtime": "^6.0.0",
|
"babel-runtime": "^6.26.0",
|
||||||
"bcrypt": "^3.0.2",
|
"bcrypt": "^3.0.2",
|
||||||
"bcryptjs": "^2.4.3",
|
"bcryptjs": "^2.4.3",
|
||||||
"dotenv": "^6.1.0",
|
"dotenv": "^6.1.0",
|
||||||
"element-ui": "^2.3.6",
|
"element-ui": "^2.3.6",
|
||||||
|
"google-translate-api": "^2.3.0",
|
||||||
"js-cookie": "^2.2.0",
|
"js-cookie": "^2.2.0",
|
||||||
"normalize.css": "^8.0.0",
|
"normalize.css": "^8.0.0",
|
||||||
"npm": "^6.4.1",
|
"npm": "^6.4.1",
|
||||||
"nprogress": "^0.2.0",
|
"nprogress": "^0.2.0",
|
||||||
"quasar-extras": "0.0.7",
|
|
||||||
"register-service-worker": "^1.0.0",
|
"register-service-worker": "^1.0.0",
|
||||||
"vee-validate": "^2.1.2",
|
"vee-validate": "^2.1.2",
|
||||||
"vue": "^2.5.17",
|
"vue": "^2.5.17",
|
||||||
@@ -49,9 +49,19 @@
|
|||||||
"vuex-typex": "^3.0.1"
|
"vuex-typex": "^3.0.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.1.2",
|
"@babel/runtime": "7.0.0-beta.54",
|
||||||
"@babel/plugin-transform-runtime": "^7.1.0",
|
"@babel/core": "7.0.0-beta.50",
|
||||||
"@babel/preset-env": "^7.1.0",
|
"@babel/code-frame": "7.0.0-beta.54",
|
||||||
|
"@babel/generator": "7.0.0-beta.54",
|
||||||
|
"@babel/helpers": "7.0.0-beta.54",
|
||||||
|
"@babel/parser": "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/dotenv": "^4.0.3",
|
||||||
"@types/jest": "^23.1.4",
|
"@types/jest": "^23.1.4",
|
||||||
"@types/js-cookie": "^2.1.0",
|
"@types/js-cookie": "^2.1.0",
|
||||||
@@ -65,8 +75,7 @@
|
|||||||
"@vue/cli-plugin-unit-jest": "^3.0.1",
|
"@vue/cli-plugin-unit-jest": "^3.0.1",
|
||||||
"@vue/cli-service": "^3.0.1",
|
"@vue/cli-service": "^3.0.1",
|
||||||
"@vue/test-utils": "^1.0.0-beta.20",
|
"@vue/test-utils": "^1.0.0-beta.20",
|
||||||
"babel-core": "7.0.0-bridge.0",
|
"babel-loader": "^8.0.0-beta.2",
|
||||||
"babel-loader": "^8.0.4",
|
|
||||||
"eslint": "^5.5.0",
|
"eslint": "^5.5.0",
|
||||||
"html-webpack-plugin": "^2.8.1",
|
"html-webpack-plugin": "^2.8.1",
|
||||||
"http-proxy-middleware": "^0.17.0",
|
"http-proxy-middleware": "^0.17.0",
|
||||||
@@ -85,9 +94,9 @@
|
|||||||
"vue-cli-plugin-element-ui": "^1.1.2",
|
"vue-cli-plugin-element-ui": "^1.1.2",
|
||||||
"vue-template-compiler": "^2.5.17",
|
"vue-template-compiler": "^2.5.17",
|
||||||
"vueify": "^9.4.1",
|
"vueify": "^9.4.1",
|
||||||
"webpack": "^2.2.1",
|
"webpack": "^4.0.0",
|
||||||
"webpack-dev-middleware": "^1.8.4",
|
"webpack-dev-middleware": "^3.2.0",
|
||||||
"webpack-hot-middleware": "^2.18.1",
|
"webpack-hot-middleware": "^2.24.3",
|
||||||
"webpack-merge": "^4.0.0"
|
"webpack-merge": "^4.0.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
|
|
||||||
created() {
|
created() {
|
||||||
//this.title = 'My Vue and CosmosDB Heroes App'
|
//this.title = 'My Vue and CosmosDB Heroes App'
|
||||||
console.info(process.env)
|
// console.info(process.env)
|
||||||
UserStore.mutations.autologin()
|
UserStore.mutations.autologin()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,66 +49,54 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script lang="ts">
|
||||||
import {openURL} from 'quasar';
|
import Vue from 'vue'
|
||||||
|
import Component from 'vue-class-component'
|
||||||
import {Quasar} from 'quasar';
|
|
||||||
|
|
||||||
import drawer from '../layouts/drawer/drawer.vue'
|
import drawer from '../layouts/drawer/drawer.vue'
|
||||||
import messagePopover from '../layouts/toolbar/messagePopover.vue'
|
import messagePopover from '../layouts/toolbar/messagePopover.vue'
|
||||||
|
|
||||||
// import user from '../store/Modules/user';
|
@Component({
|
||||||
|
|
||||||
export default {
|
|
||||||
components: {
|
components: {
|
||||||
drawer,
|
drawer,
|
||||||
messagePopover,
|
messagePopover,
|
||||||
},
|
|
||||||
created() {
|
|
||||||
//this.$store.dispatch('initStocks');
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
openURL,
|
|
||||||
},
|
|
||||||
data: function () {
|
|
||||||
return {
|
|
||||||
selectOpLang: [
|
|
||||||
{label: 'English (UK)', icon: 'fa-flag-us', value: 'en-uk'},
|
|
||||||
{label: 'German', icon: 'fa-flag-de', value: 'de'},
|
|
||||||
{label: 'Spanish', icon: 'fa-flag-es', value: 'es'},
|
|
||||||
{label: 'Italian', icon: 'fa-facebook', value: 'it'}
|
|
||||||
],
|
|
||||||
lang: this.$q.i18n.lang,
|
|
||||||
leftDrawerOpen: this.$q.platform.is.desktop
|
|
||||||
}
|
}
|
||||||
},
|
})
|
||||||
watch: {
|
|
||||||
lang(lang) {
|
export default class Header extends Vue {
|
||||||
this.$i18n.locale = snakeToCamel(lang);
|
public $v
|
||||||
console.log("LANG LOCALE = " + this.$i18n.locale);
|
public $q
|
||||||
|
|
||||||
|
public selectOpLang = [
|
||||||
|
{ label: 'English (UK)', icon: 'fa-flag-us', value: 'en-uk' },
|
||||||
|
{ label: 'German', icon: 'fa-flag-de', value: 'de' },
|
||||||
|
{ label: 'Spanish', icon: 'fa-flag-es', value: 'es' },
|
||||||
|
{ label: 'Italian', icon: 'fa-facebook', value: 'it' }
|
||||||
|
]
|
||||||
|
public leftDrawerOpen = this.$q.platform.is.desktop
|
||||||
|
|
||||||
|
get lang() {
|
||||||
|
return this.$q.i18n.lang
|
||||||
|
}
|
||||||
|
|
||||||
|
set lang(lang) {
|
||||||
|
this.$i18n.locale = this.snakeToCamel(lang)
|
||||||
|
|
||||||
// dynamic import, so loading on demand only
|
// dynamic import, so loading on demand only
|
||||||
import(`quasar-framework/i18n/${lang}`).then(lang => {
|
import(`quasar-framework/i18n/${lang}`).then(lang => {
|
||||||
//console.log("lang prima = " + this.$q.i18n.lang);
|
this.$q.i18n.set(lang.default)
|
||||||
this.$q.i18n.set(lang.default);
|
|
||||||
var mylang = this.$q.i18n.lang;
|
|
||||||
console.log("lang = " + this.$q.i18n.lang);
|
|
||||||
//console.log("lang DOPO = " + this.$q.i18n.lang);
|
|
||||||
import(`src/i18n`).then(function () {
|
import(`src/i18n`).then(function () {
|
||||||
|
})
|
||||||
});
|
})
|
||||||
});
|
|
||||||
|
|
||||||
// dynamic import, so loading on demand only
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function snakeToCamel(str) {
|
public snakeToCamel(str) {
|
||||||
return str.replace(/(-\w)/g, m => {
|
return str.replace(/(-\w)/g, m => {
|
||||||
return m[1].toUpperCase()
|
return m[1].toUpperCase()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
const messages = {
|
const messages = {
|
||||||
it: {
|
it: {
|
||||||
|
comp:{
|
||||||
|
Conta: "Conta",
|
||||||
|
},
|
||||||
msg: {
|
msg: {
|
||||||
hello: 'Buongiorno',
|
hello: 'Buongiorno',
|
||||||
myAppName: 'FreePlanet',
|
myAppName: 'FreePlanet',
|
||||||
@@ -51,7 +54,10 @@ const messages = {
|
|||||||
uscito: 'Sei Uscito',
|
uscito: 'Sei Uscito',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
enUs: {
|
enUk: {
|
||||||
|
comp:{
|
||||||
|
Conta: "Count",
|
||||||
|
},
|
||||||
msg: {
|
msg: {
|
||||||
hello: 'Hello!',
|
hello: 'Hello!',
|
||||||
myAppName: 'FreePlanet',
|
myAppName: 'FreePlanet',
|
||||||
|
|||||||
@@ -13,9 +13,9 @@
|
|||||||
<link rel="icon" href="statics/quasar-logo.png" type="image/x-icon">
|
<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">
|
<link rel="icon" type="image/png" sizes="32x32" href="statics/icons/favicon-32x32.png">
|
||||||
<link rel="icon" type="image/png" sizes="16x16" href="statics/icons/favicon-16x16.png">
|
<link rel="icon" type="image/png" sizes="16x16" href="statics/icons/favicon-16x16.png">
|
||||||
<script defer src="js/material.min.js"></script>
|
<script defer src="statics/js/material.min.js"></script>
|
||||||
<script src="js/promise.js"></script>
|
<script src="statics/js/promise.js"></script>
|
||||||
<script src="js/fetch.js"></script>
|
<script src="statics/js/fetch.js"></script>
|
||||||
<link type="text/css" rel="stylesheet" href="statics/firebaseui.css" />
|
<link type="text/css" rel="stylesheet" href="statics/firebaseui.css" />
|
||||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
||||||
|
|
||||||
|
|||||||
@@ -1,74 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="content-header" v-if="!getIsLoginPage">
|
|
||||||
<span id="content-header-title" class="vertical-bottom">{{routerTitle}}</span>
|
|
||||||
<button class="bg-blue-grey-8 text-white " id="configurations">
|
|
||||||
<i>settings</i>
|
|
||||||
<q-popover ref="popover" anchor="top left" self="top right" class="bg-blue-grey-8 text-white">
|
|
||||||
<div class="list highlight " >
|
|
||||||
<div class="item">
|
|
||||||
<div class="item-content has-secondary">Layout</div>
|
|
||||||
<div class="item-secondary">
|
|
||||||
<q-toggle
|
|
||||||
class="green"
|
|
||||||
v-model="getLayoutNeeded"
|
|
||||||
@input="setLayoutNeeded(!getLayoutNeeded)"
|
|
||||||
></q-toggle>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="item">
|
|
||||||
<div class="item-content has-secondary">Menu Collapse</div>
|
|
||||||
<div class="item-secondary">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</q-popover>
|
|
||||||
</button>
|
|
||||||
<hr>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<script type="text/javascript">
|
|
||||||
import { mapActions, mapGetters } from 'vuex'
|
|
||||||
import * as types from '../store/mutation-types'
|
|
||||||
export default {
|
|
||||||
computed: {
|
|
||||||
...mapGetters("glob", ['getLayoutNeeded', 'getIsLoginPage']),
|
|
||||||
routerTitle () {
|
|
||||||
return this.$route.meta.name
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
...mapActions("glob", {
|
|
||||||
setLayoutNeeded: types.SET_LAYOUT_NEEDED,
|
|
||||||
setMenuCollapse: types.SET_MENU_COLLAPSED
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<style scoped>
|
|
||||||
.list {
|
|
||||||
min-height: 120px;
|
|
||||||
}
|
|
||||||
#configurations {
|
|
||||||
position: absolute;
|
|
||||||
right: 65px;
|
|
||||||
top: 7px;
|
|
||||||
}
|
|
||||||
.content-header {
|
|
||||||
position: relative;
|
|
||||||
padding: 1em 4em 0em 4em;
|
|
||||||
}
|
|
||||||
@media screen and (max-width: 600px){
|
|
||||||
.content-header {
|
|
||||||
padding: 1.5em .5em;
|
|
||||||
}
|
|
||||||
#configurations {
|
|
||||||
position: absolute;
|
|
||||||
right: 8px;
|
|
||||||
top: 12px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#content-header-title {
|
|
||||||
font-size: 22px;
|
|
||||||
font-weight: 300;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -29,7 +29,7 @@ export default class Home extends Vue {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get conta() {
|
get conta() {
|
||||||
return GlobalStore.state.conta
|
return GlobalStore.getters.conta
|
||||||
}
|
}
|
||||||
set conta(valore) {
|
set conta(valore) {
|
||||||
GlobalStore.actions.setConta(valore)
|
GlobalStore.actions.setConta(valore)
|
||||||
|
|||||||
@@ -8,10 +8,12 @@
|
|||||||
|
|
||||||
<q-field
|
<q-field
|
||||||
icon="wifi"
|
icon="wifi"
|
||||||
:count="10"
|
|
||||||
helper="Some helper"
|
helper="Some helper"
|
||||||
>
|
>
|
||||||
<br>Conta = {{ conta }}
|
<q-input
|
||||||
|
v-model="conta"
|
||||||
|
/>
|
||||||
|
<br>{{$t('comp.Conta')}} = {{ conta }}
|
||||||
</q-field>
|
</q-field>
|
||||||
|
|
||||||
<!--<q-btn
|
<!--<q-btn
|
||||||
|
|||||||
461
src/statics/js/fetch.js
Normal file
461
src/statics/js/fetch.js
Normal file
@@ -0,0 +1,461 @@
|
|||||||
|
(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);
|
||||||
311
src/statics/js/idb.js
Normal file
311
src/statics/js/idb.js
Normal file
@@ -0,0 +1,311 @@
|
|||||||
|
'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;
|
||||||
|
}
|
||||||
|
}());
|
||||||
10
src/statics/js/material.min.js
vendored
Normal file
10
src/statics/js/material.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
372
src/statics/js/promise.js
Normal file
372
src/statics/js/promise.js
Normal file
@@ -0,0 +1,372 @@
|
|||||||
|
/**
|
||||||
|
* 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));
|
||||||
@@ -12,14 +12,17 @@ const state: IGlobalState = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const b = storeBuilder.module<IGlobalState>('GlobalModule', state)
|
const b = storeBuilder.module<IGlobalState>('GlobalModule', state)
|
||||||
const stateGetter = b.state()
|
|
||||||
|
|
||||||
// Getters
|
// Getters
|
||||||
namespace Getters {
|
namespace Getters {
|
||||||
|
|
||||||
export const getters = {
|
const conta = b.read(state => state.conta , 'conta')
|
||||||
}
|
|
||||||
|
|
||||||
|
export const getters = {
|
||||||
|
get conta() {
|
||||||
|
return conta()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace Mutations {
|
namespace Mutations {
|
||||||
@@ -45,6 +48,8 @@ namespace Actions {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const stateGetter = b.state()
|
||||||
|
|
||||||
// Module
|
// Module
|
||||||
const GlobalModule = {
|
const GlobalModule = {
|
||||||
get state() { return stateGetter()},
|
get state() { return stateGetter()},
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
import Vuex, { Store } from 'vuex'
|
|
||||||
import Vue from 'vue'
|
|
||||||
import {RootState} from '@store'
|
import {RootState} from '@store'
|
||||||
import { getStoreBuilder } from 'vuex-typex'
|
import { getStoreBuilder } from 'vuex-typex'
|
||||||
Vue.use(Vuex)
|
|
||||||
|
|
||||||
export const storeBuilder = getStoreBuilder<RootState>()
|
export const storeBuilder = getStoreBuilder<RootState>()
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
import Api from '@api'
|
import Api from '@api'
|
||||||
import { ISignupOptions, ISigninOptions, IUserState } from 'model'
|
import { ISignupOptions, ISigninOptions, IUserState } from 'model'
|
||||||
import { ILinkReg, IResult, IIdToken } from 'model/other'
|
import { ILinkReg, IResult, IIdToken } from 'model/other'
|
||||||
@@ -8,8 +7,6 @@ import router from '@router'
|
|||||||
import { serv_constants } from '../Modules/serv_constants'
|
import { serv_constants } from '../Modules/serv_constants'
|
||||||
import { rescodes } from '../Modules/rescodes'
|
import { rescodes } from '../Modules/rescodes'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const bcrypt = require('bcryptjs')
|
const bcrypt = require('bcryptjs')
|
||||||
|
|
||||||
|
|
||||||
@@ -34,15 +31,15 @@ const stateGetter = b.state()
|
|||||||
|
|
||||||
namespace Getters {
|
namespace Getters {
|
||||||
|
|
||||||
const lang = b.read(function lang(state): string {
|
const lang = b.read(state => {
|
||||||
if (state.lang !== '') {
|
if (state.lang !== '') {
|
||||||
return state.lang
|
return state.lang
|
||||||
} else {
|
} else {
|
||||||
return process.env.LANG_DEFAULT
|
return process.env.LANG_DEFAULT
|
||||||
}
|
}
|
||||||
})
|
}, 'lang')
|
||||||
|
|
||||||
const tok = b.read(function tok(state): string {
|
const tok = b.read(state => {
|
||||||
if (state.tokens) {
|
if (state.tokens) {
|
||||||
if (typeof state.tokens[0] !== 'undefined') {
|
if (typeof state.tokens[0] !== 'undefined') {
|
||||||
return state.tokens[0].token
|
return state.tokens[0].token
|
||||||
@@ -52,7 +49,7 @@ namespace Getters {
|
|||||||
} else {
|
} else {
|
||||||
return ''
|
return ''
|
||||||
}
|
}
|
||||||
})
|
}, 'tok')
|
||||||
|
|
||||||
export const getters = {
|
export const getters = {
|
||||||
get lang() {
|
get lang() {
|
||||||
|
|||||||
@@ -22,15 +22,3 @@ export { default as Api } from './Api'
|
|||||||
|
|
||||||
const store: Store<RootState> = getStoreBuilder<RootState>().vuexStore()
|
const store: Store<RootState> = getStoreBuilder<RootState>().vuexStore()
|
||||||
export default store
|
export default store
|
||||||
|
|
||||||
// export function createStore() {
|
|
||||||
// const store: Store<RootState> = storeBuilder.vuexStore({
|
|
||||||
// strict: DebugMode
|
|
||||||
// })
|
|
||||||
//
|
|
||||||
// return store
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
// export default new Vuex.Store<RootState>({
|
|
||||||
|
|
||||||
// })
|
|
||||||
|
|||||||
7
src/typings/libs/i18n.d.ts
vendored
Normal file
7
src/typings/libs/i18n.d.ts
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
import { VueI18n } from 'vue-i18n'
|
||||||
|
|
||||||
|
declare module 'vue/types/vue' {
|
||||||
|
interface Vue {
|
||||||
|
$i18n: VueI18n
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import { ISignupOptions } from 'model'
|
import { ISignupOptions } from 'model'
|
||||||
import { required, minLength, email, sameAs } from 'vuelidate/lib/validators'
|
import { required, minLength, email, sameAs } from 'vuelidate/lib/validators'
|
||||||
import { ValidationRuleset } from 'vuelidate'
|
// import { ValidationRuleset } from 'vuelidate'
|
||||||
import { complexity, registereduser, registeredemail } from 'validation'
|
import { complexity, registereduser, registeredemail } from '../../../validation'
|
||||||
|
|
||||||
export type TSignup = { signup: ISignupOptions, validationGroup: string[] }
|
export type TSignup = { signup: ISignupOptions, validationGroup: string[] }
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user