├── .babelrc ├── .dockerignore ├── .env.example ├── .gitignore ├── .vscode └── launch.json ├── CHANGELOG.md ├── Dockerfile ├── README.md ├── client ├── App.vue ├── components │ ├── HeroDetail.vue │ ├── HeroList.vue │ └── VillainList.vue ├── hero.service.ts ├── hero.ts ├── index.html ├── main.ts └── vue.shims.d.ts ├── docker-compose.debug.yml ├── docker-compose.yml ├── index.html ├── index.js ├── package-lock.json ├── package.json ├── server ├── hero.model.js ├── hero.service.js ├── mongo.js ├── routes.js └── www │ ├── build.js │ ├── build.js.map │ └── index.html ├── tsconfig.json └── webpack.config.js /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { "modules": false }] 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | npm-debug.log 3 | Dockerfile* 4 | docker-compose* 5 | .dockerignore 6 | .git 7 | .gitignore 8 | README.md 9 | LICENSE 10 | .vscode -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | SERVER_PORT=3001 2 | PUBLICWEB=./server/www 3 | COSMOSDB_ACCOUNT=your_cosmos_account 4 | COSMOSDB_DB=your_cosmos_db 5 | COSMOSDB_KEY=your_cosmos_key 6 | COSMOSDB_PORT=10255 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # ignore server configuration 2 | *.azcli 3 | 4 | # Logs 5 | logs 6 | *.log 7 | npm-debug.log* 8 | yarn-debug.log* 9 | yarn-error.log* 10 | 11 | # Runtime data 12 | pids 13 | *.pid 14 | *.seed 15 | *.pid.lock 16 | 17 | # Directory for instrumented libs generated by jscoverage/JSCover 18 | lib-cov 19 | 20 | # Coverage directory used by tools like istanbul 21 | coverage 22 | 23 | # nyc test coverage 24 | .nyc_output 25 | 26 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 27 | .grunt 28 | 29 | # Bower dependency directory (https://bower.io/) 30 | bower_components 31 | 32 | # node-waf configuration 33 | .lock-wscript 34 | 35 | # Compiled binary addons (http://nodejs.org/api/addons.html) 36 | build/Release 37 | 38 | # Dependency directories 39 | node_modules/ 40 | jspm_packages/ 41 | 42 | # Typescript v1 declaration files 43 | typings/ 44 | 45 | # Optional npm cache directory 46 | .npm 47 | 48 | # Optional eslint cache 49 | .eslintcache 50 | 51 | # Optional REPL history 52 | .node_repl_history 53 | 54 | # Output of 'npm pack' 55 | *.tgz 56 | 57 | # Yarn Integrity file 58 | .yarn-integrity 59 | 60 | # dotenv environment variables file 61 | .env 62 | 63 | # See http://help.github.com/ignore-files/ for more about ignoring files. 64 | 65 | # ignore server configuration 66 | env/development.js 67 | docker-compose.local.yml 68 | *.azcli 69 | 70 | # compiled output 71 | /dist 72 | /tmp 73 | /out-tsc 74 | 75 | # IDEs and editors 76 | /.idea 77 | .project 78 | .classpath 79 | .c9/ 80 | *.launch 81 | .settings/ 82 | *.sublime-workspace 83 | 84 | # IDE - VSCode 85 | .vscode/* 86 | !.vscode/settings.json 87 | !.vscode/tasks.json 88 | !.vscode/launch.json 89 | !.vscode/extensions.json 90 | 91 | # misc 92 | /.sass-cache 93 | /connect.lock 94 | /coverage 95 | /libpeerconnection.log 96 | npm-debug.log 97 | testem.log 98 | /typings 99 | 100 | # e2e 101 | /e2e/*.js 102 | /e2e/*.map 103 | 104 | # System Files 105 | .DS_Store 106 | Thumbs.db 107 | 108 | #.vscode 109 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "type": "node", 9 | "request": "launch", 10 | "name": "Launch via NPM", 11 | "runtimeExecutable": "npm", 12 | "runtimeArgs": [ 13 | "run-script", 14 | "debug" 15 | ], 16 | "port": 9229 17 | }, 18 | { 19 | "name": "Docker: Attach to Node", 20 | "type": "node", 21 | "request": "attach", 22 | "port": 9229, 23 | "address": "localhost", 24 | "restart": true, 25 | "sourceMaps": false, 26 | "localRoot": "${workspaceRoot}", 27 | "remoteRoot": "." 28 | } 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## vue-heroes Changelog 2 | 3 | 4 | 5 | # 1.1.0 (2017-12-02) 6 | 7 | _Breaking Changes_ 8 | 9 | * Added `.env` file in the root 10 | * Added `dotenv` to read the `.env` file when running locally (without docker) 11 | * Removed `./src/server/environment` folder and its contents (replaced with `.env`) 12 | * docker-compose "debug" now uses the `.env` file 13 | * docker-compose for prod and cloud hosting will require ENV vars to be set in the cloud 14 | * `.env` is gitignored and not copied in the `Dockerfile` build process 15 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # Client App 2 | FROM node:8.9-alpine as client-app 3 | LABEL authors="John Papa" 4 | WORKDIR /usr/src/app 5 | COPY ["package.json", "npm-shrinkwrap.json*", "./"] 6 | RUN npm install --silent 7 | COPY . . 8 | RUN npm run build 9 | 10 | # Node server 11 | FROM node:8.9-alpine as node-server 12 | WORKDIR /usr/src/app 13 | COPY ["package.json", "npm-shrinkwrap.json*", "./"] 14 | RUN npm install --production --silent && mv node_modules ../ 15 | COPY . . 16 | 17 | # Final image 18 | FROM node:8.9-alpine 19 | WORKDIR /usr/src/app 20 | COPY --from=node-server /usr/src /usr/src 21 | COPY --from=client-app /usr/src/app/server/www ./server/www 22 | EXPOSE 3001 23 | CMD ["node", "index.js"] 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vue-heroes 2 | 3 | A Cosmos DB, Express.js, Vue, and Node.js app 4 | 5 | ## Features 6 | 7 | This project framework provides the following features: 8 | 9 | * Vue.js 10 | * Node.js 11 | * Express 12 | * Mongoose API 13 | * Connecting to MongoDB or CosmosDB 14 | * Building, Debugging, Deploying with Docker 15 | 16 | ## Getting Started 17 | 18 | ### Prerequisites 19 | 20 | Node.js with npm 21 | 22 | ### Installation 23 | 24 | ``` bash 25 | git clone https://github.com/johnpapa/vue-heroes.git 26 | cd vue-heroes 27 | npm install 28 | ``` 29 | 30 | ### Database settings 31 | 32 | * Configure Cosmos DB server settings 33 | 34 | Rename the `.env.example.js` file to `.env` in the root folder and update it with your Cosmos DB settings. Replace the accountName, databaseName, key, and port with your specific configuration. 35 | 36 | ```javascript 37 | SERVER_PORT=3001 38 | PUBLICWEB=./server/www 39 | COSMOSDB_ACCOUNT=your_cosmos_account 40 | COSMOSDB_DB=your_cosmos_db 41 | COSMOSDB_KEY=your_cosmos_key 42 | COSMOSDB_PORT=10255 43 | ``` 44 | 45 | ### Quickstart 46 | 47 | This will build the app and run the dev server for Vue and WebPack. The Node express server will launch and WebPack will proxy the calls from the browser to the API in express. It will also and prepare it for local debugging. 48 | 49 | ``` bash 50 | # build for production with minification 51 | npm run build 52 | 53 | # serve on http://localhost:8080 54 | # and run the api on http://localhost:3001 55 | npm run debug 56 | ``` 57 | 58 | ### Local Prod Build 59 | 60 | This will build the app and launch via the Node.js express server. 61 | 62 | ```bash 63 | # build for production with minification 64 | npm run build 65 | 66 | # run the node server 67 | npm start 68 | ``` 69 | 70 | ### Docker 71 | 72 | Build the image and run container. 73 | 74 | ``` bash 75 | npm run docker-up 76 | ``` 77 | 78 | Build the image and run container for local debugging. 79 | 80 | ``` bash 81 | npm run docker-up-debug 82 | ``` -------------------------------------------------------------------------------- /client/App.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 48 | 49 | 113 | -------------------------------------------------------------------------------- /client/components/HeroDetail.vue: -------------------------------------------------------------------------------- 1 | 24 | 25 | 93 | 94 | 110 | -------------------------------------------------------------------------------- /client/components/HeroList.vue: -------------------------------------------------------------------------------- 1 | 32 | 33 | 94 | 95 | 184 | -------------------------------------------------------------------------------- /client/components/VillainList.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 14 | 15 | 17 | -------------------------------------------------------------------------------- /client/hero.service.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | import { Hero } from './hero'; 4 | 5 | const api = 'api'; 6 | 7 | class HeroService { 8 | constructor() { 9 | console.log('creating new instance of hero.service'); 10 | } 11 | 12 | deleteHero(hero: Hero) { 13 | return axios.delete(`${api}/hero/${hero.id}`); 14 | } 15 | getHeroes() { 16 | return axios.get(`${api}/heroes`); 17 | } 18 | addHero(hero: Hero) { 19 | return axios.post(`${api}/hero/`, { hero }); 20 | } 21 | updateHero(hero: Hero) { 22 | return axios.put(`${api}/hero/${hero.id}`, { hero }); 23 | } 24 | } 25 | 26 | // Export a singleton instance in the global namespace 27 | export const heroService = new HeroService(); 28 | -------------------------------------------------------------------------------- /client/hero.ts: -------------------------------------------------------------------------------- 1 | export class Hero { 2 | constructor(public id: number, public name: string, public saying: string) {} 3 | } 4 | -------------------------------------------------------------------------------- /client/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Vue Heroes 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /client/main.ts: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import App from './App.vue'; 3 | 4 | new Vue({ 5 | el: '#app', 6 | template: '', 7 | components: { 8 | App 9 | } 10 | }); 11 | -------------------------------------------------------------------------------- /client/vue.shims.d.ts: -------------------------------------------------------------------------------- 1 | declare module "*.vue" { 2 | import Vue from "vue"; 3 | export default Vue; 4 | } 5 | -------------------------------------------------------------------------------- /docker-compose.debug.yml: -------------------------------------------------------------------------------- 1 | version: '2.1' 2 | 3 | services: 4 | vue-heroes: 5 | image: vue-heroes 6 | build: . 7 | env_file: 8 | - .env 9 | ports: 10 | - 3001:3001 11 | - 9229:9229 12 | command: node --inspect=0.0.0.0:9229 index.js -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2.1' 2 | 3 | services: 4 | vue-heroes: 5 | image: vue-heroes 6 | build: . 7 | environment: 8 | NODE_ENV: production 9 | ports: 10 | - 3001:3001 -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Vue Heroes 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const bodyParser = require('body-parser'); 3 | const routes = require('./server/routes'); 4 | 5 | const publicWeb = process.env.PUBLICWEB; 6 | const app = express(); 7 | app.use(bodyParser.json()); 8 | app.use(bodyParser.urlencoded({ extended: false })); 9 | 10 | app.use(express.static(publicWeb)); 11 | console.log(`serving ${publicWeb}`); 12 | app.use('/api', routes); 13 | app.get('*', (req, res) => { 14 | res.sendFile(`index.html`, { root: publicWeb }); 15 | }); 16 | 17 | const port = process.env.SERVER_PORT; 18 | app.listen(port, () => console.log(`API running on http://localhost:${port}`)); 19 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-heroes", 3 | "version": "1.1.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "dev-proxy": "cross-env NODE_ENV=development webpack-dev-server --open --hot", 8 | "build-dev": "webpack --progress --hide-modules", 9 | "build": "cross-env NODE_ENV=production webpack --progress --hide-modules", 10 | "debug": "concurrently \"node -r dotenv/config --inspect index.js\" \"npm run dev-proxy\"", 11 | "start": "concurrently \"node -r dotenv/config index.js\" \"npm run dev-proxy\"", 12 | "docker-up": "docker-compose up -d --build", 13 | "docker-up-debug": "docker-compose -f docker-compose.debug.yml up -d --build" 14 | }, 15 | "keywords": [], 16 | "author": "", 17 | "license": "ISC", 18 | "dependencies": { 19 | "axios": "^0.17.0", 20 | "body-parser": "^1.18.2", 21 | "dotenv": "^4.0.0", 22 | "express": "^4.16.2", 23 | "mongoose": "^4.13.0", 24 | "vue": "^2.3.4", 25 | "vue-class-component": "^6.1.0", 26 | "vue-property-decorator": "^6.0.0", 27 | "vue-router": "^3.0.1" 28 | }, 29 | "devDependencies": { 30 | "babel-core": "^6.26.0", 31 | "babel-loader": "^7.1.2", 32 | "babel-preset-env": "^1.6.0", 33 | "concurrently": "^3.5.0", 34 | "cross-env": "^5.0.5", 35 | "css-loader": "^0.28.7", 36 | "file-loader": "^1.1.4", 37 | "node-sass": "^4.5.3", 38 | "sass-loader": "^6.0.6", 39 | "ts-loader": "^3.1.1", 40 | "typescript": "^2.6.1", 41 | "vue-loader": "^13.5.0", 42 | "vue-template-compiler": "^2.3.4", 43 | "webpack": "^3.8.1", 44 | "webpack-dev-server": "^2.9.4" 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /server/hero.model.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | 3 | const Schema = mongoose.Schema; 4 | 5 | const heroSchema = new Schema( 6 | { 7 | id: { type: Number, required: true, unique: true }, 8 | name: String, 9 | saying: String 10 | }, 11 | { 12 | collection: 'heroes', 13 | read: 'nearest' 14 | } 15 | ); 16 | 17 | const Hero = mongoose.model('Hero', heroSchema); 18 | 19 | module.exports = Hero; 20 | -------------------------------------------------------------------------------- /server/hero.service.js: -------------------------------------------------------------------------------- 1 | const Hero = require('./hero.model'); 2 | const ReadPreference = require('mongodb').ReadPreference; 3 | 4 | require('./mongo').connect(); 5 | 6 | function getHeroes(req, res) { 7 | const docquery = Hero.find({}).read(ReadPreference.NEAREST); 8 | docquery 9 | .exec() 10 | .then(heroes => res.status(200).json(heroes)) 11 | .catch(error => { 12 | res.status(500).send(error); 13 | return; 14 | }); 15 | } 16 | 17 | function postHero(req, res) { 18 | const originalHero = { 19 | id: req.body.hero.id, 20 | name: req.body.hero.name, 21 | saying: req.body.hero.saying 22 | }; 23 | const hero = new Hero(originalHero); 24 | hero.save(error => { 25 | if (checkServerError(res, error)) return; 26 | res.status(201).json(hero); 27 | console.log('Hero created successfully!'); 28 | }); 29 | } 30 | 31 | function putHero(req, res) { 32 | const originalHero = { 33 | id: parseInt(req.params.id, 10), 34 | name: req.body.hero.name, 35 | saying: req.body.hero.saying 36 | }; 37 | Hero.findOne({ id: originalHero.id }, (error, hero) => { 38 | if (checkServerError(res, error)) return; 39 | if (!checkFound(res, hero)) return; 40 | 41 | hero.name = originalHero.name; 42 | hero.saying = originalHero.saying; 43 | hero.save(error => { 44 | if (checkServerError(res, error)) return; 45 | res.status(200).json(hero); 46 | console.log('Hero updated successfully!'); 47 | }); 48 | }); 49 | } 50 | 51 | function deleteHero(req, res) { 52 | const id = parseInt(req.params.id, 10); 53 | Hero.findOneAndRemove({ id: id }) 54 | .then(hero => { 55 | if (!checkFound(res, hero)) return; 56 | res.status(200).json(hero); 57 | console.log('Hero deleted successfully!'); 58 | }) 59 | .catch(error => { 60 | if (checkServerError(res, error)) return; 61 | }); 62 | } 63 | 64 | function checkServerError(res, error) { 65 | if (error) { 66 | res.status(500).send(error); 67 | return error; 68 | } 69 | } 70 | 71 | function checkFound(res, hero) { 72 | if (!hero) { 73 | res.status(404).send('Hero not found.'); 74 | return; 75 | } 76 | return hero; 77 | } 78 | 79 | module.exports = { 80 | getHeroes, 81 | postHero, 82 | putHero, 83 | deleteHero 84 | }; 85 | -------------------------------------------------------------------------------- /server/mongo.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | /** 3 | * Set to Node.js native promises 4 | * Per http://mongoosejs.com/docs/promises.html 5 | */ 6 | mongoose.Promise = global.Promise; 7 | 8 | // Cosmos DB Connection String 9 | // eslint-disable-next-line max-len 10 | const mongoUri = `mongodb://${process.env.COSMOSDB_ACCOUNT}:${process.env.COSMOSDB_KEY}@${ 11 | process.env.COSMOSDB_ACCOUNT 12 | }.documents.azure.com:${process.env.COSMOSDB_PORT}/${process.env.COSMOSDB_DB}?ssl=true`; 13 | // &replicaSet=globaldb`; 14 | 15 | // Local MongoDB Connection String 16 | // const mongoUri = `mongodb://localhost:27017/connect-heroes`; 17 | 18 | function connect() { 19 | mongoose.set('debug', true); 20 | return mongoose.connect(mongoUri, { useMongoClient: true }); 21 | } 22 | 23 | module.exports = { 24 | connect, 25 | mongoose 26 | }; 27 | -------------------------------------------------------------------------------- /server/routes.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const router = express.Router(); 3 | 4 | const heroService = require('./hero.service'); 5 | 6 | router.get('/heroes', (req, res) => { 7 | heroService.getHeroes(req, res); 8 | }); 9 | 10 | router.post('/hero', (req, res) => { 11 | heroService.postHero(req, res); 12 | }); 13 | 14 | router.put('/hero/:id', (req, res) => { 15 | heroService.putHero(req, res); 16 | }); 17 | 18 | router.delete('/hero/:id', (req, res) => { 19 | heroService.deleteHero(req, res); 20 | }); 21 | 22 | module.exports = router; 23 | -------------------------------------------------------------------------------- /server/www/build.js: -------------------------------------------------------------------------------- 1 | !function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="/server/www/",t(t.s=15)}([function(e,t,n){"use strict";function r(e){return"[object Array]"===$.call(e)}function o(e){return"[object ArrayBuffer]"===$.call(e)}function i(e){return"undefined"!=typeof FormData&&e instanceof FormData}function a(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function s(e){return"string"==typeof e}function c(e){return"number"==typeof e}function u(e){return void 0===e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===$.call(e)}function d(e){return"[object File]"===$.call(e)}function p(e){return"[object Blob]"===$.call(e)}function v(e){return"[object Function]"===$.call(e)}function h(e){return f(e)&&v(e.pipe)}function m(e){return"undefined"!=typeof URLSearchParams&&e instanceof URLSearchParams}function y(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function g(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)}function _(e,t){if(null!==e&&void 0!==e)if("object"!=typeof e&&(e=[e]),r(e))for(var n=0,o=e.length;n=0&&Math.floor(t)===t&&isFinite(e)}function d(e){return null==e?"":"object"==typeof e?JSON.stringify(e,null,2):String(e)}function p(e){var t=parseFloat(e);return isNaN(t)?e:t}function v(e,t){for(var n=Object.create(null),r=e.split(","),o=0;o-1)return e.splice(n,1)}}function m(e,t){return ii.call(e,t)}function y(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}function g(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n}function _(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function b(e,t){for(var n in t)e[n]=t[n];return e}function w(e){for(var t={},n=0;n0&&(a=ye(a,(t||"")+"_"+n),me(a[0])&&me(u)&&(f[c]=P(u.text+a[0].text),a.shift()),f.push.apply(f,a)):s(a)?me(u)?f[c]=P(u.text+a):""!==a&&f.push(P(a)):me(a)&&me(u)?f[c]=P(u.text+a.text):(i(e._isVList)&&o(a.tag)&&r(a.key)&&o(t)&&(a.key="__vlist"+t+"_"+n+"__"),f.push(a)));return f}function ge(e,t){return(e.__esModule||Ri&&"Module"===e[Symbol.toStringTag])&&(e=e.default),c(e)?t.extend(e):e}function _e(e,t,n,r,o){var i=Bi();return i.asyncFactory=e,i.asyncMeta={data:t,context:n,children:r,tag:o},i}function be(e,t,n){if(i(e.error)&&o(e.errorComp))return e.errorComp;if(o(e.resolved))return e.resolved;if(i(e.loading)&&o(e.loadingComp))return e.loadingComp;if(!o(e.contexts)){var a=e.contexts=[n],s=!0,u=function(){for(var e=0,t=a.length;epa&&ca[n].id>e.id;)n--;ca.splice(n+1,0,e)}else ca.push(e);la||(la=!0,ae(He))}}function ze(e,t,n){ma.get=function(){return this[t][n]},ma.set=function(e){this[t][n]=e},Object.defineProperty(e,n,ma)}function Ve(e){e._watchers=[];var t=e.$options;t.props&&qe(e,t.props),t.methods&&Ze(e,t.methods),t.data?Ke(e):I(e._data={},!0),t.computed&&We(e,t.computed),t.watch&&t.watch!==Ti&&Ye(e,t.watch)}function qe(e,t){var n=e.$options.propsData||{},r=e._props={},o=e.$options._propKeys=[],i=!e.$parent;Ki.shouldConvert=i;for(var a in t)!function(i){o.push(i);var a=Z(i,t,n,e);H(r,i,a),i in e||ze(e,"_props",i)}(a);Ki.shouldConvert=!0}function Ke(e){var t=e.$options.data;t=e._data="function"==typeof t?Je(t,e):t||{},u(t)||(t={});for(var n=Object.keys(t),r=e.$options.props,o=(e.$options.methods,n.length);o--;){var i=n[o];r&&m(r,i)||O(i)||ze(e,"_data",i)}I(t,!0)}function Je(e,t){try{return e.call(t,t)}catch(e){return te(e,t,"data()"),{}}}function We(e,t){var n=e._computedWatchers=Object.create(null),r=Ni();for(var o in t){var i=t[o],a="function"==typeof i?i:i.get;r||(n[o]=new ha(e,a||x,x,ya)),o in e||Xe(e,o,i)}}function Xe(e,t,n){var r=!Ni();"function"==typeof n?(ma.get=r?Ge(t):n,ma.set=x):(ma.get=n.get?r&&!1!==n.cache?Ge(t):n.get:x,ma.set=n.set?n.set:x),Object.defineProperty(e,t,ma)}function Ge(e){return function(){var t=this._computedWatchers&&this._computedWatchers[e];if(t)return t.dirty&&t.evaluate(),Hi.target&&t.depend(),t.value}}function Ze(e,t){e.$options.props;for(var n in t)e[n]=null==t[n]?x:g(t[n],e)}function Ye(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var o=0;o=0||n.indexOf(e[o])<0)&&r.push(e[o]);return r}return e}function jt(e){this._init(e)}function Et(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=_(arguments,1);return n.unshift(this),"function"==typeof e.install?e.install.apply(e,n):"function"==typeof e&&e.apply(null,n),t.push(e),this}}function Pt(e){e.mixin=function(e){return this.options=X(this.options,e),this}}function Nt(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,r=n.cid,o=e._Ctor||(e._Ctor={});if(o[r])return o[r];var i=e.name||n.options.name,a=function(e){this._init(e)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=t++,a.options=X(n.options,e),a.super=n,a.options.props&&Lt(a),a.options.computed&&Rt(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,vi.forEach(function(e){a[e]=n[e]}),i&&(a.options.components[i]=a),a.superOptions=n.options,a.extendOptions=e,a.sealedOptions=b({},a.options),o[r]=a,a}}function Lt(e){var t=e.options.props;for(var n in t)ze(e.prototype,"_props",n)}function Rt(e){var t=e.options.computed;for(var n in t)Xe(e.prototype,n,t[n])}function Mt(e){vi.forEach(function(t){e[t]=function(e,n){return n?("component"===t&&u(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"==typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}})}function It(e){return e&&(e.Ctor.options.name||e.tag)}function Ht(e,t){return Array.isArray(e)?e.indexOf(t)>-1:"string"==typeof e?e.split(",").indexOf(t)>-1:!!f(e)&&e.test(t)}function Dt(e,t){var n=e.cache,r=e.keys,o=e._vnode;for(var i in n){var a=n[i];if(a){var s=It(a.componentOptions);s&&!t(s)&&Ft(n,i,r,o)}}}function Ft(e,t,n,r){var o=e[t];o&&o!==r&&o.componentInstance.$destroy(),e[t]=null,h(n,t)}function Ut(e){for(var t=e.data,n=e,r=e;o(r.componentInstance);)r=r.componentInstance._vnode,r.data&&(t=Bt(r.data,t));for(;o(n=n.parent);)n.data&&(t=Bt(t,n.data));return zt(t.staticClass,t.class)}function Bt(e,t){return{staticClass:Vt(e.staticClass,t.staticClass),class:o(e.class)?[e.class,t.class]:t.class}}function zt(e,t){return o(e)||o(t)?Vt(e,qt(t)):""}function Vt(e,t){return e?t?e+" "+t:e:t||""}function qt(e){return Array.isArray(e)?Kt(e):c(e)?Jt(e):"string"==typeof e?e:""}function Kt(e){for(var t,n="",r=0,i=e.length;r-1?Xa[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Xa[e]=/HTMLUnknownElement/.test(t.toString())}function Gt(e){if("string"==typeof e){var t=document.querySelector(e);return t||document.createElement("div")}return e}function Zt(e,t){var n=document.createElement(e);return"select"!==e?n:(t.data&&t.data.attrs&&void 0!==t.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n)}function Yt(e,t){return document.createElementNS(Va[e],t)}function Qt(e){return document.createTextNode(e)}function en(e){return document.createComment(e)}function tn(e,t,n){e.insertBefore(t,n)}function nn(e,t){e.removeChild(t)}function rn(e,t){e.appendChild(t)}function on(e){return e.parentNode}function an(e){return e.nextSibling}function sn(e){return e.tagName}function cn(e,t){e.textContent=t}function un(e,t,n){e.setAttribute(t,n)}function fn(e,t){var n=e.data.ref;if(n){var r=e.context,o=e.componentInstance||e.elm,i=r.$refs;t?Array.isArray(i[n])?h(i[n],o):i[n]===o&&(i[n]=void 0):e.data.refInFor?Array.isArray(i[n])?i[n].indexOf(o)<0&&i[n].push(o):i[n]=[o]:i[n]=o}}function ln(e,t){return e.key===t.key&&(e.tag===t.tag&&e.isComment===t.isComment&&o(e.data)===o(t.data)&&dn(e,t)||i(e.isAsyncPlaceholder)&&e.asyncFactory===t.asyncFactory&&r(t.asyncFactory.error))}function dn(e,t){if("input"!==e.tag)return!0;var n,r=o(n=e.data)&&o(n=n.attrs)&&n.type,i=o(n=t.data)&&o(n=n.attrs)&&n.type;return r===i||Ga(r)&&Ga(i)}function pn(e,t,n){var r,i,a={};for(r=t;r<=n;++r)i=e[r].key,o(i)&&(a[i]=r);return a}function vn(e,t){(e.data.directives||t.data.directives)&&hn(e,t)}function hn(e,t){var n,r,o,i=e===Qa,a=t===Qa,s=mn(e.data.directives,e.context),c=mn(t.data.directives,t.context),u=[],f=[];for(n in c)r=s[n],o=c[n],r?(o.oldValue=r.value,gn(o,"update",t,e),o.def&&o.def.componentUpdated&&f.push(o)):(gn(o,"bind",t,e),o.def&&o.def.inserted&&u.push(o));if(u.length){var l=function(){for(var n=0;n=0&&" "===(m=e.charAt(h));h--);m&&as.test(m)||(f=!0)}}else void 0===i?(v=o+1,i=e.slice(0,o).trim()):t();if(void 0===i?i=e.slice(0,o).trim():0!==v&&t(),a)for(o=0;o-1?{exp:e.slice(0,Sa),key:'"'+e.slice(Sa+1)+'"'}:{exp:e,key:null};for(Aa=e,Sa=ja=Ea=0;!Mn();)Ta=Rn(),In(Ta)?Dn(Ta):91===Ta&&Hn(Ta);return{exp:e.slice(0,ja),key:e.slice(ja+1,Ea)}}function Rn(){return Aa.charCodeAt(++Sa)}function Mn(){return Sa>=Oa}function In(e){return 34===e||39===e}function Hn(e){var t=1;for(ja=Sa;!Mn();)if(e=Rn(),In(e))Dn(e);else if(91===e&&t++,93===e&&t--,0===t){Ea=Sa;break}}function Dn(e){for(var t=e;!Mn()&&(e=Rn())!==t;);}function Fn(e,t,n){Pa=n;var r=t.value,o=t.modifiers,i=e.tag,a=e.attrsMap.type;if(e.component)return Pn(e,r,o),!1;if("select"===i)zn(e,r,o);else if("input"===i&&"checkbox"===a)Un(e,r,o);else if("input"===i&&"radio"===a)Bn(e,r,o);else if("input"===i||"textarea"===i)Vn(e,r,o);else if(!mi.isReservedTag(i))return Pn(e,r,o),!1;return!0}function Un(e,t,n){var r=n&&n.number,o=jn(e,"value")||"null",i=jn(e,"true-value")||"true",a=jn(e,"false-value")||"false";On(e,"checked","Array.isArray("+t+")?_i("+t+","+o+")>-1"+("true"===i?":("+t+")":":_q("+t+","+i+")")),Sn(e,"change","var $$a="+t+",$$el=$event.target,$$c=$$el.checked?("+i+"):("+a+");if(Array.isArray($$a)){var $$v="+(r?"_n("+o+")":o)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+t+"=$$a.concat([$$v]))}else{$$i>-1&&("+t+"=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{"+Nn(t,"$$c")+"}",null,!0)}function Bn(e,t,n){var r=n&&n.number,o=jn(e,"value")||"null";o=r?"_n("+o+")":o,On(e,"checked","_q("+t+","+o+")"),Sn(e,"change",Nn(t,o),null,!0)}function zn(e,t,n){var r=n&&n.number,o='Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;return '+(r?"_n(val)":"val")+"})",i="var $$selectedVal = "+o+";";i=i+" "+Nn(t,"$event.target.multiple ? $$selectedVal : $$selectedVal[0]"),Sn(e,"change",i,null,!0)}function Vn(e,t,n){var r=e.attrsMap.type,o=n||{},i=o.lazy,a=o.number,s=o.trim,c=!i&&"range"!==r,u=i?"change":"range"===r?ss:"input",f="$event.target.value";s&&(f="$event.target.value.trim()"),a&&(f="_n("+f+")");var l=Nn(t,f);c&&(l="if($event.target.composing)return;"+l),On(e,"value","("+t+")"),Sn(e,u,l,null,!0),(s||a)&&Sn(e,"blur","$forceUpdate()")}function qn(e){if(o(e[ss])){var t=Ci?"change":"input";e[t]=[].concat(e[ss],e[t]||[]),delete e[ss]}o(e[cs])&&(e.change=[].concat(e[cs],e.change||[]),delete e[cs])}function Kn(e,t,n){var r=Na;return function o(){null!==e.apply(null,arguments)&&Wn(t,o,n,r)}}function Jn(e,t,n,r,o){t=ie(t),n&&(t=Kn(t,e,r)),Na.addEventListener(e,t,Si?{capture:r,passive:o}:r)}function Wn(e,t,n,r){(r||Na).removeEventListener(e,t._withTask||t,n)}function Xn(e,t){if(!r(e.data.on)||!r(t.data.on)){var n=t.data.on||{},o=e.data.on||{};Na=t.elm,qn(n),fe(n,o,Jn,Wn,t.context),Na=void 0}}function Gn(e,t){if(!r(e.data.domProps)||!r(t.data.domProps)){var n,i,a=t.elm,s=e.data.domProps||{},c=t.data.domProps||{};o(c.__ob__)&&(c=t.data.domProps=b({},c));for(n in s)r(c[n])&&(a[n]="");for(n in c){if(i=c[n],"textContent"===n||"innerHTML"===n){if(t.children&&(t.children.length=0),i===s[n])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===n){a._value=i;var u=r(i)?"":String(i);Zn(a,u)&&(a.value=u)}else a[n]=i}}}function Zn(e,t){return!e.composing&&("OPTION"===e.tagName||Yn(e,t)||Qn(e,t))}function Yn(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}function Qn(e,t){var n=e.value,r=e._vModifiers;return o(r)&&r.number?p(n)!==p(t):o(r)&&r.trim?n.trim()!==t.trim():n!==t}function er(e){var t=tr(e.style);return e.staticStyle?b(e.staticStyle,t):t}function tr(e){return Array.isArray(e)?w(e):"string"==typeof e?ls(e):e}function nr(e,t){var n,r={};if(t)for(var o=e;o.componentInstance;)o=o.componentInstance._vnode,o.data&&(n=er(o.data))&&b(r,n);(n=er(e.data))&&b(r,n);for(var i=e;i=i.parent;)i.data&&(n=er(i.data))&&b(r,n);return r}function rr(e,t){var n=t.data,i=e.data;if(!(r(n.staticStyle)&&r(n.style)&&r(i.staticStyle)&&r(i.style))){var a,s,c=t.elm,u=i.staticStyle,f=i.normalizedStyle||i.style||{},l=u||f,d=tr(t.data.style)||{};t.data.normalizedStyle=o(d.__ob__)?b({},d):d;var p=nr(t,!0);for(s in l)r(p[s])&&vs(c,s,"");for(s in p)(a=p[s])!==l[s]&&vs(c,s,null==a?"":a)}}function or(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(/\s+/).forEach(function(t){return e.classList.add(t)}):e.classList.add(t);else{var n=" "+(e.getAttribute("class")||"")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function ir(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(/\s+/).forEach(function(t){return e.classList.remove(t)}):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{for(var n=" "+(e.getAttribute("class")||"")+" ",r=" "+t+" ";n.indexOf(r)>=0;)n=n.replace(r," ");n=n.trim(),n?e.setAttribute("class",n):e.removeAttribute("class")}}function ar(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&b(t,gs(e.name||"v")),b(t,e),t}return"string"==typeof e?gs(e):void 0}}function sr(e){Os(function(){Os(e)})}function cr(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),or(e,t))}function ur(e,t){e._transitionClasses&&h(e._transitionClasses,t),ir(e,t)}function fr(e,t,n){var r=lr(e,t),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s=o===bs?Cs:ks,c=0,u=function(){e.removeEventListener(s,f),n()},f=function(t){t.target===e&&++c>=a&&u()};setTimeout(function(){c0&&(n=bs,f=a,l=i.length):t===ws?u>0&&(n=ws,f=u,l=c.length):(f=Math.max(a,u),n=f>0?a>u?bs:ws:null,l=n?n===bs?i.length:c.length:0),{type:n,timeout:f,propCount:l,hasTransform:n===bs&&As.test(r[xs+"Property"])}}function dr(e,t){for(;e.length1}function gr(e,t){!0!==t.data.show&&vr(t)}function _r(e,t,n){br(e,t,n),(Ci||ki)&&setTimeout(function(){br(e,t,n)},0)}function br(e,t,n){var r=t.value,o=e.multiple;if(!o||Array.isArray(r)){for(var i,a,s=0,c=e.options.length;s-1,a.selected!==i&&(a.selected=i);else if(C(xr(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));o||(e.selectedIndex=-1)}}function wr(e,t){return t.every(function(t){return!C(t,e)})}function xr(e){return"_value"in e?e._value:e.value}function Cr(e){e.target.composing=!0}function $r(e){e.target.composing&&(e.target.composing=!1,kr(e.target,"input"))}function kr(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Or(e){return!e.componentInstance||e.data&&e.data.transition?e:Or(e.componentInstance._vnode)}function Ar(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?Ar(xe(t.children)):e}function Tr(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var o=n._parentListeners;for(var i in o)t[si(i)]=o[i];return t}function Sr(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}function jr(e){for(;e=e.parent;)if(e.data.transition)return!0}function Er(e,t){return t.key===e.key&&t.tag===e.tag}function Pr(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function Nr(e){e.data.newPos=e.elm.getBoundingClientRect()}function Lr(e){var t=e.data.pos,n=e.data.newPos,r=t.left-n.left,o=t.top-n.top;if(r||o){e.data.moved=!0;var i=e.elm.style;i.transform=i.WebkitTransform="translate("+r+"px,"+o+"px)",i.transitionDuration="0s"}}function Rr(e,t){var n=t?zs(t):Us;if(n.test(e)){for(var r,o,i=[],a=n.lastIndex=0;r=n.exec(e);){o=r.index,o>a&&i.push(JSON.stringify(e.slice(a,o)));var s=xn(r[1].trim());i.push("_s("+s+")"),a=o+r[0].length}return a=0&&a[o].lowerCasedTag!==s;o--);else o=0;if(o>=0){for(var c=a.length-1;c>=o;c--)t.end&&t.end(a[c].tag,n,r);a.length=o,i=o&&a[o-1].tag}else"br"===s?t.start&&t.start(e,[],!0,n,r):"p"===s&&(t.start&&t.start(e,[],!1,n,r),t.end&&t.end(e,n,r))}for(var o,i,a=[],s=t.expectHTML,c=t.isUnaryTag||li,u=t.canBeLeftOpenTag||li,f=0;e;){if(o=e,i&&yc(i)){var l=0,d=i.toLowerCase(),p=gc[d]||(gc[d]=new RegExp("([\\s\\S]*?)(]*>)","i")),v=e.replace(p,function(e,n,r){return l=r.length,yc(d)||"noscript"===d||(n=n.replace(//g,"$1").replace(//g,"$1")),Cc(d,n)&&(n=n.slice(1)),t.chars&&t.chars(n),""});f+=e.length-v.length,e=v,r(d,f-l,f)}else{var h=e.indexOf("<");if(0===h){if(rc.test(e)){var m=e.indexOf("--\x3e");if(m>=0){t.shouldKeepComment&&t.comment(e.substring(4,m)),n(m+3);continue}}if(oc.test(e)){var y=e.indexOf("]>");if(y>=0){n(y+2);continue}}var g=e.match(nc);if(g){n(g[0].length);continue}var _=e.match(tc);if(_){var b=f;n(_[0].length),r(_[1],b,f);continue}var w=function(){var t=e.match(Qs);if(t){var r={tagName:t[1],attrs:[],start:f};n(t[0].length);for(var o,i;!(o=e.match(ec))&&(i=e.match(Gs));)n(i[0].length),r.attrs.push(i);if(o)return r.unarySlash=o[1],n(o[0].length),r.end=f,r}}();if(w){!function(e){var n=e.tagName,o=e.unarySlash;s&&("p"===i&&Xs(n)&&r(i),u(n)&&i===n&&r(n));for(var f=c(n)||!!o,l=e.attrs.length,d=new Array(l),p=0;p=0){for(C=e.slice(h);!(tc.test(C)||Qs.test(C)||rc.test(C)||oc.test(C)||($=C.indexOf("<",1))<0);)h+=$,C=e.slice(h);x=e.substring(0,h),n(h)}h<0&&(x=e,e=""),t.chars&&x&&t.chars(x)}if(e===o){t.chars&&t.chars(e);break}}r()}function Br(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:ao(t),parent:n,children:[]}}function zr(e,t){function n(e){e.pre&&(s=!1),lc(e.tag)&&(c=!1)}ac=t.warn||$n,lc=t.isPreTag||li,dc=t.mustUseProp||li,pc=t.getTagNamespace||li,cc=kn(t.modules,"transformNode"),uc=kn(t.modules,"preTransformNode"),fc=kn(t.modules,"postTransformNode"),sc=t.delimiters;var r,o,i=[],a=!1!==t.preserveWhitespace,s=!1,c=!1;return Ur(e,{warn:ac,expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,canBeLeftOpenTag:t.canBeLeftOpenTag,shouldDecodeNewlines:t.shouldDecodeNewlines,shouldDecodeNewlinesForHref:t.shouldDecodeNewlinesForHref,shouldKeepComment:t.comments,start:function(e,a,u){var f=o&&o.ns||pc(e);Ci&&"svg"===f&&(a=uo(a));var l=Br(e,a,o);f&&(l.ns=f),co(l)&&!Ni()&&(l.forbidden=!0);for(var d=0;d':'
',mc.innerHTML.indexOf(" ")>0}function ei(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement("div");return t.appendChild(e.cloneNode(!0)),t.innerHTML}/*! 2 | * Vue.js v2.5.8 3 | * (c) 2014-2017 Evan You 4 | * Released under the MIT License. 5 | */ 6 | var ti=Object.freeze({}),ni=Object.prototype.toString,ri=v("slot,component",!0),oi=v("key,ref,slot,slot-scope,is"),ii=Object.prototype.hasOwnProperty,ai=/-(\w)/g,si=y(function(e){return e.replace(ai,function(e,t){return t?t.toUpperCase():""})}),ci=y(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),ui=/\B([A-Z])/g,fi=y(function(e){return e.replace(ui,"-$1").toLowerCase()}),li=function(e,t,n){return!1},di=function(e){return e},pi="data-server-rendered",vi=["component","directive","filter"],hi=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured"],mi={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:li,isReservedAttr:li,isUnknownElement:li,getTagNamespace:x,parsePlatformTagName:di,mustUseProp:li,_lifecycleHooks:hi},yi=/[^\w.$]/,gi="__proto__"in{},_i="undefined"!=typeof window,bi="undefined"!=typeof WXEnvironment&&!!WXEnvironment.platform,wi=bi&&WXEnvironment.platform.toLowerCase(),xi=_i&&window.navigator.userAgent.toLowerCase(),Ci=xi&&/msie|trident/.test(xi),$i=xi&&xi.indexOf("msie 9.0")>0,ki=xi&&xi.indexOf("edge/")>0,Oi=xi&&xi.indexOf("android")>0||"android"===wi,Ai=xi&&/iphone|ipad|ipod|ios/.test(xi)||"ios"===wi,Ti=(xi&&/chrome\/\d+/.test(xi),{}.watch),Si=!1;if(_i)try{var ji={};Object.defineProperty(ji,"passive",{get:function(){Si=!0}}),window.addEventListener("test-passive",null,ji)}catch(e){}var Ei,Pi,Ni=function(){return void 0===Ei&&(Ei=!_i&&void 0!==e&&"server"===e.process.env.VUE_ENV),Ei},Li=_i&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,Ri="undefined"!=typeof Symbol&&S(Symbol)&&"undefined"!=typeof Reflect&&S(Reflect.ownKeys);Pi="undefined"!=typeof Set&&S(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var Mi=x,Ii=0,Hi=function(){this.id=Ii++,this.subs=[]};Hi.prototype.addSub=function(e){this.subs.push(e)},Hi.prototype.removeSub=function(e){h(this.subs,e)},Hi.prototype.depend=function(){Hi.target&&Hi.target.addDep(this)},Hi.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t1?_(n):n;for(var r=_(arguments,1),o=0,i=n.length;oparseInt(this.max)&&Ft(c,u[0],u,this._vnode)),t.data.keepAlive=!0}return t||e&&e[0]}},ka={KeepAlive:$a};!function(e){var t={};t.get=function(){return mi},Object.defineProperty(e,"config",t),e.util={warn:Mi,extend:b,mergeOptions:X,defineReactive:H},e.set=D,e.delete=F,e.nextTick=ae,e.options=Object.create(null),vi.forEach(function(t){e.options[t+"s"]=Object.create(null)}),e.options._base=e,b(e.options.components,ka),Et(e),Pt(e),Nt(e),Mt(e)}(jt),Object.defineProperty(jt.prototype,"$isServer",{get:Ni}),Object.defineProperty(jt.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),jt.version="2.5.8";var Oa,Aa,Ta,Sa,ja,Ea,Pa,Na,La,Ra=v("style,class"),Ma=v("input,textarea,option,select,progress"),Ia=function(e,t,n){return"value"===n&&Ma(e)&&"button"!==t||"selected"===n&&"option"===e||"checked"===n&&"input"===e||"muted"===n&&"video"===e},Ha=v("contenteditable,draggable,spellcheck"),Da=v("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),Fa="http://www.w3.org/1999/xlink",Ua=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},Ba=function(e){return Ua(e)?e.slice(6,e.length):""},za=function(e){return null==e||!1===e},Va={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},qa=v("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),Ka=v("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),Ja=function(e){return"pre"===e},Wa=function(e){return qa(e)||Ka(e)},Xa=Object.create(null),Ga=v("text,number,password,search,email,tel,url"),Za=Object.freeze({createElement:Zt,createElementNS:Yt,createTextNode:Qt,createComment:en,insertBefore:tn,removeChild:nn,appendChild:rn,parentNode:on,nextSibling:an,tagName:sn,setTextContent:cn,setAttribute:un}),Ya={create:function(e,t){fn(t)},update:function(e,t){e.data.ref!==t.data.ref&&(fn(e,!0),fn(t))},destroy:function(e){fn(e,!0)}},Qa=new Fi("",{},[]),es=["create","activate","update","remove","destroy"],ts={create:vn,update:vn,destroy:function(e){vn(e,Qa)}},ns=Object.create(null),rs=[Ya,ts],os={create:_n,update:_n},is={create:wn,update:wn},as=/[\w).+\-_$\]]/,ss="__r",cs="__c",us={create:Xn,update:Xn},fs={create:Gn,update:Gn},ls=y(function(e){var t={},n=/;(?![^(]*\))/g,r=/:(.+)/;return e.split(n).forEach(function(e){if(e){var n=e.split(r);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}),ds=/^--/,ps=/\s*!important$/,vs=function(e,t,n){if(ds.test(t))e.style.setProperty(t,n);else if(ps.test(n))e.style.setProperty(t,n.replace(ps,""),"important");else{var r=ms(t);if(Array.isArray(n))for(var o=0,i=n.length;ov?(l=r(n[y+1])?null:n[y+1].elm,g(e,l,n,p,y,i)):p>y&&b(e,t,d,v)}function C(e,t,n,r){for(var i=n;i\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Zs="[a-zA-Z_][\\w\\-\\.]*",Ys="((?:"+Zs+"\\:)?"+Zs+")",Qs=new RegExp("^<"+Ys),ec=/^\s*(\/?)>/,tc=new RegExp("^<\\/"+Ys+"[^>]*>"),nc=/^]+>/i,rc=/^