commit 3215b35d41f7e2e8b7096a6ea540ddfe639b557a Author: keke Date: Thu Aug 3 10:37:39 2023 +0800 將前端專案新增到 gitea diff --git a/.angular-cli.json b/.angular-cli.json new file mode 100644 index 0000000..a711f77 --- /dev/null +++ b/.angular-cli.json @@ -0,0 +1,63 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "project": { + "version": "1.0.6", + "name": "@coreui/angular" + }, + "apps": [ + { + "root": "src", + "outDir": "dist", + "assets": ["assets"], + "index": "index.html", + "main": "main.ts", + "polyfills": "polyfills.ts", + "test": "test.ts", + "tsconfig": "tsconfig.app.json", + "testTsconfig": "tsconfig.spec.json", + "prefix": "app", + "styles": [ + "../node_modules/font-awesome/css/font-awesome.css", + "../node_modules/simple-line-icons/css/simple-line-icons.css", + "../node_modules/datatables.net-dt/css/jquery.dataTables.css", + "scss/style.scss" + ], + "scripts": [ + "../node_modules/jquery/dist/jquery.js", + "../node_modules/datatables.net/js/jquery.dataTables.js", + "../node_modules/chart.js/dist/Chart.bundle.min.js", + "../node_modules/chart.js/dist/Chart.min.js" + ], + "environmentSource": "environments/environment.ts", + "environments": { + "dev": "environments/environment.ts", + "prod": "environments/environment.prod.ts" + } + } + ], + "e2e": { + "protractor": { + "config": "./protractor.conf.js" + } + }, + "lint": [ + { + "project": "src/tsconfig.app.json" + }, + { + "project": "src/tsconfig.spec.json" + }, + { + "project": "e2e/tsconfig.e2e.json" + } + ], + "test": { + "karma": { + "config": "./karma.conf.js" + } + }, + "defaults": { + "styleExt": "scss", + "prefixInterfaces": false + } +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..149460f --- /dev/null +++ b/.editorconfig @@ -0,0 +1,22 @@ +# Editor configuration, see http://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +max_line_length = 0 +trim_trailing_whitespace = false diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..29ce7d5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +/dist +/tmp + +# dependencies +node_modules +bower_components + +# IDEs and editors +.idea +.project +.classpath +*.launch +.settings/ + +# misc +/.sass-cache +/connect.lock +/coverage/* +/libpeerconnection.log +npm-debug.log +testem.log +/typings + +# e2e +/e2e/*.js +/e2e/*.map + +#System Files +.DS_Store +Thumbs.db diff --git a/2.4.2 b/2.4.2 new file mode 100644 index 0000000..e69de29 diff --git a/README.md b/README.md new file mode 100644 index 0000000..8065ee4 --- /dev/null +++ b/README.md @@ -0,0 +1,27 @@ +# Angular2DevelopmentCLI + +This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 1.0.0-beta.32.3. + +## Development server +Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. + +## Code scaffolding + +Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive/pipe/service/class/module`. + +## Build + +Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `-prod` flag for a production build. + +## Running unit tests + +Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Running end-to-end tests + +Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/). +Before running the tests make sure you are serving the app via `ng serve`. + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md). diff --git a/e2e/app.e2e-spec.ts b/e2e/app.e2e-spec.ts new file mode 100644 index 0000000..022797d --- /dev/null +++ b/e2e/app.e2e-spec.ts @@ -0,0 +1,14 @@ +import { CoreUIPage } from './app.po'; + +describe('core-ui App', function() { + let page: CoreUIPage; + + beforeEach(() => { + page = new CoreUIPage(); + }); + + it('should display message saying app works', () => { + page.navigateTo(); + expect(page.getParagraphText()).toEqual('app works!'); + }); +}); diff --git a/e2e/app.po.ts b/e2e/app.po.ts new file mode 100644 index 0000000..d51eaf2 --- /dev/null +++ b/e2e/app.po.ts @@ -0,0 +1,11 @@ +import { browser, element, by } from 'protractor/globals'; + +export class CoreUIPage { + navigateTo() { + return browser.get('/'); + } + + getParagraphText() { + return element(by.css('app-root h1')).getText(); + } +} diff --git a/e2e/tsconfig.e2e.json b/e2e/tsconfig.e2e.json new file mode 100644 index 0000000..ac7a373 --- /dev/null +++ b/e2e/tsconfig.e2e.json @@ -0,0 +1,12 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/e2e", + "module": "commonjs", + "target": "es5", + "types":[ + "jasmine", + "node" + ] + } +} diff --git a/karma.conf.js b/karma.conf.js new file mode 100644 index 0000000..84b4cd5 --- /dev/null +++ b/karma.conf.js @@ -0,0 +1,44 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/0.13/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular/cli'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage-istanbul-reporter'), + require('@angular/cli/plugins/karma') + ], + client:{ + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + files: [ + { pattern: './src/test.ts', watched: false } + ], + preprocessors: { + './src/test.ts': ['@angular/cli'] + }, + mime: { + 'text/x-typescript': ['ts','tsx'] + }, + coverageIstanbulReporter: { + reports: [ 'html', 'lcovonly' ], + fixWebpackSourcePaths: true + }, + angularCli: { + environment: 'dev' + }, + reporters: config.angularCli && config.angularCli.codeCoverage + ? ['progress', 'coverage-istanbul'] + : ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false + }); +}; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..552bba3 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,13324 @@ +{ + "name": "@coreui/angular", + "version": "1.0.6", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@agm/core": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/@agm/core/-/core-1.0.0-beta.2.tgz", + "integrity": "sha512-3bdfvkWDmJszpj/F6Fzgv7sks0cs/cUEQPfs37tcJFz3jc62SsXy4TGb/WJT8FpH2nSGE6DonP8lXuFxB0lblQ==" + }, + "@angular-devkit/build-optimizer": { + "version": "0.0.41", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.0.41.tgz", + "integrity": "sha512-TYolYpR3cb3rZGMqHBc1Q4r6SwhvuTF9sDt3gARy9Tli5R3BwY8bRA3evHQhhM0cb4AbBaJVgQYdJm5FURNn6g==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "source-map": "^0.5.6", + "typescript": "~2.6.2", + "webpack-sources": "^1.0.1" + }, + "dependencies": { + "typescript": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.2.tgz", + "integrity": "sha1-PFtv1/beCRQmkCfwPAlGdY92c6Q=", + "dev": true + } + } + }, + "@angular-devkit/core": { + "version": "0.0.28", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-0.0.28.tgz", + "integrity": "sha512-rfGRVdpx080zZq9NGZ3RNG+cmoq/ZPaCzpM4dAbosEM46ficUkwr/JKjhjZUUoSyb9ItrT1lp9C33GfE/YpSVQ==", + "dev": true, + "requires": { + "ajv": "~5.5.1", + "chokidar": "^1.7.0", + "rxjs": "^5.5.6", + "source-map": "^0.5.6" + }, + "dependencies": { + "rxjs": { + "version": "5.5.6", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.6.tgz", + "integrity": "sha512-v4Q5HDC0FHAQ7zcBX7T2IL6O5ltl1a2GX4ENjPXg6SjDY69Cmx9v4113C99a4wGF16ClPv5Z8mghuYorVkg/kg==", + "dev": true, + "requires": { + "symbol-observable": "1.0.1" + } + }, + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true + } + } + }, + "@angular-devkit/schematics": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-0.0.51.tgz", + "integrity": "sha512-KGYiJpPgLqPvXeJzaHw/9JHAt8dL3EzyeYOAZ/gMKnPDA+7WypAta2n9ZuPVchY3G9p1XcqB5STJLvk7HQw3Cw==", + "dev": true, + "requires": { + "@ngtools/json-schema": "^1.1.0", + "rxjs": "^5.5.6" + }, + "dependencies": { + "rxjs": { + "version": "5.5.6", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.6.tgz", + "integrity": "sha512-v4Q5HDC0FHAQ7zcBX7T2IL6O5ltl1a2GX4ENjPXg6SjDY69Cmx9v4113C99a4wGF16ClPv5Z8mghuYorVkg/kg==", + "dev": true, + "requires": { + "symbol-observable": "1.0.1" + } + }, + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true + } + } + }, + "@angular/animations": { + "version": "5.2.10", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-5.2.10.tgz", + "integrity": "sha512-QNYXqnti8BeFriNaZ/juLnO6l0MVlVNUmLycC9ma+pdTiEJl8rtgZ0WXxgOCjScyKpInkWn2J+m9FI/78SYFpw==", + "requires": { + "tslib": "^1.7.1" + } + }, + "@angular/cdk": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-5.2.5.tgz", + "integrity": "sha512-GN8m1d+VcCE9+Bgwv06Y8YJKyZ0i9ZIq2ZPBcJYt+KVgnVVRg4JkyUNxud07LNsvzOX22DquHqmIZiC4hAG7Ag==", + "requires": { + "tslib": "^1.7.1" + } + }, + "@angular/cli": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-1.6.5.tgz", + "integrity": "sha512-YyGdq7rM1xduSdxviKfbd9NsYloEIeK3T+WEftsHSlViKuNQh8jIUoMzTGypjCmTieE2Gtg5BnukaxuUo1G+bQ==", + "dev": true, + "requires": { + "@angular-devkit/build-optimizer": "~0.0.41", + "@angular-devkit/core": "~0.0.28", + "@angular-devkit/schematics": "~0.0.51", + "@ngtools/json-schema": "1.1.0", + "@ngtools/webpack": "1.9.5", + "@schematics/angular": "~0.1.16", + "autoprefixer": "^7.2.3", + "chalk": "~2.2.0", + "circular-dependency-plugin": "^4.2.1", + "common-tags": "^1.3.1", + "copy-webpack-plugin": "^4.1.1", + "core-object": "^3.1.0", + "css-loader": "^0.28.1", + "cssnano": "^3.10.0", + "denodeify": "^1.2.1", + "ember-cli-string-utils": "^1.0.0", + "exports-loader": "^0.6.3", + "extract-text-webpack-plugin": "^3.0.2", + "file-loader": "^1.1.5", + "fs-extra": "^4.0.0", + "glob": "^7.0.3", + "html-webpack-plugin": "^2.29.0", + "istanbul-instrumenter-loader": "^3.0.0", + "karma-source-map-support": "^1.2.0", + "less": "^2.7.2", + "less-loader": "^4.0.5", + "license-webpack-plugin": "^1.0.0", + "loader-utils": "1.1.0", + "lodash": "^4.11.1", + "memory-fs": "^0.4.1", + "minimatch": "^3.0.4", + "node-modules-path": "^1.0.0", + "node-sass": "^4.7.2", + "nopt": "^4.0.1", + "opn": "~5.1.0", + "portfinder": "~1.0.12", + "postcss-import": "^11.0.0", + "postcss-loader": "^2.0.10", + "postcss-url": "^7.1.2", + "raw-loader": "^0.5.1", + "resolve": "^1.1.7", + "rxjs": "^5.5.2", + "sass-loader": "^6.0.6", + "semver": "^5.1.0", + "silent-error": "^1.0.0", + "source-map-loader": "^0.2.0", + "source-map-support": "^0.4.1", + "style-loader": "^0.13.1", + "stylus": "^0.54.5", + "stylus-loader": "^3.0.1", + "uglifyjs-webpack-plugin": "^1.1.5", + "url-loader": "^0.6.2", + "webpack": "~3.10.0", + "webpack-dev-middleware": "~1.12.0", + "webpack-dev-server": "~2.11.0", + "webpack-merge": "^4.1.0", + "webpack-sources": "^1.0.0", + "webpack-subresource-integrity": "^1.0.1" + } + }, + "@angular/common": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-5.0.1.tgz", + "integrity": "sha1-QwBas8i4/68Xaq+zuGupMcPkvfk=", + "requires": { + "tslib": "^1.7.1" + } + }, + "@angular/compiler": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-5.0.1.tgz", + "integrity": "sha1-f9TH+ku770wUaWL6lGuCczCmyO0=", + "requires": { + "tslib": "^1.7.1" + } + }, + "@angular/compiler-cli": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-5.0.1.tgz", + "integrity": "sha1-Um3BuzlPsWrZFmAe6pqgDrRLT/8=", + "dev": true, + "requires": { + "chokidar": "^1.4.2", + "minimist": "^1.2.0", + "reflect-metadata": "^0.1.2", + "tsickle": "^0.24.0" + } + }, + "@angular/core": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-5.0.1.tgz", + "integrity": "sha1-pKdK/H4gWNMLgmPrbWbarOn0J7o=", + "requires": { + "tslib": "^1.7.1" + } + }, + "@angular/forms": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-5.0.1.tgz", + "integrity": "sha1-afMDxME9o8qg3mNDdYg4i2rWKyE=", + "requires": { + "tslib": "^1.7.1" + } + }, + "@angular/http": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@angular/http/-/http-5.0.1.tgz", + "integrity": "sha1-NQy99jz6yJOWE9dT/wce1YpgVhs=", + "requires": { + "tslib": "^1.7.1" + } + }, + "@angular/material": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-5.2.5.tgz", + "integrity": "sha512-IltfBeTJWnmZehOQNQ7KoFs7MGWuZTe0g21hIitGkusVNt1cIoTD24xKH5jwztjH19c04IgiwonpurMKM6pBCQ==", + "requires": { + "tslib": "^1.7.1" + } + }, + "@angular/platform-browser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-5.0.1.tgz", + "integrity": "sha1-FIld0w7Sow7nuZx2t2R0j0bBqGI=", + "requires": { + "tslib": "^1.7.1" + } + }, + "@angular/platform-browser-dynamic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-5.0.1.tgz", + "integrity": "sha1-Fttn1S1FMVY6sVQpxr3+GLwb7cg=", + "requires": { + "tslib": "^1.7.1" + } + }, + "@angular/router": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-5.0.1.tgz", + "integrity": "sha1-msCPKTAu9gzf08eBDZbCZd7EY9Y=", + "requires": { + "tslib": "^1.7.1" + } + }, + "@angular/upgrade": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@angular/upgrade/-/upgrade-5.0.1.tgz", + "integrity": "sha1-HEVVGJu4iBQwb5c1IIQj3b1Y6o8=", + "requires": { + "tslib": "^1.7.1" + } + }, + "@ngtools/json-schema": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@ngtools/json-schema/-/json-schema-1.1.0.tgz", + "integrity": "sha1-w6DFRNYjkqzCgTpCyKDcb1j4aSI=", + "dev": true + }, + "@ngtools/webpack": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-1.9.5.tgz", + "integrity": "sha512-scio7dKdorM6wgFz8ELm0MDl2To9ax6a36rfmD+h6hcgSn+7dKZmSr3qUnQE1ymydyzlBwS+4IODpWqHPS9cwQ==", + "dev": true, + "requires": { + "chalk": "~2.2.0", + "enhanced-resolve": "^3.1.0", + "loader-utils": "^1.0.2", + "magic-string": "^0.22.3", + "semver": "^5.3.0", + "source-map": "^0.5.6", + "tree-kill": "^1.0.0", + "webpack-sources": "^1.1.0" + } + }, + "@schematics/angular": { + "version": "0.1.16", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-0.1.16.tgz", + "integrity": "sha512-SLzs5TmDLEO2/oU83uDw/x9jgBQTktNlO202kbawcqDKLekqgcZXnsl7UhoNdeCFOU9BE9dw07wWwuIzAhj9gQ==", + "dev": true, + "requires": { + "typescript": "~2.6.2" + }, + "dependencies": { + "typescript": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.2.tgz", + "integrity": "sha1-PFtv1/beCRQmkCfwPAlGdY92c6Q=", + "dev": true + } + } + }, + "@toverux/ngx-sweetalert2": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@toverux/ngx-sweetalert2/-/ngx-sweetalert2-3.2.1.tgz", + "integrity": "sha512-K2EoVHNkuN/NVuCdxy2Ktm9pGczLEdSqgqm9jBG3vzc3G2kBQfFb94zLHwsIOqCUOWzZzly9xdiN4yiZ5ync8g==" + }, + "@types/datatables.net": { + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/@types/datatables.net/-/datatables.net-1.10.8.tgz", + "integrity": "sha512-5RzUppTRNhVJhAtP1Pq+hFVJgFP7V7yNt8Tjob8cXFg1zo91mtCR6xZn4JJ1hT6fYM1w9Bz9Iy62ja1bbZx7ZA==", + "dev": true, + "requires": { + "@types/jquery": "*" + } + }, + "@types/jasmine": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.6.3.tgz", + "integrity": "sha512-2dJf9//QxTnFBXHsCqLbB55jlMreJQie9HhgsZrSgHveOKCWVmgcXgRyvIi22Ndk/dJ/e2srLOstk2NgVbb7XA==", + "dev": true + }, + "@types/jquery": { + "version": "3.2.16", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.2.16.tgz", + "integrity": "sha512-q2WC02YxQoX2nY1HRKlYGHpGP1saPmD7GN0pwCDlTz35a4eOtJG+aHRlXyjCuXokUukSrR2aXyBhSW3j+jPc0A==", + "dev": true + }, + "@types/moment-timezone": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@types/moment-timezone/-/moment-timezone-0.5.6.tgz", + "integrity": "sha512-rMZjLmXs9sly1UbwxckyAEvQkrwrGqR24nFAjFrndRJBBnUooCCD0LPmdRcf9haHXFnckI9E3ko0oC6LEDk7dw==", + "requires": { + "moment": ">=2.14.0" + } + }, + "@types/node": { + "version": "8.0.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.0.50.tgz", + "integrity": "sha512-N9OVsMBspboNvYaLAQnLEhb2eQ96lavogMR5LoH5k8nb1PvBZHSBFhzhsq2LNzGTBBOtBviOc1GiSu+wlM/pGw==", + "dev": true + }, + "@types/q": { + "version": "0.0.32", + "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", + "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", + "dev": true + }, + "@types/selenium-webdriver": { + "version": "2.53.43", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-2.53.43.tgz", + "integrity": "sha512-UBYHWph6P3tutkbXpW6XYg9ZPbTKjw/YC2hGG1/GEvWwTbvezBUv3h+mmUFw79T3RFPnmedpiXdOBbXX+4l0jg==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "accepts": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", + "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", + "dev": true, + "requires": { + "mime-types": "~2.1.16", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.3.0.tgz", + "integrity": "sha512-Yej+zOJ1Dm/IMZzzj78OntP/r3zHEaKcyNoU2lAaxPtrseM6rF0xwqoz5Q5ysAiED9hTjI2hgtvLXitlCN1/Ug==", + "dev": true + }, + "acorn-dynamic-import": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", + "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "dev": true, + "requires": { + "acorn": "^4.0.3" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + } + } + }, + "adm-zip": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz", + "integrity": "sha1-ph7VrmkFw66lizplfSUDMJEFJzY=", + "dev": true + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "agent-base": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", + "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", + "dev": true, + "requires": { + "extend": "~3.0.0", + "semver": "~5.0.1" + }, + "dependencies": { + "semver": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", + "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=", + "dev": true + } + } + }, + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + } + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "angular-datatables": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/angular-datatables/-/angular-datatables-5.0.0.tgz", + "integrity": "sha512-Ow2seDWoMJ7j/AQKcz5b8LHZX6xoAZcG3ri8T3qpi7oaa8Ua9tjeKfsqgMTlqWhq2QMJBgfrF4DARWp3blBHHg==" + }, + "angular-moment-timezone": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/angular-moment-timezone/-/angular-moment-timezone-1.7.1.tgz", + "integrity": "sha1-IeQwRkQS2DUCq/sUqZxe/XNPNbg=", + "requires": { + "@angular/common": "^5.0.0", + "@angular/compiler": "^5.0.0", + "@angular/core": "^5.0.0", + "@angular/forms": "^5.0.0", + "@angular/http": "^5.0.0", + "@angular/platform-browser": "^5.0.0", + "@angular/platform-browser-dynamic": "^5.0.0", + "@angular/router": "^5.0.0", + "@types/moment-timezone": "^0.5.2", + "angular2-moment": "^1.7.0", + "core-js": "^2.5.1", + "moment": "^2.19.2", + "moment-timezone": "^0.5.14", + "rxjs": "^5.5.2", + "zone.js": "^0.8.18" + }, + "dependencies": { + "moment": { + "version": "2.22.2", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", + "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=" + } + } + }, + "angular2-moment": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/angular2-moment/-/angular2-moment-1.9.0.tgz", + "integrity": "sha512-ybPjYizpKVWAI2Z4AqxAS6s3FMkF3+zRpfvxX1wIdSJUFjl83XxQ5f2yn7retX68NSYZZ/JTK9KGnvOzZfrIZw==", + "requires": { + "moment": "^2.19.3" + }, + "dependencies": { + "moment": { + "version": "2.22.2", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", + "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=" + } + } + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + }, + "dependencies": { + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "dev": true, + "requires": { + "color-name": "^1.1.1" + } + } + } + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "requires": { + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" + } + }, + "app-root-path": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.0.1.tgz", + "integrity": "sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y=", + "dev": true + }, + "append-transform": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", + "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "dev": true, + "requires": { + "default-require-extensions": "^1.0.0" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "argparse": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", + "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=", + "dev": true + }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" + } + }, + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arraybuffer.slice": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true, + "optional": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "asn1.js": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz", + "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "0.10.3" + } + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "dev": true, + "requires": { + "lodash": "^4.14.0" + } + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz", + "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=", + "dev": true + }, + "autoprefixer": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.5.tgz", + "integrity": "sha512-XqHfo8Ht0VU+T5P+eWEVoXza456KJ4l62BPewu3vpNf3LP9s2+zYXkXBznzYby4XeECXgG3N4i+hGvOhXErZmA==", + "dev": true, + "requires": { + "browserslist": "^2.11.1", + "caniuse-lite": "^1.0.30000791", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^6.0.16", + "postcss-value-parser": "^3.2.3" + } + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babel-generator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", + "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", + "dev": true, + "requires": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.6", + "trim-right": "^1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + } + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + } + } + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "base64-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", + "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", + "dev": true + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "1.0.0" + } + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "binary-extensions": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "dev": true + }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", + "dev": true + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "requires": { + "inherits": "~2.0.0" + } + }, + "blocking-proxy": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-0.0.5.tgz", + "integrity": "sha1-RikF4Nz76pcPQao3Ij3anAexkSs=", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.1", + "http-errors": "~1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "~2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "~1.6.15" + }, + "dependencies": { + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.x.x" + } + }, + "bootstrap": { + "version": "4.0.0-beta.2", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.0.0-beta.2.tgz", + "integrity": "sha512-DzGtdTlKbrMoGMpz0LigKSqJ+MgtFKxA791PU/q062OlRG0HybNZcTLH7rpDAmLS66Y3esN9yzKHLLbqa5UR3w==" + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browserify-aes": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", + "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", + "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", + "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "2.11.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", + "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000792", + "electron-to-chromium": "^1.3.30" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cacache": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.2.tgz", + "integrity": "sha512-dljb7dk1jqO5ogE+dRpoR9tpHYv5xz9vPSNunh1+0wRuNdYxmzp9WmsyokgW/DUF1FDRVA/TMsmxt027R8djbQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.0", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^1.3.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.1", + "ssri": "^5.0.0", + "unique-filename": "^1.1.0", + "y18n": "^3.2.1" + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + } + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true, + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + } + }, + "caniuse-api": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", + "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", + "dev": true, + "requires": { + "browserslist": "^1.3.6", + "caniuse-db": "^1.0.30000529", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + }, + "dependencies": { + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + } + } + } + }, + "caniuse-db": { + "version": "1.0.30000794", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000794.tgz", + "integrity": "sha1-u+cRBPonfOSzYjh9VJBei4jlLzU=", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30000792", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000792.tgz", + "integrity": "sha1-0M6pgfgRjzlhRxr7tDyaHlu/AzI=", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + }, + "dependencies": { + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + } + } + }, + "chalk": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.2.2.tgz", + "integrity": "sha512-LvixLAQ4MYhbf7hgL4o5PeK32gJKvVzDRiSNIApDofQvyhl8adgG2lJVXn4+ekQoK7HL9RF8lqxwerpe0x2pCw==", + "dev": true, + "requires": { + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" + } + }, + "chart.js": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.7.1.tgz", + "integrity": "sha512-pX1oQAY86MiuyZ2hY593Acbl4MLHKrBBhhmZ1YqSadzQbbsBE2rnd6WISoHjIsdf0WDeC0hbePYCz2ZxkV8L+g==", + "requires": { + "chartjs-color": "~2.2.0", + "moment": "~2.18.0" + }, + "dependencies": { + "moment": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", + "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=" + } + } + }, + "chartjs-color": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.2.0.tgz", + "integrity": "sha1-hKL7dVeH7YXDndbdjHsdiEKbrq4=", + "requires": { + "chartjs-color-string": "^0.5.0", + "color-convert": "^0.5.3" + } + }, + "chartjs-color-string": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.5.0.tgz", + "integrity": "sha512-amWNvCOXlOUYxZVDSa0YOab5K/lmEhbFNKI55PWc4mlv28BDzA7zaoQTGxSBgJMHIW+hGX8YUrvw/FH4LyhwSQ==", + "requires": { + "color-name": "^1.0.0" + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "circular-dependency-plugin": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-4.4.0.tgz", + "integrity": "sha512-yEFtUNUYT4jBykEX5ZOHw+5goA3glGZr9wAXIQqoyakjz5H5TeUmScnWRc52douAhb9eYzK3s7V6bXfNnjFdzg==", + "dev": true + }, + "clap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", + "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", + "dev": true, + "requires": { + "chalk": "^1.1.3" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "clean-css": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.9.tgz", + "integrity": "sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE=", + "dev": true, + "requires": { + "source-map": "0.5.x" + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "clone": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", + "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", + "dev": true + }, + "clone-deep": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.3.0.tgz", + "integrity": "sha1-NIxhrpzb4O3+BT2R/0zFIdeQ7eg=", + "dev": true, + "requires": { + "for-own": "^1.0.0", + "is-plain-object": "^2.0.1", + "kind-of": "^3.2.2", + "shallow-clone": "^0.1.2" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "coa": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", + "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", + "dev": true, + "requires": { + "q": "^1.1.2" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "codelyzer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-4.0.1.tgz", + "integrity": "sha512-MsOcaiLqcBK7hjHbfp9HZrflqWg5tD9A5qVSXkW208OJ8pkf63id8IiOjEiK/XU3o70W8tWbFKi1tAOwiJDMrQ==", + "dev": true, + "requires": { + "app-root-path": "^2.0.1", + "css-selector-tokenizer": "^0.7.0", + "cssauron": "^1.4.0", + "semver-dsl": "^1.0.1", + "source-map": "^0.5.6", + "sprintf-js": "^1.0.3" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", + "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", + "dev": true, + "requires": { + "clone": "^1.0.2", + "color-convert": "^1.3.0", + "color-string": "^0.3.0" + }, + "dependencies": { + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "dev": true, + "requires": { + "color-name": "^1.1.1" + } + } + } + }, + "color-convert": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz", + "integrity": "sha1-vbbGnOZg+t/+CwAHzER+G59ygr0=" + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", + "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "dev": true, + "requires": { + "color-name": "^1.0.0" + } + }, + "colormin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", + "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", + "dev": true, + "requires": { + "color": "^0.11.0", + "css-color-names": "0.0.4", + "has": "^1.0.1" + } + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "combine-lists": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", + "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", + "dev": true, + "requires": { + "lodash": "^4.5.0" + } + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz", + "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==", + "dev": true + }, + "common-tags": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.7.2.tgz", + "integrity": "sha512-joj9ZlUOjCrwdbmiLqafeUSgkUM74NqhLsZtSqDmhKudaIY197zTrb8JMl31fMnCUuxwFT23eC/oWvrZzDLRJQ==", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0" + } + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "component-emitter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", + "dev": true + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "compressible": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.12.tgz", + "integrity": "sha1-xZpcmdt2dn6YdlAOJx72OzSTvWY=", + "dev": true, + "requires": { + "mime-db": ">= 1.30.0 < 2" + } + }, + "compression": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.1.tgz", + "integrity": "sha1-7/JgPvwuIs+G810uuTWJ+YdTc9s=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "bytes": "3.0.0", + "compressible": "~2.0.11", + "debug": "2.6.9", + "on-headers": "~1.0.1", + "safe-buffer": "5.1.1", + "vary": "~1.1.2" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "connect": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.5.tgz", + "integrity": "sha1-+43ee6B2OHfQ7J352sC0tA5yx9o=", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.0.6", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + }, + "dependencies": { + "finalhandler": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz", + "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + } + } + } + }, + "connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", + "dev": true + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "^0.1.4" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "dev": true + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-webpack-plugin": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.3.1.tgz", + "integrity": "sha512-xlcFiW/U7KrpS6dFuWq3r8Wb7koJx7QVc7LDFCosqkikaVSxkaYOnwDLwilbjrszZ0LYZXThDAJKcQCSrvdShQ==", + "dev": true, + "requires": { + "cacache": "^10.0.1", + "find-cache-dir": "^1.0.0", + "globby": "^7.1.1", + "is-glob": "^4.0.0", + "loader-utils": "^0.2.15", + "lodash": "^4.3.0", + "minimatch": "^3.0.4", + "p-limit": "^1.0.0", + "pify": "^3.0.0", + "serialize-javascript": "^1.4.0" + }, + "dependencies": { + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "core-js": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", + "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=" + }, + "core-object": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/core-object/-/core-object-3.1.5.tgz", + "integrity": "sha512-sA2/4+/PZ/KV6CKgjrVrrUVBKCkdDO02CUlQ0YKTQoYUwPYNOtOAcWlbYhd5v/1JqYaA6oZ4sDlOU4ppVw6Wbg==", + "dev": true, + "requires": { + "chalk": "^2.0.0" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", + "dev": true, + "requires": { + "is-directory": "^0.3.1", + "js-yaml": "^3.4.3", + "minimist": "^1.2.0", + "object-assign": "^4.1.0", + "os-homedir": "^1.0.1", + "parse-json": "^2.2.0", + "require-from-string": "^1.1.0" + } + }, + "create-ecdh": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", + "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "2.x.x" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-loader": { + "version": "0.28.9", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.9.tgz", + "integrity": "sha512-r3dgelMm/mkPz5Y7m9SeiGE46i2VsEU/OYbez+1llfxtv8b2y5/b5StaeEvPK3S5tlNQI+tDW/xDIhKJoZgDtw==", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "css-selector-tokenizer": "^0.7.0", + "cssnano": "^3.10.0", + "icss-utils": "^2.1.0", + "loader-utils": "^1.0.2", + "lodash.camelcase": "^4.3.0", + "object-assign": "^4.1.1", + "postcss": "^5.0.6", + "postcss-modules-extract-imports": "^1.2.0", + "postcss-modules-local-by-default": "^1.2.0", + "postcss-modules-scope": "^1.1.0", + "postcss-modules-values": "^1.3.0", + "postcss-value-parser": "^3.3.0", + "source-list-map": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "css-parse": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz", + "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=", + "dev": true + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-selector-tokenizer": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", + "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", + "dev": true, + "requires": { + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" + } + }, + "css-what": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "dev": true + }, + "cssauron": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", + "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", + "dev": true, + "requires": { + "through": "X.X.X" + } + }, + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "dev": true + }, + "cssnano": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", + "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", + "dev": true, + "requires": { + "autoprefixer": "^6.3.1", + "decamelize": "^1.1.2", + "defined": "^1.0.0", + "has": "^1.0.1", + "object-assign": "^4.0.1", + "postcss": "^5.0.14", + "postcss-calc": "^5.2.0", + "postcss-colormin": "^2.1.8", + "postcss-convert-values": "^2.3.4", + "postcss-discard-comments": "^2.0.4", + "postcss-discard-duplicates": "^2.0.1", + "postcss-discard-empty": "^2.0.1", + "postcss-discard-overridden": "^0.1.1", + "postcss-discard-unused": "^2.2.1", + "postcss-filter-plugins": "^2.0.0", + "postcss-merge-idents": "^2.1.5", + "postcss-merge-longhand": "^2.0.1", + "postcss-merge-rules": "^2.0.3", + "postcss-minify-font-values": "^1.0.2", + "postcss-minify-gradients": "^1.0.1", + "postcss-minify-params": "^1.0.4", + "postcss-minify-selectors": "^2.0.4", + "postcss-normalize-charset": "^1.1.0", + "postcss-normalize-url": "^3.0.7", + "postcss-ordered-values": "^2.1.0", + "postcss-reduce-idents": "^2.2.2", + "postcss-reduce-initial": "^1.0.0", + "postcss-reduce-transforms": "^1.0.3", + "postcss-svgo": "^2.1.1", + "postcss-unique-selectors": "^2.0.2", + "postcss-value-parser": "^3.2.3", + "postcss-zindex": "^2.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "autoprefixer": { + "version": "6.7.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "dev": true, + "requires": { + "browserslist": "^1.7.6", + "caniuse-db": "^1.0.30000634", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^5.2.16", + "postcss-value-parser": "^3.2.3" + } + }, + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "csso": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", + "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "dev": true, + "requires": { + "clap": "^1.0.9", + "source-map": "^0.5.3" + } + }, + "cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=", + "dev": true + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "dev": true + }, + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, + "requires": { + "es5-ext": "^0.10.9" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "datatables.net": { + "version": "1.10.16", + "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.10.16.tgz", + "integrity": "sha1-SwUtEIKCQmG2ju2dInQbcR09JGk=", + "requires": { + "jquery": ">=1.7" + } + }, + "datatables.net-dt": { + "version": "1.10.16", + "resolved": "https://registry.npmjs.org/datatables.net-dt/-/datatables.net-dt-1.10.16.tgz", + "integrity": "sha1-Z1ijCPueX5Yp+2VBzDAeSOyexVU=", + "requires": { + "datatables.net": "1.10.16", + "jquery": ">=1.7" + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "default-require-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", + "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "dev": true, + "requires": { + "strip-bom": "^2.0.0" + } + }, + "define-properties": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "dev": true, + "requires": { + "foreach": "^2.0.5", + "object-keys": "^1.0.8" + } + }, + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "dev": true, + "requires": { + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" + }, + "dependencies": { + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", + "dev": true + }, + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "detect-node": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz", + "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=", + "dev": true + }, + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "diff": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.4.0.tgz", + "integrity": "sha512-QpVuMTEoJMF7cKzi6bvWhRulU1fZqZnvyVQgNhPaxxuTYwyjn/j1v9falseQ/uXWwPnO56RBfwtg4h/EQXmucA==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", + "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "path-type": "^3.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "dom-converter": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", + "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", + "dev": true, + "requires": { + "utila": "~0.3" + }, + "dependencies": { + "utila": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "dev": true + } + } + }, + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "requires": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "~1.1.1", + "entities": "~1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "dev": true + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, + "domhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", + "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "duplexify": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.3.tgz", + "integrity": "sha512-g8ID9OroF9hKt2POf8YLayy+9594PzmM3scI00/uBXocX3TWNgoB67hjzkFe9ITAbQOne/lLdBxHXvYUM4ZgGA==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "~0.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "ejs": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.7.tgz", + "integrity": "sha1-zIcsFoiArjxxiXYv1f/ACJbJUYo=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.31", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.31.tgz", + "integrity": "sha512-XE4CLbswkZgZFn34cKFy1xaX+F5LHxeDLjY1+rsK9asDzknhbrd9g/n/01/acbU25KTsUSiLKwvlLyA+6XLUOA==", + "dev": true + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "ember-cli-string-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ember-cli-string-utils/-/ember-cli-string-utils-1.1.0.tgz", + "integrity": "sha1-ObZ3/CgF9VFzc1N2/O8njqpEUqE=", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encodeurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "engine.io": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", + "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", + "dev": true, + "requires": { + "accepts": "1.3.3", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "ws": "1.1.2" + }, + "dependencies": { + "accepts": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "dev": true, + "requires": { + "mime-types": "~2.1.11", + "negotiator": "0.6.1" + } + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "engine.io-client": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", + "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parsejson": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "1.1.2", + "xmlhttprequest-ssl": "1.5.3", + "yeast": "0.1.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "engine.io-parser": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", + "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.6", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary": "0.1.7", + "wtf-8": "1.0.0" + } + }, + "enhanced-resolve": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", + "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "object-assign": "^4.0.1", + "tapable": "^0.2.7" + } + }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + }, + "errno": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.6.tgz", + "integrity": "sha512-IsORQDpaaSwcDP4ZZnHxgE85werpo34VYn1Ud3mq+eUsF593faR8oCZNXrROVkpFu2TsbrNhHin0aUrTsQ9vNw==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.10.0.tgz", + "integrity": "sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ==", + "dev": true, + "requires": { + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" + } + }, + "es-to-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "dev": true, + "requires": { + "is-callable": "^1.1.1", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.1" + } + }, + "es5-ext": { + "version": "0.10.38", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.38.tgz", + "integrity": "sha512-jCMyePo7AXbUESwbl8Qi01VSH2piY9s/a3rSU/5w/MlTIx8HPL1xn2InGN8ejt/xulcJgnTO7vqNtOAxzYd2Kg==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-promise": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", + "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=", + "dev": true + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.14", + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "requires": { + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "esrecurse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", + "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "dev": true, + "requires": { + "estraverse": "^4.1.0", + "object-assign": "^4.0.1" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "eventemitter3": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "eventsource": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", + "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "dev": true, + "requires": { + "original": ">=0.0.5" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + } + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-braces": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", + "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", + "dev": true, + "requires": { + "array-slice": "^0.2.3", + "array-unique": "^0.2.1", + "braces": "^0.1.2" + }, + "dependencies": { + "braces": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", + "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", + "dev": true, + "requires": { + "expand-range": "^0.1.0" + } + }, + "expand-range": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", + "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", + "dev": true, + "requires": { + "is-number": "^0.1.1", + "repeat-string": "^0.2.2" + } + }, + "is-number": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", + "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", + "dev": true + }, + "repeat-string": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", + "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", + "dev": true + } + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "^2.1.0" + } + }, + "exports-loader": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/exports-loader/-/exports-loader-0.6.4.tgz", + "integrity": "sha1-1w/GEhl1s1/BKDDPUnVL4nQPyIY=", + "dev": true, + "requires": { + "loader-utils": "^1.0.2", + "source-map": "0.5.x" + } + }, + "express": { + "version": "4.16.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", + "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "~1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.1", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.1.0", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.2", + "qs": "6.5.1", + "range-parser": "~1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.1", + "serve-static": "1.13.1", + "setprototypeof": "1.1.0", + "statuses": "~1.3.1", + "type-is": "~1.6.15", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + } + } + }, + "extract-text-webpack-plugin": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz", + "integrity": "sha512-bt/LZ4m5Rqt/Crl2HiKuAl/oqg0psx1tsTLkvWbJen1CtD+fftkZhMaQ9HOtY2gWsl2Wq+sABmMVi9z3DhKWQQ==", + "dev": true, + "requires": { + "async": "^2.4.1", + "loader-utils": "^1.1.0", + "schema-utils": "^0.3.0", + "webpack-sources": "^1.0.1" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", + "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fastparse": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", + "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "file-loader": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.6.tgz", + "integrity": "sha512-873ztuL+/hfvXbLDJ262PGO6XjERnybJu2gW1/5j8HUfxSiFJI9Hj/DhZ50ZGRUxBvuNiazb/cM2rh9pqrxP6Q==", + "dev": true, + "requires": { + "loader-utils": "^1.0.2", + "schema-utils": "^0.3.0" + } + }, + "file-saver": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-1.3.8.tgz", + "integrity": "sha512-spKHSBQIxxS81N/O21WmuXA2F6wppUCsutpzenOeZzOCCJ5gEfcbqJP983IrpLXzYmXnMUa6J03SubcNPdKrlg==" + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fileset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "dev": true, + "requires": { + "glob": "^7.0.3", + "minimatch": "^3.0.3" + } + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^1.1.3", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + } + }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flatten": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", + "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", + "dev": true + }, + "flush-write-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.2.tgz", + "integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + } + }, + "font-awesome": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", + "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=" + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "requires": { + "null-check": "^1.0.0" + } + }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", + "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "requires": { + "globule": "^1.0.0" + } + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "globule": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.3.tgz", + "integrity": "sha512-mb1aYtDbIjTu4ShMB85m3UzjX9BVKe9WCzsnfMSZk+K5GpIbBOexgg4PPCt5eHDEG5/ZQAUX2Kct02zfiPLsKg==", + "dev": true, + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + }, + "dependencies": { + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "handle-thing": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", + "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, + "requires": { + "ajv": "^4.9.1", + "har-schema": "^1.0.5" + }, + "dependencies": { + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "requires": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + } + } + } + }, + "has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true, + "requires": { + "function-bind": "^1.0.2" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-binary": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "dev": true, + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "dev": true, + "requires": { + "inherits": "^2.0.1" + } + }, + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "requires": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "homedir-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", + "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "html-comment-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", + "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", + "dev": true + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true + }, + "html-minifier": { + "version": "3.5.8", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.8.tgz", + "integrity": "sha512-WX7D6PB9PFq05fZ1/CyxPUuyqXed6vh2fGOM80+zJT5wAO93D/cUjLs0CcbBFjQmlwmCgRvl97RurtArIpOnkw==", + "dev": true, + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.1.x", + "commander": "2.12.x", + "he": "1.1.x", + "ncname": "1.0.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.3.x" + } + }, + "html-webpack-plugin": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz", + "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=", + "dev": true, + "requires": { + "bluebird": "^3.4.7", + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "toposort": "^1.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + } + } + }, + "htmlparser2": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", + "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", + "dev": true, + "requires": { + "domelementtype": "1", + "domhandler": "2.1", + "domutils": "1.1", + "readable-stream": "1.0" + }, + "dependencies": { + "domutils": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", + "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "dev": true, + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": ">= 1.3.1 < 2" + }, + "dependencies": { + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.9.tgz", + "integrity": "sha1-6hoE+2St/wJC6ZdPKX3Uw8rSceE=", + "dev": true + }, + "http-proxy": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", + "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "dev": true, + "requires": { + "eventemitter3": "1.x.x", + "requires-port": "1.x.x" + } + }, + "http-proxy-middleware": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", + "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", + "dev": true, + "requires": { + "http-proxy": "^1.16.2", + "is-glob": "^3.1.0", + "lodash": "^4.17.2", + "micromatch": "^2.3.11" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "requires": { + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "https-proxy-agent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", + "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", + "dev": true, + "requires": { + "agent-base": "2", + "debug": "2", + "extend": "3" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", + "dev": true + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "icss-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", + "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "dev": true, + "requires": { + "postcss": "^6.0.1" + } + }, + "ieee754": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", + "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "dev": true + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", + "dev": true + }, + "import-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", + "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", + "dev": true, + "requires": { + "pkg-dir": "^2.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "in-publish": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz", + "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "internal-ip": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz", + "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", + "dev": true, + "requires": { + "meow": "^3.3.0" + } + }, + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true + }, + "invariant": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ipaddr.js": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", + "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "^1.0.0" + } + }, + "is-callable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", + "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", + "dev": true + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "^2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-odd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-1.0.0.tgz", + "integrity": "sha1-O4qTLrAos3dcObsJ6RdnrM22kIg=", + "dev": true, + "requires": { + "is-number": "^3.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + } + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "dev": true, + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-svg": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "dev": true, + "requires": { + "html-comment-regex": "^1.1.0" + } + }, + "is-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isbinaryfile": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", + "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-api": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.2.1.tgz", + "integrity": "sha512-oFCwXvd65amgaPCzqrR+a2XjanS1MvpXN6l/MlMUTv6uiA1NOgGX+I0uyq8Lg3GDxsxPsaP1049krz3hIJ5+KA==", + "dev": true, + "requires": { + "async": "^2.1.4", + "fileset": "^2.0.2", + "istanbul-lib-coverage": "^1.1.1", + "istanbul-lib-hook": "^1.1.0", + "istanbul-lib-instrument": "^1.9.1", + "istanbul-lib-report": "^1.1.2", + "istanbul-lib-source-maps": "^1.2.2", + "istanbul-reports": "^1.1.3", + "js-yaml": "^3.7.0", + "mkdirp": "^0.5.1", + "once": "^1.4.0" + } + }, + "istanbul-instrumenter-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.0.tgz", + "integrity": "sha512-alLSEFX06ApU75sm5oWcaVNaiss/bgMRiWTct3g0P0ZZTKjR+6QiCcuVOKDI1kWJgwHEnIXsv/dWm783kPpmtw==", + "dev": true, + "requires": { + "convert-source-map": "^1.5.0", + "istanbul-lib-instrument": "^1.7.3", + "loader-utils": "^1.1.0", + "schema-utils": "^0.3.0" + } + }, + "istanbul-lib-coverage": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz", + "integrity": "sha512-0+1vDkmzxqJIn5rcoEqapSB4DmPxE31EtI2dF2aCkV5esN9EWHxZ0dwgDClivMXJqE7zaYQxq30hj5L0nlTN5Q==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz", + "integrity": "sha512-U3qEgwVDUerZ0bt8cfl3dSP3S6opBoOtk3ROO5f2EfBr/SRiD9FQqzwaZBqFORu8W7O0EXpai+k7kxHK13beRg==", + "dev": true, + "requires": { + "append-transform": "^0.4.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz", + "integrity": "sha512-RQmXeQ7sphar7k7O1wTNzVczF9igKpaeGQAG9qR2L+BS4DCJNTI9nytRmIVYevwO0bbq+2CXvJmYDuz0gMrywA==", + "dev": true, + "requires": { + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.1.1", + "semver": "^5.3.0" + } + }, + "istanbul-lib-report": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz", + "integrity": "sha512-UTv4VGx+HZivJQwAo1wnRwe1KTvFpfi/NYwN7DcsrdzMXwpRT/Yb6r4SBPoHWj4VuQPakR32g4PUUeyKkdDkBA==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^1.1.1", + "mkdirp": "^0.5.1", + "path-parse": "^1.0.5", + "supports-color": "^3.1.2" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz", + "integrity": "sha512-8BfdqSfEdtip7/wo1RnrvLpHVEd8zMZEDmOFEnpC6dg0vXflHt9nvoAyQUzig2uMSXfF2OBEYBV3CVjIL9JvaQ==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.1.1", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "istanbul-reports": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.3.tgz", + "integrity": "sha512-ZEelkHh8hrZNI5xDaKwPMFwDsUf5wIEI2bXAFGp1e6deR2mnEKBPhLJEgr4ZBt8Gi6Mj38E/C8kcy9XLggVO2Q==", + "dev": true, + "requires": { + "handlebars": "^4.0.3" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "optional": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "optional": true, + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "optional": true + } + } + }, + "handlebars": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", + "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "dev": true, + "requires": { + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4", + "uglify-js": "^2.6" + } + }, + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "optional": true, + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "optional": true + } + } + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + } + } + }, + "jasmine": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", + "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=", + "dev": true, + "requires": { + "exit": "^0.1.2", + "glob": "^7.0.6", + "jasmine-core": "~2.8.0" + } + }, + "jasmine-core": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", + "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=", + "dev": true + }, + "jasmine-spec-reporter": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-4.2.1.tgz", + "integrity": "sha512-FZBoZu7VE5nR7Nilzy+Np8KuVIOxF4oXDPDknehCYBDE080EnlPu0afdZNmpGDBRCUBv3mj5qgqCRmk6W/K8vg==", + "dev": true, + "requires": { + "colors": "1.1.2" + } + }, + "jasminewd2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz", + "integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=", + "dev": true + }, + "jquery": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.2.1.tgz", + "integrity": "sha1-XE2d5lKvbNCncBVKYxu6ErAVx4c=" + }, + "js-base64": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.2.tgz", + "integrity": "sha512-lLkz3IRPTNeATsKQGeltbzRK/5+bWsXBHfpZrxJAi4N30RtCtNA+rJznp4uR2+4OgkBsoeeFwONVLr4gzIVErQ==", + "dev": true + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^2.6.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + }, + "json-loader": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "jszip": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz", + "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==", + "dev": true, + "requires": { + "core-js": "~2.3.0", + "es6-promise": "~3.0.2", + "lie": "~3.1.0", + "pako": "~1.0.2", + "readable-stream": "~2.0.6" + }, + "dependencies": { + "core-js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz", + "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=", + "dev": true + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "karma": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.1.tgz", + "integrity": "sha512-k5pBjHDhmkdaUccnC7gE3mBzZjcxyxYsYVaqiL2G5AqlfLyBO5nw2VdNK+O16cveEPd/gIOWULH7gkiYYwVNHg==", + "dev": true, + "requires": { + "bluebird": "^3.3.0", + "body-parser": "^1.16.1", + "chokidar": "^1.4.1", + "colors": "^1.1.0", + "combine-lists": "^1.0.0", + "connect": "^3.6.0", + "core-js": "^2.2.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.0", + "expand-braces": "^0.1.1", + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "http-proxy": "^1.13.0", + "isbinaryfile": "^3.0.0", + "lodash": "^3.8.0", + "log4js": "^0.6.31", + "mime": "^1.3.4", + "minimatch": "^3.0.2", + "optimist": "^0.6.1", + "qjobs": "^1.1.4", + "range-parser": "^1.2.0", + "rimraf": "^2.6.0", + "safe-buffer": "^5.0.1", + "socket.io": "1.7.3", + "source-map": "^0.5.3", + "tmp": "0.0.31", + "useragent": "^2.1.12" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + } + } + }, + "karma-chrome-launcher": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", + "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", + "dev": true, + "requires": { + "fs-access": "^1.0.0", + "which": "^1.2.1" + } + }, + "karma-cli": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/karma-cli/-/karma-cli-1.0.1.tgz", + "integrity": "sha1-rmw8WKMTodALRRZMRVubhs4X+WA=", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "karma-coverage-istanbul-reporter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-1.3.0.tgz", + "integrity": "sha1-0ULNnFVzHJ42Pvc3To7xoxvr+ts=", + "dev": true, + "requires": { + "istanbul-api": "^1.1.8", + "minimatch": "^3.0.4" + } + }, + "karma-jasmine": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.0.tgz", + "integrity": "sha1-IuTAa/mhguUpTR9wXjczgRuBCs8=", + "dev": true + }, + "karma-jasmine-html-reporter": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-0.2.2.tgz", + "integrity": "sha1-SKjl7xiAdhfuK14zwRlMNbQ5Ukw=", + "dev": true, + "requires": { + "karma-jasmine": "^1.0.2" + } + }, + "karma-source-map-support": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.2.0.tgz", + "integrity": "sha1-G/gee7SwiWJ6s1LsQXnhF8QGpUA=", + "dev": true, + "requires": { + "source-map-support": "^0.4.1" + } + }, + "killable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.0.tgz", + "integrity": "sha1-2ouEvUfeU5WHj5XWTQLyRJ/gXms=", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=", + "dev": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "less": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz", + "integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==", + "dev": true, + "requires": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "mime": "^1.2.11", + "mkdirp": "^0.5.0", + "promise": "^7.1.1", + "request": "2.81.0", + "source-map": "^0.5.3" + } + }, + "less-loader": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.0.5.tgz", + "integrity": "sha1-rhVadAbKxqzSk9eFWH/P8PR4xN0=", + "dev": true, + "requires": { + "clone": "^2.1.1", + "loader-utils": "^1.1.0", + "pify": "^2.3.0" + }, + "dependencies": { + "clone": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", + "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", + "dev": true + } + } + }, + "license-webpack-plugin": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-1.1.1.tgz", + "integrity": "sha512-TjKOyiC0exqd4Idy/4M8/DETR22dXBZks387DuS5LbslxHiMRXGx/Q2F/j9IUtvEoH5uFvt72vRgk/G6f8j3Dg==", + "dev": true, + "requires": { + "ejs": "^2.5.7" + } + }, + "lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "dev": true, + "requires": { + "immediate": "~3.0.5" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "loader-runner": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", + "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", + "dev": true + }, + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.tail": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", + "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log4js": { + "version": "0.6.38", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", + "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", + "dev": true, + "requires": { + "readable-stream": "~1.0.2", + "semver": "~4.3.3" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "loglevel": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", + "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true, + "requires": { + "js-tokens": "^3.0.0" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "macaddress": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz", + "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=", + "dev": true + }, + "magic-string": { + "version": "0.22.4", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.4.tgz", + "integrity": "sha512-kxBL06p6iO2qPBHsqGK2b3cRwiRGpnmSuVWNhwHcMX7qJOUr1HvricYP1LZOCdkQBUp0jiWg2d6WJwR3vYgByw==", + "dev": true, + "requires": { + "vlq": "^0.2.1" + } + }, + "make-dir": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz", + "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "make-error": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.0.tgz", + "integrity": "sha1-Uq06M5zPEM5itAQLcI/nByRLi5Y=", + "dev": true + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "math-expression-evaluator": { + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", + "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", + "dev": true + }, + "md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + }, + "dependencies": { + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + } + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", + "dev": true + }, + "mime-types": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "dev": true, + "requires": { + "mime-db": "~1.30.0" + } + }, + "mimic-fn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", + "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mississippi": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-1.3.0.tgz", + "integrity": "sha1-0gFYPrEjJ+PFwWQqQEqcrPlONPU=", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^1.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.0.tgz", + "integrity": "sha512-dgaCvoh6i1nosAUBKb0l0pfJ78K8+S9fluyIR2YvAeUD/QuMahnFnF3xYty5eYXMjhGSsB0DsW6A0uAZyetoAg==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "dev": true, + "requires": { + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" + }, + "dependencies": { + "for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", + "dev": true + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "moment": { + "version": "2.19.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.19.1.tgz", + "integrity": "sha1-VtoaLRy/AdOLfhr8McELz6GSkWc=" + }, + "moment-timezone": { + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.20.tgz", + "integrity": "sha512-uJXgstE4ddmJpLFIyihm7VsLJsViDxO88lx+GmIbSnyAAHHbSdpwBhpE2N3KFOmDa/9BxYDykQUzH796CHga2w==", + "requires": { + "moment": ">= 2.9.0" + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "multicast-dns": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.2.tgz", + "integrity": "sha512-xTO41ApiRHMVDBYhNL9bEhx7kRf1hq3OqPOnOy8bpTi0JZSxVPDre7ZRpTHLDlxmhf6d/FL+10E8VX1QRd+0DA==", + "dev": true, + "requires": { + "dns-packet": "^1.0.1", + "thunky": "^0.1.0" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "mydatepicker": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/mydatepicker/-/mydatepicker-2.6.3.tgz", + "integrity": "sha1-XHgK0f+AaQS86/iQno7ZOJD3sL8=" + }, + "nan": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", + "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", + "dev": true + }, + "nanomatch": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.7.tgz", + "integrity": "sha512-/5ldsnyurvEw7wNpxLFgjVvBLMta43niEYOy0CJ4ntcYSbx6bugRUTQeFb4BR/WanEL1o3aQgHuVLHQaB6tOqg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "is-odd": "^1.0.0", + "kind-of": "^5.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "ncname": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", + "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", + "dev": true, + "requires": { + "xml-char-classes": "^1.0.0" + } + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "ng2-charts": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ng2-charts/-/ng2-charts-1.6.0.tgz", + "integrity": "sha512-9w0WH69x5/nuqC1og2WaY39NbaBqTGIP1+5gZaH7/KPN6UEPonNg/pYnsIVklLj1DWPWXKa8+XXIJZ1jy5nLxg==", + "requires": { + "chart.js": "^2.6.0" + } + }, + "ngx-bootstrap": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/ngx-bootstrap/-/ngx-bootstrap-1.9.3.tgz", + "integrity": "sha512-beoKQGJEFwdg0ctIpGb+vx4PTPkyqHrA5tBAEbnUn7ZlTjjfA6533QYGv3qVoKPDNkkHmLA3lRjWKxEMYepCdg==" + }, + "ngx-loading": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/ngx-loading/-/ngx-loading-1.0.14.tgz", + "integrity": "sha1-GXWMM+o/qbuW3KH0DKGdTYa4BCw=" + }, + "ngx-moment": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ngx-moment/-/ngx-moment-3.0.1.tgz", + "integrity": "sha512-Jf+5EK3AG5swVnkMlHWKsl3y7W8C1fVHb3G4zblnmrCd2nO0gwSi93i3g5yFglGtSo2FnwhF55Ul03bduFN0Ew==", + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.2.tgz", + "integrity": "sha512-AVP5Xol3WivEr7hnssHDsaM+lVrVXWUvd1cfXTRkTj80b//6g2wIFEH6hZG0muGZRnHGrfttpdzRk3YlBkWjKw==" + } + } + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "^1.1.1" + } + }, + "node-forge": { + "version": "0.6.33", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.6.33.tgz", + "integrity": "sha1-RjgRh59XPUUVWtap9D3ClujoXrw=", + "dev": true + }, + "node-gyp": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "dev": true, + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "mime-db": { + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", + "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", + "dev": true + }, + "mime-types": { + "version": "2.1.33", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", + "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", + "dev": true, + "requires": { + "mime-db": "1.50.0" + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } + } + }, + "node-libs-browser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", + "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.0", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.10.3", + "vm-browserify": "0.0.4" + } + }, + "node-modules-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/node-modules-path/-/node-modules-path-1.0.1.tgz", + "integrity": "sha1-QAlrCM560OoUaAhjr0ScfHWl0cg=", + "dev": true + }, + "node-sass": { + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.1.tgz", + "integrity": "sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==", + "dev": true, + "requires": { + "async-foreach": "^0.1.3", + "chalk": "^1.1.1", + "cross-spawn": "^3.0.0", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "in-publish": "^2.0.0", + "lodash": "^4.17.15", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "nan": "^2.13.2", + "node-gyp": "^3.8.0", + "npmlog": "^4.0.0", + "request": "^2.88.0", + "sass-graph": "2.2.5", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "mime-db": { + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", + "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", + "dev": true + }, + "mime-types": { + "version": "2.1.33", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", + "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", + "dev": true, + "requires": { + "mime-db": "1.50.0" + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "nth-check": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "null-check": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "dev": true + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + } + } + }, + "object-keys": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + }, + "dependencies": { + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + } + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "obuf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.1.tgz", + "integrity": "sha1-EEEktsYCxnlogaBCVB0220OlJk4=", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "opn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.1.0.tgz", + "integrity": "sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", + "dev": true + }, + "original": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz", + "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=", + "dev": true, + "requires": { + "url-parse": "1.0.x" + }, + "dependencies": { + "url-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz", + "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=", + "dev": true, + "requires": { + "querystringify": "0.0.x", + "requires-port": "1.0.x" + } + } + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", + "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pako": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", + "dev": true + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "dev": true, + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true, + "requires": { + "no-case": "^2.2.0" + } + }, + "parse-asn1": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", + "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "dev": true, + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "parsejson": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", + "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "pbkdf2": { + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", + "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "portfinder": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", + "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", + "dev": true, + "requires": { + "async": "^1.5.2", + "debug": "^2.2.0", + "mkdirp": "0.5.x" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.16.tgz", + "integrity": "sha512-m758RWPmSjFH/2MyyG3UOW1fgYbR9rtdzz5UNJnlm7OLtu4B2h9C6gi+bE4qFKghsBRFfZT8NzoQBs6JhLotoA==", + "dev": true, + "requires": { + "chalk": "^2.3.0", + "source-map": "^0.6.1", + "supports-color": "^5.1.0" + }, + "dependencies": { + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" + }, + "dependencies": { + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "^2.0.0" + } + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.1.0.tgz", + "integrity": "sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ==", + "dev": true, + "requires": { + "has-flag": "^2.0.0" + } + } + } + }, + "postcss-calc": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", + "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "dev": true, + "requires": { + "postcss": "^5.0.2", + "postcss-message-helpers": "^2.0.0", + "reduce-css-calc": "^1.2.6" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-colormin": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", + "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "dev": true, + "requires": { + "colormin": "^1.0.5", + "postcss": "^5.0.13", + "postcss-value-parser": "^3.2.3" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-convert-values": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", + "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "dev": true, + "requires": { + "postcss": "^5.0.11", + "postcss-value-parser": "^3.1.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-discard-comments": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", + "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "dev": true, + "requires": { + "postcss": "^5.0.14" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-discard-duplicates": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", + "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "dev": true, + "requires": { + "postcss": "^5.0.4" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-discard-empty": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", + "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "dev": true, + "requires": { + "postcss": "^5.0.14" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-discard-overridden": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", + "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "dev": true, + "requires": { + "postcss": "^5.0.16" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-discard-unused": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", + "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "dev": true, + "requires": { + "postcss": "^5.0.14", + "uniqs": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-filter-plugins": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz", + "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", + "dev": true, + "requires": { + "postcss": "^5.0.4", + "uniqid": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-import": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-11.0.0.tgz", + "integrity": "sha1-qWLi34LTvFptpqOGhBdHIE9B71s=", + "dev": true, + "requires": { + "postcss": "^6.0.1", + "postcss-value-parser": "^3.2.3", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + }, + "postcss-load-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", + "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", + "dev": true, + "requires": { + "cosmiconfig": "^2.1.0", + "object-assign": "^4.1.0", + "postcss-load-options": "^1.2.0", + "postcss-load-plugins": "^2.3.0" + } + }, + "postcss-load-options": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", + "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", + "dev": true, + "requires": { + "cosmiconfig": "^2.1.0", + "object-assign": "^4.1.0" + } + }, + "postcss-load-plugins": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", + "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", + "dev": true, + "requires": { + "cosmiconfig": "^2.1.1", + "object-assign": "^4.1.0" + } + }, + "postcss-loader": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.0.10.tgz", + "integrity": "sha512-xQaDcEgJ/2JqFY18zpFkik8vyYs7oS5ZRbrjvDqkP97k2wYWfPT4+qA0m4o3pTSCsz0u26PNqs8ZO9FRUWAqrA==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "postcss": "^6.0.0", + "postcss-load-config": "^1.2.0", + "schema-utils": "^0.3.0" + } + }, + "postcss-merge-idents": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", + "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "dev": true, + "requires": { + "has": "^1.0.1", + "postcss": "^5.0.10", + "postcss-value-parser": "^3.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-merge-longhand": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", + "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "dev": true, + "requires": { + "postcss": "^5.0.4" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-merge-rules": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", + "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", + "dev": true, + "requires": { + "browserslist": "^1.5.2", + "caniuse-api": "^1.5.2", + "postcss": "^5.0.4", + "postcss-selector-parser": "^2.2.2", + "vendors": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-message-helpers": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", + "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", + "dev": true + }, + "postcss-minify-font-values": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", + "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-minify-gradients": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", + "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", + "dev": true, + "requires": { + "postcss": "^5.0.12", + "postcss-value-parser": "^3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-minify-params": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", + "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.2", + "postcss-value-parser": "^3.0.2", + "uniqs": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-minify-selectors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", + "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.2", + "has": "^1.0.1", + "postcss": "^5.0.14", + "postcss-selector-parser": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz", + "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", + "dev": true, + "requires": { + "postcss": "^6.0.1" + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "dev": true, + "requires": { + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" + } + }, + "postcss-normalize-charset": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", + "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "dev": true, + "requires": { + "postcss": "^5.0.5" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-normalize-url": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", + "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^1.4.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-ordered-values": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", + "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "dev": true, + "requires": { + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-reduce-idents": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", + "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "dev": true, + "requires": { + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-reduce-initial": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", + "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "dev": true, + "requires": { + "postcss": "^5.0.4" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-reduce-transforms": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", + "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "dev": true, + "requires": { + "has": "^1.0.1", + "postcss": "^5.0.8", + "postcss-value-parser": "^3.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", + "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "dev": true, + "requires": { + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "postcss-svgo": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", + "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "dev": true, + "requires": { + "is-svg": "^2.0.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3", + "svgo": "^0.7.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-unique-selectors": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", + "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-url": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-7.3.0.tgz", + "integrity": "sha512-VBP6uf6iL3AZra23nkPkOEkS/5azj1xf/toRrjfkolfFEgg9Gyzg9UhJZeIsz12EGKZTNVeGbPa2XtaZm/iZvg==", + "dev": true, + "requires": { + "mime": "^1.4.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.0", + "postcss": "^6.0.1", + "xxhashjs": "^0.2.1" + } + }, + "postcss-value-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "dev": true + }, + "postcss-zindex": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", + "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", + "dev": true, + "requires": { + "has": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", + "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "dev": true, + "requires": { + "renderkid": "^2.0.1", + "utila": "~0.4" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "optional": true, + "requires": { + "asap": "~2.0.3" + } + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "protractor": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.2.0.tgz", + "integrity": "sha1-0/ObGV6F81Oa2djLZWCp0rYyl8Q=", + "dev": true, + "requires": { + "@types/node": "^6.0.46", + "@types/q": "^0.0.32", + "@types/selenium-webdriver": "~2.53.39", + "blocking-proxy": "0.0.5", + "chalk": "^1.1.3", + "glob": "^7.0.3", + "jasmine": "^2.5.3", + "jasminewd2": "^2.1.0", + "optimist": "~0.6.0", + "q": "1.4.1", + "saucelabs": "~1.3.0", + "selenium-webdriver": "3.6.0", + "source-map-support": "~0.4.0", + "webdriver-js-extender": "^1.0.0", + "webdriver-manager": "^12.0.6" + }, + "dependencies": { + "@types/node": { + "version": "6.0.92", + "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.92.tgz", + "integrity": "sha512-awEYSSTn7dauwVCYSx2CJaPTu0Z1Ht2oR1b2AD3CYao6ZRb+opb6EL43fzmD7eMFgMHzTBWSUzlWSD+S8xN0Nw==", + "dev": true + }, + "adm-zip": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz", + "integrity": "sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" + } + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "q": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "webdriver-manager": { + "version": "12.0.6", + "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.0.6.tgz", + "integrity": "sha1-PfGkgZdwELTL+MnYXHpXeCjA5ws=", + "dev": true, + "requires": { + "adm-zip": "^0.4.7", + "chalk": "^1.1.1", + "del": "^2.2.0", + "glob": "^7.0.3", + "ini": "^1.3.4", + "minimist": "^1.2.0", + "q": "^1.4.1", + "request": "^2.78.0", + "rimraf": "^2.5.2", + "semver": "^5.3.0", + "xml2js": "^0.4.17" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + } + } + }, + "proxy-addr": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", + "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.5.2" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", + "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "pump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.4.0.tgz", + "integrity": "sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA==", + "dev": true, + "requires": { + "duplexify": "^3.5.3", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qjobs": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.1.5.tgz", + "integrity": "sha1-ZZ3p8s+NzCehSBJ28gU3cnI4LnM=", + "dev": true + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-0.0.4.tgz", + "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=", + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "randombytes": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz", + "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + } + }, + "raw-loader": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", + "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=", + "dev": true + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "dev": true, + "requires": { + "pify": "^2.3.0" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "dependencies": { + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + } + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + } + } + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "reduce-css-calc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", + "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "dev": true, + "requires": { + "balanced-match": "^0.4.2", + "math-expression-evaluator": "^1.2.14", + "reduce-function-call": "^1.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + } + } + }, + "reduce-function-call": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", + "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", + "dev": true, + "requires": { + "balanced-match": "^0.4.2" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + } + } + }, + "reflect-metadata": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.12.tgz", + "integrity": "sha512-n+IyV+nGz3+0q3/Yf1ra12KpCyi001bi4XFxSjbiWWjfqb52iTTtpGXmCCAOWWIAn9KEuFZKGqBERHmrtScZ3A==", + "dev": true + }, + "regenerate": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", + "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", + "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", + "dev": true + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "^0.1.3" + } + }, + "regex-not": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.0.tgz", + "integrity": "sha1-Qvg+OXcWIt+CawKvF2Ul1qXxV/k=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1" + } + }, + "regexpu-core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "dev": true, + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "renderkid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz", + "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", + "dev": true, + "requires": { + "css-select": "^1.1.0", + "dom-converter": "~0.1", + "htmlparser2": "~3.3.0", + "strip-ansi": "^3.0.0", + "utila": "~0.3" + }, + "dependencies": { + "utila": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "dev": true + } + } + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "requires": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", + "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", + "dev": true, + "requires": { + "path-parse": "^1.0.5" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "^0.1.1" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "^7.0.5" + } + }, + "ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "dev": true, + "requires": { + "hash-base": "^2.0.0", + "inherits": "^2.0.1" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "rxjs": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.2.tgz", + "integrity": "sha512-oRYoIKWBU3Ic37fLA5VJu31VqQO4bWubRntcHSJ+cwaDQBwdnZ9x4zmhJfm/nFQ2E82/I4loSioHnACamrKGgA==", + "requires": { + "symbol-observable": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "sass-graph": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz", + "integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^13.3.2" + } + }, + "sass-loader": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.6.tgz", + "integrity": "sha512-c3/Zc+iW+qqDip6kXPYLEgsAu2lf4xz0EZDplB7EmSUMda12U1sGJPetH55B/j9eu0bTtKzKlNPWWyYC7wFNyQ==", + "dev": true, + "requires": { + "async": "^2.1.5", + "clone-deep": "^0.3.0", + "loader-utils": "^1.0.1", + "lodash.tail": "^4.1.1", + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "saucelabs": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.3.0.tgz", + "integrity": "sha1-0kDoAJ33+ocwbsRXimm6O1xCT+4=", + "dev": true, + "requires": { + "https-proxy-agent": "^1.0.0" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "schema-utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", + "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "dev": true, + "requires": { + "ajv": "^5.0.0" + } + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "requires": { + "js-base64": "^2.1.8", + "source-map": "^0.4.2" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selenium-webdriver": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", + "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", + "dev": true, + "requires": { + "jszip": "^3.1.3", + "rimraf": "^2.5.4", + "tmp": "0.0.30", + "xml2js": "^0.4.17" + }, + "dependencies": { + "tmp": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", + "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.1" + } + } + } + }, + "selfsigned": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.1.tgz", + "integrity": "sha1-v4y3uDJWxFUeMTR8YxF3jbme7FI=", + "dev": true, + "requires": { + "node-forge": "0.6.33" + } + }, + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "dev": true + }, + "semver-dsl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", + "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "send": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", + "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.1", + "destroy": "~1.0.4", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.3.1" + }, + "dependencies": { + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.4.0.tgz", + "integrity": "sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU=", + "dev": true + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + } + }, + "serve-static": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", + "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", + "dev": true, + "requires": { + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-getter": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz", + "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", + "dev": true, + "requires": { + "to-object-path": "^0.3.0" + } + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "sha.js": { + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.10.tgz", + "integrity": "sha512-vnwmrFDlOExK4Nm16J2KMWHLrp14lBrjxMxBJpu++EnsuBmpiYaM/MEs46Vxxm/4FvdP5yTwuCTO9it5FSjrqA==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", + "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", + "dev": true, + "requires": { + "is-extendable": "^0.1.1", + "kind-of": "^2.0.1", + "lazy-cache": "^0.2.3", + "mixin-object": "^2.0.1" + }, + "dependencies": { + "kind-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", + "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", + "dev": true, + "requires": { + "is-buffer": "^1.0.2" + } + } + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "silent-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/silent-error/-/silent-error-1.1.0.tgz", + "integrity": "sha1-IglwbxyFCp8dENDYQJGLRvJuG8k=", + "dev": true, + "requires": { + "debug": "^2.2.0" + } + }, + "simple-line-icons": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/simple-line-icons/-/simple-line-icons-2.4.1.tgz", + "integrity": "sha1-t1vFoNh+UwkowszaVzUnS7JW8jQ=" + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "snapdragon": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz", + "integrity": "sha1-4StUh/re0+PeoKyR6UAL91tAE3A=", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^2.0.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "2.x.x" + } + }, + "socket.io": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", + "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", + "dev": true, + "requires": { + "debug": "2.3.3", + "engine.io": "1.8.3", + "has-binary": "0.1.7", + "object-assign": "4.1.0", + "socket.io-adapter": "0.5.0", + "socket.io-client": "1.7.3", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + }, + "object-assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + "dev": true + } + } + }, + "socket.io-adapter": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", + "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", + "dev": true, + "requires": { + "debug": "2.3.3", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-client": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", + "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", + "dev": true, + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "2.3.3", + "engine.io-client": "1.8.3", + "has-binary": "0.1.7", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseuri": "0.0.5", + "socket.io-parser": "2.3.1", + "to-array": "0.1.4" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", + "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "dev": true, + "requires": { + "component-emitter": "1.1.2", + "debug": "2.2.0", + "isarray": "0.0.1", + "json3": "3.3.2" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + } + } + }, + "sockjs": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", + "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "dev": true, + "requires": { + "faye-websocket": "^0.10.0", + "uuid": "^3.0.1" + } + }, + "sockjs-client": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", + "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", + "dev": true, + "requires": { + "debug": "^2.6.6", + "eventsource": "0.1.6", + "faye-websocket": "~0.11.0", + "inherits": "^2.0.1", + "json3": "^3.3.2", + "url-parse": "^1.1.8" + }, + "dependencies": { + "faye-websocket": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", + "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "source-list-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", + "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-loader": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.2.3.tgz", + "integrity": "sha512-MYbFX9DYxmTQFfy2v8FC1XZwpwHKYxg3SK8Wb7VPBKuhDjz8gi9re2819MsG4p49HDyiOSUKlmZ+nQBArW5CGw==", + "dev": true, + "requires": { + "async": "^2.5.0", + "loader-utils": "~0.2.2", + "source-map": "~0.6.1" + }, + "dependencies": { + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-resolve": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", + "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", + "dev": true, + "requires": { + "atob": "^2.0.0", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "^0.5.6" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true, + "requires": { + "spdx-license-ids": "^1.0.2" + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, + "spdy": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", + "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", + "dev": true, + "requires": { + "debug": "^2.6.8", + "handle-thing": "^1.2.5", + "http-deceiver": "^1.2.7", + "safe-buffer": "^5.0.1", + "select-hose": "^2.0.0", + "spdy-transport": "^2.0.18" + } + }, + "spdy-transport": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz", + "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=", + "dev": true, + "requires": { + "debug": "^2.6.8", + "detect-node": "^2.0.3", + "hpack.js": "^2.1.6", + "obuf": "^1.1.1", + "readable-stream": "^2.2.9", + "safe-buffer": "^5.0.1", + "wbuf": "^1.7.2" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "ssri": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.1.0.tgz", + "integrity": "sha512-TevC8fgxQKTfQ1nWtM9GNzr3q5rrHNntG9CDMH1k3QhSZI6Kb+NbjLRs8oPFZa2Hgo7zoekL+UTvoEk7tsbjQg==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + }, + "stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", + "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.0.tgz", + "integrity": "sha512-sZOFxI/5xw058XIRHl4dU3dZ+TTOIGJR78Dvo0oEAejIt4ou27k+3ne1zYmCV+v7UucbxIFQuOgnkTVHh8YPnw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.3", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "style-loader": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.13.2.tgz", + "integrity": "sha1-dFMzhM9pjHEEx5URULSXF63C87s=", + "dev": true, + "requires": { + "loader-utils": "^1.0.2" + } + }, + "stylus": { + "version": "0.54.5", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz", + "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=", + "dev": true, + "requires": { + "css-parse": "1.7.x", + "debug": "*", + "glob": "7.0.x", + "mkdirp": "0.5.x", + "sax": "0.5.x", + "source-map": "0.1.x" + }, + "dependencies": { + "glob": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "sax": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", + "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=", + "dev": true + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "stylus-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.1.tgz", + "integrity": "sha1-d/SzT9Aw0lsmF7z1UT21sHMMQIk=", + "dev": true, + "requires": { + "loader-utils": "^1.0.2", + "lodash.clonedeep": "^4.5.0", + "when": "~3.6.x" + } + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "^2.0.0" + } + }, + "svgo": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", + "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "dev": true, + "requires": { + "coa": "~1.0.1", + "colors": "~1.1.2", + "csso": "~2.3.1", + "js-yaml": "~3.7.0", + "mkdirp": "~0.5.1", + "sax": "~1.2.1", + "whet.extend": "~0.9.9" + } + }, + "sweetalert2": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-7.11.0.tgz", + "integrity": "sha512-rBKCm+X/hVM4sKw+I1jSDUUibe2xrHfCXJt5Oc5H4MWLmn4mCnYzR4Pu4Qw1IGkh32wqHH6hpn1F61npQUn/Mg==" + }, + "symbol-observable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.1.0.tgz", + "integrity": "sha512-dQoid9tqQ+uotGhuTKEY11X4xhyYePVnqGSoSm3OGKh2E8LZ6RPULp1uXTctk33IeERlrRJYoVSBglsL05F5Uw==" + }, + "tapable": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", + "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", + "dev": true + }, + "tar": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "dev": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" + } + }, + "thunky": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-0.1.0.tgz", + "integrity": "sha1-vzAUaCTituZ7Dy16Ssi+smkIaE4=", + "dev": true + }, + "time-ago-pipe": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/time-ago-pipe/-/time-ago-pipe-1.3.2.tgz", + "integrity": "sha512-ecKcPRPzQ4iDGrcifplKod4/Ael6w65LAw0Ll/IEJBv+CBmKZGMLpgduLWmlgu6Ow8ykwb/Fp2SPqPNDTLpuoQ==", + "requires": { + "tslib": "^1.7.1" + } + }, + "time-stamp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", + "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=", + "dev": true + }, + "timers-browserify": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.5.tgz", + "integrity": "sha512-BMeI1W6E2/mSaPVLUnH9rjEY1Ys2FEC/GKmE/101wusU3byZO5g68BJ5hpJEP8iD1qAJ6SzYAShGA+urHMxOzQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "tmp": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.1" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "to-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.1.tgz", + "integrity": "sha1-FTWL7kosg712N3uh3ASdDxiDeq4=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "regex-not": "^1.0.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + } + } + }, + "toposort": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.6.tgz", + "integrity": "sha1-wxdI5V0hDv/AD9zcfW5o19e7nOw=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", + "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "dev": true, + "requires": { + "punycode": "^1.4.1" + } + }, + "tree-kill": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.0.tgz", + "integrity": "sha512-DlX6dR0lOIRDFxI0mjL9IYg6OTncLm/Zt+JiBhE5OlFcAR8yc9S7FFXU9so0oda47frdM/JFsk7UjNt9vscKcg==", + "dev": true + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "dev": true, + "requires": { + "glob": "^7.1.2" + } + }, + "ts-helpers": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ts-helpers/-/ts-helpers-1.1.2.tgz", + "integrity": "sha1-/Gm+nx87rtAfsaDvjUz+dIgU2DU=" + }, + "ts-node": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-3.3.0.tgz", + "integrity": "sha1-wTxqMCTjC+EYDdUwOPwgkonUv2k=", + "dev": true, + "requires": { + "arrify": "^1.0.0", + "chalk": "^2.0.0", + "diff": "^3.1.0", + "make-error": "^1.1.1", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.0", + "tsconfig": "^6.0.0", + "v8flags": "^3.0.0", + "yn": "^2.0.0" + } + }, + "tsconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-6.0.0.tgz", + "integrity": "sha1-aw6DdgA9evGGT434+J3QBZ/80DI=", + "dev": true, + "requires": { + "strip-bom": "^3.0.0", + "strip-json-comments": "^2.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "tsickle": { + "version": "0.24.1", + "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.24.1.tgz", + "integrity": "sha512-XloFQZhVhgjpQsi3u2ORNRJvuID5sflOg6HfP093IqAbhE1+fIUXznULpdDwHgG4p+v8w78KdHruQtkWUKx5AQ==", + "dev": true, + "requires": { + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map": "^0.5.6", + "source-map-support": "^0.4.2" + } + }, + "tslib": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.0.tgz", + "integrity": "sha512-ymKWWZJST0/CkgduC2qkzjMOWr4bouhuURNXCn/inEX0L57BnRG6FhX76o7FOnsjHazCjfU2LKeSrlS2sIKQJg==" + }, + "tslint": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.8.0.tgz", + "integrity": "sha1-H0mtWy53x2w69N3K5VKuTjYS6xM=", + "dev": true, + "requires": { + "babel-code-frame": "^6.22.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.1.0", + "commander": "^2.9.0", + "diff": "^3.2.0", + "glob": "^7.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.7.1", + "tsutils": "^2.12.1" + } + }, + "tsutils": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.13.0.tgz", + "integrity": "sha512-FuWzNJbMsp3gcZMbI3b5DomhW4Ia41vMxjN63nKWI0t7f+I3UmHfRl0TrXJTwI2LUduDG+eR1Mksp3pvtlyCFQ==", + "dev": true, + "requires": { + "tslib": "^1.7.1" + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "type-is": { + "version": "1.6.15", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.15" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typescript": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.1.tgz", + "integrity": "sha1-7znN6ierrAtQAkLWcmq5DgyEZjE=", + "dev": true + }, + "uglify-js": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.8.tgz", + "integrity": "sha512-X0jAGtpSZRtd4RhbVNuGHyjZNa/h2MrVkKrR3Ew5iL2MJw6d7FmBke+fhVCALWySv1ygHnjjROG1KI1FAPvddw==", + "dev": true, + "requires": { + "commander": "~2.13.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "uglifyjs-webpack-plugin": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.1.6.tgz", + "integrity": "sha512-VUja+7rYbznEvUaeb8IxOCTUrq4BCb1ml0vffa+mfwKtrAwlqnU0ENF14DtYltV1cxd/HSuK51CCA/D/8kMQVw==", + "dev": true, + "requires": { + "cacache": "^10.0.1", + "find-cache-dir": "^1.0.0", + "schema-utils": "^0.4.2", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "uglify-es": "^3.3.4", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" + }, + "dependencies": { + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", + "dev": true + }, + "schema-utils": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.3.tgz", + "integrity": "sha512-sgv/iF/T4/SewJkaVpldKC4WjSkz0JsOh2eKtxCPpCO1oR05+7MOF+H476HVRbLArkgA7j5TRJJ4p2jdFkUGQQ==", + "dev": true, + "requires": { + "ajv": "^5.0.0", + "ajv-keywords": "^2.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "uglify-es": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.8.tgz", + "integrity": "sha512-j8li0jWcAN6yBuAVYFZEFyYINZAm4WEdMwkA6qXFi4TLrze3Mp0Le7QjW6LR9HQjQJ2zRa9VgnFLs3PatijWOw==", + "dev": true, + "requires": { + "commander": "~2.13.0", + "source-map": "~0.6.1" + } + } + } + }, + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "dev": true + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "dependencies": { + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + } + } + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqid": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz", + "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", + "dev": true, + "requires": { + "macaddress": "^0.2.8" + } + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "unique-filename": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", + "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", + "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universalify": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", + "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-loader": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.6.2.tgz", + "integrity": "sha512-h3qf9TNn53BpuXTTcpC+UehiRrl0Cv45Yr/xWayApjw6G8Bg2dGke7rIwDQ39piciWCWrC+WiqLjOh3SUp9n0Q==", + "dev": true, + "requires": { + "loader-utils": "^1.0.2", + "mime": "^1.4.1", + "schema-utils": "^0.3.0" + } + }, + "url-parse": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz", + "integrity": "sha512-DT1XbYAfmQP65M/mE6OALxmXzZ/z1+e5zk2TcSKe/KiYbNGZxgtttzC0mR/sjopbpOXcbniq7eIKmocJnUWlEw==", + "dev": true, + "requires": { + "querystringify": "~1.0.0", + "requires-port": "~1.0.0" + }, + "dependencies": { + "querystringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz", + "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=", + "dev": true + } + } + }, + "use": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz", + "integrity": "sha1-riig1y+TvyJCKhii43mZMRLeyOg=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "lazy-cache": "^2.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + }, + "lazy-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", + "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", + "dev": true, + "requires": { + "set-getter": "^0.1.0" + } + } + } + }, + "useragent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", + "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", + "dev": true, + "requires": { + "lru-cache": "2.2.x", + "tmp": "0.0.x" + }, + "dependencies": { + "lru-cache": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", + "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", + "dev": true + } + } + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", + "dev": true + }, + "v8flags": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.0.1.tgz", + "integrity": "sha1-3Oj8N5wX2fLJ6e142JzgAFKxt2s=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true, + "requires": { + "spdx-correct": "~1.0.0", + "spdx-expression-parse": "~1.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vendors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz", + "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "dev": true + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "0.0.1" + } + }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, + "watchpack": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", + "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", + "dev": true, + "requires": { + "async": "^2.1.2", + "chokidar": "^1.7.0", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz", + "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "webdriver-js-extender": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-1.0.0.tgz", + "integrity": "sha1-gcUzqeM9W/tZe05j4s2yW1R3dRU=", + "dev": true, + "requires": { + "@types/selenium-webdriver": "^2.53.35", + "selenium-webdriver": "^2.53.2" + }, + "dependencies": { + "sax": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-0.6.1.tgz", + "integrity": "sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk=", + "dev": true + }, + "selenium-webdriver": { + "version": "2.53.3", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-2.53.3.tgz", + "integrity": "sha1-0p/1qVff8aG0ncRXdW5OS/vc4IU=", + "dev": true, + "requires": { + "adm-zip": "0.4.4", + "rimraf": "^2.2.8", + "tmp": "0.0.24", + "ws": "^1.0.1", + "xml2js": "0.4.4" + } + }, + "tmp": { + "version": "0.0.24", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.24.tgz", + "integrity": "sha1-1qXhmNFKmDXMby18PZ4wJCjIzxI=", + "dev": true + }, + "xml2js": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz", + "integrity": "sha1-MREBAAMAiuGSQOuhdJe1fHKcVV0=", + "dev": true, + "requires": { + "sax": "0.6.x", + "xmlbuilder": ">=1.0.0" + } + } + } + }, + "webpack": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.10.0.tgz", + "integrity": "sha512-fxxKXoicjdXNUMY7LIdY89tkJJJ0m1Oo8PQutZ5rLgWbV5QVKI15Cn7+/IHnRTd3vfKfiwBx6SBqlorAuNA8LA==", + "dev": true, + "requires": { + "acorn": "^5.0.0", + "acorn-dynamic-import": "^2.0.0", + "ajv": "^5.1.5", + "ajv-keywords": "^2.0.0", + "async": "^2.1.2", + "enhanced-resolve": "^3.4.0", + "escope": "^3.6.0", + "interpret": "^1.0.0", + "json-loader": "^0.5.4", + "json5": "^0.5.1", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "mkdirp": "~0.5.0", + "node-libs-browser": "^2.0.0", + "source-map": "^0.5.3", + "supports-color": "^4.2.1", + "tapable": "^0.2.7", + "uglifyjs-webpack-plugin": "^0.4.6", + "watchpack": "^1.4.0", + "webpack-sources": "^1.0.1", + "yargs": "^8.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + }, + "dependencies": { + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + } + } + }, + "uglifyjs-webpack-plugin": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", + "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "dev": true, + "requires": { + "source-map": "^0.5.6", + "uglify-js": "^2.8.29", + "webpack-sources": "^1.0.1" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "yargs": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + } + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + } + } + } + } + }, + "webpack-core": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/webpack-core/-/webpack-core-0.6.9.tgz", + "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=", + "dev": true, + "requires": { + "source-list-map": "~0.1.7", + "source-map": "~0.4.1" + }, + "dependencies": { + "source-list-map": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz", + "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=", + "dev": true + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "webpack-dev-middleware": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", + "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", + "dev": true, + "requires": { + "memory-fs": "~0.4.1", + "mime": "^1.5.0", + "path-is-absolute": "^1.0.0", + "range-parser": "^1.0.3", + "time-stamp": "^2.0.0" + } + }, + "webpack-dev-server": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.11.1.tgz", + "integrity": "sha512-ombhu5KsO/85sVshIDTyQ5HF3xjZR3N0sf5Ao6h3vFwpNyzInEzA1GV3QPVjTMLTNckp8PjfG1PFGznzBwS5lg==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "array-includes": "^3.0.3", + "bonjour": "^3.5.0", + "chokidar": "^2.0.0", + "compression": "^1.5.2", + "connect-history-api-fallback": "^1.3.0", + "debug": "^3.1.0", + "del": "^3.0.0", + "express": "^4.16.2", + "html-entities": "^1.2.0", + "http-proxy-middleware": "~0.17.4", + "import-local": "^1.0.0", + "internal-ip": "1.2.0", + "ip": "^1.1.5", + "killable": "^1.0.0", + "loglevel": "^1.4.1", + "opn": "^5.1.0", + "portfinder": "^1.0.9", + "selfsigned": "^1.9.1", + "serve-index": "^1.7.2", + "sockjs": "0.3.19", + "sockjs-client": "1.1.4", + "spdy": "^3.4.1", + "strip-ansi": "^3.0.0", + "supports-color": "^5.1.0", + "webpack-dev-middleware": "1.12.2", + "yargs": "6.6.0" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.0.tgz", + "integrity": "sha512-P4O8UQRdGiMLWSizsApmXVQDBS6KCt7dSexgLKBmH5Hr1CZq7vsnscFh8oR1sP1ab1Zj0uCHCEzZeV6SfUf3rA==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "chokidar": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.0.tgz", + "integrity": "sha512-OgXCNv2U6TnG04D3tth0gsvdbV4zdbxFG3sYUqcoQMoEFVd1j1pZR6TZ8iknC45o9IJ6PeQI/J6wT/+cHcniAw==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.0.0", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.5.tgz", + "integrity": "sha512-ykttrLPQrz1PUJcXjwsTUjGoPJ64StIGNE2lGVD1c9CuguJ+L7/navsE8IcDNndOoCMvYV0qc/exfVbMHkUhvA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.0", + "define-property": "^1.0.0", + "extend-shallow": "^2.0.1", + "extglob": "^2.0.2", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.0", + "nanomatch": "^1.2.5", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "supports-color": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.1.0.tgz", + "integrity": "sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ==", + "dev": true, + "requires": { + "has-flag": "^2.0.0" + } + }, + "yargs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^4.2.0" + } + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "requires": { + "camelcase": "^3.0.0" + } + } + } + }, + "webpack-merge": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.1.tgz", + "integrity": "sha512-geQsZ86YkXOVOjvPC5yv3JSNnL6/X3Kzh935AQ/gJNEYXEfJDQFu/sdFuktS9OW2JcH/SJec8TGfRdrpHshH7A==", + "dev": true, + "requires": { + "lodash": "^4.17.4" + } + }, + "webpack-sources": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", + "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "webpack-subresource-integrity": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.0.3.tgz", + "integrity": "sha1-wGBtQAkLBwzeQovsjfNgMhbkcus=", + "dev": true, + "requires": { + "webpack-core": "^0.6.8" + } + }, + "websocket-driver": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", + "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "dev": true, + "requires": { + "http-parser-js": ">=0.4.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", + "dev": true + }, + "when": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", + "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=", + "dev": true + }, + "whet.extend": { + "version": "0.9.9", + "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", + "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", + "dev": true + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "worker-farm": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.5.2.tgz", + "integrity": "sha512-XxiQ9kZN5n6mmnW+mFJ+wXjNNI/Nx4DIdaAKLX1Bn6LYBWlN/zaBhu34DQYPZ1AJobQuu67S2OfDdNSVULvXkQ==", + "dev": true, + "requires": { + "errno": "^0.1.4", + "xtend": "^4.0.1" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", + "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", + "dev": true, + "requires": { + "options": ">=0.0.5", + "ultron": "1.0.x" + } + }, + "wtf-8": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", + "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", + "dev": true + }, + "xml-char-classes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", + "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=", + "dev": true + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "dev": true, + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "xmlbuilder": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.4.tgz", + "integrity": "sha1-UZy0ymhtAFqEINNJbz8MruzKWA8=", + "dev": true + }, + "xmlhttprequest-ssl": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", + "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "xxhashjs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", + "dev": true, + "requires": { + "cuint": "^0.2.2" + } + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + } + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + }, + "yn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", + "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", + "dev": true + }, + "zone.js": { + "version": "0.8.18", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.18.tgz", + "integrity": "sha512-knKOBQM0oea3/x9pdyDuDi7RhxDlJhOIkeixXSiTKWLgs4LpK37iBc+1HaHwzlciHUKT172CymJFKo8Xgh+44Q==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..b074f6e --- /dev/null +++ b/package.json @@ -0,0 +1,83 @@ +{ + "name": "@coreui/angular", + "version": "1.0.6", + "description": "Open Source Bootstrap Admin Template", + "author": "Łukasz Holeczek", + "homepage": "http://coreui.io", + "copyright": "Copyright 2017 creativeLabs Łukasz Holeczek", + "license": "MIT", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "depoly": "ng build --base-href=./ --prod --build-optimizer --source-map", + "test": "ng test", + "lint": "ng lint", + "e2e": "ng e2e" + }, + "private": true, + "dependencies": { + "@agm/core": "^1.0.0-beta.2", + "@angular/animations": "^5.2.10", + "@angular/cdk": "^5.2.5", + "@angular/common": "5.0.1", + "@angular/compiler": "5.0.1", + "@angular/core": "5.0.1", + "@angular/forms": "5.0.1", + "@angular/http": "5.0.1", + "@angular/material": "^5.2.5", + "@angular/platform-browser": "5.0.1", + "@angular/platform-browser-dynamic": "5.0.1", + "@angular/router": "5.0.1", + "@angular/upgrade": "5.0.1", + "@toverux/ngx-sweetalert2": "^3.2.1", + "angular-datatables": "^5.0.0", + "angular-moment-timezone": "^1.7.1", + "bootstrap": "4.0.0-beta.2", + "chart.js": "^2.7.1", + "core-js": "2.5.1", + "datatables.net": "^1.10.16", + "datatables.net-dt": "^1.10.16", + "file-saver": "^1.3.8", + "font-awesome": "^4.7.0", + "jquery": "^3.2.1", + "moment": "^2.19.1", + "mydatepicker": "^2.6.3", + "ng2-charts": "1.6.0", + "ngx-bootstrap": "1.9.3", + "ngx-loading": "^1.0.14", + "ngx-moment": "^3.0.1", + "rxjs": "5.5.2", + "simple-line-icons": "^2.4.1", + "sweetalert2": "^7.11.0", + "time-ago-pipe": "^1.3.2", + "ts-helpers": "1.1.2", + "zone.js": "0.8.18" + }, + "devDependencies": { + "@angular/cli": "^1.6.5", + "@angular/compiler-cli": "^5.0.1", + "@types/datatables.net": "^1.10.8", + "@types/jasmine": "2.6.3", + "@types/jquery": "^3.2.16", + "@types/node": "8.0.50", + "codelyzer": "4.0.1", + "jasmine-core": "2.8.0", + "jasmine-spec-reporter": "4.2.1", + "karma": "1.7.1", + "karma-chrome-launcher": "2.2.0", + "karma-cli": "1.0.1", + "karma-coverage-istanbul-reporter": "1.3.0", + "karma-jasmine": "1.1.0", + "karma-jasmine-html-reporter": "0.2.2", + "node-sass": "^4.14.1", + "protractor": "5.2.0", + "ts-node": "3.3.0", + "tslint": "5.8.0", + "typescript": "^2.6.1" + }, + "engines": { + "node": ">= 6.9.0", + "npm": ">= 3.0.0" + } +} diff --git a/protractor.conf.js b/protractor.conf.js new file mode 100644 index 0000000..1c5e1e5 --- /dev/null +++ b/protractor.conf.js @@ -0,0 +1,30 @@ +// Protractor configuration file, see link for more information +// https://github.com/angular/protractor/blob/master/lib/config.ts + +const { SpecReporter } = require('jasmine-spec-reporter'); + +exports.config = { + allScriptsTimeout: 11000, + specs: [ + './e2e/**/*.e2e-spec.ts' + ], + capabilities: { + 'browserName': 'chrome' + }, + directConnect: true, + baseUrl: 'http://localhost:4200/', + framework: 'jasmine', + jasmineNodeOpts: { + showColors: true, + defaultTimeoutInterval: 30000, + print: function() {} + }, + beforeLaunch: function() { + require('ts-node').register({ + project: 'e2e/tsconfig.e2e.json' + }); + }, + onPrepare() { + jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); + } +}; diff --git a/src/app/_nav.ts b/src/app/_nav.ts new file mode 100644 index 0000000..34253f7 --- /dev/null +++ b/src/app/_nav.ts @@ -0,0 +1,47 @@ +export const navigation = [ + { name: "首頁", url: "/dashboard", icon: "icon-home" }, + { name: "開單", url: "/punish", icon: "icon-check" }, + { + name: "開單設定", + url: "/set", + icon: "icon-settings", + children: [ + { name: "行政區管理", url: "/set/set001", icon: "icon-folder" }, + { name: "原因設定", url: "/set/set002", icon: "icon-folder" }, + { name: "廠商資料設定", url: "/set/set003", icon: "icon-folder" } + ] + }, + { + name: "報表管理", + url: "/mro", + icon: "icon-support", + children: [ + { name: "違規類型違規數統計", url: "/mro/mro004", icon: "icon-list" }, + { name: "違規事件&站點違規數統計", url: "/mro/mro005", icon: "icon-list" }, + { name: "設備故障統計表", url: "/mro/mro006", icon: "icon-list" }, + { name: " API 表格清單", url: "/mro/mro007", icon: "icon-list" } + ] + }, + { + name: "公佈欄管理", + url: "/board", + icon: "icon-settings", + children: [ + { name: "公佈欄設定", url: "/board/board001", icon: "icon-folder" }, + ] + }, + { + name: "系統設定", + url: "/sys", + icon: "icon-settings", + children: [ + { name: "變更密碼", url: "/sys/sys001", icon: "icon-lock" }, + { name: "使用者管理", url: "/sys/sys002", icon: "icon-people" }, + { name: "個人資料顯示", url: "/sys/sys003", icon: "icon-people" }, + { name: "角色權限管理", url: "/sys/sys004", icon: "icon-key" }, + { name: "分局管理", url: "/sys/sys006", icon: "icon-key" }, + { name: "頁面管理", url: "/sys/sys005", icon: "icon-layers" } + ] + }, + { name: "線上報修", url: "/login/loginPostRepair", icon: "icon-wrench" } +]; diff --git a/src/app/app.component.html b/src/app/app.component.html new file mode 100644 index 0000000..e69de29 diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts new file mode 100644 index 0000000..13c632d --- /dev/null +++ b/src/app/app.component.spec.ts @@ -0,0 +1,32 @@ +import { TestBed, async } from '@angular/core/testing'; +import { AppComponent } from './app.component'; + +describe('AppComponent', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ + AppComponent + ], + }); + TestBed.compileComponents(); + }); + + it('should create the app', async(() => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.debugElement.componentInstance; + expect(app).toBeTruthy(); + })); + + it(`should have as title 'app works!'`, async(() => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.debugElement.componentInstance; + expect(app.title).toEqual('app works!'); + })); + + it('should render title in a h1 tag', async(() => { + const fixture = TestBed.createComponent(AppComponent); + fixture.detectChanges(); + const compiled = fixture.debugElement.nativeElement; + expect(compiled.querySelector('h1').textContent).toContain('app works!'); + })); +}); diff --git a/src/app/app.component.ts b/src/app/app.component.ts new file mode 100644 index 0000000..8eb01a7 --- /dev/null +++ b/src/app/app.component.ts @@ -0,0 +1,17 @@ +import { Component, OnInit } from "@angular/core"; +import { HelperService } from "app/service/helper.service"; + +@Component({ + // tslint:disable-next-line + selector: "body", + template: "" +}) +export class AppComponent implements OnInit { + constructor(private helperService: HelperService) {} + + ngOnInit() { + this.helperService.setUserCodeData(); + this.helperService.setRoleCodeData(); + this.helperService.setGroupName(); + } +} diff --git a/src/app/app.module.ts b/src/app/app.module.ts new file mode 100644 index 0000000..ddd958b --- /dev/null +++ b/src/app/app.module.ts @@ -0,0 +1,143 @@ +import { Board001Service } from './views/board/board001/board001.service'; +import { LoginService } from "./service/login.service"; +import { SysDataService } from "./service/sys-data.service"; +import { HttpModule } from "@angular/http"; +import { BrowserModule } from "@angular/platform-browser"; +import { NgModule } from "@angular/core"; +import { LocationStrategy, HashLocationStrategy } from "@angular/common"; +import { AppComponent } from "./app.component"; + +// import { TimeAgoPipe } from "time-ago-pipe"; + +// Import containers +import { FullLayoutComponent, SimpleLayoutComponent } from "./containers"; + +const APP_CONTAINERS = [FullLayoutComponent, SimpleLayoutComponent]; + +// Import components +import { + AppAsideComponent, + AppBreadcrumbsComponent, + AppFooterComponent, + AppHeaderComponent, + AppSidebarComponent, + AppSidebarFooterComponent, + AppSidebarFormComponent, + AppSidebarHeaderComponent, + AppSidebarMinimizerComponent, + APP_SIDEBAR_NAV +} from "./components"; + +const APP_COMPONENTS = [ + AppAsideComponent, + AppBreadcrumbsComponent, + AppFooterComponent, + AppHeaderComponent, + AppSidebarComponent, + AppSidebarFooterComponent, + AppSidebarFormComponent, + AppSidebarHeaderComponent, + AppSidebarMinimizerComponent, + APP_SIDEBAR_NAV +]; + +// Import directives +import { + AsideToggleDirective, + NAV_DROPDOWN_DIRECTIVES, + ReplaceDirective, + SIDEBAR_TOGGLE_DIRECTIVES +} from "./directives"; + +const APP_DIRECTIVES = [ + AsideToggleDirective, + NAV_DROPDOWN_DIRECTIVES, + ReplaceDirective, + SIDEBAR_TOGGLE_DIRECTIVES +]; + +// Import routing module +import { AppRoutingModule } from "./app.routing"; + +// Import 3rd party components +import { BsDropdownModule } from "ngx-bootstrap/dropdown"; +import { TabsModule } from "ngx-bootstrap/tabs"; +import { ModalModule } from "ngx-bootstrap/modal"; +import { AccordionModule } from "ngx-bootstrap/accordion"; +import { ChartsModule } from "ng2-charts/ng2-charts"; +import { SweetAlert2Module } from "@toverux/ngx-sweetalert2"; +// import { TimeAgoPipe } from "time-ago-pipe"; + +// import { LoadingModule } from "ngx-loading"; +// import { AgmCoreModule } from "@agm/core"; +import { HelperService } from "app/service/helper.service"; +import { MroDataService } from "app/service/mro-data.service"; + +import { Sys002Service } from "app/views/sys/sys002/sys002.service"; +import { Sys004Service } from "app/views/sys/sys004/sys004.service"; +import { Set001Service } from "app/views/set/set001/set001.service"; +import { Set002Service } from "./views/set/set002/set002.service"; +import { Set003Service } from "app/views/set/set003/set003.service"; + +import { HttpService } from "app/service/http.service"; +import { LoginModule } from "app/views/login/login.module"; +import { AuthGuard } from "app/auth-guard.service"; +import { SetDataService } from "app/service/set-data.service"; +import { Sys005Service } from "app/views/sys/sys005/sys005.service"; +import { Sys006Service } from "app/views/sys/sys006/sys006.service"; +import { BoardDataService } from './service/board-data.service'; + +// import { InfoComponent } from './views/info/info.component'; + +@NgModule({ + imports: [ + BrowserModule, + AppRoutingModule, + BsDropdownModule.forRoot(), + TabsModule.forRoot(), + ModalModule.forRoot(), + AccordionModule.forRoot(), + SweetAlert2Module.forRoot(), + ChartsModule, + // LoadingModule, + HttpModule, + LoginModule + // TimeAgoPipe + // AgmCoreModule.forRoot({ + // apiKey: "AIzaSyABeRdjDq-nodR8XjO4lzk_QAmjVJLqqis", + // language: "zh-TW" + // }) + ], + declarations: [ + AppComponent, + ...APP_CONTAINERS, + ...APP_COMPONENTS, + ...APP_DIRECTIVES + // TimeAgoPipe + // InfoComponent + ], + providers: [ + { + provide: LocationStrategy, + useClass: HashLocationStrategy + }, + SysDataService, + SetDataService, + MroDataService, + HelperService, + BoardDataService, + Sys002Service, + Sys004Service, + Sys005Service, + Sys006Service, + Set001Service, + Set002Service, + Set003Service, + Board001Service, + HttpService, + LoginService, + AuthGuard + ], + bootstrap: [AppComponent] +}) +export class AppModule {} diff --git a/src/app/app.routing.ts b/src/app/app.routing.ts new file mode 100644 index 0000000..903ec0d --- /dev/null +++ b/src/app/app.routing.ts @@ -0,0 +1,32 @@ +import { NgModule } from "@angular/core"; +import { Routes, RouterModule } from "@angular/router"; + +// Import Containers +import { FullLayoutComponent, SimpleLayoutComponent } from "./containers"; + +export const routes: Routes = [ + { path: "login", loadChildren: "./views/login/login.module#LoginModule" }, + { path: "", redirectTo: "login", pathMatch: "full" }, + { + path: "", + component: FullLayoutComponent, + data: { title: "Home" }, + children: [ + { + path: "dashboard", + loadChildren: "./views/dashboard/dashboard.module#DashboardModule" + }, + { path: "punish", loadChildren: "./views/punish/punish.module#PunishModule" }, + { path: "board", loadChildren: "./views/board/board.module#BoardModule" }, + { path: "set", loadChildren: "./views/set/set.module#SetModule" }, + { path: "mro", loadChildren: "./views/mro/mro.module#MroModule" }, + { path: "sys", loadChildren: "./views/sys/sys.module#SysModule" } + ] + } +]; + +@NgModule({ + imports: [RouterModule.forRoot(routes)], + exports: [RouterModule] +}) +export class AppRoutingModule {} diff --git a/src/app/auth-guard.service.ts b/src/app/auth-guard.service.ts new file mode 100644 index 0000000..84afe5f --- /dev/null +++ b/src/app/auth-guard.service.ts @@ -0,0 +1,27 @@ +import { Injectable } from "@angular/core"; +import { + Router, + CanActivate, + ActivatedRouteSnapshot, + RouterStateSnapshot +} from "@angular/router"; +import { LoginService } from "./service/login.service"; +import { HttpService } from "app/service/http.service"; + +@Injectable() +export class AuthGuard implements CanActivate { + constructor(private httpService: HttpService, private router: Router) {} + + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { + if (!this.httpService._token) { + this.router.navigate(["/login"]); + return false; + } + if (this.httpService._permissions.indexOf(state.url) === -1) { + this.router.navigate(["/login"]); + return false; + } + + return true; + } +} diff --git a/src/app/components/app-aside/app-aside.component.html b/src/app/components/app-aside/app-aside.component.html new file mode 100644 index 0000000..40ae2e0 --- /dev/null +++ b/src/app/components/app-aside/app-aside.component.html @@ -0,0 +1,3 @@ + diff --git a/src/app/components/app-aside/app-aside.component.ts b/src/app/components/app-aside/app-aside.component.ts new file mode 100644 index 0000000..e2fa523 --- /dev/null +++ b/src/app/components/app-aside/app-aside.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-aside', + templateUrl: './app-aside.component.html' +}) +export class AppAsideComponent { + + constructor() { } +} diff --git a/src/app/components/app-aside/index.ts b/src/app/components/app-aside/index.ts new file mode 100644 index 0000000..2cf8360 --- /dev/null +++ b/src/app/components/app-aside/index.ts @@ -0,0 +1 @@ +export * from './app-aside.component'; diff --git a/src/app/components/app-breadcrumbs/app-breadcrumbs.component.ts b/src/app/components/app-breadcrumbs/app-breadcrumbs.component.ts new file mode 100644 index 0000000..83bb2a8 --- /dev/null +++ b/src/app/components/app-breadcrumbs/app-breadcrumbs.component.ts @@ -0,0 +1,45 @@ +import { Component } from "@angular/core"; +import { Router, ActivatedRoute, NavigationEnd } from "@angular/router"; +import "rxjs/add/operator/filter"; + +@Component({ + selector: "app-breadcrumbs", + template: ` + + + ` +}) +export class AppBreadcrumbsComponent { + breadcrumbs: Array; + constructor(private router: Router, private route: ActivatedRoute) { + this.router.events + .filter(event => event instanceof NavigationEnd) + .subscribe(event => { + this.breadcrumbs = []; + let currentRoute = this.route.root, + url = ""; + do { + const childrenRoutes = currentRoute.children; + currentRoute = null; + // tslint:disable-next-line:no-shadowed-variable + childrenRoutes.forEach(route => { + if (route.outlet === "primary") { + const routeSnapshot = route.snapshot; + url += + "/" + routeSnapshot.url.map(segment => segment.path).join("/"); + this.breadcrumbs.push({ + label: route.snapshot.data, + url: url + }); + currentRoute = route; + } + }); + } while (currentRoute); + }); + } +} diff --git a/src/app/components/app-breadcrumbs/index.ts b/src/app/components/app-breadcrumbs/index.ts new file mode 100644 index 0000000..bacc99d --- /dev/null +++ b/src/app/components/app-breadcrumbs/index.ts @@ -0,0 +1 @@ +export * from './app-breadcrumbs.component'; diff --git a/src/app/components/app-footer/app-footer.component.html b/src/app/components/app-footer/app-footer.component.html new file mode 100644 index 0000000..b308063 --- /dev/null +++ b/src/app/components/app-footer/app-footer.component.html @@ -0,0 +1,4 @@ +
+ + +
diff --git a/src/app/components/app-footer/app-footer.component.ts b/src/app/components/app-footer/app-footer.component.ts new file mode 100644 index 0000000..1e8f1ae --- /dev/null +++ b/src/app/components/app-footer/app-footer.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-footer', + templateUrl: './app-footer.component.html' +}) +export class AppFooterComponent { } diff --git a/src/app/components/app-footer/index.ts b/src/app/components/app-footer/index.ts new file mode 100644 index 0000000..f029f14 --- /dev/null +++ b/src/app/components/app-footer/index.ts @@ -0,0 +1 @@ +export * from './app-footer.component'; diff --git a/src/app/components/app-header/app-header.component.html b/src/app/components/app-header/app-header.component.html new file mode 100644 index 0000000..ffe1918 --- /dev/null +++ b/src/app/components/app-header/app-header.component.html @@ -0,0 +1,16 @@ + diff --git a/src/app/components/app-header/app-header.component.ts b/src/app/components/app-header/app-header.component.ts new file mode 100644 index 0000000..0fe2ad4 --- /dev/null +++ b/src/app/components/app-header/app-header.component.ts @@ -0,0 +1,18 @@ +import { Component } from "@angular/core"; +import { LoginService } from "app/service/login.service"; +import { Router } from "@angular/router"; + +@Component({ + selector: "app-header", + templateUrl: "./app-header.component.html" +}) +export class AppHeaderComponent { + loginRole = localStorage.getItem("role"); + loginUser = localStorage.getItem("name"); + constructor(private loginService: LoginService, private router: Router) {} + + logout() { + this.loginService.logout(); + this.router.navigateByUrl("/login"); + } +} diff --git a/src/app/components/app-header/index.ts b/src/app/components/app-header/index.ts new file mode 100644 index 0000000..dcfab51 --- /dev/null +++ b/src/app/components/app-header/index.ts @@ -0,0 +1 @@ +export * from './app-header.component'; diff --git a/src/app/components/app-sidebar-footer/app-sidebar-footer.component.html b/src/app/components/app-sidebar-footer/app-sidebar-footer.component.html new file mode 100644 index 0000000..63d421d --- /dev/null +++ b/src/app/components/app-sidebar-footer/app-sidebar-footer.component.html @@ -0,0 +1 @@ + diff --git a/src/app/components/app-sidebar-footer/app-sidebar-footer.component.ts b/src/app/components/app-sidebar-footer/app-sidebar-footer.component.ts new file mode 100644 index 0000000..9b2e92e --- /dev/null +++ b/src/app/components/app-sidebar-footer/app-sidebar-footer.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-sidebar-footer', + templateUrl: './app-sidebar-footer.component.html' +}) +export class AppSidebarFooterComponent { } diff --git a/src/app/components/app-sidebar-footer/index.ts b/src/app/components/app-sidebar-footer/index.ts new file mode 100644 index 0000000..5c8e33e --- /dev/null +++ b/src/app/components/app-sidebar-footer/index.ts @@ -0,0 +1 @@ +export * from './app-sidebar-footer.component'; diff --git a/src/app/components/app-sidebar-form/app-sidebar-form.component.html b/src/app/components/app-sidebar-form/app-sidebar-form.component.html new file mode 100644 index 0000000..b5f736b --- /dev/null +++ b/src/app/components/app-sidebar-form/app-sidebar-form.component.html @@ -0,0 +1 @@ + diff --git a/src/app/components/app-sidebar-form/app-sidebar-form.component.ts b/src/app/components/app-sidebar-form/app-sidebar-form.component.ts new file mode 100644 index 0000000..e1a39dc --- /dev/null +++ b/src/app/components/app-sidebar-form/app-sidebar-form.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-sidebar-form', + templateUrl: './app-sidebar-form.component.html' +}) +export class AppSidebarFormComponent { } diff --git a/src/app/components/app-sidebar-form/index.ts b/src/app/components/app-sidebar-form/index.ts new file mode 100644 index 0000000..63300f6 --- /dev/null +++ b/src/app/components/app-sidebar-form/index.ts @@ -0,0 +1 @@ +export * from './app-sidebar-form.component'; diff --git a/src/app/components/app-sidebar-header/app-sidebar-header.component.html b/src/app/components/app-sidebar-header/app-sidebar-header.component.html new file mode 100644 index 0000000..807585c --- /dev/null +++ b/src/app/components/app-sidebar-header/app-sidebar-header.component.html @@ -0,0 +1 @@ + diff --git a/src/app/components/app-sidebar-header/app-sidebar-header.component.ts b/src/app/components/app-sidebar-header/app-sidebar-header.component.ts new file mode 100644 index 0000000..db1182a --- /dev/null +++ b/src/app/components/app-sidebar-header/app-sidebar-header.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-sidebar-header', + templateUrl: './app-sidebar-header.component.html' +}) +export class AppSidebarHeaderComponent { } diff --git a/src/app/components/app-sidebar-header/index.ts b/src/app/components/app-sidebar-header/index.ts new file mode 100644 index 0000000..6b1403e --- /dev/null +++ b/src/app/components/app-sidebar-header/index.ts @@ -0,0 +1 @@ +export * from './app-sidebar-header.component'; diff --git a/src/app/components/app-sidebar-minimizer/app-sidebar-minimizer.component.html b/src/app/components/app-sidebar-minimizer/app-sidebar-minimizer.component.html new file mode 100644 index 0000000..462b3db --- /dev/null +++ b/src/app/components/app-sidebar-minimizer/app-sidebar-minimizer.component.html @@ -0,0 +1 @@ + diff --git a/src/app/components/app-sidebar-minimizer/app-sidebar-minimizer.component.ts b/src/app/components/app-sidebar-minimizer/app-sidebar-minimizer.component.ts new file mode 100644 index 0000000..5378fbf --- /dev/null +++ b/src/app/components/app-sidebar-minimizer/app-sidebar-minimizer.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-sidebar-minimizer', + templateUrl: './app-sidebar-minimizer.component.html' +}) +export class AppSidebarMinimizerComponent { } diff --git a/src/app/components/app-sidebar-minimizer/index.ts b/src/app/components/app-sidebar-minimizer/index.ts new file mode 100644 index 0000000..5b646bd --- /dev/null +++ b/src/app/components/app-sidebar-minimizer/index.ts @@ -0,0 +1 @@ +export * from './app-sidebar-minimizer.component'; diff --git a/src/app/components/app-sidebar-nav/app-sidebar-nav.component.ts b/src/app/components/app-sidebar-nav/app-sidebar-nav.component.ts new file mode 100644 index 0000000..8da4c3a --- /dev/null +++ b/src/app/components/app-sidebar-nav/app-sidebar-nav.component.ts @@ -0,0 +1,197 @@ +import { Component, ElementRef, Input, OnInit, Renderer2 } from "@angular/core"; +import { HttpService } from "app/service/http.service"; + +// Import navigation elements +import { navigation } from "./../../_nav"; + +@Component({ + selector: "app-sidebar-nav", + template: ` + ` +}) +export class AppSidebarNavComponent implements OnInit { + public navigation = navigation; + + public isDivider(item) { + return item.divider ? true : false; + } + + public isTitle(item) { + return item.title ? true : false; + } + + constructor() {} + + ngOnInit() {} +} + +import { Router } from "@angular/router"; + +@Component({ + selector: "app-sidebar-nav-item", + template: ` +
  • + +
  • + +
  • + +
  • +
    + ` +}) +export class AppSidebarNavItemComponent implements OnInit { + @Input() item: any; + + public hasClass() { + return this.item.class ? true : false; + } + + public isDropdown() { + return this.item.children ? true : false; + } + + public thisUrl() { + return this.item.url; + } + + public isActive() { + return this.router.isActive(this.thisUrl(), false); + } + + constructor(private router: Router) {} + ngOnInit() {} +} + +@Component({ + selector: "app-sidebar-nav-link", + template: ` + + + {{ link.name }} + {{ link.badge.text }} + + + + + {{ link.name }} + {{ link.badge.text }} + + + ` +}) +export class AppSidebarNavLinkComponent { + @Input() link: any; + + public hasVariant() { + return this.link.variant ? true : false; + } + + public isBadge() { + return this.link.badge ? true : false; + } + + public isExternalLink() { + return this.link.url.substring(0, 4) === "http" ? true : false; + } + + public isIcon() { + return this.link.icon ? true : false; + } + + constructor() {} +} + +@Component({ + selector: "app-sidebar-nav-dropdown", + template: ` + + + {{ link.name }} + {{ link.badge.text }} + + + ` +}) +export class AppSidebarNavDropdownComponent implements OnInit { + page: any[]; + availableChild: any[]; + + @Input() link: any; + constructor(private httpService: HttpService) {} + ngOnInit() { + this.availableChild = this.link.children.filter(child => { + return this.httpService.isAvailableLink(child.url); + }); + } + public isBadge() { + return this.link.badge ? true : false; + } + + public isIcon() { + return this.link.icon ? true : false; + } +} + +@Component({ + selector: "app-sidebar-nav-title", + template: "" +}) +export class AppSidebarNavTitleComponent implements OnInit { + @Input() title: any; + + constructor(private el: ElementRef, private renderer: Renderer2) {} + + ngOnInit() { + const nativeElement: HTMLElement = this.el.nativeElement; + const li = this.renderer.createElement("li"); + const name = this.renderer.createText(this.title.name); + + this.renderer.addClass(li, "nav-title"); + + if (this.title.class) { + const classes = this.title.class; + this.renderer.addClass(li, classes); + } + + if (this.title.wrapper) { + const wrapper = this.renderer.createElement(this.title.wrapper.element); + + this.renderer.appendChild(wrapper, name); + this.renderer.appendChild(li, wrapper); + } else { + this.renderer.appendChild(li, name); + } + this.renderer.appendChild(nativeElement, li); + } +} + +export const APP_SIDEBAR_NAV = [ + AppSidebarNavComponent, + AppSidebarNavDropdownComponent, + AppSidebarNavItemComponent, + AppSidebarNavLinkComponent, + AppSidebarNavTitleComponent +]; diff --git a/src/app/components/app-sidebar-nav/index.ts b/src/app/components/app-sidebar-nav/index.ts new file mode 100644 index 0000000..958932a --- /dev/null +++ b/src/app/components/app-sidebar-nav/index.ts @@ -0,0 +1 @@ +export * from './app-sidebar-nav.component'; diff --git a/src/app/components/app-sidebar/app-sidebar.component.html b/src/app/components/app-sidebar/app-sidebar.component.html new file mode 100644 index 0000000..ac0dda4 --- /dev/null +++ b/src/app/components/app-sidebar/app-sidebar.component.html @@ -0,0 +1,7 @@ + diff --git a/src/app/components/app-sidebar/app-sidebar.component.ts b/src/app/components/app-sidebar/app-sidebar.component.ts new file mode 100644 index 0000000..7f5065c --- /dev/null +++ b/src/app/components/app-sidebar/app-sidebar.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-sidebar', + templateUrl: './app-sidebar.component.html' +}) +export class AppSidebarComponent { } diff --git a/src/app/components/app-sidebar/index.ts b/src/app/components/app-sidebar/index.ts new file mode 100644 index 0000000..173dc43 --- /dev/null +++ b/src/app/components/app-sidebar/index.ts @@ -0,0 +1 @@ +export * from './app-sidebar.component'; diff --git a/src/app/components/index.ts b/src/app/components/index.ts new file mode 100644 index 0000000..9980de0 --- /dev/null +++ b/src/app/components/index.ts @@ -0,0 +1,10 @@ +export * from './app-aside'; +export * from './app-breadcrumbs'; +export * from './app-footer'; +export * from './app-header'; +export * from './app-sidebar'; +export * from './app-sidebar-footer'; +export * from './app-sidebar-form'; +export * from './app-sidebar-header'; +export * from './app-sidebar-minimizer'; +export * from './app-sidebar-nav'; diff --git a/src/app/containers/full-layout/full-layout.component.html b/src/app/containers/full-layout/full-layout.component.html new file mode 100644 index 0000000..93e3f31 --- /dev/null +++ b/src/app/containers/full-layout/full-layout.component.html @@ -0,0 +1,16 @@ + +
    + + +
    + + +
    + +
    +
    + +
    + diff --git a/src/app/containers/full-layout/full-layout.component.ts b/src/app/containers/full-layout/full-layout.component.ts new file mode 100644 index 0000000..753518c --- /dev/null +++ b/src/app/containers/full-layout/full-layout.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-dashboard', + templateUrl: './full-layout.component.html' +}) +export class FullLayoutComponent { } diff --git a/src/app/containers/full-layout/index.ts b/src/app/containers/full-layout/index.ts new file mode 100644 index 0000000..315223d --- /dev/null +++ b/src/app/containers/full-layout/index.ts @@ -0,0 +1 @@ +export * from './full-layout.component'; diff --git a/src/app/containers/index.ts b/src/app/containers/index.ts new file mode 100644 index 0000000..b917dd1 --- /dev/null +++ b/src/app/containers/index.ts @@ -0,0 +1,2 @@ +export * from './full-layout'; +export * from './simple-layout'; diff --git a/src/app/containers/simple-layout/index.ts b/src/app/containers/simple-layout/index.ts new file mode 100644 index 0000000..6510703 --- /dev/null +++ b/src/app/containers/simple-layout/index.ts @@ -0,0 +1 @@ +export * from './simple-layout.component'; diff --git a/src/app/containers/simple-layout/simple-layout.component.html b/src/app/containers/simple-layout/simple-layout.component.html new file mode 100644 index 0000000..e69de29 diff --git a/src/app/containers/simple-layout/simple-layout.component.ts b/src/app/containers/simple-layout/simple-layout.component.ts new file mode 100644 index 0000000..90cca2e --- /dev/null +++ b/src/app/containers/simple-layout/simple-layout.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-dashboard', + template: '', +}) +export class SimpleLayoutComponent { } diff --git a/src/app/data/AnnounceData.ts b/src/app/data/AnnounceData.ts new file mode 100644 index 0000000..fcc4de3 --- /dev/null +++ b/src/app/data/AnnounceData.ts @@ -0,0 +1,10 @@ +export class AnnounceData { + Id: string; + Title: string; + Content: string; + StartOn: string; + EndtOn: string; + Status: number; + + constructor() {} +} diff --git a/src/app/data/ApiTableData.ts b/src/app/data/ApiTableData.ts new file mode 100644 index 0000000..2ea0001 --- /dev/null +++ b/src/app/data/ApiTableData.ts @@ -0,0 +1,12 @@ +export class ApiTableData { + Id: number; + Timestamp: any; + Trendflags: number; + Status: number; + Value: string; + Trendflags_Tag: string; + Status_tag: string; + Time: string; + + constructor() {} +} diff --git a/src/app/data/CarData.ts b/src/app/data/CarData.ts new file mode 100644 index 0000000..20ff77d --- /dev/null +++ b/src/app/data/CarData.ts @@ -0,0 +1,6 @@ +export class CarData { + vehicleType: string; + vehicleNumber: string + + constructor() {} +} diff --git a/src/app/data/CompanyInformationData.ts b/src/app/data/CompanyInformationData.ts new file mode 100644 index 0000000..b088f00 --- /dev/null +++ b/src/app/data/CompanyInformationData.ts @@ -0,0 +1,8 @@ +export class CompanyInformationData { + id: number; + companyCode: string; + companyName: string; + email: string; + + constructor() {} +} diff --git a/src/app/data/EventCountIntervalData.ts b/src/app/data/EventCountIntervalData.ts new file mode 100644 index 0000000..fdca792 --- /dev/null +++ b/src/app/data/EventCountIntervalData.ts @@ -0,0 +1,10 @@ +export class EventCountIntervalData { + PunishedCount: number; + CheckPunishedCount: number; + RejectedCount: number; + NoStatusCount: number; + NoPunishedCount: number; + + + constructor() {} +} diff --git a/src/app/data/EventData.ts b/src/app/data/EventData.ts new file mode 100644 index 0000000..4694cdb --- /dev/null +++ b/src/app/data/EventData.ts @@ -0,0 +1,9 @@ +export class EventData { + Id: string; + Number: string; + SiteName: string; + EventName: string; + InTime: string; + Status: string; + constructor() {} +} diff --git a/src/app/data/EventTypeReportData.ts b/src/app/data/EventTypeReportData.ts new file mode 100644 index 0000000..6032025 --- /dev/null +++ b/src/app/data/EventTypeReportData.ts @@ -0,0 +1,9 @@ +export class EventTypeReportData { + StartDate: string; + EndDate: string; + StartTime: number; + EndTime: number; + Sites: any; + + constructor() {} +} diff --git a/src/app/data/GroupData.ts b/src/app/data/GroupData.ts new file mode 100644 index 0000000..12780c7 --- /dev/null +++ b/src/app/data/GroupData.ts @@ -0,0 +1,8 @@ +export class GroupData { + Id: number; + StationName: string; + Area: string; + CreatorId: string; + CreatedOn: string; + constructor() {} +} diff --git a/src/app/data/LoginData.ts b/src/app/data/LoginData.ts new file mode 100644 index 0000000..a97dad4 --- /dev/null +++ b/src/app/data/LoginData.ts @@ -0,0 +1,5 @@ +export class LoginData { + Account: string; + Password: string; + constructor() {} +} diff --git a/src/app/data/MalfunctionData.ts b/src/app/data/MalfunctionData.ts new file mode 100644 index 0000000..b1e71fd --- /dev/null +++ b/src/app/data/MalfunctionData.ts @@ -0,0 +1,9 @@ +export class MalfunctionData { + StartDate: string; + EndDate: string; + StartTime: number; + EndTime: number; + Sites: any; + + constructor() {} +} diff --git a/src/app/data/NewPwdMailData.ts b/src/app/data/NewPwdMailData.ts new file mode 100644 index 0000000..349730a --- /dev/null +++ b/src/app/data/NewPwdMailData.ts @@ -0,0 +1,8 @@ +export class NewPwdMailData { + MailFrom: string; + MailTo_Acct: String; + MailTo_Add: String; + MailSub: String; + MailBody: string; + constructor() {} +} diff --git a/src/app/data/PageData.ts b/src/app/data/PageData.ts new file mode 100644 index 0000000..1a7852b --- /dev/null +++ b/src/app/data/PageData.ts @@ -0,0 +1,7 @@ +export class PageData { + Id: string; + PageModule: string; + PageName: String; + PageUrl: String; + constructor() {} +} diff --git a/src/app/data/PremissionData.ts b/src/app/data/PremissionData.ts new file mode 100644 index 0000000..7e0dc20 --- /dev/null +++ b/src/app/data/PremissionData.ts @@ -0,0 +1,6 @@ +export class PremissionData { + RoleId: Number; + PageId: Number; + Enable: boolean; + constructor() {} +} diff --git a/src/app/data/PunishQueryData.ts b/src/app/data/PunishQueryData.ts new file mode 100644 index 0000000..05b0756 --- /dev/null +++ b/src/app/data/PunishQueryData.ts @@ -0,0 +1,9 @@ +export class PunishQueryData { + site: string; + status: string; + time: string; + speed: string; + method: string; + + constructor() {} +} diff --git a/src/app/data/ReasonData.ts b/src/app/data/ReasonData.ts new file mode 100644 index 0000000..edc85be --- /dev/null +++ b/src/app/data/ReasonData.ts @@ -0,0 +1,8 @@ +export class ReasonData { + Id: number; + EventTypeId: number; + NotPunishType: number; + NotPunishReason: string; + + constructor() {} +} diff --git a/src/app/data/RepairData.ts b/src/app/data/RepairData.ts new file mode 100644 index 0000000..e970ac7 --- /dev/null +++ b/src/app/data/RepairData.ts @@ -0,0 +1,7 @@ +export class RepairData { + questionType: number; + sendTo: string; + title: string; + content: string; + constructor() {} +} diff --git a/src/app/data/ReportSiteEventTypesData.ts b/src/app/data/ReportSiteEventTypesData.ts new file mode 100644 index 0000000..91dab18 --- /dev/null +++ b/src/app/data/ReportSiteEventTypesData.ts @@ -0,0 +1,6 @@ +export class ReportSiteEventTypesData { + eachEventTypesSiteViewModel: any; + eachSiteEventTypesViewModel: any; + + constructor() {} +} diff --git a/src/app/data/RoleData.ts b/src/app/data/RoleData.ts new file mode 100644 index 0000000..b1d6ba6 --- /dev/null +++ b/src/app/data/RoleData.ts @@ -0,0 +1,9 @@ +export class RoleData { + Id: string; + RoleID: string; + RoleName: string; + ProgramUrlID: string; + CreatorId: string; + CreatedOn: string; + constructor() {} +} diff --git a/src/app/data/SiteEventTypesData.ts b/src/app/data/SiteEventTypesData.ts new file mode 100644 index 0000000..e913df1 --- /dev/null +++ b/src/app/data/SiteEventTypesData.ts @@ -0,0 +1,8 @@ +export class SiteEventTypesData { + StartTime: string; + EndTime: string; + Sites: any; + EventTypes: any; + + constructor() {} +} diff --git a/src/app/data/SiteInformationData.ts b/src/app/data/SiteInformationData.ts new file mode 100644 index 0000000..a3bb805 --- /dev/null +++ b/src/app/data/SiteInformationData.ts @@ -0,0 +1,31 @@ +export class SiteInformationData { + Id: number; + Country: string; + Area: string; + SiteID: string; + SiteName: string; + EventType: string; + Laws: string; + CompanyCode: string; + + constructor() {} +} + + +export class AreaArrayData { + Area: string; + IsChecked: boolean; + + constructor() {} +} + +export class SiteData { + Id: number; + SiteId: string; + SiteName: string + + constructor() {} +} + + + diff --git a/src/app/data/TableQueryData.ts b/src/app/data/TableQueryData.ts new file mode 100644 index 0000000..04b9dad --- /dev/null +++ b/src/app/data/TableQueryData.ts @@ -0,0 +1,9 @@ +export class TableQueryData { + Term?: string; + Page?: number; + CurrentPage?: number; + PageSize?: number; + Order?: string; + IsAsc?: string; + constructor() {} +} diff --git a/src/app/data/UserData.ts b/src/app/data/UserData.ts new file mode 100644 index 0000000..4383559 --- /dev/null +++ b/src/app/data/UserData.ts @@ -0,0 +1,17 @@ +export class UserData { + Id: string; + Account: string; + UserName: string; + PassWord: string; + newPassWord: string; + checkNewPassword: string; + Email: string; + PhoneNumber: string; + Status: boolean; + RoleCode_Id: string; + GroupCode_Id: string; + CreatorId: string; + CreatedOn: Date; + Site_Id: any; + constructor() {} +} diff --git a/src/app/directives/aside/aside.directive.ts b/src/app/directives/aside/aside.directive.ts new file mode 100644 index 0000000..b3cc471 --- /dev/null +++ b/src/app/directives/aside/aside.directive.ts @@ -0,0 +1,17 @@ +import { Directive, HostListener } from '@angular/core'; + +/** +* Allows the aside to be toggled via click. +*/ +@Directive({ + selector: '[appAsideMenuToggler]', +}) +export class AsideToggleDirective { + constructor() { } + + @HostListener('click', ['$event']) + toggleOpen($event: any) { + $event.preventDefault(); + document.querySelector('body').classList.toggle('aside-menu-hidden'); + } +} diff --git a/src/app/directives/aside/index.ts b/src/app/directives/aside/index.ts new file mode 100644 index 0000000..3b84b70 --- /dev/null +++ b/src/app/directives/aside/index.ts @@ -0,0 +1 @@ +export * from './aside.directive'; diff --git a/src/app/directives/equal-validator/equal-validator.directive.ts b/src/app/directives/equal-validator/equal-validator.directive.ts new file mode 100644 index 0000000..30c978c --- /dev/null +++ b/src/app/directives/equal-validator/equal-validator.directive.ts @@ -0,0 +1,58 @@ +import { Directive, forwardRef, Attribute } from "@angular/core"; +import { Validator, AbstractControl, NG_VALIDATORS } from "@angular/forms"; + +@Directive({ + selector: + // tslint:disable-next-line:directive-selector + "[validateEqual][formControlName],[validateEqual][formControl],[validateEqual][ngModel]", + providers: [ + { + provide: NG_VALIDATORS, + useExisting: forwardRef(() => EqualValidator), + multi: true + } + ] +}) +export class EqualValidator implements Validator { + constructor( + @Attribute("validateEqual") public validateEqual: string, + @Attribute("reverse") public reverse: string + ) {} + + private get isReverse() { + // tslint:disable-next-line:curly + if (!this.reverse) return false; + return this.reverse === "true" ? true : false; + } + + validate(c: AbstractControl): { [key: string]: any } { + // self value + // tslint:disable-next-line:prefer-const + let v = c.value; + + // control vlaue + // tslint:disable-next-line:prefer-const + let e = c.root.get(this.validateEqual); + + // value not equal + if (e && v !== e.value && !this.isReverse) { + return { + validateEqual: false + }; + } + + // value equal and reverse + if (e && v === e.value && this.isReverse) { + delete e.errors["validateEqual"]; + // tslint:disable-next-line:curly + if (!Object.keys(e.errors).length) e.setErrors(null); + } + + // value not equal and reverse + if (e && v !== e.value && this.isReverse) { + e.setErrors({ validateEqual: false }); + } + + return null; + } +} diff --git a/src/app/directives/equal-validator/index.ts b/src/app/directives/equal-validator/index.ts new file mode 100644 index 0000000..6698d5b --- /dev/null +++ b/src/app/directives/equal-validator/index.ts @@ -0,0 +1 @@ +export * from "./equal-validator.directive"; diff --git a/src/app/directives/field-match/field-match.directive.ts b/src/app/directives/field-match/field-match.directive.ts new file mode 100644 index 0000000..f30c5b5 --- /dev/null +++ b/src/app/directives/field-match/field-match.directive.ts @@ -0,0 +1,49 @@ +import { Directive, Input, OnChanges, SimpleChanges } from "@angular/core"; +import { + AbstractControl, + NG_VALIDATORS, + NgModel, + ValidationErrors, + Validator, + ValidatorFn, + Validators +} from "@angular/forms"; + +@Directive({ + // tslint:disable-next-line:directive-selector + selector: "[fieldMatches]", + providers: [ + { + provide: NG_VALIDATORS, + useExisting: FieldMatchesValidatorDirective, + multi: true + } + ] +}) +export class FieldMatchesValidatorDirective implements Validator, OnChanges { + @Input() fieldMatches: NgModel; + + private validationFunction = Validators.nullValidator; + + ngOnChanges(changes: SimpleChanges): void { + const change = changes["fieldMatches"]; + if (change) { + const otherFieldModel = change.currentValue; + this.validationFunction = fieldMatchesValidator(otherFieldModel); + } else { + this.validationFunction = Validators.nullValidator; + } + } + + validate(control: AbstractControl): ValidationErrors | any { + return this.validationFunction(control); + } +} + +export function fieldMatchesValidator(otherFieldModel: NgModel): ValidatorFn { + return (control: AbstractControl): ValidationErrors => { + return control.value === otherFieldModel.value + ? null + : { fieldMatches: { match: false } }; + }; +} diff --git a/src/app/directives/field-match/index.ts b/src/app/directives/field-match/index.ts new file mode 100644 index 0000000..53844f1 --- /dev/null +++ b/src/app/directives/field-match/index.ts @@ -0,0 +1 @@ +export * from "./field-match.directive"; diff --git a/src/app/directives/index.ts b/src/app/directives/index.ts new file mode 100644 index 0000000..4f97b95 --- /dev/null +++ b/src/app/directives/index.ts @@ -0,0 +1,6 @@ +export * from "./aside"; +export * from "./nav-dropdown"; +export * from "./replace"; +export * from "./sidebar"; +export * from "./field-match"; +export * from "./equal-validator"; diff --git a/src/app/directives/nav-dropdown/index.ts b/src/app/directives/nav-dropdown/index.ts new file mode 100644 index 0000000..3eb0787 --- /dev/null +++ b/src/app/directives/nav-dropdown/index.ts @@ -0,0 +1 @@ +export * from './nav-dropdown.directive'; diff --git a/src/app/directives/nav-dropdown/nav-dropdown.directive.ts b/src/app/directives/nav-dropdown/nav-dropdown.directive.ts new file mode 100644 index 0000000..98c827d --- /dev/null +++ b/src/app/directives/nav-dropdown/nav-dropdown.directive.ts @@ -0,0 +1,31 @@ +import { Directive, HostListener, ElementRef } from '@angular/core'; + +@Directive({ + selector: '[appNavDropdown]' +}) +export class NavDropdownDirective { + + constructor(private el: ElementRef) { } + + toggle() { + this.el.nativeElement.classList.toggle('open'); + } +} + +/** +* Allows the dropdown to be toggled via click. +*/ +@Directive({ + selector: '[appNavDropdownToggle]' +}) +export class NavDropdownToggleDirective { + constructor(private dropdown: NavDropdownDirective) {} + + @HostListener('click', ['$event']) + toggleOpen($event: any) { + $event.preventDefault(); + this.dropdown.toggle(); + } +} + +export const NAV_DROPDOWN_DIRECTIVES = [NavDropdownDirective, NavDropdownToggleDirective]; diff --git a/src/app/directives/replace/index.ts b/src/app/directives/replace/index.ts new file mode 100644 index 0000000..8720adf --- /dev/null +++ b/src/app/directives/replace/index.ts @@ -0,0 +1 @@ +export * from './replace.directive'; diff --git a/src/app/directives/replace/replace.directive.ts b/src/app/directives/replace/replace.directive.ts new file mode 100644 index 0000000..d5ca81e --- /dev/null +++ b/src/app/directives/replace/replace.directive.ts @@ -0,0 +1,22 @@ +import { Directive, ElementRef, OnInit } from '@angular/core'; + +@Directive({ + // tslint:disable-next-line:max-line-length + selector: '[appHostReplace], app-aside, app-breadcrumbs, app-footer, app-header, app-sidebar, app-sidebar-footer, app-sidebar-form, app-sidebar-header, app-sidebar-minimizer, app-sidebar-nav, app-sidebar-nav-dropdown, app-sidebar-nav-item, app-sidebar-nav-link, app-sidebar-nav-title' +}) +export class ReplaceDirective implements OnInit { + + constructor(private el: ElementRef) { } + + // wait for the component to render completely + ngOnInit() { + const nativeElement: HTMLElement = this.el.nativeElement; + const parentElement: HTMLElement = nativeElement.parentElement; + // move all children out of the element + while (nativeElement.firstChild) { + parentElement.insertBefore(nativeElement.firstChild, nativeElement); + } + // remove the empty element(the host) + parentElement.removeChild(nativeElement); + } +} diff --git a/src/app/directives/sidebar/index.ts b/src/app/directives/sidebar/index.ts new file mode 100644 index 0000000..aeb5775 --- /dev/null +++ b/src/app/directives/sidebar/index.ts @@ -0,0 +1 @@ +export * from './sidebar.directive'; diff --git a/src/app/directives/sidebar/sidebar.directive.ts b/src/app/directives/sidebar/sidebar.directive.ts new file mode 100644 index 0000000..956465b --- /dev/null +++ b/src/app/directives/sidebar/sidebar.directive.ts @@ -0,0 +1,106 @@ +import { Directive, HostListener } from '@angular/core'; + +/** +* Allows the sidebar to be toggled via click. +*/ +@Directive({ + selector: '[appSidebarToggler]' +}) +export class SidebarToggleDirective { + constructor() { } + + @HostListener('click', ['$event']) + toggleOpen($event: any) { + $event.preventDefault(); + document.querySelector('body').classList.toggle('sidebar-hidden'); + } +} + +@Directive({ + selector: '[appSidebarMinimizer]' +}) +export class SidebarMinimizeDirective { + constructor() { } + + @HostListener('click', ['$event']) + toggleOpen($event: any) { + $event.preventDefault(); + document.querySelector('body').classList.toggle('sidebar-minimized'); + } +} + +@Directive({ + selector: '[appBrandMinimizer]' +}) +export class BrandMinimizeDirective { + constructor() { } + + @HostListener('click', ['$event']) + toggleOpen($event: any) { + $event.preventDefault(); + document.querySelector('body').classList.toggle('brand-minimized'); + } +} + +@Directive({ + selector: '[appMobileSidebarToggler]' +}) +export class MobileSidebarToggleDirective { + constructor() { } + + // Check if element has class + private hasClass(target: any, elementClassName: string) { + return new RegExp('(\\s|^)' + elementClassName + '(\\s|$)').test(target.className); + } + + @HostListener('click', ['$event']) + toggleOpen($event: any) { + $event.preventDefault(); + document.querySelector('body').classList.toggle('sidebar-mobile-show'); + } +} + +/** +* Allows the off-canvas sidebar to be closed via click. +*/ +@Directive({ + selector: '[appSidebarClose]' +}) +export class SidebarOffCanvasCloseDirective { + constructor() { } + + // Check if element has class + private hasClass(target: any, elementClassName: string) { + return new RegExp('(\\s|^)' + elementClassName + '(\\s|$)').test(target.className); + } + + // Toggle element class + private toggleClass(elem: any, elementClassName: string) { + let newClass = ' ' + elem.className.replace( /[\t\r\n]/g, ' ' ) + ' '; + if (this.hasClass(elem, elementClassName)) { + while (newClass.indexOf(' ' + elementClassName + ' ') >= 0 ) { + newClass = newClass.replace( ' ' + elementClassName + ' ' , ' ' ); + } + elem.className = newClass.replace(/^\s+|\s+$/g, ''); + } else { + elem.className += ' ' + elementClassName; + } + } + + @HostListener('click', ['$event']) + toggleOpen($event: any) { + $event.preventDefault(); + + if (this.hasClass(document.querySelector('body'), 'sidebar-off-canvas')) { + this.toggleClass(document.querySelector('body'), 'sidebar-opened'); + } + } +} + +export const SIDEBAR_TOGGLE_DIRECTIVES = [ + SidebarToggleDirective, + SidebarMinimizeDirective, + BrandMinimizeDirective, + SidebarOffCanvasCloseDirective, + MobileSidebarToggleDirective +]; diff --git a/src/app/pipe/filter.pipe.ts b/src/app/pipe/filter.pipe.ts new file mode 100644 index 0000000..b22f4d1 --- /dev/null +++ b/src/app/pipe/filter.pipe.ts @@ -0,0 +1,27 @@ +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({ + name: 'filter' +}) +export class FilterPipe implements PipeTransform { + + transform(items: any[], searchText: string, fieldName: string): any[] { + + // return empty array if array is falsy + if (!items) { return []; } + + // return the original array if search text is empty + if (!searchText) { return items; } + + // convert the searchText to lower case + searchText = searchText.toLowerCase(); + + // retrun the filtered array + return items.filter(item => { + if (item && item[fieldName]) { + return item[fieldName].toLowerCase().includes(searchText); + } + return false; + }); + } +} diff --git a/src/app/service/board-data.service.ts b/src/app/service/board-data.service.ts new file mode 100644 index 0000000..f2d006b --- /dev/null +++ b/src/app/service/board-data.service.ts @@ -0,0 +1,278 @@ +import { Injectable } from "@angular/core"; +import { HttpService } from "app/service/http.service"; +import { Http, Headers, Response, RequestOptions } from "@angular/http"; +// tslint:disable-next-line:import-blacklist +import { Observable } from "rxjs"; +import "rxjs/add/operator/map"; +import "rxjs/add/operator/catch"; +import { TableQueryData } from "../data/TableQueryData"; +import { AnnounceData } from "app/data/AnnounceData"; +import { CarData } from "app/data/CarData"; +import { SiteEventTypesData } from "app/data/SiteEventTypesData"; +import { MalfunctionData } from "app/data/MalfunctionData"; +import { EventTypeReportData } from "app/data/EventTypeReportData"; + +@Injectable() +export class BoardDataService { + constructor(private httpService: HttpService) {} + + postAnnounceData(announceData: AnnounceData): Observable { + return ( + this.httpService + .post("/announce", announceData) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + getAnnouncePageList(tableQueryData: TableQueryData): Observable { + let query = + "?term=" + (tableQueryData.Term ? tableQueryData.Term : "") + "&"; + query += "page=" + (tableQueryData.Page ? tableQueryData.Page : "") + "&"; + query += + "order=" + (tableQueryData.Order ? tableQueryData.Order : "") + "&"; + query += + "isAsc=" + (tableQueryData.IsAsc ? tableQueryData.IsAsc : "") + "&"; + return this.httpService + .get("/announce" + query) + .catch(this.handleErrorObservable); + } + + deleteAnnounceData(id: string): Observable { + return ( + this.httpService + .delete("/announce/" + id) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + + putAnnounceData(announceData: AnnounceData): Observable { + return ( + this.httpService + .put("/announce/" + announceData.Id, announceData) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + + getEventPageList(tableQueryData: TableQueryData): Observable { + let query = + "?term=" + (tableQueryData.Term ? tableQueryData.Term : "") + "&"; + query += "page=" + (tableQueryData.Page ? tableQueryData.Page : "") + "&"; + query += + "order=" + (tableQueryData.Order ? tableQueryData.Order : "") + "&"; + query += + "isAsc=" + (tableQueryData.IsAsc ? tableQueryData.IsAsc : "") + "&"; + return this.httpService + .get("/event" + query) + .catch(this.handleErrorObservable); + } + + getEventCountByThisYear(): Observable { + return ( + this.httpService + .get("/event/count/thisYear") + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + getEventCountByThisMonth(): Observable { + return ( + this.httpService + .get("/event/count/thisMonth") + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + + getEventCountByInterval(startDatetime: string, endDatetime: string): Observable { + return ( + this.httpService + .get("/event/count/interval?startDatetime=" + startDatetime + "&endDatetime=" + endDatetime) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + getSiteMalfunctionInformation(): Observable { + return this.httpService + .get("/malfunction") + // .map(this.extractData) + .catch(this.handleErrorObservable); + } + + getPunishEvent(eventType: string, startTime: string, endTime: string, site: string, status: string, time: string, speed: string, method: string): Observable { + let query = + "?startTime=" + (startTime ? startTime : "") + "&"; + query += "endTime=" + (endTime ? endTime : "") + "&"; + query += "site=" + (site ? site : "") + "&"; + query += "status=" + (status ? status : "") + "&"; + query += "time=" + (time ? time : "") + "&"; + query += "speed=" + (speed ? speed : "") + "&"; + query += "method=" + (method ? method : ""); + + return ( + this.httpService + .get("/event/eventType/" + eventType + query) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + + + getPunishEventExport(eventType: string, startTime: string, endTime: string, site: string, status: string, time: string, speed: string, method: string): Observable { + let query = + "?startTime=" + (startTime ? startTime : "") + "&"; + query += "endTime=" + (endTime ? endTime : "") + "&"; + query += "site=" + (site ? site : "") + "&"; + query += "status=" + (status ? status : "") + "&"; + query += "time=" + (time ? time : "") + "&"; + query += "speed=" + (speed ? speed : "") + "&"; + query += "method=" + (method ? method : ""); + + return ( + this.httpService + .getDownload("/event/eventType/" + eventType + query) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + putCheckPunish(eventId: number, law: string): Observable { + return ( + this.httpService + .put("/event/" + eventId + "/checkPunish?law=" + law, null) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + + putMuticheckPunish(law: string, eventId: any): Observable { + const query = "?law=" + (law ? law : ""); + + return ( + this.httpService + .put("/event/muti/checkPunish" + query, eventId) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + putNopunish(eventId: number, reason: string): Observable { + return ( + this.httpService + .put("/event/" + eventId + "/nopunish?reason=" + reason, null) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + + + putCancel(eventId: number): Observable { + return ( + this.httpService + .put("/event/" + eventId + "/cancel", null) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + getNotPunishReasonAll(): Observable { + return this.httpService + .get("/notPunish/all") + // .map(this.extractData) + .catch(this.handleErrorObservable); + } + + + getEventById(id: string): Observable { + return this.httpService + .get("/event/" + id) + // .map(this.extractData) + .catch(this.handleErrorObservable); + } + + putEventVehicle(eventId: number, vehicleType: string, vehicleNumber: string): Observable { + let query = + "?vehicleType=" + (vehicleType ? vehicleType : "") + "&"; + query += "vehicleNumber=" + (vehicleNumber ? vehicleNumber : ""); + return ( + this.httpService + .put("/event/" + eventId + "/vehicle" + query, null) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + postReportSiteEventTypes(method: string, siteEventTypesData: SiteEventTypesData): Observable { + return ( + this.httpService + .post("/report/site/eventTypes?method=" + method, siteEventTypesData) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + + postReportMalfunction(method: string, malfunctionData: MalfunctionData): Observable { + return ( + this.httpService + .post("/report/malfunction?method=" + method, malfunctionData) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + postReportEventType1(method: string, eventTypeData: EventTypeReportData): Observable { + return ( + this.httpService + .post("/report/eventType/1?method=" + method, eventTypeData) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + postReportEventType2(method: string, eventTypeData: EventTypeReportData): Observable { + return ( + this.httpService + .post("/report/eventType/2?method=" + method, eventTypeData) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + postReportEventType34(method: string, eventTypeData: EventTypeReportData): Observable { + return ( + this.httpService + .post("/report/eventType/34?method=" + method, eventTypeData) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + postReportEventType6(method: string, eventTypeData: EventTypeReportData): Observable { + return ( + this.httpService + .post("/report/eventType/6?method=" + method, eventTypeData) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + private extractData(res: Response) { + const body = res.json(); + return body.Result || []; + } + private handleErrorObservable(error: Response | any) { + console.error(error.message || error); + return Observable.throw(error.message || error); + } +} diff --git a/src/app/service/helper.service.ts b/src/app/service/helper.service.ts new file mode 100644 index 0000000..0bc6ba6 --- /dev/null +++ b/src/app/service/helper.service.ts @@ -0,0 +1,116 @@ +import { Injectable } from "@angular/core"; +import { Component, OnInit } from "@angular/core"; +import { Http, Headers } from "@angular/http"; +@Injectable() +export class HelperService { + status: any[]; + failureInfo: any[]; + lightNo: any[]; + RoleCode: any[]; + RolePermission: any[]; + UserCode: any[]; + GroupCode: any[]; + VillageInfo: any[]; + FinishedInfo: any[]; + MaintenanceProviderInfo: any[]; + _token = ""; + _role = ""; + _id = ""; + _permissions: string[] = []; + // _url = "https://localhost:44306/api"; + + _url = "https://172.16.1.49:8443/violation/api"; + // _url = "https://carviolation.tycg.gov.tw:8443/violation/api"; + + + constructor(private http: Http) { + this.setToken(localStorage.getItem("token")), + this.setPermission(JSON.parse(localStorage.getItem("pages"))), + this.setRole(JSON.parse(localStorage.getItem("role"))); + } + + setToken(token) { + this._token = token; + } + + setRole(role) { + this._role = role; + } + + setId(id) { + this._id = id; + } + + setPermission(permissions) { + this._permissions = permissions; + } + + createAuthorizationHeader(headers: Headers) { + if (this._token) { + headers.append("Authorization", "Bearer " + this._token); + } + } + + setRoleCodeData() { + const headers = new Headers(); + this.createAuthorizationHeader(headers); + this.http.get(this._url + "/Role/GetRoleInfoList", { headers: headers }).subscribe(res => { + this.RoleCode = res.json().Result; + }); + } + + setUserCodeData() { + const headers = new Headers(); + this.createAuthorizationHeader(headers); + this.http.get(this._url + "/User/GetUserNameList", { headers: headers }).subscribe(res => { + this.UserCode = res.json().Result; + }); + } + + setGroupName() { + const headers = new Headers(); + this.createAuthorizationHeader(headers); + this.http.get(this._url + "/Group/GetGroupNameList", { headers: headers }).subscribe(res => { + this.GroupCode = res.json().Result; + }); + } + + getStatusText(id: number) { + return this.status.filter(x => x.Id === id)[0].StatusName; + } + + getFailureText(id: number) { + return this.failureInfo.filter(x => x.Id === id)[0].FailureInfo; + } + + getRoleCodeText(id: number) { + return this.RoleCode.filter(x => x.Id === id)[0].RoleName; + } + + getUserCodeText(id: number) { + const users = this.UserCode.filter(x => x.Id === id); + if (users && users.length > 0) { + return users[0].UserName; + } + } + + getGroupCodeText(id: number) { + return this.GroupCode.filter(x => x.Id === id)[0].StationName; + } + + getVillageCodeText(villageNo: number) { + const villages = this.VillageInfo.filter(x => x.VillageNo === villageNo); + if (villages && villages.length > 0) { + return villages[0].VillageName; + } + } + + getFinishedCodeText(id: number) { + return this.FinishedInfo.filter(x => x.id === id)[0].FinishedItem; + } + + getMaintenanceProviderInfo(id: number) { + console.log(id); + return this.MaintenanceProviderInfo.filter(x => x.id === id)[0].ProviderName; + } +} diff --git a/src/app/service/http.service.ts b/src/app/service/http.service.ts new file mode 100644 index 0000000..7caf9c0 --- /dev/null +++ b/src/app/service/http.service.ts @@ -0,0 +1,90 @@ +import { Injectable } from "@angular/core"; +import { Http, Headers, ResponseContentType } from "@angular/http"; + +@Injectable() +export class HttpService { + // _url = "https://localhost:44306/api"; + + _url = "https://172.16.1.49:8443/violation/api"; + // _url = "https://carviolation.tycg.gov.tw:8443/violation/api"; + + _token = ""; + _role = ""; + _id = ""; + _permissions: string[] = []; + blob: Blob; + constructor(private http: Http) { + this.setToken(localStorage.getItem("token")), + this.setPermission(JSON.parse(localStorage.getItem("pages"))), + this.setRole(JSON.parse(localStorage.getItem("role"))); + } + + createAuthorizationHeader(headers: Headers) { + if (this._token) { + headers.append("Authorization", "Bearer " + this._token); + } + } + + setToken(token) { + this._token = token; + } + + setRole(role) { + this._role = role; + } + + setId(id) { + this._id = id; + } + + setPermission(permissions) { + this._permissions = permissions; + } + isAvailableLink(link) { + return this._permissions.indexOf(link) > -1; + } + + get(path) { + const fullPath = `${this._url}${path}`; + const headers = new Headers(); + this.createAuthorizationHeader(headers); + return this.http.get(fullPath, { headers: headers }); + } + + getDownload(path) { + const fullPath = `${this._url}${path}`; + const headers = new Headers(); + this.createAuthorizationHeader(headers); + return this.http.get(fullPath, { headers: headers } ); + } + + post(path, data) { + const fullPath = `${this._url}${path}`; + const headers = new Headers(); + this.createAuthorizationHeader(headers); + return this.http.post(fullPath, data, { headers: headers }); + } + + put(path, data) { + const fullPath = `${this._url}${path}`; + const headers = new Headers(); + this.createAuthorizationHeader(headers); + headers.append("Content-Type", "application/json"); + return this.http.put(fullPath, data, { headers: headers }); + } + + delete(path) { + const fullPath = `${this._url}${path}`; + const headers = new Headers(); + this.createAuthorizationHeader(headers); + headers.append("Content-Type", "application/json"); + return this.http.delete(fullPath, { headers: headers }); + } + + upload(path, file: FormData) { + const fullPath = `${this._url}${path}`; + const headers = new Headers(); + this.createAuthorizationHeader(headers); + return this.http.post(fullPath, file, { headers: headers }); + } +} diff --git a/src/app/service/login.service.ts b/src/app/service/login.service.ts new file mode 100644 index 0000000..15defdf --- /dev/null +++ b/src/app/service/login.service.ts @@ -0,0 +1,49 @@ +import { Injectable } from "@angular/core"; +import { Http, Headers, Response, RequestOptions } from "@angular/http"; +// tslint:disable-next-line:import-blacklist +import { Observable } from "rxjs"; +import "rxjs/add/operator/map"; +import "rxjs/add/operator/catch"; +import { LoginData } from "app/data/LoginData"; +import { HttpService } from "./http.service"; + +@Injectable() +export class LoginService { + constructor(private httpService: HttpService) {} + + postLoginForm(loginData: LoginData): Observable { + return this.httpService.post("/Login/PostLogin", loginData); + } + + set token(token) { + this.httpService._token = token; + } + + set role(role) { + this.httpService._role = role; + } + + set id(id) { + this.httpService._id = id; + } + + set permissions(permissions) { + this.httpService._permissions = permissions + .filter(p => p.Enable) + .map(p => `/${p.PageUrl}`); + localStorage.setItem( + "pages", + JSON.stringify(this.httpService._permissions) + ); + } + + logout() { + this.httpService._token = ""; + localStorage.removeItem("id"); + localStorage.removeItem("role"); + localStorage.removeItem("token"); + localStorage.removeItem("name"); + localStorage.removeItem("pages"); + localStorage.removeItem("password"); + } +} diff --git a/src/app/service/mro-data.service.ts b/src/app/service/mro-data.service.ts new file mode 100644 index 0000000..bc46cef --- /dev/null +++ b/src/app/service/mro-data.service.ts @@ -0,0 +1,57 @@ +import { Observable } from "rxjs/Observable"; +import { Injectable } from "@angular/core"; +import { HttpService } from "app/service/http.service"; +import { Http, Headers, Response, RequestOptions } from "@angular/http"; +import "rxjs/add/operator/map"; +import "rxjs/add/operator/catch"; +import { RepairData } from "app/data/RepairData"; +import { TableQueryData } from "../data/TableQueryData"; + +@Injectable() +export class MroDataService { + constructor(private httpService: HttpService) {} + + + getAPITableDataList(tableQueryData: TableQueryData, tycgTableName: string, method: string): Observable { + let query = + "?tycgTableName=" + (tycgTableName ? tycgTableName : "") + "&"; + query += "term=" + (tableQueryData.Term ? tableQueryData.Term : "") + "&"; + query += "page=" + (tableQueryData.Page ? tableQueryData.Page : "") + "&"; + query += "order=" + (tableQueryData.Order ? tableQueryData.Order : "") + "&"; + query += "isAsc=" + (tableQueryData.IsAsc ? tableQueryData.IsAsc : "") + "&"; + query += "method=" + (method ? method : ""); + return ( + this.httpService + .get("/report/tycg" + query) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + + postRepairForm(repairData: RepairData): Observable { + return ( + this.httpService + .post("/Repair", repairData) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + getTycgTableName(): Observable { + return this.httpService + .get("/report/tycg/tableName") + // .map(this.extractData) + .catch(this.handleErrorObservable); + } + + + private extractData(res: Response) { + const body = res.json(); + return body.Result || []; + } + private handleErrorObservable(error: Response | any) { + console.error(error.message || error); + return Observable.throw(error.message || error); + } +} diff --git a/src/app/service/set-data.service.ts b/src/app/service/set-data.service.ts new file mode 100644 index 0000000..c945c7e --- /dev/null +++ b/src/app/service/set-data.service.ts @@ -0,0 +1,178 @@ +import { Injectable } from "@angular/core"; +import { HttpService } from "app/service/http.service"; +import { Http, Headers, Response, RequestOptions } from "@angular/http"; +// tslint:disable-next-line:import-blacklist +import { Observable } from "rxjs"; +import "rxjs/add/operator/map"; +import "rxjs/add/operator/catch"; +import { TableQueryData } from "../data/TableQueryData"; +import { SiteInformationData } from "app/data/SiteInformationData"; +import { CompanyInformationData } from "../data/CompanyInformationData" +import { ReasonData } from "app/data/ReasonData"; + +@Injectable() +export class SetDataService { + constructor(private httpService: HttpService) {} + + getSiteInformations(tableQueryData: TableQueryData): Observable { + let query = + "?term=" + (tableQueryData.Term ? tableQueryData.Term : "") + "&"; + query += "page=" + (tableQueryData.Page ? tableQueryData.Page : "") + "&"; + query += + "order=" + (tableQueryData.Order ? tableQueryData.Order : "") + "&"; + query += + "isAsc=" + (tableQueryData.IsAsc ? tableQueryData.IsAsc : "") + "&"; + + return this.httpService + .get("/SiteInformation" + query) + .catch(this.handleErrorObservable); + } + + postSiteInformations(siteInformationData: SiteInformationData): Observable { + return ( + this.httpService + .post("/siteInformation", siteInformationData) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + getCompanyInformation(tableQueryData: TableQueryData): Observable { + let query = + "?term=" + (tableQueryData.Term ? tableQueryData.Term : "") + "&"; + query += "page=" + (tableQueryData.Page ? tableQueryData.Page : "") + "&"; + query += + "order=" + (tableQueryData.Order ? tableQueryData.Order : "") + "&"; + query += + "isAsc=" + (tableQueryData.IsAsc ? tableQueryData.IsAsc : "") + "&"; + + return this.httpService + .get("/companyInformation" + query) + .catch(this.handleErrorObservable); + } + + deleteCompanyInformationData(id: string): Observable { + return ( + this.httpService + .delete("/companyInformation/" + id) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + postCompanyInformation(companyInformationData: CompanyInformationData): Observable { + return ( + this.httpService + .post("/companyInformation", companyInformationData) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + putCompanyInformationData(companyInformationData: CompanyInformationData): Observable { + return ( + this.httpService + .put("/companyInformation/" + companyInformationData.id , companyInformationData) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + putSiteData(siteInformationData: SiteInformationData): Observable { + return ( + this.httpService + .put("/siteInformation/" + siteInformationData.Id , siteInformationData) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + deleteSiteInformationData(id: string): Observable { + return ( + this.httpService + .delete("/siteInformation/" + id) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + + postReasonData(reasonData: ReasonData): Observable { + return ( + this.httpService + .post("/notPunish", reasonData) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + + getReasonPageList(tableQueryData: TableQueryData): Observable { + let query = + "?term=" + (tableQueryData.Term ? tableQueryData.Term : "") + "&"; + query += "page=" + (tableQueryData.Page ? tableQueryData.Page : "") + "&"; + query += + "order=" + (tableQueryData.Order ? tableQueryData.Order : "") + "&"; + query += + "isAsc=" + (tableQueryData.IsAsc ? tableQueryData.IsAsc : "") + "&"; + return this.httpService + .get("/notPunish" + query) + .catch(this.handleErrorObservable); + } + + + deleteReasonData(id: string): Observable { + return ( + this.httpService + .delete("/notPunish/" + id) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + + putReasonData(reasonData: ReasonData): Observable { + return ( + this.httpService + .put("/notPunish/" + reasonData.Id , reasonData) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + getEventTypeId(): Observable { + return ( + this.httpService + .get("/eventType/all") + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + getCompanyEmail(): Observable { + return ( + this.httpService + .get("/companyInformation/all/emailNotNull") + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + getCompanyAllInfo(): Observable { + return ( + this.httpService + .get("/companyInformation/all") + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + private extractData(res: Response) { + const body = res.json(); + return body.Result || []; + } + private handleErrorObservable(error: Response | any) { + console.error(error.message || error); + return Observable.throw(error.message || error); + } +} diff --git a/src/app/service/sys-data.service.ts b/src/app/service/sys-data.service.ts new file mode 100644 index 0000000..d26bbf6 --- /dev/null +++ b/src/app/service/sys-data.service.ts @@ -0,0 +1,312 @@ +import { Injectable } from "@angular/core"; +import { Http, Headers, Response, RequestOptions } from "@angular/http"; +// tslint:disable-next-line:import-blacklist +import { Observable } from "rxjs"; +import "rxjs/add/operator/map"; +import "rxjs/add/operator/catch"; +import { UserData } from "../data/UserData"; +import { GroupData } from "../data/GroupData"; +import { RoleData } from "../data/RoleData"; +import { PageData } from "../data/PageData"; +import { PremissionData } from "../data/PremissionData"; +import { HttpService } from "app/service/http.service"; +import { NewPwdMailData } from "app/data/NewPwdMailData"; +import { TableQueryData } from "app/data/TableQueryData"; + +@Injectable() +export class SysDataService { + constructor(private httpService: HttpService) {} + + postUserData(userdata: UserData): Observable { + return ( + this.httpService + .post("/User/PostUserDataList", userdata) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + getUserData(term: string, page?: number, id?: number): Observable { + const queryWord = "?term=" + (term ? term : "") + "&"; + const queryPage = "page=" + (page ? page : "") + "&"; + const queryId = "id=" + (id ? id : "") + "&"; + return this.httpService + .get("/User/GetUserDataList" + queryWord + queryPage + queryId) + .catch(this.handleErrorObservable); + } + + getUserbyId(id: number): Observable { + return this.httpService + .get("/user/" + id) + // .map(this.extractData) + .catch(this.handleErrorObservable); + } + + getSiteInformations( + tableQueryData: TableQueryData, + id?: number + ): Observable { + let query = + "?term=" + (tableQueryData.Term ? tableQueryData.Term : "") + "&"; + query += "page=" + (tableQueryData.Page ? tableQueryData.Page : "") + "&"; + query += + "order=" + (tableQueryData.Order ? tableQueryData.Order : "") + "&"; + query += + "isAsc=" + (tableQueryData.IsAsc ? tableQueryData.IsAsc : "") + "&"; + + return this.httpService + .get("/SiteInformation" + query) + .catch(this.handleErrorObservable); + } + + getSiteInformationAll(): Observable { + return this.httpService + .get("/siteInformation/all") + // .map(this.extractData) + .catch(this.handleErrorObservable); + } + + getSiteInformationAllByUser(): Observable { + return this.httpService + .get("/siteInformation/user") + // .map(this.extractData) + .catch(this.handleErrorObservable); + } + + + getUserSiteInfo(): Observable { + return this.httpService + .get("/user/GetUserSiteInfo") + // .map(this.extractData) + .catch(this.handleErrorObservable); + } + + + getUserPageData( + tableQueryData: TableQueryData, + id?: number + ): Observable { + let query = + "?term=" + (tableQueryData.Term ? tableQueryData.Term : "") + "&"; + query += "page=" + (tableQueryData.Page ? tableQueryData.Page : "") + "&"; + query += + "order=" + (tableQueryData.Order ? tableQueryData.Order : "") + "&"; + query += + "isAsc=" + (tableQueryData.IsAsc ? tableQueryData.IsAsc : "") + "&"; + const queryId = "id=" + (id ? id : "") + "&"; + return this.httpService + .get("/User/GetUserDataList" + query + queryId) + .catch(this.handleErrorObservable); + } + + getUserDatabyId(id: number): Observable { + return this.httpService + .get("/User/GetUserDataById/" + id) + .map(this.extractData) + .catch(this.handleErrorObservable); + } + + getExistUserName(account: string): Observable { + return ( + this.httpService + .get("/User/GetExistUser?account=" + account) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + putUserData(userData: UserData): Observable { + return ( + this.httpService + .put("/user/PutUserData/" + userData.Id, userData) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + putUserStatus(id: number, status: number): Observable { + const statusKey = "?status=" + status; + return ( + this.httpService + .put("/user/PutUserStatus/" + id + statusKey, null) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + putUserPasswordById(id: number): Observable { + return ( + this.httpService + .put("/user/PutUserPassword/" + id, null) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + deleteUserData(id: string): Observable { + return ( + this.httpService + .delete("/user/DeleteUserData?id=" + id) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + putUserPassword(userData: UserData): Observable { + return ( + this.httpService + .put("/User/PutUserPassword", userData) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + postRoleDataList(roleData: RoleData): Observable { + return ( + this.httpService + .post("/Role/PostRoleDataList", roleData) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + getRoleDataList(tableQueryData: TableQueryData): Observable { + let query = + "?term=" + (tableQueryData.Term ? tableQueryData.Term : "") + "&"; + query += "page=" + (tableQueryData.Page ? tableQueryData.Page : "") + "&"; + query += + "order=" + (tableQueryData.Order ? tableQueryData.Order : "") + "&"; + query += + "isAsc=" + (tableQueryData.IsAsc ? tableQueryData.IsAsc : "") + "&"; + return this.httpService + .get("/Role/GetRoleDataList" + query) + .catch(this.handleErrorObservable); + } + + postPageListData(pageData: PageData): Observable { + return ( + this.httpService + .post("/System/PostPageListData", pageData) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + putPageData(pageData: PageData): Observable { + return ( + this.httpService + .put("/System/PutPageData/" + pageData.Id, pageData) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + getPageDataList(tableQueryData: TableQueryData): Observable { + let query = + "?term=" + (tableQueryData.Term ? tableQueryData.Term : "") + "&"; + query += "page=" + (tableQueryData.Page ? tableQueryData.Page : "") + "&"; + query += + "order=" + (tableQueryData.Order ? tableQueryData.Order : "") + "&"; + query += + "isAsc=" + (tableQueryData.IsAsc ? tableQueryData.IsAsc : "") + "&"; + return ( + this.httpService + .get("/System/GetPageDataList" + query) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + deletePageData(id: string): Observable { + return ( + this.httpService + .delete("/System/DeletePageData/" + id) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + getAllPagePermission(roleId: number): Observable { + return this.httpService + .get("/Role/GetAllPagePermission/" + roleId) + .map(this.extractData) + .catch(this.handleErrorObservable); + } + + putPageRoleStatus(premissionData: PremissionData): Observable { + console.log(`current enable ${premissionData.Enable}`); + const body = { ...premissionData, Enable: !premissionData.Enable }; + console.log("body", body); + return this.httpService + .put("/Role/PutPageRoleStatus/", body) + .map(this.extractData) + .catch(this.handleErrorObservable); + } + + sendNewPwdMail(newPwdMailData: NewPwdMailData): Observable { + return this.httpService + .post("/Account/SendNewPwdMail", newPwdMailData) + .catch(this.handleErrorObservable); + } + + postGroupData(groupData: GroupData): Observable { + return ( + this.httpService + .post("/Group/PostGroupData", groupData) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + putGroupData(groupData: GroupData): Observable { + return this.httpService + .put("/Group/PutGroupData", groupData) + .catch(this.handleErrorObservable); + } + + getGroupData(tableQueryData: TableQueryData): Observable { + let query = + "?term=" + (tableQueryData.Term ? tableQueryData.Term : "") + "&"; + query += "page=" + (tableQueryData.Page ? tableQueryData.Page : "") + "&"; + query += + "order=" + (tableQueryData.Order ? tableQueryData.Order : "") + "&"; + query += + "isAsc=" + (tableQueryData.IsAsc ? tableQueryData.IsAsc : "") + "&"; + return this.httpService + .get("/Group/GetGroupDataList" + query) + .catch(this.handleErrorObservable); + } + + deleteGroupData(id: string): Observable { + return ( + this.httpService + .delete("/Group/DeleteGroupData/" + id) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + getGroupMember( + term: string, + page?: number, + groupId?: number + ): Observable { + let query = "?term=" + (term ? term : "") + "&"; + query += "page=" + (page ? page : "") + "&"; + query += "groupId=" + (groupId ? groupId : "") + "&"; + return ( + this.httpService + .get("/Group/GetGroupMemberList" + query) + // .map(this.extractData) + .catch(this.handleErrorObservable) + ); + } + + private extractData(res: Response) { + const body = res.json(); + return body.Result || []; + } + private handleErrorObservable(error: Response | any) { + console.error(error.message || error); + return Observable.throw(error.message || error); + } +} diff --git a/src/app/views/board/board-routing.module.ts b/src/app/views/board/board-routing.module.ts new file mode 100644 index 0000000..10afb31 --- /dev/null +++ b/src/app/views/board/board-routing.module.ts @@ -0,0 +1,64 @@ +import { NgModule } from "@angular/core"; +import { Routes, RouterModule } from "@angular/router"; +import { AuthGuard } from "app/auth-guard.service"; +import { Board001CreateBoardComponent } from "./board001/board001-create-board.component"; +import { Board001Resolver } from "./board001/board001-resolver.service"; +import { Board001SetBoardComponent } from "./board001/board001-set-board.component"; +import { Board001ViewBoardComponent } from "./board001/board001-view-board.component"; +import { Board001Component } from "./board001/board001.component"; + + + + +const routes: Routes = [ + { + path: "", + data: { + title: "公佈欄管理" + }, + children: [ + { + path: "board001", + component: Board001Component, + resolve: { selectedItem: Board001Resolver }, + canActivate: [AuthGuard], + data: { + title: "公佈欄設定" + } + }, + { + path: "board001-create-board", + component: Board001CreateBoardComponent, + canActivate: [AuthGuard], + data: { + title: "新增公佈欄資料" + } + }, + { + path: "board001-set-board", + component: Board001SetBoardComponent, + resolve: { selectedItem: Board001Resolver }, + canActivate: [AuthGuard], + data: { + title: "修改公佈欄資料" + } + }, + { + path: "board001-view-board", + component: Board001ViewBoardComponent, + resolve: { selectedItem: Board001Resolver }, + canActivate: [AuthGuard], + data: { + title: "詳細公佈欄資料" + } + } + ] + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], + providers: [Board001Resolver] +}) +export class BoardRoutingModule {} diff --git a/src/app/views/board/board.module.ts b/src/app/views/board/board.module.ts new file mode 100644 index 0000000..9f44c61 --- /dev/null +++ b/src/app/views/board/board.module.ts @@ -0,0 +1,43 @@ +import { NgModule } from "@angular/core"; +import { CommonModule } from "@angular/common"; +import { FormsModule } from "@angular/forms"; +import { TabsModule } from "ngx-bootstrap/tabs"; + +import { DataTablesModule } from "angular-datatables"; +import { AgmCoreModule } from "@agm/core"; +import { LoadingModule } from "ngx-loading"; +import { MomentModule } from 'ngx-moment'; +import {MomentTimezoneModule} from 'angular-moment-timezone'; + +import { BoardRoutingModule } from "./board-routing.module"; +import { Board001Component } from "./board001/board001.component"; +import { Board001CreateBoardComponent } from "./board001/board001-create-board.component"; +import { Board001ViewBoardComponent } from "./board001/board001-view-board.component"; +import { Board001SetBoardComponent } from "./board001/board001-set-board.component"; +import { MyDatePickerModule } from "mydatepicker"; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + MomentModule, + MomentTimezoneModule, + BoardRoutingModule, + DataTablesModule, + MyDatePickerModule, + LoadingModule, + TabsModule.forRoot(), + AgmCoreModule.forRoot({ + apiKey: "", + language: "zh-TW" + }), + LoadingModule + ], + declarations: [ + Board001Component, + Board001CreateBoardComponent, + Board001SetBoardComponent, + Board001ViewBoardComponent, + ] +}) +export class BoardModule {} diff --git a/src/app/views/board/board001/board001-create-board.component.html b/src/app/views/board/board001/board001-create-board.component.html new file mode 100644 index 0000000..31f9947 --- /dev/null +++ b/src/app/views/board/board001/board001-create-board.component.html @@ -0,0 +1,45 @@ + +
    +
    +
    +
    +

    新增公佈欄資料

    +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + +
    + +
    +
    + +
    +
    +
    +
    diff --git a/src/app/views/board/board001/board001-create-board.component.ts b/src/app/views/board/board001/board001-create-board.component.ts new file mode 100644 index 0000000..c3fc823 --- /dev/null +++ b/src/app/views/board/board001/board001-create-board.component.ts @@ -0,0 +1,91 @@ +import { Component, OnInit } from "@angular/core"; +import { AnnounceData } from "../../../data/AnnounceData"; +import { Router } from "@angular/router"; +import { BoardDataService } from "app/service/board-data.service"; +import swal from "sweetalert2"; +import { IMyDpOptions } from "mydatepicker"; + +@Component({ + selector: "app-board001-create-board", + templateUrl: "./board001-create-board.component.html" +}) +export class Board001CreateBoardComponent implements OnInit { + announceData: AnnounceData; + errorMessage: string; + loading = false; + + startDT: any; + public myDatePickerOptions: IMyDpOptions = { + dateFormat: 'yyyy/mm/dd', + editableDateField: false, + openSelectorOnInputClick: true, + dayLabels: { + su: '日', + mo: '一', + tu: '二', + we: '三', + th: '四', + fr: '五', + sa: '六', + }, + monthLabels: { + 1: '一月', + 2: '二月', + 3: '三月', + 4: '四月', + 5: '五月', + 6: '六月', + 7: '七月', + 8: '八月', + 9: '九月', + 10: '十月', + 11: '十一月', + 12: '十二月', + }, + todayBtnTxt: '今天', + }; + + + constructor(private boardDataService: BoardDataService, private router: Router) {} + + ngOnInit() { + this.announceData = new AnnounceData(); + } + + createAnnounceData() { + this.announceData.StartOn = this.startDT.formatted; + this.announceData.Status = 1; + this.boardDataService.postAnnounceData(this.announceData).subscribe(res => { + this.loading = true; + const result = res.json(); + if (result.Success === true) { + this.loading = false; + swal({ + type: "success", + title: "新增成功", + text: "轉跳回檢視頁面...", + showConfirmButton: false, + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => { + this.router.navigate(["/board/board001"]); + } + }); + } else { + this.loading = false; + swal({ + type: "error", + title: "新增失敗", + text: "請檢查您輸入的資訊...", + showConfirmButton: true + }); + } + }); + } + + backPreviousPage() { + this.router.navigateByUrl("/board/board001"); + } +} diff --git a/src/app/views/board/board001/board001-resolver.service.ts b/src/app/views/board/board001/board001-resolver.service.ts new file mode 100644 index 0000000..e36db19 --- /dev/null +++ b/src/app/views/board/board001/board001-resolver.service.ts @@ -0,0 +1,14 @@ +import { Injectable } from "@angular/core"; +import { Resolve } from "@angular/router"; +import { Board001Service } from "app/views/board/board001/board001.service"; +import { Observable } from "rxjs/Observable"; + +@Injectable() +export class Board001Resolver implements Resolve { + constructor(private board001Service: Board001Service) {} + + resolve(): Observable { + + return this.board001Service.selectedItem; + } +} diff --git a/src/app/views/board/board001/board001-set-board.component.html b/src/app/views/board/board001/board001-set-board.component.html new file mode 100644 index 0000000..e6fafd4 --- /dev/null +++ b/src/app/views/board/board001/board001-set-board.component.html @@ -0,0 +1,43 @@ +
    +
    +
    +

    修改公佈欄資料

    +
    +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + +
    + +
    +
    + +
    +
    +
    +
    diff --git a/src/app/views/board/board001/board001-set-board.component.ts b/src/app/views/board/board001/board001-set-board.component.ts new file mode 100644 index 0000000..25677eb --- /dev/null +++ b/src/app/views/board/board001/board001-set-board.component.ts @@ -0,0 +1,100 @@ +import { SetDataService } from "../../../service/set-data.service"; +import { Router } from "@angular/router"; +import swal from "sweetalert2"; + +import { Component, OnInit } from "@angular/core"; +import { ActivatedRoute } from "@angular/router"; +import { AnnounceData } from "app/data/AnnounceData"; +import { BoardDataService } from "app/service/board-data.service"; +import { IMyDpOptions } from "mydatepicker"; + +@Component({ + selector: "app-board001-set-board", + templateUrl: "./board001-set-board.component.html" +}) +export class Board001SetBoardComponent implements OnInit { + errorMessage: String; + data: any; + announceData: AnnounceData; + + selectedItem: any; + itemId: number; + startDT: any; + + public myDatePickerOptions: IMyDpOptions = { + dateFormat: 'yyyy/mm/dd', + editableDateField: false, + openSelectorOnInputClick: true, + dayLabels: { + su: '日', + mo: '一', + tu: '二', + we: '三', + th: '四', + fr: '五', + sa: '六', + }, + monthLabels: { + 1: '一月', + 2: '二月', + 3: '三月', + 4: '四月', + 5: '五月', + 6: '六月', + 7: '七月', + 8: '八月', + 9: '九月', + 10: '十月', + 11: '十一月', + 12: '十二月', + }, + todayBtnTxt: '今天', + }; + + constructor( + private boardDataService: BoardDataService, + private route: ActivatedRoute, + private router: Router + ) {} + + ngOnInit() { + this.announceData = new AnnounceData(); + this.route.data.subscribe((data: { selectedItem: any }) => { + this.selectedItem = data.selectedItem; + this.startDT = this.selectedItem.StartOn; + }); + } + + doEditAnnounce() { + this.selectedItem.StartOn = this.startDT.formatted; + this.boardDataService.putAnnounceData(this.selectedItem).subscribe(res => { + const result = res.json(); + if (result.Success === true) { + swal({ + type: "success", + title: "修改成功", + text: "轉跳回檢視頁面...", + showConfirmButton: false, + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => { + this.router.navigate(["board/board001"]); + } + }); + } else { + swal({ + type: "error", + title: "修改失敗", + text: "請檢查您輸入的資訊...", + showConfirmButton: true + }); + } + }); + } + + backPreviousPage() { + this.router.navigateByUrl("/board/board001"); + } +} diff --git a/src/app/views/board/board001/board001-view-board.component.html b/src/app/views/board/board001/board001-view-board.component.html new file mode 100644 index 0000000..50d6a4e --- /dev/null +++ b/src/app/views/board/board001/board001-view-board.component.html @@ -0,0 +1,41 @@ + +
    +
    +
    +

    檢視公佈欄資料

    + + + + + + + + + + + + + + + +
    + 標題 + + {{selectedItem.Title}} +
    + 摘要 + + {{selectedItem.Content}} +
    + 公告日期 + + {{selectedItem.StartOn}} +
    + +
    +
    +
    diff --git a/src/app/views/board/board001/board001-view-board.component.ts b/src/app/views/board/board001/board001-view-board.component.ts new file mode 100644 index 0000000..0967e75 --- /dev/null +++ b/src/app/views/board/board001/board001-view-board.component.ts @@ -0,0 +1,41 @@ +import { SetDataService } from "../../../service/set-data.service"; +import { Router } from "@angular/router"; +import { Component, OnInit } from "@angular/core"; +import { ActivatedRoute } from "@angular/router"; +import { HelperService } from "app/service/helper.service"; +import { AnnounceData } from "app/data/AnnounceData"; +import { BoardDataService } from "app/service/board-data.service"; + +@Component({ + selector: "app-board001-view-board", + templateUrl: "./board001-view-board.component.html" +}) +export class Board001ViewBoardComponent implements OnInit { + errorMessage: String; + data: any; + announceData: AnnounceData; + + selectedItem: any; + itemId: number; + loading = false; + + constructor( + private boardDataService: BoardDataService, + private route: ActivatedRoute, + private router: Router, + private helperService: HelperService + ) {} + + ngOnInit() { + this.loading = true; + this.announceData = new AnnounceData(); + this.route.data.subscribe((data: { selectedItem: any }) => { + this.loading = false; + this.selectedItem = data.selectedItem; + }); + } + + backPreviousPage() { + this.router.navigateByUrl("/board/board001"); + } +} diff --git a/src/app/views/board/board001/board001.component.html b/src/app/views/board/board001/board001.component.html new file mode 100644 index 0000000..b33428b --- /dev/null +++ b/src/app/views/board/board001/board001.component.html @@ -0,0 +1,70 @@ +
    +
    +
    + +

    公佈欄管理

    + +
    + + + +
    +
    + + + + + + + + + + + + + + + + + + + +
    + + 標題 + + + 摘要 + + + 公告日期操作
    {{announceData.Title}}{{announceData.Content}}{{announceData.StartOn}} + + + +
    +
    +
    + 暫無資料 +
    + +
    +
    +
    diff --git a/src/app/views/board/board001/board001.component.ts b/src/app/views/board/board001/board001.component.ts new file mode 100644 index 0000000..92dc338 --- /dev/null +++ b/src/app/views/board/board001/board001.component.ts @@ -0,0 +1,187 @@ +import { AfterViewInit, Component, OnInit, ViewChildren } from "@angular/core"; +import { DataTableDirective } from "angular-datatables"; +import { Subject } from "rxjs/Subject"; +import { Http, Response } from "@angular/http"; +import { TableQueryData } from "../../../data/TableQueryData"; +import { SetDataService } from "app/service/set-data.service"; +import { Set001Service } from "app/views/set/set001/set001.service"; +import { Router } from "@angular/router"; +import { ActivatedRoute } from "@angular/router"; +import { HelperService } from "app/service/helper.service"; +import swal from "sweetalert2"; +import { AnnounceData } from "app/data/AnnounceData"; +import { BoardDataService } from "app/service/board-data.service"; +import { Board001Service } from "./board001.service"; + +@Component({ + selector: "app-board001", + templateUrl: "./board001.component.html" +}) +export class Board001Component implements OnInit { + renewalPageList = []; + tableQueryData: TableQueryData; + IsAsc = true; + status = false; + loginRole = localStorage.getItem("role"); + setRole = "1"; + loading = false; + pageCount = 0; + pageLinkMarginCount = 2; + pageLinks = []; + item: string; + errorMessage: string; + + announceData: AnnounceData; + announcePageList = []; + + constructor( + private boardDataService: BoardDataService, + private board001Service: Board001Service, + private helperService: HelperService, + private route: ActivatedRoute, + private router: Router, + private http: Http + ) {} + + ngOnInit() { + this.loading = false; + this.announceData = new AnnounceData(); + this.tableQueryData = new TableQueryData(); + this.tableQueryData.CurrentPage = 0; + this.getAnnounceData(this.tableQueryData); + } + + getAnnounceData(tableQueryData: TableQueryData): any { + this.tableQueryData.CurrentPage = tableQueryData.Page + ? tableQueryData.Page + : 1; + this.boardDataService.getAnnouncePageList(tableQueryData).subscribe(res => { + const result = res.json().Result; + this.announcePageList = result.Data; + this.loading = false; + if (tableQueryData.Page === 1 || !tableQueryData.Page) { + this.pageCount = result.PageCount; + this.getPageLinks(); + } + }, error => (this.errorMessage = error)); + } + + getPageLinks() { + this.pageLinks = []; + let firstPageNumber = + this.tableQueryData.CurrentPage - this.pageLinkMarginCount; + let lastPageNumber = + this.tableQueryData.CurrentPage + this.pageLinkMarginCount; + if (firstPageNumber < 1) { + firstPageNumber = 1; + } + if (lastPageNumber > this.pageCount) { + lastPageNumber = this.pageCount; + } + if (firstPageNumber > 1) { + const isCurrentPage = firstPageNumber === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: "第一頁", + pageNo: 1, + isCurrent: isCurrentPage + }); + } + for (let i = firstPageNumber; i <= lastPageNumber; i++) { + const isCurrentPage = i === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: i, + pageNo: i, + isCurrent: isCurrentPage + }); + } + if (lastPageNumber < this.pageCount) { + const isCurrentPage = lastPageNumber === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: "最後頁(共 " + this.pageCount + " 頁)", + pageNo: this.pageCount, + isCurrent: isCurrentPage + }); + } + } + + onPageChange(e: Event, page) { + e.preventDefault(); + this.tableQueryData.CurrentPage = page; + this.tableQueryData.Page = this.tableQueryData.CurrentPage; + this.getPageLinks(); + this.getAnnounceData(this.tableQueryData); + } + + doSearch() { + this.tableQueryData.Page = null; + this.getAnnounceData(this.tableQueryData); + } + + clearSearch() { + this.tableQueryData.Term = null; + this.getAnnounceData(this.tableQueryData); + } + + order(item) { + this.IsAsc = !this.IsAsc; + this.item = item; + this.tableQueryData.Order = item; + this.tableQueryData.IsAsc = this.IsAsc.toString(); + this.getAnnounceData(this.tableQueryData); + } + + deleteAnnounceData(id): any { + swal({ + title: "是否要刪除?", + type: "warning", + showCancelButton: true, + confirmButtonColor: "#70C2DA", + cancelButtonColor: "#f86c6b", + confirmButtonText: "是", + cancelButtonText: "否" + }).then(result => { + if (result.value) { + this.boardDataService.deleteAnnounceData(id).subscribe(res => { + const result2 = res.json(); + if (result2.Success === true) { + this.renewalPageList = this.renewalPageList.filter(u => { + return u.Id !== id; + }); + this.getAnnounceData(this.tableQueryData); + this.getPageLinks(); + swal({ + type: "success", + title: "刪除成功", + showConfirmButton: true, + confirmButtonColor: "#70C2DA", + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => {} + }); + } else { + swal({ + type: "error", + title: "刪除失敗", + showConfirmButton: true, + confirmButtonColor: "#70C2DA" + }); + } + }); + } + }); + } + + + goDetail(item) { + this.board001Service.selectedItem = item; + this.router.navigate(["board/board001-view-board"]); + } + + goEdit(item) { + this.board001Service.selectedItem = item; + this.router.navigate(["board/board001-set-board"]); + } + +} diff --git a/src/app/views/board/board001/board001.service.ts b/src/app/views/board/board001/board001.service.ts new file mode 100644 index 0000000..0fc8702 --- /dev/null +++ b/src/app/views/board/board001/board001.service.ts @@ -0,0 +1,3 @@ +export class Board001Service { + selectedItem: any; +} diff --git a/src/app/views/dashboard/dashboard-routing.module.ts b/src/app/views/dashboard/dashboard-routing.module.ts new file mode 100644 index 0000000..6d05560 --- /dev/null +++ b/src/app/views/dashboard/dashboard-routing.module.ts @@ -0,0 +1,21 @@ +import { NgModule } from '@angular/core'; +import { Routes, + RouterModule } from '@angular/router'; + +import { DashboardComponent } from './dashboard.component'; + +const routes: Routes = [ + { + path: '', + component: DashboardComponent, + data: { + title: '桃園交通局科技執法系統' + } + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class DashboardRoutingModule {} diff --git a/src/app/views/dashboard/dashboard.component.html b/src/app/views/dashboard/dashboard.component.html new file mode 100644 index 0000000..ba3f68f --- /dev/null +++ b/src/app/views/dashboard/dashboard.component.html @@ -0,0 +1,327 @@ +
    {{ myDate | amTz:'Asia/Taipei'| amDateFormat: 'YYYY/MM/DD HH:mm A' }}
    +

    {{loginUser}},您好!

    +
    +
    +
    + +
    + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    + + 序號 + + 車號 + + 違規地點 + + 違規項目 + + 違規時間 + + 狀態
    {{eventData.Id}}{{eventData.Number}}{{eventData.SiteName}}{{eventData.EventName}}{{eventData.InTime}}{{eventData.Status}}
    +
    +
    + 暫無資料 +
    + +
    +
    +
    +
    +
    +
    + +
    +
    + 處理進度 +
    +
    +
    + 查詢區間 + + 至 + +
    + +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + +
    已開單裁決中已駁回未處理不開單
    {{eventCountByInterval.PunishedCount}}{{this.eventCountByInterval.CheckPunishedCount}}{{this.eventCountByInterval.RejectedCount}}{{this.eventCountByInterval.NoStatusCount}}{{this.eventCountByInterval.NoPunishedCount}}
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + 今年累計處理案件數 +
    +
    +
    +
    +
    +
    +
    +

    {{eventCountByThisYear}} 件

    +
    +
    +
    +
    +
    +
    +
    +

    本月新增 {{eventCountByThisMonth}} 件

    + 查看統計表 +
    +
    +
    +
    +
    +
    + +
    +
    + 設備狀態 +
    +
    +
    + +
    + + + + + + + + + + + + + + + + +
    行政區站點名稱操作
    {{siteMalfunction.Area}}{{siteMalfunction.SiteName}} + + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    公佈欄
    + +
    + + + + + + + + + + + + + + + +
    + + 標題 + + + 摘要 + + + 公告日期
    {{announceData.Title}}{{announceData.Content}}{{announceData.StartOn}}
    +
    +
    + 暫無資料 +
    + +
    +
    + + + + + + + + + diff --git a/src/app/views/dashboard/dashboard.component.ts b/src/app/views/dashboard/dashboard.component.ts new file mode 100644 index 0000000..203faec --- /dev/null +++ b/src/app/views/dashboard/dashboard.component.ts @@ -0,0 +1,389 @@ +import { of } from 'rxjs/observable/of'; +import { Component, OnInit } from "@angular/core"; +import { Router } from "@angular/router"; +import { MroDataService } from "app/service/mro-data.service"; +import { HelperService } from "app/service/helper.service"; +import { SetDataService } from "app/service/set-data.service"; +import { TableQueryData } from "app/data/TableQueryData"; +import { ActivatedRoute } from "@angular/router"; +import { Chart } from 'chart.js'; +import { IMyDpOptions } from "mydatepicker"; +import { AnnounceData } from "app/data/AnnounceData"; +import { BoardDataService } from "app/service/board-data.service"; +import { EventData } from "app/data/EventData"; +import { EventCountIntervalData } from "app/data/EventCountIntervalData"; +import { SysDataService } from "app/service/sys-data.service"; + +@Component({ + templateUrl: "dashboard.component.html" +}) +export class DashboardComponent implements OnInit { + pageAnnounceCount = 0; + pageEventCount = 0; + pageAnnounceLinks = []; + pageEventLinks = []; + pageAnnounceLinkMarginCount = 2; + pageEventLinkMarginCount = 2; + errorMessage: string; + myDate: any; + loadingAnnounce = false; + loadingEvent = false; + loadingEventCount = false; + loadingMalfunction = false; + loadingEventYear = false; + loginUser = localStorage.getItem("name"); + loginPassword = localStorage.getItem("password"); + IsAscAnnounce = true; + itemAnnounce: string; + IsAscEvent = true; + itemEvent: string; + id = 4; + myPieChart: any; + ctx: any; + canvas: any; + + announcePageList = []; + eventPageList = []; + + public warningModal; + public announceModal; + startDT: any; + endDT: any; + public myDatePickerOptions: IMyDpOptions = { + dateFormat: 'yyyy/mm/dd', + editableDateField: false, + openSelectorOnInputClick: true, + dayLabels: { + su: '日', + mo: '一', + tu: '二', + we: '三', + th: '四', + fr: '五', + sa: '六', + }, + monthLabels: { + 1: '一月', + 2: '二月', + 3: '三月', + 4: '四月', + 5: '五月', + 6: '六月', + 7: '七月', + 8: '八月', + 9: '九月', + 10: '十月', + 11: '十一月', + 12: '十二月', + }, + todayBtnTxt: '今天', + }; + announceData: any; + tableQueryAnnounceData: TableQueryData; + + eventData: any; + tableQueryEventData: TableQueryData; + + eventCountByThisMonth: any; + eventCountByThisYear: any; + eventCountByInterval: EventCountIntervalData; + eventCountByIntervalData: any; + + siteInformationList = []; + siteMalfunctionList = []; + warningModalList = []; + announceModalData: AnnounceData; + + constructor( + private mroDataService: MroDataService, + private helperService: HelperService, + private boardDataService: BoardDataService, + private sysDataService: SysDataService, + private router: Router + ) {} + + ngOnInit() { + + this.announceModalData = new AnnounceData(); + + this.loadingEvent = false; + this.loadingEventCount = true; + this.loadingMalfunction = true; + this.loadingEventYear = true; + this.loadingAnnounce = true; + var currentdate = new Date(); +var datetime = currentdate.getFullYear() + "/" + + (currentdate.getMonth() + 1) + "/" + + currentdate.getDate(); + + var datetime_yesterday = currentdate.getFullYear() + "/" + + (currentdate.getMonth() + 1) + "/" + + (currentdate.getDate() - 1); + + this.myDate = datetime; + this.endDT = {formatted: datetime}; + this.startDT = {formatted: datetime_yesterday}; + + this.eventData = new EventData(); + this.tableQueryEventData = new TableQueryData(); + this.tableQueryEventData.CurrentPage = 0; + + this.announceData = new AnnounceData(); + this.tableQueryAnnounceData = new TableQueryData(); + this.tableQueryAnnounceData.CurrentPage = 0; + this.getAnnounceData(this.tableQueryAnnounceData); + this.getEventCountByThisYear(); + this.getEventCountByThisMonth(); + + this.eventCountByInterval = new EventCountIntervalData(); + this.eventCountByIntervalData = []; + + this.getEventCountByInterval(datetime_yesterday.toString(), this.myDate.toString()); + this.getSiteMalfunctionInformation(); + if (this.loginPassword === "1") { + this.router.navigate(["sys/sys001"]); + } + } + + getSiteMalfunctionInformation(): any { + this.loadingMalfunction = true; + this.boardDataService.getSiteMalfunctionInformation().subscribe(res => { + const result = res.json().Result; + this.siteMalfunctionList = result; + this.loadingMalfunction = false; + }, error => (this.errorMessage = error)); + } + + + setWarningModal(item, model) { + model.show(); + this.warningModalList = item.Malfunction; + + } + + setAnnounceModal(item, model) { + model.show(); + this.announceModalData = item; + + } + + + + getEventCountByThisYear() { + this.loadingEventYear = true; + this.boardDataService.getEventCountByThisYear().subscribe(res => { + this.loadingEventYear = false; + const result = res.json().Result; + this.eventCountByThisYear = result; + }, error => (this.errorMessage = error)); + } + + getEventCountByThisMonth() { + this.loadingEventYear = true; + this.boardDataService.getEventCountByThisMonth().subscribe(res => { + this.loadingEventYear = false; + const result = res.json().Result; + this.eventCountByThisMonth = result; + }, error => (this.errorMessage = error)); + } + + + getEventCountByInterval(startDatetime: string, endDatetime: string) { + this.loadingEventCount = true; + this.eventCountByIntervalData = []; + this.boardDataService.getEventCountByInterval(startDatetime, endDatetime).subscribe(res => { + this.loadingEventCount = false; + const result = res.json().Result; + this.eventCountByInterval = result; + this.eventCountByIntervalData.push(this.eventCountByInterval.PunishedCount); + this.eventCountByIntervalData.push(this.eventCountByInterval.CheckPunishedCount); + this.eventCountByIntervalData.push(this.eventCountByInterval.RejectedCount); + this.eventCountByIntervalData.push(this.eventCountByInterval.NoStatusCount); + this.eventCountByIntervalData.push(this.eventCountByInterval.NoPunishedCount); + this.doughnutChart(); + }, error => (this.errorMessage = error)); + } + + + getAnnounceData(tableQueryData: TableQueryData): any { + this.tableQueryAnnounceData.CurrentPage = tableQueryData.Page + ? tableQueryData.Page + : 1; + this.loadingAnnounce = true; + this.boardDataService.getAnnouncePageList(tableQueryData).subscribe(res => { + const result = res.json().Result; + this.announcePageList = result.Data; + this.loadingAnnounce = false; + if (tableQueryData.Page === 1 || !tableQueryData.Page) { + this.pageAnnounceCount = result.PageCount; + this.getAnnouncePageLinks(); + } + }, error => (this.errorMessage = error)); + } + + + getEventData(tableQueryData: TableQueryData): any { + this.tableQueryEventData.CurrentPage = tableQueryData.Page + ? tableQueryData.Page + : 1; + this.loadingEvent = true; + this.boardDataService.getEventPageList(tableQueryData).subscribe(res => { + const result = res.json().Result; + this.eventPageList = result.Data; + this.loadingEvent = false; + if (tableQueryData.Page === 1 || !tableQueryData.Page) { + this.pageEventCount = result.PageCount; + this.getEventPageLinks(); + } + }, error => (this.errorMessage = error)); + } + + + + doughnutChart() { + try { + this.canvas = document.getElementById('myChart'); + this.ctx = this.canvas.getContext('2d'); + this.myPieChart = new Chart(this.ctx, { + type: 'pie', + data : { + labels: ['已開單', '裁決中', '已駁回', '未處理', '不開單'], + datasets: [{ + // 預設資料 + data: this.eventCountByIntervalData, + backgroundColor: [ + // 資料顏色 + "#00DB00", + "#FF0000", + "#2828FF", + "#F28500" + ], + }], + } + }); + } catch (error) { + + } + +} + + orderAnnounce(item) { + this.IsAscAnnounce = !this.IsAscAnnounce; + this.itemAnnounce = item; + this.tableQueryAnnounceData.Order = item; + this.tableQueryAnnounceData.IsAsc = this.IsAscAnnounce.toString(); + this.getAnnounceData(this.tableQueryAnnounceData); + } + + orderEvent(item) { + this.IsAscEvent = !this.IsAscEvent; + this.itemEvent = item; + this.tableQueryEventData.Order = item; + this.tableQueryEventData.IsAsc = this.IsAscEvent.toString(); + this.getEventData(this.tableQueryEventData); + } + + getAnnouncePageLinks() { + this.pageAnnounceLinks = []; + let firstPageNumber = + this.tableQueryAnnounceData.CurrentPage - this.pageAnnounceLinkMarginCount; + let lastPageNumber = + this.tableQueryAnnounceData.CurrentPage + this.pageAnnounceLinkMarginCount; + if (firstPageNumber < 1) { + firstPageNumber = 1; + } + if (lastPageNumber > this.pageAnnounceCount) { + lastPageNumber = this.pageAnnounceCount; + } + if (firstPageNumber > 1) { + const isCurrentPage = firstPageNumber === this.tableQueryAnnounceData.CurrentPage; + this.pageAnnounceLinks.push({ + text: "第一頁", + pageNo: 1, + isCurrent: isCurrentPage + }); + } + for (let i = firstPageNumber; i <= lastPageNumber; i++) { + const isCurrentPage = i === this.tableQueryAnnounceData.CurrentPage; + this.pageAnnounceLinks.push({ text: i, pageNo: i, isCurrent: isCurrentPage }); + } + if (lastPageNumber < this.pageAnnounceCount) { + const isCurrentPage = lastPageNumber === this.tableQueryAnnounceData.CurrentPage; + this.pageAnnounceLinks.push({ + text: "最後頁(共 " + this.pageAnnounceCount + " 頁)", + pageNo: this.pageAnnounceCount, + isCurrent: isCurrentPage + }); + } + } + + getEventPageLinks() { + this.pageEventLinks = []; + let firstPageNumber = + this.tableQueryEventData.CurrentPage - this.pageEventLinkMarginCount; + let lastPageNumber = + this.tableQueryEventData.CurrentPage + this.pageEventLinkMarginCount; + if (firstPageNumber < 1) { + firstPageNumber = 1; + } + if (lastPageNumber > this.pageEventCount) { + lastPageNumber = this.pageEventCount; + } + if (firstPageNumber > 1) { + const isCurrentPage = firstPageNumber === this.tableQueryEventData.CurrentPage; + this.pageEventLinks.push({ + text: "第一頁", + pageNo: 1, + isCurrent: isCurrentPage + }); + } + for (let i = firstPageNumber; i <= lastPageNumber; i++) { + const isCurrentPage = i === this.tableQueryEventData.CurrentPage; + this.pageEventLinks.push({ text: i, pageNo: i, isCurrent: isCurrentPage }); + } + if (lastPageNumber < this.pageEventCount) { + const isCurrentPage = lastPageNumber === this.tableQueryEventData.CurrentPage; + this.pageEventLinks.push({ + text: "最後頁(共 " + this.pageEventCount + " 頁)", + pageNo: this.pageEventCount, + isCurrent: isCurrentPage + }); + } + } + + onAnnouncePageChange(e: Event, page) { + e.preventDefault(); + this.tableQueryAnnounceData.CurrentPage = page; + this.tableQueryAnnounceData.Page = this.tableQueryAnnounceData.CurrentPage; + this.getAnnouncePageLinks(); + this.getAnnounceData(this.tableQueryAnnounceData); + } + + onEventPageChange(e: Event, page) { + e.preventDefault(); + this.tableQueryEventData.CurrentPage = page; + this.tableQueryEventData.Page = this.tableQueryEventData.CurrentPage; + this.getEventPageLinks(); + this.getEventData(this.tableQueryEventData); + } + + doAnnounceSearch() { + this.tableQueryAnnounceData.Page = null; + this.getAnnounceData(this.tableQueryAnnounceData); + } + + doEventSearch() { + this.tableQueryEventData.Page = null; + this.getEventData(this.tableQueryEventData); + } + + clearAnnounceSearch() { + this.tableQueryAnnounceData.Term = null; + this.getAnnounceData(this.tableQueryAnnounceData); + } + + clearEventSearch() { + this.eventPageList = []; + this.tableQueryEventData = new TableQueryData(); + } +} diff --git a/src/app/views/dashboard/dashboard.module.ts b/src/app/views/dashboard/dashboard.module.ts new file mode 100644 index 0000000..8b07091 --- /dev/null +++ b/src/app/views/dashboard/dashboard.module.ts @@ -0,0 +1,28 @@ +import { NgModule } from "@angular/core"; +import { ChartsModule } from "ng2-charts/ng2-charts"; + +import { DashboardComponent } from "./dashboard.component"; +import { DashboardRoutingModule } from "./dashboard-routing.module"; +import { CommonModule } from "@angular/common"; +import { FormsModule } from "@angular/forms"; +import { MyDatePickerModule } from "mydatepicker"; +import { LoadingModule, ANIMATION_TYPES } from "ngx-loading"; +import { MomentModule } from 'ngx-moment'; +import {MomentTimezoneModule} from 'angular-moment-timezone'; +import { ModalModule } from "ngx-bootstrap/modal"; + +@NgModule({ + imports: [ + DashboardRoutingModule, + ChartsModule, + CommonModule, + FormsModule, + MomentModule, + MomentTimezoneModule, + MyDatePickerModule, + LoadingModule, + ModalModule.forRoot() + ], + declarations: [DashboardComponent] +}) +export class DashboardModule {} diff --git a/src/app/views/login/forgetPwd.component.html b/src/app/views/login/forgetPwd.component.html new file mode 100644 index 0000000..6cd3f74 --- /dev/null +++ b/src/app/views/login/forgetPwd.component.html @@ -0,0 +1,43 @@ + +
    +
    +
    +

    智慧違規偵測整合平台

    +
    +
    +
    +
    +

    忘記密碼

    +

    寄送新密碼至您的信箱

    +
    +
    + + *此欄必填 + + +
    +
    + + *此欄必填 + 請輸入正確信箱格式 + + +
    +
    +
    + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/src/app/views/login/forgetPwd.component.ts b/src/app/views/login/forgetPwd.component.ts new file mode 100644 index 0000000..34f5fed --- /dev/null +++ b/src/app/views/login/forgetPwd.component.ts @@ -0,0 +1,51 @@ +import { LoginService } from "../../service/login.service"; +import { Component, OnInit } from "@angular/core"; +import { Router } from "@angular/router"; +import { SysDataService } from "../../service/sys-data.service"; +import { NewPwdMailData } from "../../data/NewPwdMailData"; +import swal from "sweetalert2"; +import { Validators } from "@angular/forms"; + +@Component({ + templateUrl: "./forgetPwd.component.html" +}) +export class ForgetPwdComponent implements OnInit { + newPwdMailData = new NewPwdMailData(); + errorMessage: String; + constructor(private sysDataService: SysDataService, private router: Router) {} + + ngOnInit() {} + + doLogin() { + this.sendNewPwdMail(); + } + + sendNewPwdMail() { + this.sysDataService.sendNewPwdMail(this.newPwdMailData).subscribe(res => { + const result = res.json(); + if (result.Success === true) { + swal({ + type: "success", + title: "已將新密碼寄至信箱,請前往查看", + text: "轉跳回登入頁面...", + showConfirmButton: false, + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => { + this.router.navigate(["/login"]); + } + }); + } else { + swal({ + type: "error", + title: "查無使用者", + text: "請檢查您輸入的使用者資訊...", + showConfirmButton: true, + confirmButtonColor: "#70C2DA" + }); + } + }); + } +} diff --git a/src/app/views/login/login.component.html b/src/app/views/login/login.component.html new file mode 100644 index 0000000..6e3e440 --- /dev/null +++ b/src/app/views/login/login.component.html @@ -0,0 +1,55 @@ + +
    +
    +
    +
    +
    +
    +
    + + +

    桃園交通局科技執法系統

    +

    登入您的帳號

    +
    +
    + + + + +
    +
    + + + + +
    +
    +
    + + +
    +
    + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/src/app/views/login/login.component.ts b/src/app/views/login/login.component.ts new file mode 100644 index 0000000..9f1139a --- /dev/null +++ b/src/app/views/login/login.component.ts @@ -0,0 +1,101 @@ +import { LoginService } from "../../service/login.service"; +import { Component, OnInit } from "@angular/core"; +import { LoginData } from "../../data/LoginData"; +import { Router } from "@angular/router"; +import { SysDataService } from "../../service/sys-data.service"; +import { HelperService } from "app/service/helper.service"; +import swal from "sweetalert2"; + +@Component({ + templateUrl: "./login.component.html" +}) +export class LoginComponent implements OnInit { + loginData = new LoginData(); + errorMessage: String; + loading = false; + + constructor( + private loginService: LoginService, + private helperService: HelperService, + private sysDataService: SysDataService, + private router: Router + ) {} + + ngOnInit() {} + + doLogin() { + this.postLoginForm(); + } + + keyupEnter() { + this.postLoginForm(); + } + + postLoginForm(): void { + this.loading = true; + this.loginService.postLoginForm(this.loginData).subscribe(res => { + const result = res.json(); + if (result.Success === true && result.Token != null) { + this.loginService.token = result.Token; + this.loginService.role = result.Role; + this.loginService.id = result.Id; + this.sysDataService + .getAllPagePermission(result.Role) + .subscribe(res2 => { + this.loading = false; + this.loginService.permissions = res2; + if (typeof Storage !== "undefined") { + localStorage.setItem("token", result.Token); + localStorage.setItem("id", result.Id); + localStorage.setItem("role", result.Role); + localStorage.setItem("name", result.Name); + } else { + alert("此瀏覽器不支援Web Storage"); + } + + if (result.Message.includes("未更改密碼,請立即更改密碼")) { + swal({ + type: "warning", + title: "密碼到期提示", + text: result.Message, + showConfirmButton: true, + // timer: 1000, + onOpen: () => { + // swal.showLoading(); + }, + onClose: () => { + this.router.navigate(["dashboard"]); + } + }); + + } else if (result.Message.includes("請立即更改密碼")) { + swal({ + type: "warning", + title: "初始密碼到期提示", + text: result.Message, + showConfirmButton: true, + // timer: 1000, + onOpen: () => { + // swal.showLoading(); + }, + onClose: () => { + localStorage.setItem("password", "1"); + this.router.navigate(["dashboard"]); + } + }); + } else { + this.router.navigate(["dashboard"]); + } + }); + } else { + this.loading = false; + swal({ + type: "error", + title: "登入失敗", + text: result.Message, + showConfirmButton: true + }); + } + }, error => (this.errorMessage = error)); + } +} diff --git a/src/app/views/login/login.module.ts b/src/app/views/login/login.module.ts new file mode 100644 index 0000000..77a5ddb --- /dev/null +++ b/src/app/views/login/login.module.ts @@ -0,0 +1,30 @@ +import { NgModule } from "@angular/core"; +import { FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { CommonModule } from "@angular/common"; +import { TabsModule } from "ngx-bootstrap/tabs"; +import { MatAutocompleteModule, MatInputModule } from "@angular/material"; +import { LoginComponent } from "app/views/login/login.component"; +import { LoginRoutingModule } from "app/views/login/login.routing.module"; +import { ForgetPwdComponent } from "app/views/login/forgetPwd.component"; +import { LoadingModule } from "ngx-loading"; +import { Mro000Component } from "app/views/login/mro000.component"; +import { Mro000ResultComponent } from "app/views/login/mro000-result.component"; +@NgModule({ + imports: [ + CommonModule, + MatInputModule, + ReactiveFormsModule, + FormsModule, + MatAutocompleteModule, + LoginRoutingModule, + LoadingModule, + TabsModule.forRoot() + ], + declarations: [ + LoginComponent, + ForgetPwdComponent, + Mro000Component, + Mro000ResultComponent + ] +}) +export class LoginModule {} diff --git a/src/app/views/login/login.routing.module.ts b/src/app/views/login/login.routing.module.ts new file mode 100644 index 0000000..4370502 --- /dev/null +++ b/src/app/views/login/login.routing.module.ts @@ -0,0 +1,43 @@ +import { NgModule } from "@angular/core"; +import { Routes, RouterModule } from "@angular/router"; +import { LoginComponent } from "app/views/login/login.component"; +import { ForgetPwdComponent } from "app/views/login/forgetPwd.component"; +import { Mro000Component } from "app/views/login/mro000.component"; +import { Mro000ResultComponent } from "app/views/login/mro000-result.component"; + +const routes: Routes = [ + { + path: "", + component: LoginComponent, + data: { + title: "登入" + } + }, + { + path: "forgetPWD", + component: ForgetPwdComponent, + data: { + title: "忘記密碼" + } + }, + { + path: "loginPostRepair", + component: Mro000Component, + data: { + title: "登入報修" + } + }, + { + path: "unLoginPostRepair", + component: Mro000ResultComponent, + data: { + title: "免登入報修" + } + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class LoginRoutingModule {} diff --git a/src/app/views/login/mro000-result.component.html b/src/app/views/login/mro000-result.component.html new file mode 100644 index 0000000..1e14135 --- /dev/null +++ b/src/app/views/login/mro000-result.component.html @@ -0,0 +1,58 @@ + +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + + +
    +
    + + +
    + +
    +
    +
    +
    +
    +
    +
    +
    + diff --git a/src/app/views/login/mro000-result.component.ts b/src/app/views/login/mro000-result.component.ts new file mode 100644 index 0000000..274a78c --- /dev/null +++ b/src/app/views/login/mro000-result.component.ts @@ -0,0 +1,110 @@ +import { Component, OnInit } from "@angular/core"; +import { FormControl } from "@angular/forms"; +import { Observable } from "rxjs/Observable"; +import { Subject } from "rxjs/Subject"; +import { of } from "rxjs/observable/of"; +import { debounceTime, distinctUntilChanged, switchMap } from "rxjs/operators"; +import { Router } from "@angular/router"; +import { timeInterval } from "rxjs/operators/timeInterval"; +import { HelperService } from "../../service/helper.service"; +import { MroDataService } from "../../service/mro-data.service"; +import { SetDataService } from "app/service/set-data.service"; +import { RepairData } from "../../data/RepairData"; + +import swal from "sweetalert2"; +import { SysDataService } from "app/service/sys-data.service"; + +@Component({ + selector: "app-mro000-result", + templateUrl: "./mro000-result.component.html" +}) +export class Mro000ResultComponent implements OnInit { + selectInfo: any[]; + selectVillage: any; + selectLightNo$: Observable; + searchTerms = new Subject(); + repairData: RepairData; + errorMessage: string; + loading = false; + isLightNoExisted = true; + searchFinish: boolean; + result: any; + companyEmail: any[]; + siteInformationList: any; + constructor( + private mroDataService: MroDataService, + private setDataService: SetDataService, + private helperService: HelperService, + private sysDataService: SysDataService, + private router: Router + ) {} + + ngOnInit() { + this.repairData = new RepairData(); + this.repairData.questionType = 0; + this.getCompanyEmail(); + this.siteInformationList = []; + this.getSiteInformationAll(); + } + + + getSiteInformationAll(): any { + this.sysDataService.getSiteInformationAll().subscribe(res => { + const result = res.json().Result; + this.siteInformationList = result; + }, error => (this.errorMessage = error)); + } + + + backPreviousPage() { + window.history.go(-1); + } + + + getCompanyEmail() { + this.setDataService.getCompanyEmail().subscribe(res => { + const result = res.json().Result; + this.companyEmail = result; + }, error => (this.errorMessage = error)); + } + + + + + + + postRepairFormData(): void { + this.loading = true; + + this.mroDataService.postRepairForm(this.repairData).subscribe(res => { + const result = res.json(); + if (result.Success === true) { + this.loading = false; + swal({ + type: "success", + title: "新增成功,感謝您的回報", + showConfirmButton: false, + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => { + this.router.navigate(["login"]); + } + }); + } else { + this.loading = false; + swal({ + type: "error", + title: "新增失敗", + text: "請檢查您輸入的資訊...", + showConfirmButton: true + }); + } + }); + } + + + + +} diff --git a/src/app/views/login/mro000.component.html b/src/app/views/login/mro000.component.html new file mode 100644 index 0000000..4477d31 --- /dev/null +++ b/src/app/views/login/mro000.component.html @@ -0,0 +1,68 @@ + +
    +
    +
    + +
    +
    +
    +
    +
    +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + + +
    + + + +
    + + +
    + +
    +
    +
    +
    +
    +
    +
    +
    + diff --git a/src/app/views/login/mro000.component.ts b/src/app/views/login/mro000.component.ts new file mode 100644 index 0000000..7ef8b12 --- /dev/null +++ b/src/app/views/login/mro000.component.ts @@ -0,0 +1,106 @@ +import { Component, OnInit } from "@angular/core"; +import { FormControl } from "@angular/forms"; +import { Observable } from "rxjs/Observable"; +import { Subject } from "rxjs/Subject"; +import { of } from "rxjs/observable/of"; +import { debounceTime, distinctUntilChanged, switchMap } from "rxjs/operators"; +import { Router } from "@angular/router"; +import { timeInterval } from "rxjs/operators/timeInterval"; +import { HelperService } from "../../service/helper.service"; +import { MroDataService } from "../../service/mro-data.service"; +import { SetDataService } from "app/service/set-data.service"; +import { RepairData } from "../../data/RepairData"; + +import swal from "sweetalert2"; +import { SysDataService } from "app/service/sys-data.service"; + +@Component({ + selector: "app-mro000", + templateUrl: "./mro000.component.html" +}) +export class Mro000Component implements OnInit { + selectInfo: any[]; + selectVillage: any; + selectLightNo$: Observable; + searchTerms = new Subject(); + repairData: RepairData; + errorMessage: string; + loading = false; + isLightNoExisted = true; + searchFinish: boolean; + result: any; + companyEmail: any[]; + siteInformationList: any; + constructor( + private mroDataService: MroDataService, + private setDataService: SetDataService, + private helperService: HelperService, + private sysDataService: SysDataService, + private router: Router + ) {} + + ngOnInit() { + this.repairData = new RepairData(); + + this.repairData.questionType = 0; + + this.getCompanyEmail(); + this.siteInformationList = []; + this.getSiteInformationAllByUser(); + + } + + getSiteInformationAllByUser(): any { + this.sysDataService.getSiteInformationAll().subscribe(res => { + const result = res.json().Result; + this.siteInformationList = result; + }, error => (this.errorMessage = error)); + } + + backPreviousPage() { + window.history.go(-1); + } + + + getCompanyEmail() { + this.setDataService.getCompanyEmail().subscribe(res => { + const result = res.json().Result; + this.companyEmail = result; + }, error => (this.errorMessage = error)); + } + + + + postRepairFormData(): void { + this.loading = true; + + this.mroDataService.postRepairForm(this.repairData).subscribe(res => { + const result = res.json(); + if (result.Success === true) { + this.loading = false; + swal({ + type: "success", + title: "新增成功,感謝您的回報", + showConfirmButton: false, + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => { + this.router.navigate(["dashboard"]); + } + }); + } else { + this.loading = false; + swal({ + type: "error", + title: "新增失敗", + text: "請檢查您輸入的資訊...", + showConfirmButton: true + }); + } + }); + } + + +} diff --git a/src/app/views/mro/mro-routing.module.ts b/src/app/views/mro/mro-routing.module.ts new file mode 100644 index 0000000..666d789 --- /dev/null +++ b/src/app/views/mro/mro-routing.module.ts @@ -0,0 +1,62 @@ +import { NgModule } from "@angular/core"; +import { Routes, RouterModule } from "@angular/router"; +import { AuthGuard } from "../../auth-guard.service"; +import { Mro004Component } from "app/views/mro/mro004/mro004.component"; +import { Mro005Component } from "app/views/mro/mro005/mro005.component"; +import { Mro006Component } from "app/views/mro/mro006/mro006.component"; +import { Mro007Component } from "app/views/mro/mro007/mro007.component"; + +const routes: Routes = [ + { + path: "", + data: { + title: "報表管理" + }, + children: [ + + + { + path: "mro004", + component: Mro004Component, + canActivate: [AuthGuard], + data: { + title: "違規類型違規數統計" + } + }, + { + path: "mro005", + component: Mro005Component, + canActivate: [AuthGuard], + data: { + title: "違規事件&站點違規數統計" + } + }, + + { + path: "mro006", + component: Mro006Component, + canActivate: [AuthGuard], + data: { + title: "設備故障統計表" + } + }, + { + path: "mro007", + component: Mro007Component, + canActivate: [AuthGuard], + data: { + title: "API 表格清單" + } + }, + ] + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], + providers: [ + + ] +}) +export class MroRoutingModule {} diff --git a/src/app/views/mro/mro.module.ts b/src/app/views/mro/mro.module.ts new file mode 100644 index 0000000..0eed833 --- /dev/null +++ b/src/app/views/mro/mro.module.ts @@ -0,0 +1,43 @@ +import { NgModule } from "@angular/core"; +import { CommonModule } from "@angular/common"; + +import { FormsModule } from "@angular/forms"; +import { DataTablesModule } from "angular-datatables"; +import { TabsModule } from "ngx-bootstrap/tabs"; +import { ModalModule } from "ngx-bootstrap/modal"; +import { ChartsModule } from "ng2-charts/ng2-charts"; +import { MyDatePickerModule } from "mydatepicker"; +import { TimeAgoPipe } from "time-ago-pipe"; +import { LoadingModule, ANIMATION_TYPES } from "ngx-loading"; +import { MomentModule } from 'ngx-moment'; +import {MomentTimezoneModule} from 'angular-moment-timezone'; + +import { MroRoutingModule } from "app/views/mro/mro-routing.module"; +import { Mro004Component } from "./mro004/mro004.component"; +import { Mro005Component } from "./mro005/mro005.component"; +import { Mro006Component } from "./mro006/mro006.component"; +import { Mro007Component } from "./mro007/mro007.component"; + +@NgModule({ + imports: [ + CommonModule, + ChartsModule, + MyDatePickerModule, + FormsModule, + MomentModule, + MomentTimezoneModule, + MroRoutingModule, + DataTablesModule, + TabsModule.forRoot(), + ModalModule.forRoot(), + LoadingModule + ], + declarations: [ + Mro004Component, + Mro005Component, + Mro006Component, + Mro007Component, + TimeAgoPipe + ] +}) +export class MroModule {} diff --git a/src/app/views/mro/mro004/mro004.component.html b/src/app/views/mro/mro004/mro004.component.html new file mode 100644 index 0000000..cc7c9fb --- /dev/null +++ b/src/app/views/mro/mro004/mro004.component.html @@ -0,0 +1,234 @@ +
    + +
    +
    + +

    違規類型違規數統計表

    +
    +
    +
    +
    +
    +
    + 違規類型 +
    + +
    +
    +
    +
    +
    +
    + 站點 : +
    + + +
    +
    + + +
    +
    +
    +
    +
    +
    +
    +
    +
    + 查詢日期 + + 至 + +
    +
    +
    +
    +
    +
    + 查詢時間(0~24) + + + +
    +
    +
    +
    +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    + 時間 + 汽車 + 機車 + 計程車 + 公車 + 無車牌 + 有車牌
    {{Item.DateTime}}{{Item.CarCount}}{{Item.MotorcycleCount}}{{Item.TaxiCount}}{{Item.BusCount}}{{Item.HasNoNumber}}{{Item.HasNumber}}
    +
    +
    + 暫無資料 +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + 時速 + 違規車輛
    {{Item.Speed}}{{Item.Count}}
    +
    +
    + 暫無資料 +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + +
    + 汽車 + 貨車 + 大客車
    {{Item.CarCount}}{{Item.TruckCount}}{{Item.CoachCount}}
    +
    +
    + 暫無資料 +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + +
    + 噸數 + 違規車輛
    {{Item.Ton}}{{Item.Count}}
    +
    +
    + 暫無資料 +
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/src/app/views/mro/mro004/mro004.component.ts b/src/app/views/mro/mro004/mro004.component.ts new file mode 100644 index 0000000..519c97c --- /dev/null +++ b/src/app/views/mro/mro004/mro004.component.ts @@ -0,0 +1,486 @@ +import { BoardDataService } from 'app/service/board-data.service'; +import { SysDataService } from './../../../service/sys-data.service'; +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { MroDataService } from 'app/service/mro-data.service'; +import { SetDataService } from 'app/service/set-data.service'; +import { ActivatedRoute } from '@angular/router'; +import { IMyDpOptions, IMyDateModel } from 'mydatepicker'; +import { TableQueryData } from 'app/data/TableQueryData'; +import { ApiTableData } from 'app/data/ApiTableData'; +import swal from 'sweetalert2'; +import { SiteEventTypesData } from 'app/data/SiteEventTypesData'; +import { EventTypeReportData } from 'app/data/EventTypeReportData'; + +@Component({ + selector: 'app-mro004', + templateUrl: './mro004.component.html', +}) +export class Mro004Component implements OnInit { + + loading = false; + errorMessage: String; + tableQueryData: TableQueryData; + apiDataList = []; + currentPage = 0; + pageCount = 0; + pageLinks = []; + pageLinkMarginCount = 2; + tycgTableName: string; + apiTableData: ApiTableData; + IsAsc = true; + item: string; + + + public myDatePickerOptions: IMyDpOptions = { + dateFormat: 'yyyy/mm/dd', + editableDateField: false, + openSelectorOnInputClick: true, + dayLabels: { + su: '日', + mo: '一', + tu: '二', + we: '三', + th: '四', + fr: '五', + sa: '六', + }, + monthLabels: { + 1: '一月', + 2: '二月', + 3: '三月', + 4: '四月', + 5: '五月', + 6: '六月', + 7: '七月', + 8: '八月', + 9: '九月', + 10: '十月', + 11: '十一月', + 12: '十二月', + }, + todayBtnTxt: '今天', + }; + + startDT: any; + endDT: any; + startDT1: number; + endDT1: number; + + EventTypeList: any; + siteInformationList: any; + ReportSiteEventTypes: any; + areaArray: any; + + rowCount: number; + colCount: number; + + siteList: any; + siteRows: any; + Rows: any; + + ReportEventType1List: any; + ReportEventType2List: any; + ReportEventType34List: any; + ReportEventType6List: any; + + eventTypeId: string; + fileName: string; + urlExport: any; + + constructor( + private mroDataService: MroDataService, + private setDataService: SetDataService, + private sysDataService: SysDataService, + private boardDataService: BoardDataService + ) {} + + ngOnInit() { + + this.tycgTableName = ""; + this.tableQueryData = new TableQueryData(); + this.tableQueryData.CurrentPage = 0; + + const currentdate = new Date(); + const startdatetime = currentdate.getFullYear() + "/" + + (currentdate.getMonth() + 1) + "/" + + currentdate.getDate(); + + const enddatetime = currentdate.getFullYear() + "/" + + (currentdate.getMonth() + 1) + "/" + + currentdate.getDate(); + + this.startDT = {formatted: startdatetime}; + this.endDT = {formatted: enddatetime}; + + this.getEventTypeId(); + + this.siteList = []; + this.siteRows = []; + this.Rows = []; + + this.ReportEventType1List = []; + this.ReportEventType2List = []; + this.ReportEventType34List = []; + this.ReportEventType6List = []; + + this.eventTypeId = ""; + this.fileName = ""; + + } + + + getEventTypeId() { + this.setDataService.getEventTypeId().subscribe(res => { + const result = res.json().Result; + this.EventTypeList = result; + }, error => (this.errorMessage = error)); + } + + getSiteInformationAll(eventTypeId): any { + this.sysDataService.getSiteInformationAll().subscribe(res => { + const result1 = res.json().Result; + this.siteInformationList = result1; + const result = []; + this.siteList = []; + this.siteRows = []; + + for (let index = 0; index < result1.length; index++) { + const element = result1[index]; + + if (eventTypeId === "34") { + if (element.EventType === "3") { + result.push(element); + } + if (element.EventType === "4") { + result.push(element); + } + } else { + if (element.EventType === eventTypeId) { + result.push(element); + } + } + } + + var allArea = result.map(function(item) { + return item.Area; + }); + this.areaArray = allArea.filter(function(element, index, arr) { + return arr.indexOf(element) === index; + }); + + + for (let index = 0; index < this.areaArray.length; index++) { + const element = this.areaArray[index]; + this.Rows = []; + for (let index1 = 0; index1 < result.length; index1++) { + const element1 = result[index1]; + if (element1.Area === element) { + this.Rows.push(element1); + } + } + + if (index !== (this.areaArray.length - 1)) { + + if (this.siteRows.length < 3) { + this.siteRows[this.siteRows.length] = this.Rows; + } else { + this.siteList[this.siteList.length] = this.siteRows; + this.siteRows = []; + } + } else { + this.siteRows[this.siteRows.length] = this.Rows; + this.siteList[this.siteList.length] = this.siteRows; + } + } + + this.rowCount = this.areaArray / 3; + const remainder = this.areaArray % 3; + if (remainder > 0) { + this.rowCount++; + } + }, error => (this.errorMessage = error)); + } + + selectALL(isChecked, item, i, j) { + for (let index = 0; index < this.siteList[i][j].length; index++) { + const element = this.siteList[i][j]; + element[index].isChecked = isChecked; + } + } + + doSearch() { + this.loading = true; + const eventTypeData = new EventTypeReportData(); + eventTypeData.StartDate = this.startDT.formatted; + eventTypeData.EndDate = this.endDT.formatted; + if (this.startDT1 === undefined) { + this.startDT1 = 0; + } + if (this.endDT1 === undefined) { + this.endDT1 = 24; + } + eventTypeData.StartTime = this.startDT1; + eventTypeData.EndTime = this.endDT1; + eventTypeData.Sites = []; + + + if (this.siteInformationList === undefined) { + + + + swal({ + type: "error", + title: "查詢失敗", + text: "請選取違規類型...", + showConfirmButton: false, + timer: 2000, + }); + + this.loading = false; + + } else { + + + for (let index = 0; index < this.siteInformationList.length; index++) { + const element = this.siteInformationList[index]; + if (element.isChecked) { + eventTypeData.Sites.push(element.SiteID.toString()); + } + } + + if (eventTypeData.Sites.length === 0) { + swal({ + type: "error", + title: "查詢失敗", + text: "請勾選站點...", + showConfirmButton: false, + timer: 2000, + }); + this.loading = false; + } else { + switch (this.eventTypeId) { + case "1": + this.postReportEventType1(eventTypeData, "0"); + break; + + case "2": + this.postReportEventType2(eventTypeData, "0"); + break; + case "34": + this.postReportEventType34(eventTypeData, "0"); + break; + case "6": + this.postReportEventType6(eventTypeData, "0"); + break; + default: + break; + } + + } + + + + } + + + + } + + doSearchExport() { + this.loading = true; + const eventTypeData = new EventTypeReportData(); + eventTypeData.StartDate = this.startDT.formatted; + eventTypeData.EndDate = this.endDT.formatted; + + if (this.startDT1 === undefined) { + this.startDT1 = 0; + } + if (this.endDT1 === undefined) { + this.endDT1 = 24; + } + eventTypeData.StartTime = this.startDT1; + eventTypeData.EndTime = this.endDT1; + eventTypeData.Sites = []; + + + if (this.siteInformationList === undefined) { + + + + swal({ + type: "error", + title: "查詢失敗", + text: "請選取違規類型...", + showConfirmButton: false, + timer: 2000, + }); + + this.loading = false; + + } else { + + for (let index = 0; index < this.siteInformationList.length; index++) { + const element = this.siteInformationList[index]; + if (element.isChecked) { + eventTypeData.Sites.push(element.SiteID.toString()); + } + } + + if (eventTypeData.Sites.length === 0) { + swal({ + type: "error", + title: "查詢失敗", + text: "請勾選站點...", + showConfirmButton: false, + timer: 2000, + }); + this.loading = false; + } else { + switch (this.eventTypeId) { + case "1": + this.postReportEventType1(eventTypeData, "1"); + break; + case "2": + this.postReportEventType2(eventTypeData, "1"); + break; + case "34": + this.postReportEventType34(eventTypeData, "1"); + break; + case "6": + this.postReportEventType6(eventTypeData, "1"); + break; + default: + break; + } + } + } + } + + + postReportEventType1(eventTypeData: EventTypeReportData, method: string): any { + this.boardDataService.postReportEventType1(method, eventTypeData).subscribe(res => { + if (method === '0') { + const result = res.json().Result; + this.ReportEventType1List = result; + this.loading = false; + } else { + this.urlExport = res; + const link = document.createElement("a"); + link.href = this.urlExport._body; + this.fileName = this.urlExport._body.substring(this.urlExport._body.lastIndexOf('/') + 1); + link.download = this.fileName; + link.click(); + this.loading = false; + } + }, error => (this.errorMessage = error)); + } + + postReportEventType2(eventTypeData: EventTypeReportData, method: string): any { + this.boardDataService.postReportEventType2(method, eventTypeData).subscribe(res => { + if (method === '0') { + const result = res.json().Result; + this.ReportEventType2List = result; + this.loading = false; + } else { + this.urlExport = res; + const link = document.createElement("a"); + link.href = this.urlExport._body; + this.fileName = this.urlExport._body.substring(this.urlExport._body.lastIndexOf('/') + 1); + link.download = this.fileName; + link.click(); + this.loading = false; + } + }, error => (this.errorMessage = error)); + } + + + postReportEventType34(eventTypeData: EventTypeReportData, method: string): any { + this.boardDataService.postReportEventType34(method, eventTypeData).subscribe(res => { + if (method === '0') { + const result = res.json().Result; + this.ReportEventType34List = result; + this.loading = false; + } else { + this.urlExport = res; + const link = document.createElement("a"); + link.href = this.urlExport._body; + this.fileName = this.urlExport._body.substring(this.urlExport._body.lastIndexOf('/') + 1); + link.download = this.fileName; + link.click(); + this.loading = false; + } + }, error => (this.errorMessage = error)); + } + + + postReportEventType6(eventTypeData: EventTypeReportData, method: string): any { + this.boardDataService.postReportEventType6(method, eventTypeData).subscribe(res => { + if (method === '0') { + const result = res.json().Result; + this.ReportEventType6List = result; + this.loading = false; + } else { + this.urlExport = res; + const link = document.createElement("a"); + link.href = this.urlExport._body; + this.fileName = this.urlExport._body.substring(this.urlExport._body.lastIndexOf('/') + 1); + link.download = this.fileName; + link.click(); + this.loading = false; + } + }, error => (this.errorMessage = error)); + } + + + + onSelectEventTypeIdChange(value) { + this.getSiteInformationAll(value); + } + + + postReportSiteEventTypes(siteEventTypesData: SiteEventTypesData): any { + this.boardDataService.postReportSiteEventTypes("0", siteEventTypesData).subscribe(res => { + const result = res.json().Result; + this.ReportSiteEventTypes = result; + this.loading = false; + }, error => (this.errorMessage = error)); + } + + + + getPageLinks() { + this.pageLinks = []; + let firstPageNumber = + this.tableQueryData.CurrentPage - this.pageLinkMarginCount; + let lastPageNumber = + this.tableQueryData.CurrentPage + this.pageLinkMarginCount; + if (firstPageNumber < 1) { + firstPageNumber = 1; + } + if (lastPageNumber > this.pageCount) { + lastPageNumber = this.pageCount; + } + if (firstPageNumber > 1) { + const isCurrentPage = firstPageNumber === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: "第一頁", + pageNo: 1, + isCurrent: isCurrentPage + }); + } + for (let i = firstPageNumber; i <= lastPageNumber; i++) { + const isCurrentPage = i === this.tableQueryData.CurrentPage; + this.pageLinks.push({ text: i, pageNo: i, isCurrent: isCurrentPage }); + } + if (lastPageNumber < this.pageCount) { + const isCurrentPage = lastPageNumber === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: "最後頁(共 " + this.pageCount + " 頁)", + pageNo: this.pageCount, + isCurrent: isCurrentPage + }); + } + } + +} diff --git a/src/app/views/mro/mro005/mro005.component.html b/src/app/views/mro/mro005/mro005.component.html new file mode 100644 index 0000000..7edb352 --- /dev/null +++ b/src/app/views/mro/mro005/mro005.component.html @@ -0,0 +1,186 @@ +
    +
    +
    + +

    違規事件統計、站點違規數統計表

    +
    +
    +
    +
    +
    +
    +
    + 違規類型 : +
    + + +
    +
    +
    +
    +
    +
    +
    + 站點 : {{rows[0].Area}} +
    + + +
    +
    + + +
    +
    +
    +
    +
    +
    +
    +
    +
    + 查詢區間 + + 至 + +
    +
    +
    +
    +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    + 違規項目 + 違規總數 + 未開單 + 裁決中 + 不開單 + 已拒絕 + 已開單
    {{eventTypeItem.EventName}}{{eventTypeItem.EventTotalCount}}{{eventTypeItem.NoStatusCount}}{{eventTypeItem.CheckPunishCount}}{{eventTypeItem.NoPunishCount}}{{eventTypeItem.RejectedCount}}{{eventTypeItem.PunishCount}}
    +
    +
    + 暫無資料 +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    + 站點ID + 站點名稱 + 事件總數 + 未開單 + 裁決中 + 不開單 + 已拒絕 + 已開單
    {{siteInfoItem.SiteId}}{{siteInfoItem.SiteName}}{{siteInfoItem.EventTotalCount}}{{siteInfoItem.NoStatusCount}}{{siteInfoItem.CheckPunishCount}}{{siteInfoItem.NoPunishCount}}{{siteInfoItem.RejectedCount}}{{siteInfoItem.PunishCount}}
    +
    +
    + 暫無資料 +
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/src/app/views/mro/mro005/mro005.component.ts b/src/app/views/mro/mro005/mro005.component.ts new file mode 100644 index 0000000..df0d906 --- /dev/null +++ b/src/app/views/mro/mro005/mro005.component.ts @@ -0,0 +1,428 @@ +import { BoardDataService } from 'app/service/board-data.service'; +import { SysDataService } from './../../../service/sys-data.service'; +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { MroDataService } from 'app/service/mro-data.service'; +import { SetDataService } from 'app/service/set-data.service'; +import { ActivatedRoute } from '@angular/router'; +import { IMyDpOptions, IMyDateModel } from 'mydatepicker'; +import { TableQueryData } from 'app/data/TableQueryData'; +import { ApiTableData } from 'app/data/ApiTableData'; +import swal from 'sweetalert2'; +import { SiteEventTypesData } from 'app/data/SiteEventTypesData'; +import { ReportSiteEventTypesData } from 'app/data/ReportSiteEventTypesData'; + +@Component({ + selector: 'app-mro005', + templateUrl: './mro005.component.html', +}) +export class Mro005Component implements OnInit { + + loading = false; + errorMessage: String; + tableQueryData: TableQueryData; + apiDataList = []; + currentPage = 0; + pageCount = 0; + pageLinks = []; + pageLinkMarginCount = 2; + tycgTableName: string; + apiTableData: ApiTableData; + IsAsc = true; + item: string; + + public myDatePickerOptions: IMyDpOptions = { + dateFormat: 'yyyy/mm/dd', + editableDateField: false, + openSelectorOnInputClick: true, + dayLabels: { + su: '日', + mo: '一', + tu: '二', + we: '三', + th: '四', + fr: '五', + sa: '六', + }, + monthLabels: { + 1: '一月', + 2: '二月', + 3: '三月', + 4: '四月', + 5: '五月', + 6: '六月', + 7: '七月', + 8: '八月', + 9: '九月', + 10: '十月', + 11: '十一月', + 12: '十二月', + }, + todayBtnTxt: '今天', + }; + + startDT: any; + endDT: any; + startDT1: any; + endDT1: any; + + EventTypeList: any; + siteInformationList: any; + ReportSiteEventTypes: ReportSiteEventTypesData; + areaArray: any; + + rowCount: number; + colCount: number; + + siteList: any; + siteRows: any; + Rows: any; + + fileName: string; + urlExport: any; + + isChecked: any; + + + constructor( + private mroDataService: MroDataService, + private setDataService: SetDataService, + private sysDataService: SysDataService, + private boardDataService: BoardDataService + ) {} + + ngOnInit() { + + this.loading = false; + this.tycgTableName = ""; + this.tableQueryData = new TableQueryData(); + this.tableQueryData.CurrentPage = 0; + + const currentdate = new Date(); + const startdatetime = currentdate.getFullYear() + "/" + + (currentdate.getMonth() + 1) + "/" + + currentdate.getDate(); // + " " + // + "00" + ":" + // + "00" + ":" + // + "00"; + const enddatetime = currentdate.getFullYear() + "/" + + (currentdate.getMonth() + 1) + "/" + + currentdate.getDate(); // + " " + // + "23" + ":" + // + "59" + ":" + // + "59"; + + + // var startdatetime = "2021/03/01"; + // var enddatetime = "2021/03/01"; + + this.startDT = {formatted: startdatetime}; + this.endDT = {formatted: enddatetime}; + + + this.getEventTypeId(); + this.getSiteInformationAll(); + + this.siteList = []; + this.siteRows = []; + this.Rows = []; + this.ReportSiteEventTypes = new ReportSiteEventTypesData; + this.ReportSiteEventTypes.eachEventTypesSiteViewModel = []; + this.ReportSiteEventTypes.eachSiteEventTypesViewModel = []; + + this.fileName = ""; + } + + + getEventTypeId() { + this.setDataService.getEventTypeId().subscribe(res => { + const result = res.json().Result; + this.EventTypeList = result; + for (let index = 0; index < this.EventTypeList.length; index++) { + const element = this.EventTypeList[index]; + if (element.EventType === "99") { + this.EventTypeList.splice(index, 1); + } + } + }, error => (this.errorMessage = error)); + } + + getSiteInformationAll(): any { + this.sysDataService.getSiteInformationAll().subscribe(res => { + const result = res.json().Result; + this.siteInformationList = result; + + var allArea = result.map(function(item) { + return item.Area; + }); + this.areaArray = allArea.filter(function(element, index, arr) { + return arr.indexOf(element) === index; + }); + + + for (let index = 0; index < this.areaArray.length; index++) { + const element = this.areaArray[index]; + // if (((index) % 3) === 0) { + // this.Rows = []; + // } + + this.Rows = []; + + + for (let index1 = 0; index1 < result.length; index1++) { + const element1 = result[index1]; + if (element1.Area === element) { + this.Rows.push(element1); + } + } + + if (index !== (this.areaArray.length - 1)) { + + if (this.siteRows.length < 3) { + this.siteRows[this.siteRows.length] = this.Rows; + } else { + this.siteList[this.siteList.length] = this.siteRows; + this.siteRows = []; + } + } else { + this.siteList[this.siteList.length] = this.siteRows; + } + } + + + + this.rowCount = this.areaArray / 3; + const remainder = this.areaArray % 3; + if (remainder > 0) { + this.rowCount++; + } + + + }, error => (this.errorMessage = error)); + } + + selectALL(isChecked, item, i, j) { + for (let index = 0; index < this.siteList[i][j].length; index++) { + const element = this.siteList[i][j]; + element[index].isChecked = isChecked; + + } + + + + + } + + doSearch() { + // this.tableQueryData.Page = null; + // if (this.tycgTableName === null || this.tycgTableName === "" || this.tycgTableName === "undefined") { + // swal({ + // type: "error", + // title: "API 表格名稱錯誤", + // text: "請檢查表格名稱...", + // showConfirmButton: true + // }); + // return; + // } + + + this.loading = true; + const siteEventTypesData = new SiteEventTypesData(); + siteEventTypesData.Sites = []; + siteEventTypesData.EventTypes = []; + if (this.startDT1 === undefined) { + this.startDT1 = "00:00" + } + if (this.endDT1 === undefined) { + this.endDT1 = "23:59" + } + siteEventTypesData.StartTime = this.startDT.formatted + " " + this.startDT1; + siteEventTypesData.EndTime = this.endDT.formatted + " " + this.endDT1; + + for (let index = 0; index < this.EventTypeList.length; index++) { + const element = this.EventTypeList[index]; + if (element.isChecked) { + siteEventTypesData.EventTypes.push(element.Id.toString()); + } + } + + if (siteEventTypesData.EventTypes.length === 0) { + + swal({ + type: "error", + title: "查詢失敗", + text: "請勾選違規類型...", + showConfirmButton: false, + timer: 2000, + }); + + } + + + for (let index = 0; index < this.siteInformationList.length; index++) { + const element = this.siteInformationList[index]; + if (element.isChecked) { + siteEventTypesData.Sites.push(element.SiteID.toString()); + } + } + + if (siteEventTypesData.Sites.length === 0) { + swal({ + type: "error", + title: "查詢失敗", + text: "請勾選站點...", + showConfirmButton: false, + timer: 2000, + }); + } + + this.postReportSiteEventTypes(siteEventTypesData, "0"); + } + + + + doSearchExport() { + this.loading = true; + const siteEventTypesData = new SiteEventTypesData(); + siteEventTypesData.Sites = []; + siteEventTypesData.EventTypes = []; + siteEventTypesData.StartTime = this.startDT.formatted + " " + this.startDT1; + siteEventTypesData.EndTime = this.endDT.formatted + " " + this.endDT1; + + for (let index = 0; index < this.EventTypeList.length; index++) { + const element = this.EventTypeList[index]; + if (element.isChecked) { + siteEventTypesData.EventTypes.push(element.Id.toString()); + } + } + + + swal({ + type: "error", + title: "匯出失敗", + text: "請勾選違規類型...", + showConfirmButton: false, + timer: 2000, + }); + + + for (let index = 0; index < this.siteInformationList.length; index++) { + const element = this.siteInformationList[index]; + if (element.isChecked) { + siteEventTypesData.Sites.push(element.SiteID.toString()); + } + } + + if (siteEventTypesData.Sites.length === 0) { + swal({ + type: "error", + title: "匯出失敗", + text: "請勾選站點...", + showConfirmButton: false, + timer: 2000, + }); + } + + this.postReportSiteEventTypes(siteEventTypesData, "1"); + } + + + postReportSiteEventTypes(siteEventTypesData: SiteEventTypesData, method: string): any { + this.boardDataService.postReportSiteEventTypes(method, siteEventTypesData).subscribe(res => { + // const result = res.json().Result; + + if (method === '0') { + const result = res.json().Result; + this.ReportSiteEventTypes = result; + this.loading = false; + } else { + this.urlExport = res; + const link = document.createElement("a"); + link.href = this.urlExport._body; + this.fileName = this.urlExport._body.substring(this.urlExport._body.lastIndexOf('/') + 1); + link.download = this.fileName; + link.click(); + this.loading = false; + } + + + }, error => (this.errorMessage = error)); + } + + + + + + + + // getAPITableDataList(tableQueryData: TableQueryData, tycgTableName?: string): any { + // this.loading = true; + // this.tableQueryData.CurrentPage = tableQueryData.Page + // ? tableQueryData.Page + // : 1; + // this.mroDataService.getAPITableDataList(tableQueryData, tycgTableName).subscribe(res => { + // const result = res.json().Result; + // this.apiDataList = result.Data; + // this.loading = false; + // if (tableQueryData.Page === 1 || !tableQueryData.Page) { + // this.pageCount = result.PageCount; + // this.getPageLinks(); + // } + // }, error => (this.errorMessage = error)); + // } + + // onPageChange(e: Event, page) { + // e.preventDefault(); + // this.tableQueryData.CurrentPage = page; + // this.tableQueryData.Page = this.tableQueryData.CurrentPage; + // this.getPageLinks(); + // this.getAPITableDataList(this.tableQueryData, this.tycgTableName); + // } + + + + getPageLinks() { + this.pageLinks = []; + let firstPageNumber = + this.tableQueryData.CurrentPage - this.pageLinkMarginCount; + let lastPageNumber = + this.tableQueryData.CurrentPage + this.pageLinkMarginCount; + if (firstPageNumber < 1) { + firstPageNumber = 1; + } + if (lastPageNumber > this.pageCount) { + lastPageNumber = this.pageCount; + } + if (firstPageNumber > 1) { + const isCurrentPage = firstPageNumber === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: "第一頁", + pageNo: 1, + isCurrent: isCurrentPage + }); + } + for (let i = firstPageNumber; i <= lastPageNumber; i++) { + const isCurrentPage = i === this.tableQueryData.CurrentPage; + this.pageLinks.push({ text: i, pageNo: i, isCurrent: isCurrentPage }); + } + if (lastPageNumber < this.pageCount) { + const isCurrentPage = lastPageNumber === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: "最後頁(共 " + this.pageCount + " 頁)", + pageNo: this.pageCount, + isCurrent: isCurrentPage + }); + } + } + + // order(item) { + // this.IsAsc = !this.IsAsc; + // this.item = item; + // this.tableQueryData.Order = item; + // this.tableQueryData.IsAsc = this.IsAsc.toString(); + // this.getAPITableDataList(this.tableQueryData, this.tycgTableName); + // } + + + +} diff --git a/src/app/views/mro/mro006/mro006.component.html b/src/app/views/mro/mro006/mro006.component.html new file mode 100644 index 0000000..866a1f4 --- /dev/null +++ b/src/app/views/mro/mro006/mro006.component.html @@ -0,0 +1,142 @@ +
    + +
    +
    + +

    設備故障統計表

    +
    +
    +
    +
    +
    +
    +
    + 站點 : {{rows[0].Area}} +
    + + +
    +
    + + +
    +
    +
    +
    +
    +
    +
    +
    +
    + 查詢日期 + + 至 + +
    +
    +
    +
    +
    +
    + 查詢時間(0~24) + + + +
    +
    +
    +
    +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    + 時間 + 站點ID + 站點名稱 + 廠商代碼 + 設備類型 + 設備ID + 訊息
    {{malfunction.Time}}{{malfunction.SiteId}}{{malfunction.SiteName}}{{malfunction.CompanyCode}}{{malfunction.DeviceType}}{{malfunction.DeviceID}}{{malfunction.Message}}
    +
    +
    + 暫無資料 +
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/src/app/views/mro/mro006/mro006.component.ts b/src/app/views/mro/mro006/mro006.component.ts new file mode 100644 index 0000000..6f10086 --- /dev/null +++ b/src/app/views/mro/mro006/mro006.component.ts @@ -0,0 +1,373 @@ +import { BoardDataService } from 'app/service/board-data.service'; +import { SysDataService } from './../../../service/sys-data.service'; +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { MroDataService } from 'app/service/mro-data.service'; +import { SetDataService } from 'app/service/set-data.service'; +import { ActivatedRoute } from '@angular/router'; +import { IMyDpOptions, IMyDateModel } from 'mydatepicker'; +import { TableQueryData } from 'app/data/TableQueryData'; +import { ApiTableData } from 'app/data/ApiTableData'; +import swal from 'sweetalert2'; +import { SiteEventTypesData } from 'app/data/SiteEventTypesData'; +import { MalfunctionData } from 'app/data/MalfunctionData'; + +@Component({ + selector: 'app-mro006', + templateUrl: './mro006.component.html', +}) +export class Mro006Component implements OnInit { + + loading = false; + errorMessage: String; + tableQueryData: TableQueryData; + apiDataList = []; + currentPage = 0; + pageCount = 0; + pageLinks = []; + pageLinkMarginCount = 2; + tycgTableName: string; + apiTableData: ApiTableData; + IsAsc = true; + item: string; + + public myDatePickerOptions: IMyDpOptions = { + dateFormat: 'yyyy/mm/dd', + editableDateField: false, + openSelectorOnInputClick: true, + dayLabels: { + su: '日', + mo: '一', + tu: '二', + we: '三', + th: '四', + fr: '五', + sa: '六', + }, + monthLabels: { + 1: '一月', + 2: '二月', + 3: '三月', + 4: '四月', + 5: '五月', + 6: '六月', + 7: '七月', + 8: '八月', + 9: '九月', + 10: '十月', + 11: '十一月', + 12: '十二月', + }, + todayBtnTxt: '今天', + }; + + startDT: any; + endDT: any; + startDT1: number; + endDT1: number; + + EventTypeList: any; + siteInformationList: any; + ReportMalfunctionList: any; + areaArray: any; + + rowCount: number; + colCount: number; + + siteList: any; + siteRows: any; + Rows: any; + + fileName: string; + urlExport: any; + + + constructor( + private mroDataService: MroDataService, + private setDataService: SetDataService, + private sysDataService: SysDataService, + private boardDataService: BoardDataService + ) {} + + ngOnInit() { + + this.tycgTableName = ""; + this.tableQueryData = new TableQueryData(); + this.tableQueryData.CurrentPage = 0; + this.loading = false; + + const currentdate = new Date(); + const startdatetime = currentdate.getFullYear() + "/" + + (currentdate.getMonth() + 1) + "/" + + currentdate.getDate(); + + const enddatetime = currentdate.getFullYear() + "/" + + (currentdate.getMonth() + 1) + "/" + + currentdate.getDate(); + + this.startDT = {formatted: startdatetime}; + this.endDT = {formatted: enddatetime}; + + this.getEventTypeId(); + this.getSiteInformationAll(); + + this.siteList = []; + this.siteRows = []; + this.Rows = []; + this.ReportMalfunctionList = []; + + this.fileName = ""; + + } + + + getEventTypeId() { + this.setDataService.getEventTypeId().subscribe(res => { + const result = res.json().Result; + this.EventTypeList = result; + }, error => (this.errorMessage = error)); + } + + getSiteInformationAll(): any { + this.sysDataService.getSiteInformationAll().subscribe(res => { + const result = res.json().Result; + this.siteInformationList = result; + + var allArea = result.map(function(item) { + return item.Area; + }); + this.areaArray = allArea.filter(function(element, index, arr) { + return arr.indexOf(element) === index; + }); + + + for (let index = 0; index < this.areaArray.length; index++) { + const element = this.areaArray[index]; + this.Rows = []; + for (let index1 = 0; index1 < result.length; index1++) { + const element1 = result[index1]; + if (element1.Area === element) { + this.Rows.push(element1); + } + } + + if (index !== (this.areaArray.length - 1)) { + + if (this.siteRows.length < 3) { + this.siteRows[this.siteRows.length] = this.Rows; + } else { + this.siteList[this.siteList.length] = this.siteRows; + this.siteRows = []; + } + } else { + this.siteList[this.siteList.length] = this.siteRows; + } + } + + + + this.rowCount = this.areaArray / 3; + const remainder = this.areaArray % 3; + if (remainder > 0) { + this.rowCount++; + } + }, error => (this.errorMessage = error)); + } + + selectALL(isChecked, item, i, j) { + for (let index = 0; index < this.siteList[i][j].length; index++) { + const element = this.siteList[i][j]; + element[index].isChecked = isChecked; + } + } + + doSearch() { + this.loading = true; + const malfunctionData = new MalfunctionData(); + malfunctionData.StartDate = this.startDT.formatted; + malfunctionData.EndDate = this.endDT.formatted; + + if (this.startDT1 === undefined) { + this.startDT1 = 0; + } + if (this.endDT1 === undefined) { + this.endDT1 = 23; + } + malfunctionData.StartTime = this.startDT1; + malfunctionData.EndTime = this.endDT1; + malfunctionData.Sites = []; + + + // for (let index = 0; index < this.EventTypeList.length; index++) { + // const element = this.EventTypeList[index]; + // if (element.isChecked) { + // siteEventTypesData.EventTypes.push(element.Id.toString()); + // } + // } + + + for (let index = 0; index < this.siteInformationList.length; index++) { + const element = this.siteInformationList[index]; + if (element.isChecked) { + malfunctionData.Sites.push(element.SiteID.toString()); + } + } + + + if (malfunctionData.Sites.length === 0) { + swal({ + type: "error", + title: "查詢失敗", + text: "請勾選站點...", + showConfirmButton: false, + timer: 2000, + }); + this.loading = false; + + } else { + this.postReportMalfunction(malfunctionData, "0"); + } + } + + + doSearchExport() { + this.loading = true; + const malfunctionData = new MalfunctionData(); + malfunctionData.StartDate = this.startDT.formatted; + malfunctionData.EndDate = this.endDT.formatted; + + if (this.startDT1 === undefined) { + this.startDT1 = 0; + } + if (this.endDT1 === undefined) { + this.endDT1 = 24; + } + malfunctionData.StartTime = this.startDT1; + malfunctionData.EndTime = this.endDT1; + malfunctionData.Sites = []; + + + for (let index = 0; index < this.siteInformationList.length; index++) { + const element = this.siteInformationList[index]; + if (element.isChecked) { + malfunctionData.Sites.push(element.SiteID.toString()); + } + } + + if (malfunctionData.Sites.length === 0) { + swal({ + type: "error", + title: "查詢失敗", + text: "請勾選站點...", + showConfirmButton: false, + timer: 2000, + }); + this.loading = false; + + } else { + this.postReportMalfunction(malfunctionData, "1"); + } + + + } + + + postReportMalfunction(malfunctionData: MalfunctionData, method: string): any { + this.boardDataService.postReportMalfunction(method, malfunctionData).subscribe(res => { + // const result = res.json().Result; + + if (method === '0') { + const result = res.json().Result; + this.ReportMalfunctionList = result; + this.loading = false; + } else { + this.urlExport = res; + const link = document.createElement("a"); + link.href = this.urlExport._body; + this.fileName = this.urlExport._body.substring(this.urlExport._body.lastIndexOf('/') + 1); + link.download = this.fileName; + link.click(); + this.loading = false; + } + + + }, error => (this.errorMessage = error)); + } + + + + + + + + // getAPITableDataList(tableQueryData: TableQueryData, tycgTableName?: string): any { + // this.loading = true; + // this.tableQueryData.CurrentPage = tableQueryData.Page + // ? tableQueryData.Page + // : 1; + // this.mroDataService.getAPITableDataList(tableQueryData, tycgTableName).subscribe(res => { + // const result = res.json().Result; + // this.apiDataList = result.Data; + // this.loading = false; + // if (tableQueryData.Page === 1 || !tableQueryData.Page) { + // this.pageCount = result.PageCount; + // this.getPageLinks(); + // } + // }, error => (this.errorMessage = error)); + // } + + // onPageChange(e: Event, page) { + // e.preventDefault(); + // this.tableQueryData.CurrentPage = page; + // this.tableQueryData.Page = this.tableQueryData.CurrentPage; + // this.getPageLinks(); + // this.getAPITableDataList(this.tableQueryData, this.tycgTableName); + // } + + + + getPageLinks() { + this.pageLinks = []; + let firstPageNumber = + this.tableQueryData.CurrentPage - this.pageLinkMarginCount; + let lastPageNumber = + this.tableQueryData.CurrentPage + this.pageLinkMarginCount; + if (firstPageNumber < 1) { + firstPageNumber = 1; + } + if (lastPageNumber > this.pageCount) { + lastPageNumber = this.pageCount; + } + if (firstPageNumber > 1) { + const isCurrentPage = firstPageNumber === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: "第一頁", + pageNo: 1, + isCurrent: isCurrentPage + }); + } + for (let i = firstPageNumber; i <= lastPageNumber; i++) { + const isCurrentPage = i === this.tableQueryData.CurrentPage; + this.pageLinks.push({ text: i, pageNo: i, isCurrent: isCurrentPage }); + } + if (lastPageNumber < this.pageCount) { + const isCurrentPage = lastPageNumber === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: "最後頁(共 " + this.pageCount + " 頁)", + pageNo: this.pageCount, + isCurrent: isCurrentPage + }); + } + } + + // order(item) { + // this.IsAsc = !this.IsAsc; + // this.item = item; + // this.tableQueryData.Order = item; + // this.tableQueryData.IsAsc = this.IsAsc.toString(); + // this.getAPITableDataList(this.tableQueryData, this.tycgTableName); + // } + + + +} diff --git a/src/app/views/mro/mro007/mro007.component.html b/src/app/views/mro/mro007/mro007.component.html new file mode 100644 index 0000000..8e01a51 --- /dev/null +++ b/src/app/views/mro/mro007/mro007.component.html @@ -0,0 +1,81 @@ +
    +
    +
    + +

    API 表格清單

    +
    +
    +
    +
    +
    +
    +
    + 表格名稱 +
    + +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + +
    + Id + Time + IP + API
    {{apiItem.Id}}{{apiItem.Time}}{{apiItem.ip}}{{apiItem.api}}
    +
    +
    + 暫無資料 +
    + +
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/src/app/views/mro/mro007/mro007.component.ts b/src/app/views/mro/mro007/mro007.component.ts new file mode 100644 index 0000000..17c8134 --- /dev/null +++ b/src/app/views/mro/mro007/mro007.component.ts @@ -0,0 +1,161 @@ +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { MroDataService } from 'app/service/mro-data.service'; +import { SetDataService } from 'app/service/set-data.service'; +import { ActivatedRoute } from '@angular/router'; +import { IMyDpOptions, IMyDateModel } from 'mydatepicker'; +import { TableQueryData } from 'app/data/TableQueryData'; +import { ApiTableData } from 'app/data/ApiTableData'; +import swal from 'sweetalert2'; + +@Component({ + selector: 'app-mro007', + templateUrl: './mro007.component.html', +}) +export class Mro007Component implements OnInit { + + loading = false; + errorMessage: String; + tableQueryData: TableQueryData; + apiDataList = []; + currentPage = 0; + pageCount = 0; + pageLinks = []; + pageLinkMarginCount = 2; + tycgTableName: string; + apiTableData: ApiTableData; + IsAsc = true; + item: string; + fileName: string; + urlExport: any; + tycgTableNameList: any[]; + + constructor(private mroDataService: MroDataService) {} + + ngOnInit() { + + this.tycgTableName = ""; + this.tableQueryData = new TableQueryData(); + this.tableQueryData.CurrentPage = 0; + this.fileName = ""; + this.getTycgTableName(); + + } + + getTycgTableName() { + this.mroDataService.getTycgTableName().subscribe(res => { + const result = res.json().Result; + this.tycgTableNameList = result; + }, error => (this.errorMessage = error)); + } + + + getAPITableDataList(tableQueryData: TableQueryData, tycgTableName: string, method: string): any { + this.loading = true; + this.tableQueryData.CurrentPage = tableQueryData.Page + ? tableQueryData.Page + : 1; + this.mroDataService.getAPITableDataList(tableQueryData, tycgTableName, method).subscribe(res => { + if (method === '0') { + const result = res.json().Result; + this.apiDataList = result.Data; + this.loading = false; + if (tableQueryData.Page === 1 || !tableQueryData.Page) { + this.pageCount = result.PageCount; + this.getPageLinks(); + } + } else { + this.urlExport = res; + const link = document.createElement("a"); + link.href = this.urlExport._body; + this.fileName = this.urlExport._body.substring(this.urlExport._body.lastIndexOf('/') + 1); + link.download = this.fileName; + link.click(); + this.loading = false; + } + }, error => (this.errorMessage = error)); + } + + onPageChange(e: Event, page) { + e.preventDefault(); + this.tableQueryData.CurrentPage = page; + this.tableQueryData.Page = this.tableQueryData.CurrentPage; + this.getPageLinks(); + this.getAPITableDataList(this.tableQueryData, this.tycgTableName, "0"); + } + + doSearch() { + this.tableQueryData.Page = null; + if (this.tycgTableName === null || this.tycgTableName === "" || this.tycgTableName === "undefined") { + swal({ + type: "error", + title: "API 表格名稱錯誤", + text: "請檢查表格名稱...", + showConfirmButton: true + }); + return; + } + this.getAPITableDataList(this.tableQueryData, this.tycgTableName, "0"); + } + + getPageLinks() { + this.pageLinks = []; + let firstPageNumber = + this.tableQueryData.CurrentPage - this.pageLinkMarginCount; + let lastPageNumber = + this.tableQueryData.CurrentPage + this.pageLinkMarginCount; + if (firstPageNumber < 1) { + firstPageNumber = 1; + } + if (lastPageNumber > this.pageCount) { + lastPageNumber = this.pageCount; + } + if (firstPageNumber > 1) { + const isCurrentPage = firstPageNumber === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: "第一頁", + pageNo: 1, + isCurrent: isCurrentPage + }); + } + for (let i = firstPageNumber; i <= lastPageNumber; i++) { + const isCurrentPage = i === this.tableQueryData.CurrentPage; + this.pageLinks.push({ text: i, pageNo: i, isCurrent: isCurrentPage }); + } + if (lastPageNumber < this.pageCount) { + const isCurrentPage = lastPageNumber === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: "最後頁(共 " + this.pageCount + " 頁)", + pageNo: this.pageCount, + isCurrent: isCurrentPage + }); + } + } + + order(item) { + this.IsAsc = !this.IsAsc; + this.item = item; + this.tableQueryData.Order = item; + this.tableQueryData.IsAsc = this.IsAsc.toString(); + this.getAPITableDataList(this.tableQueryData, this.tycgTableName, "0"); + } + + + + doSearchExport() { + this.tableQueryData.Page = null; + if (this.tycgTableName === null || this.tycgTableName === "" || this.tycgTableName === "undefined") { + swal({ + type: "error", + title: "API 表格名稱錯誤", + text: "請檢查表格名稱...", + showConfirmButton: true + }); + return; + } + this.getAPITableDataList(this.tableQueryData, this.tycgTableName, "1"); + } + + + +} diff --git a/src/app/views/punish/punish-routing.module.ts b/src/app/views/punish/punish-routing.module.ts new file mode 100644 index 0000000..e5b821e --- /dev/null +++ b/src/app/views/punish/punish-routing.module.ts @@ -0,0 +1,21 @@ +import { NgModule } from '@angular/core'; +import { Routes, + RouterModule } from '@angular/router'; + +import { PunishComponent } from './punish.component'; + +const routes: Routes = [ + { + path: '', + component: PunishComponent, + data: { + title: '開單' + } + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class PunishRoutingModule {} diff --git a/src/app/views/punish/punish.component.html b/src/app/views/punish/punish.component.html new file mode 100644 index 0000000..a85e43f --- /dev/null +++ b/src/app/views/punish/punish.component.html @@ -0,0 +1,1362 @@ +
    +
    +
    + +

    開單

    + + + +
    + +
    +
    +
    +
    +
    + 查詢區間 + + 至 + +
    +
    +
    + +
    +
    + +
    + 站點 +
    + +
    + + 狀態 +
    + +
    +
    + +
    + +
    + +
    +
    + +
    + 違停時間 +
    + +
    + +
    + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + +
    +
    + +
    + +
    + + + +
    + +
    + + +
    +
    + + +
    + +
    + +
    + +
    + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    操作 + + 序號 + + + 站點 + + + 車牌 + + + 狀態 + + 車種 + + 起始時間 + + 結束時間備註
    + + + +
    + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + +
    + +
    +
    +
    +
    +
    + 事件序號 +
    +
    {{readyPunishEvent.Id}}
    +
    +
    +
    +
    +
    + 違規法條 +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    + ... +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + 查詢區間 + + 至 + +
    +
    +
    +
    +
    +
    + 站點 +
    + +
    + + 狀態 +
    + +
    +
    +
    +
    +
    + 速度(km/h) + +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    操作 + + 序號 + + + 站點 + + + 車牌 + + + 狀態 + + 車種 + + 速度 + + 起始時間 + + 結束時間備註
    + + + +
    + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    + 事件序號 +
    +
    {{readyPunishEvent.Id}}
    +
    +
    +
    +
    +
    + 違規法條 +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    + ... +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + 查詢區間 + + 至 + +
    +
    +
    +
    +
    +
    + 站點 +
    + +
    + + 狀態 +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    操作 + + 序號 + + + 站點 + + + 車牌 + + + 狀態 + + 車種 + + 起始時間 + + 結束時間備註
    + + + + +
    + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    + 事件序號 +
    +
    {{readyPunishEvent.Id}}
    +
    +
    +
    +
    +
    + 違規法條 +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    + ... +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    + 查詢區間 + + 至 + +
    +
    +
    +
    +
    +
    + 站點 +
    + +
    + + 狀態 +
    + +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    操作 + + 序號 + + + 站點 + + + 車牌 + + + 狀態 + + 車種 + + 起始時間 + + 結束時間備註
    + + + +
    + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    + 事件序號 +
    +
    {{readyPunishEvent.Id}}
    +
    +
    +
    +
    +
    + 違規法條 +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    + ... +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + diff --git a/src/app/views/punish/punish.component.ts b/src/app/views/punish/punish.component.ts new file mode 100644 index 0000000..7f9cedd --- /dev/null +++ b/src/app/views/punish/punish.component.ts @@ -0,0 +1,762 @@ +import { SysDataService } from 'app/service/sys-data.service'; +import { AfterViewInit, Component, OnInit, ViewChildren } from "@angular/core"; +import { DataTableDirective } from "angular-datatables"; +import { Subject } from "rxjs/Subject"; +import { Http, Response } from "@angular/http"; +import { SetDataService } from "app/service/set-data.service"; +import { Set001Service } from "app/views/set/set001/set001.service"; +import { Router } from "@angular/router"; +import { ActivatedRoute } from "@angular/router"; +import { HelperService } from "app/service/helper.service"; +import swal from "sweetalert2"; +import { AnnounceData } from "app/data/AnnounceData"; +import { BoardDataService } from "app/service/board-data.service"; +import { TableQueryData } from "app/data/TableQueryData"; +import { IMyDpOptions } from "mydatepicker"; +import { ALLOW_MULTIPLE_PLATFORMS } from '@angular/core/src/application_ref'; +import { PunishQueryData } from 'app/data/PunishQueryData'; +import { saveAs } from 'file-saver'; + +@Component({ + selector: "app-board001", + templateUrl: "./punish.component.html" +}) +export class PunishComponent implements OnInit { + _imageURL = "https://172.16.1.49:8443/IVSImages/"; + _videoURL = "https://172.16.1.49:8443/IVSVideos/"; + renewalPageList = []; + tableQueryData: TableQueryData; + IsAsc = true; + status = false; + loginRole = localStorage.getItem("role"); + setRole = "1"; + loading = true; + pageCount = 0; + pageLinkMarginCount = 2; + pageLinks = []; + item: string; + errorMessage: string; + + announceData: AnnounceData; + announcePageList = []; + punishEventList = []; + siteInformationList = []; + + + public myDatePickerOptions: IMyDpOptions = { + dateFormat: 'yyyy/mm/dd', + editableDateField: false, + openSelectorOnInputClick: true, + dayLabels: { + su: '日', + mo: '一', + tu: '二', + we: '三', + th: '四', + fr: '五', + sa: '六', + }, + monthLabels: { + 1: '一月', + 2: '二月', + 3: '三月', + 4: '四月', + 5: '五月', + 6: '六月', + 7: '七月', + 8: '八月', + 9: '九月', + 10: '十月', + 11: '十一月', + 12: '十二月', + }, + todayBtnTxt: '今天', + }; + startDT: any; + endDT: any; + startDT1: any; + endDT1: any; + stationData: any; + punishTime: any; + punishQueryData: PunishQueryData; + readyPunishEvent: any; + displayReadyPunishEvent = false; + LawsCodeData: string; + Nopunish: any; + reasonPageList: any; + NotPunishReasonData: any; + PunishView: any; + PunishEdit: any; + selectPunishEventList: any; + isChecked: any; + fileName: string; + urlExport: any; + + constructor( + private boardDataService: BoardDataService, + private sysDataService: SysDataService, + private setDataService: SetDataService, + private helperService: HelperService, + private route: ActivatedRoute, + private router: Router, + private http: Http + ) {} + + ngOnInit() { + this.loading = false; + this.announceData = new AnnounceData(); + this.tableQueryData = new TableQueryData(); + this.tableQueryData.CurrentPage = 0; + this.getAnnounceData(this.tableQueryData); + this.punishTime = "ALL"; + this.punishQueryData = new PunishQueryData(); + this.punishQueryData.site = "ALL"; + this.punishQueryData.status = "ALL"; + this.punishQueryData.time = "ALL"; + this.punishQueryData.speed = "ALL"; + this.punishQueryData.method = "0"; + this.displayReadyPunishEvent = false; + this.LawsCodeData = ""; + this.reasonPageList = []; + this.NotPunishReasonData = ""; + this.PunishView = {}; + this.PunishEdit = {}; + this.selectPunishEventList = []; + this.fileName = ""; + + const currentdate = new Date(); + const startdatetime = currentdate.getFullYear() + "/" + + (currentdate.getMonth() + 1) + "/" + + currentdate.getDate(); + + const enddatetime = currentdate.getFullYear() + "/" + + (currentdate.getMonth() + 1) + "/" + + currentdate.getDate(); + + this.startDT = {formatted: startdatetime}; + this.endDT = {formatted: enddatetime}; + + this.getPunishEvent("1", startdatetime, enddatetime, this.punishQueryData.site, this.punishQueryData.status, this.punishQueryData.time, this.punishQueryData.speed, this.punishQueryData.method); + this.getUserSiteInfo("1"); + } + + + getUserSiteInfo(eventType: string): any { + this.sysDataService.getUserSiteInfo().subscribe(res => { + const result = res.json().result; + console.log(result) + this.siteInformationList = result.filter(i => i.EventType === eventType); + console.log(this.siteInformationList) + }, error => (this.errorMessage = error)); + } + + + getPunishEvent(eventType: string, startTime: string, endTime: string, site: string, status: string, time: string, speed: string, method: string): any { + + this.boardDataService.getPunishEvent(eventType, startTime, endTime, site, status, time, speed, method).subscribe(res => { + if (method === '0') { + const result = res.json().Result; + this.punishEventList = result; + this.loading = false; + } + }, error => { + this.errorMessage = error._body; + swal({ + type: "error", + title: "錯誤訊息", + text: JSON.parse(this.errorMessage).Message, + showConfirmButton: false, + timer: 2000, + onOpen: () => { + + }, + onClose: () => { + this.loading = false; + } + }); + }); + } + + + getPunishEventExport(eventType: string, site: string, status: string, time: string, speed: string, method: string): any { + + this.loading = true; + const startTime = this.startDT.formatted + " " + this.startDT1; + const endTime = this.endDT.formatted + " " + this.endDT1; + if (site === null || site === undefined) { + site = "ALL"; + } + if (status === null || status === undefined) { + status = "ALL"; + } + if (time === null || time === undefined) { + time = "ALL"; + } + if (speed === null || speed === undefined) { + speed = "ALL"; + } + if (method === null || method === undefined) { + method = "0"; + } + + this.boardDataService.getPunishEventExport(eventType, startTime, endTime, site, status, time, speed, method).subscribe(res => { + if (method === '0') { + const result = res.json().Result; + this.punishEventList = result; + this.loading = false; + } else { + this.urlExport = res; + const link = document.createElement("a"); + link.href = this.urlExport._body; + this.fileName = this.urlExport._body.substring(this.urlExport._body.lastIndexOf('/') + 1); + link.download = this.fileName; + link.click(); + this.loading = false; + } + + + + }, error => { + this.errorMessage = error._body; + swal({ + type: "error", + title: "錯誤訊息", + text: JSON.parse(this.errorMessage).Message, + showConfirmButton: false, + timer: 2000, + onOpen: () => { + + }, + onClose: () => { + this.loading = false; + } + }); + }); + } + + + selectPunishEvent(punishEvent) { + console.log(punishEvent); + const lawsCheck = this.goPunishEvent(punishEvent); + if (lawsCheck === 0) { + return; + } + if (this.selectPunishEventList.length > 0) { + for (let index = 0; index < this.selectPunishEventList.length; index++) { + const element = this.selectPunishEventList[index]; + if (element.Id === punishEvent.Id) { + this.selectPunishEventList.splice(index, 1); + return; + } else { + if (punishEvent.Laws === null) { + punishEvent.isChecked = false; + swal({ + type: "error", + title: "無法規資料", + text: "請檢查法規資訊...", + showConfirmButton: true, + timer: 2000, + onClose: () => { + + + } + }); + return; + } + + if (element.Laws[0].lawsCode === punishEvent.Laws[0].lawsCode) { + this.selectPunishEventList.push(punishEvent); + return; + } else { + + swal({ + type: "error", + title: "勾選失敗", + text: "請檢查法規資訊...", + showConfirmButton: true, + timer: 2000, + onClose: () => { + punishEvent.isChecked = false; + } + }); + return; + } + } + } + } else { + this.selectPunishEventList.push(punishEvent); + } + } + + + getEventById(id: string): any { + this.boardDataService.getEventById(id).subscribe(res => { + const result = res.json().Result; + this.showUpdatedItem(result); + }, error => (this.errorMessage = error)); + } + + + showUpdatedItem(newItem) { + const updateItem = this.punishEventList.find(this.findIndexToUpdate, newItem.Id); + const index = this.punishEventList.indexOf(updateItem); + this.punishEventList[index].Status = newItem.Status; + this.punishEventList[index].Ps = newItem.Ps; + this.punishEventList[index].isChecked = false; + } + + findIndexToUpdate(newItem) { + return newItem.Id === this; + } + + + doCheckPunish(eventType, eventId, law) { + this.boardDataService.putCheckPunish(eventId, law).subscribe(res => { + const result = res.json(); + if (result.Success === true) { + swal({ + type: "success", + title: "開單成功", + text: "更新頁面...", + showConfirmButton: false, + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => { + this.displayReadyPunishEvent = false; + this.doSearch(eventType, this.punishQueryData.site, this.punishQueryData.status, this.punishQueryData.time, this.punishQueryData.speed, '0'); + } + }); + } else { + swal({ + type: "error", + title: "開單失敗", + text: "請檢查您輸入的資訊...", + showConfirmButton: true + }); + } + }); + } + + doCancel(eventType, eventId) { + this.boardDataService.putCancel(eventId).subscribe(res => { + const result = res.json(); + if (result.Success === true) { + swal({ + type: "success", + title: "取消成功", + text: "更新頁面...", + showConfirmButton: false, + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => { + this.displayReadyPunishEvent = false; + this.doSearch(eventType, this.punishQueryData.site, this.punishQueryData.status, this.punishQueryData.time, this.punishQueryData.speed, '0'); + } + }); + } else { + swal({ + type: "error", + title: "取消失敗", + text: "請檢查您輸入的資訊...", + showConfirmButton: true + }); + } + }); + } + + doNopunish(eventType, eventId, reason, model) { + this.boardDataService.putNopunish(eventId, reason).subscribe(res => { + const result = res.json(); + if (result.Success === true) { + swal({ + type: "success", + title: "不開單成功", + text: "更新頁面...", + showConfirmButton: false, + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => { + this.displayReadyPunishEvent = false; + model.hide(); + this.doSearch(eventType, this.punishQueryData.site, this.punishQueryData.status, this.punishQueryData.time, this.punishQueryData.speed, '0'); + } + }); + } else { + swal({ + type: "error", + title: "不開單失敗", + text: "請檢查您輸入的資訊...", + showConfirmButton: true + }); + model.hide(); + } + }); + } + + + + doEventVehicle(eventType, eventId, vehicleType, vehicleNumber, model) { + this.boardDataService.putEventVehicle(eventId, vehicleType, vehicleNumber).subscribe(res => { + const result = res.json(); + if (result.Success === true) { + swal({ + type: "success", + title: "車輛資訊更新成功", + text: "更新頁面...", + showConfirmButton: false, + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => { + this.displayReadyPunishEvent = false; + model.hide(); + this.doSearch(eventType, this.punishQueryData.site, this.punishQueryData.status, this.punishQueryData.time, this.punishQueryData.speed, '0'); + } + }); + } else { + swal({ + type: "error", + title: "車輛資訊更新失敗", + text: "請檢查您輸入的資訊...", + showConfirmButton: true + }); + model.hide(); + } + }); + } + + + + + + + doMuticheckPunish(selectPunishEventList) { + let eventIdList = []; + const law = selectPunishEventList[0].Laws[0].lawsCode; + for (let index = 0; index < selectPunishEventList.length; index++) { + const element = selectPunishEventList[index]; + eventIdList.push(element.Id); + } + + + + this.boardDataService.putMuticheckPunish(law, eventIdList).subscribe(res => { + const result = res.json(); + if (result.Success === true) { + swal({ + type: "success", + title: "批次開單成功", + text: "更新頁面...", + showConfirmButton: false, + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => { + this.doSearch('1', this.punishQueryData.site, this.punishQueryData.status, this.punishQueryData.time, this.punishQueryData.speed, '0'); + } + }); + } else { + swal({ + type: "error", + title: "批次開單失敗", + text: "請檢查您輸入的資訊...", + showConfirmButton: true + }); + } + }); + + } + + + + getNotPunishReasonAll() { + this.boardDataService.getNotPunishReasonAll().subscribe(res => { + const result = res.json().Result; + this.reasonPageList = result; + }, error => (this.errorMessage = error)); + } + + + + + + warningModalShow(eventType, item, model) { + model.show(); + this.Nopunish = item; + this.Nopunish.eventType = eventType; + this.getNotPunishReasonAll(); + + } + + viewModalShow(eventType, item, model) { + model.show(); + this.PunishView = item; + this.PunishView.eventType = eventType; + } + + editModalShow(eventType, item, model) { + model.show(); + this.PunishEdit = item; + this.PunishEdit.eventType = eventType; + } + + + + + + getReasonData(tableQueryData: TableQueryData): any { + this.tableQueryData.CurrentPage = tableQueryData.Page + ? tableQueryData.Page + : 1; + this.setDataService.getReasonPageList(tableQueryData).subscribe(res => { + const result = res.json().Result; + this.reasonPageList = result.Data; + this.loading = false; + if (tableQueryData.Page === 1 || !tableQueryData.Page) { + this.pageCount = result.PageCount; + this.getPageLinks(); + } + }, error => (this.errorMessage = error)); + } + + + + + + goPunishEvent(punishEvent) { + if (punishEvent.Laws === null) { + punishEvent.isChecked = false; + swal({ + type: "error", + title: "無法規資料", + text: "請檢查法規資訊...", + showConfirmButton: true, + timer: 2000, + onClose: () => { + } + }); + return 0; + } else { + this.displayReadyPunishEvent = true; + this.readyPunishEvent = punishEvent; + for (let i = 0; i < this.readyPunishEvent.Laws.length; i++) { + if (i === 0) { + this.readyPunishEvent.Laws[i].isSelected = true; + } else { + this.readyPunishEvent.Laws[i].isSelected = false; + } + } + this.LawsCodeData = this.readyPunishEvent.Laws[0].lawsCode; + return 1; + } + } + + + print() { + document.body.innerHTML = document.getElementById('printDiv').innerHTML; + window.print(); + } + + camera() { + // window.open('http://3.36.48.96/localImage/', 'Image'); + window.open(this._imageURL + this.readyPunishEvent.SiteId + "/" + this.readyPunishEvent.EventID + "/", 'Image'); + + } + + video() { + // window.open('http://3.36.48.96/localVideo/', 'Video'); + window.open(this._videoURL + this.readyPunishEvent.SiteId + "/" + this.readyPunishEvent.EventID + "/", 'Video'); + } + + + tabSelected($event) { + console.log($event); + this.displayReadyPunishEvent = false; + this.punishEventList = []; + if ($event.heading === '區間測速') { + this.punishQueryData.speed = "40"; + } else { + this.punishQueryData.speed = "ALL"; + } + + switch ($event.heading) { + case "違規停車": + this.getUserSiteInfo("1"); + break; + case "區間測速": + this.getUserSiteInfo("2"); + break; + case "未依標線行駛_路口淨空_闖紅燈": + this.getUserSiteInfo("3"); + break; + case "未保持路口淨空": + this.getUserSiteInfo("4"); + break; + case "大貨車禁行": + this.getUserSiteInfo("6"); + break; + } + } + + + + getAnnounceData(tableQueryData: TableQueryData): any { + this.tableQueryData.CurrentPage = tableQueryData.Page + ? tableQueryData.Page + : 1; + this.boardDataService.getAnnouncePageList(tableQueryData).subscribe(res => { + const result = res.json().Result; + this.announcePageList = result.Data; + this.loading = false; + if (tableQueryData.Page === 1 || !tableQueryData.Page) { + this.pageCount = result.PageCount; + this.getPageLinks(); + } + }, error => (this.errorMessage = error)); + } + + getPageLinks() { + this.pageLinks = []; + let firstPageNumber = + this.tableQueryData.CurrentPage - this.pageLinkMarginCount; + let lastPageNumber = + this.tableQueryData.CurrentPage + this.pageLinkMarginCount; + if (firstPageNumber < 1) { + firstPageNumber = 1; + } + if (lastPageNumber > this.pageCount) { + lastPageNumber = this.pageCount; + } + if (firstPageNumber > 1) { + const isCurrentPage = firstPageNumber === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: "第一頁", + pageNo: 1, + isCurrent: isCurrentPage + }); + } + for (let i = firstPageNumber; i <= lastPageNumber; i++) { + const isCurrentPage = i === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: i, + pageNo: i, + isCurrent: isCurrentPage + }); + } + if (lastPageNumber < this.pageCount) { + const isCurrentPage = lastPageNumber === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: "最後頁(共 " + this.pageCount + " 頁)", + pageNo: this.pageCount, + isCurrent: isCurrentPage + }); + } + } + + onPageChange(e: Event, page) { + e.preventDefault(); + this.tableQueryData.CurrentPage = page; + this.tableQueryData.Page = this.tableQueryData.CurrentPage; + this.getPageLinks(); + this.getAnnounceData(this.tableQueryData); + } + + doSearch(eventType, site, status, time, speed, method) { + this.selectPunishEventList = []; + this.loading = true; + + const startTime = this.startDT.formatted + " " + this.startDT1; + const endTime = this.endDT.formatted + " " + this.endDT1; + if (site === null || site === undefined) { + site = "ALL"; + } + if (status === null || status === undefined) { + status = "ALL"; + } + if (time === null || time === undefined) { + time = "ALL"; + } + if (speed === null || speed === undefined) { + speed = "ALL"; + } + if (method === null || method === undefined) { + method = "0"; + } + this.getPunishEvent(eventType, startTime, endTime, site, status, time, speed, method); + + } + + clearSearch() { + this.tableQueryData.Term = null; + this.getAnnounceData(this.tableQueryData); + } + + order(item) { + this.IsAsc = !this.IsAsc; + this.item = item; + this.tableQueryData.Order = item; + this.tableQueryData.IsAsc = this.IsAsc.toString(); + this.getAnnounceData(this.tableQueryData); + } + + deleteAnnounceData(id): any { + swal({ + title: "是否要刪除?", + type: "warning", + showCancelButton: true, + confirmButtonColor: "#70C2DA", + cancelButtonColor: "#f86c6b", + confirmButtonText: "是", + cancelButtonText: "否" + }).then(result => { + if (result.value) { + this.boardDataService.deleteAnnounceData(id).subscribe(res => { + const result2 = res.json(); + if (result2.Success === true) { + this.renewalPageList = this.renewalPageList.filter(u => { + return u.Id !== id; + }); + this.getAnnounceData(this.tableQueryData); + this.getPageLinks(); + swal({ + type: "success", + title: "刪除成功", + showConfirmButton: true, + confirmButtonColor: "#70C2DA", + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => {} + }); + } else { + swal({ + type: "error", + title: "刪除失敗", + showConfirmButton: true, + confirmButtonColor: "#70C2DA" + }); + } + }); + } + }); + } + + + goDetail(item) { + this.router.navigate(["board/board001-view-board"]); + } + + goEdit(item) { + this.router.navigate(["board/board001-set-board"]); + } + +} diff --git a/src/app/views/punish/punish.module.ts b/src/app/views/punish/punish.module.ts new file mode 100644 index 0000000..b9f87f0 --- /dev/null +++ b/src/app/views/punish/punish.module.ts @@ -0,0 +1,30 @@ +import { NgModule } from "@angular/core"; +import { ChartsModule } from "ng2-charts/ng2-charts"; + +import { PunishComponent } from "./punish.component"; +import { PunishRoutingModule } from "./punish-routing.module"; +import { CommonModule } from "@angular/common"; +import { FormsModule } from "@angular/forms"; +import { MyDatePickerModule } from "mydatepicker"; +import { LoadingModule, ANIMATION_TYPES } from "ngx-loading"; +import { MomentModule } from 'ngx-moment'; +import {MomentTimezoneModule} from 'angular-moment-timezone'; +import { ModalModule } from "ngx-bootstrap/modal"; +import { TabsModule } from "ngx-bootstrap"; + +@NgModule({ + imports: [ + PunishRoutingModule, + ChartsModule, + CommonModule, + FormsModule, + MomentModule, + MomentTimezoneModule, + MyDatePickerModule, + LoadingModule, + ModalModule.forRoot(), + TabsModule.forRoot() + ], + declarations: [PunishComponent] +}) +export class PunishModule {} diff --git a/src/app/views/set/set-routing.module.ts b/src/app/views/set/set-routing.module.ts new file mode 100644 index 0000000..ed2cec7 --- /dev/null +++ b/src/app/views/set/set-routing.module.ts @@ -0,0 +1,142 @@ +import { NgModule } from "@angular/core"; +import { Routes, RouterModule } from "@angular/router"; +import { AuthGuard } from "app/auth-guard.service"; +import { Set001Component } from "./set001/set001.component"; +import { Set001CreateSiteComponent } from "./set001/set001-create-site.component"; +import { Set001SetSiteComponent } from "app/views/set/set001/set001-set-site.component"; +import { Set001ViewSiteComponent } from "app/views/set/set001/set001-view-site.component"; +import { Set001Resolver } from "app/views/set/set001/set001-resolver.service"; +import { Set002Component } from "./set002/set002.component"; +import { Set002CreateReasonComponent } from "./set002/set002-create-reason.component"; +import { Set002SetReasonComponent } from "app/views/set/set002/set002-set-reason.component"; +import { Set002ViewReasonComponent } from "app/views/set/set002/set002-view-reason.component"; +import { Set002Resolver } from "./set002/set002-resolver.service"; +import { Set003Component } from "./set003/set003.component"; +import { Set003CreateVendorComponent } from "./set003/set003-create-vendor.component"; +import { Set003SetVendorComponent } from "app/views/set/set003/set003-set-vendor.component"; +import { Set003ViewVendorComponent } from "app/views/set/set003/set003-view-vendor.component"; +import { Set003Resolver } from "app/views/set/set003/set003-resolver.service"; + + +const routes: Routes = [ + { + path: "", + data: { + title: "開單設定" + }, + children: [ + { + path: "set001", + component: Set001Component, + resolve: { selectedItem: Set001Resolver }, + canActivate: [AuthGuard], + data: { + title: "行政區管理" + } + }, + { + path: "set001-create-site", + component: Set001CreateSiteComponent, + canActivate: [AuthGuard], + data: { + title: "新增站點資料" + } + }, + { + path: "set001-set-site", + component: Set001SetSiteComponent, + resolve: { selectedItem: Set001Resolver }, + canActivate: [AuthGuard], + data: { + title: "修改站點資料" + } + }, + { + path: "set001-view-site", + component: Set001ViewSiteComponent, + resolve: { selectedItem: Set001Resolver }, + canActivate: [AuthGuard], + data: { + title: "詳細站點資料" + } + }, + { + path: "set002", + component: Set002Component, + resolve: { selectedItem: Set002Resolver }, + canActivate: [AuthGuard], + data: { + title: "原因設定" + } + }, + { + path: "set002-create-reason", + component: Set002CreateReasonComponent, + canActivate: [AuthGuard], + data: { + title: "新增原因資料" + } + }, + { + path: "set002-set-reason", + component: Set002SetReasonComponent, + resolve: { selectedItem: Set002Resolver }, + canActivate: [AuthGuard], + data: { + title: "修改原因資料" + } + }, + { + path: "set002-view-reason", + component: Set002ViewReasonComponent, + resolve: { selectedItem: Set002Resolver }, + canActivate: [AuthGuard], + data: { + title: "詳細原因資料" + } + }, + { + path: "set003", + component: Set003Component, + resolve: { selectedItem: Set003Resolver }, + canActivate: [AuthGuard], + data: { + title: "廠商資料設定" + } + }, + { + path: "set003-create-vendor", + component: Set003CreateVendorComponent, + canActivate: [AuthGuard], + data: { + title: "新增廠商資料" + } + }, + { + path: "set003-set-vendor", + component: Set003SetVendorComponent, + resolve: { selectedItem: Set003Resolver }, + canActivate: [AuthGuard], + data: { + title: "修改廠商資料" + } + }, + { + path: "set003-view-vendor", + component: Set003ViewVendorComponent, + resolve: { selectedItem: Set003Resolver }, + canActivate: [AuthGuard], + data: { + title: "詳細廠商資料" + } + } + ] + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], + providers: [Set001Resolver, Set002Resolver, Set003Resolver] +}) +export class SetRoutingModule {} diff --git a/src/app/views/set/set.module.ts b/src/app/views/set/set.module.ts new file mode 100644 index 0000000..3ab0142 --- /dev/null +++ b/src/app/views/set/set.module.ts @@ -0,0 +1,56 @@ +import { NgModule } from "@angular/core"; +import { CommonModule } from "@angular/common"; +import { FormsModule } from "@angular/forms"; +import { TabsModule } from "ngx-bootstrap/tabs"; + +import { DataTablesModule } from "angular-datatables"; +import { AgmCoreModule } from "@agm/core"; +import { LoadingModule } from "ngx-loading"; +import { MomentModule } from 'ngx-moment'; +import {MomentTimezoneModule} from 'angular-moment-timezone'; + +import { SetRoutingModule } from "./set-routing.module"; +import { Set001Component } from "./set001/set001.component"; +import { Set001CreateSiteComponent } from "./set001/set001-create-site.component"; +import { Set001SetSiteComponent } from "./set001/set001-set-site.component"; +import { Set001ViewSiteComponent } from "./set001/set001-view-site.component"; +import { Set002Component } from "./set002/set002.component"; +import { Set002CreateReasonComponent } from "./set002/set002-create-reason.component"; +import { Set002SetReasonComponent } from "./set002/set002-set-reason.component"; +import { Set002ViewReasonComponent } from "./set002/set002-view-reason.component"; +import { Set003Component } from "./set003/set003.component"; +import { Set003CreateVendorComponent } from "./set003/set003-create-vendor.component"; +import { Set003SetVendorComponent } from "./set003/set003-set-vendor.component"; +import { Set003ViewVendorComponent } from "./set003/set003-view-vendor.component"; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + MomentModule, + MomentTimezoneModule, + SetRoutingModule, + DataTablesModule, + TabsModule.forRoot(), + AgmCoreModule.forRoot({ + apiKey: "", + language: "zh-TW" + }), + LoadingModule + ], + declarations: [ + Set001Component, + Set001CreateSiteComponent, + Set001SetSiteComponent, + Set001ViewSiteComponent, + Set002Component, + Set002CreateReasonComponent, + Set002SetReasonComponent, + Set002ViewReasonComponent, + Set003Component, + Set003CreateVendorComponent, + Set003SetVendorComponent, + Set003ViewVendorComponent, + ] +}) +export class SetModule {} diff --git a/src/app/views/set/set001/set001-create-site.component.html b/src/app/views/set/set001/set001-create-site.component.html new file mode 100644 index 0000000..2f2a810 --- /dev/null +++ b/src/app/views/set/set001/set001-create-site.component.html @@ -0,0 +1,110 @@ + + +
    +
    +
    +
    +

    新增站點資料

    +
    +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + + +
    + +
    + +
    + + + *此欄必填 + + +
    +
    + + + *請選擇事件類型 + + +
    + + +
    + + + *此欄必填 + + + +
    + + + + + + + + + +
    + + + *此欄必填 + + +
    + +
    +
    +
    +
    +
    diff --git a/src/app/views/set/set001/set001-create-site.component.ts b/src/app/views/set/set001/set001-create-site.component.ts new file mode 100644 index 0000000..5c8bd97 --- /dev/null +++ b/src/app/views/set/set001/set001-create-site.component.ts @@ -0,0 +1,83 @@ +import { Component, OnInit } from "@angular/core"; +import { Router } from "@angular/router"; +import { SetDataService } from "app/service/set-data.service"; +import swal from "sweetalert2"; +import { SiteInformationData } from "app/data/SiteInformationData"; + +@Component({ + selector: "app-set001-create-site", + templateUrl: "./set001-create-site.component.html" +}) +export class Set001CreateSiteComponent implements OnInit { + fileToUpload: File = null; + isLightNoExisted: boolean; + errorMessage: string; + loading = false; + EventTypeList: any; + companyAllInfo: any; + + siteInformationData: SiteInformationData; + constructor(private setDataService: SetDataService, private router: Router) {} + + ngOnInit() { + this.siteInformationData = new SiteInformationData(); + this.getEventTypeId(); + this.EventTypeList = []; + this.siteInformationData.Country = "桃園市"; + this.companyAllInfo = []; + this.getCompanyAllInfo(); + } + + getCompanyAllInfo() { + this.setDataService.getCompanyAllInfo().subscribe(res => { + const result = res.json().Result; + this.companyAllInfo = result; + }, error => (this.errorMessage = error)); + } + + createSiteInformationData() { + this.setDataService.postSiteInformations(this.siteInformationData).subscribe(res => { + this.loading = true; + const result = res.json(); + if (result.Success === true) { + this.loading = false; + swal({ + type: "success", + title: "新增成功", + text: "轉跳回檢視頁面...", + showConfirmButton: false, + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => { + this.router.navigate(["set/set001"]); + } + }); + } else { + this.loading = false; + swal({ + type: "error", + title: "新增失敗", + text: "請檢查您輸入的資訊...", + showConfirmButton: true + }); + } + }); + } + + + + backPreviousPage() { + this.router.navigateByUrl("/set/set001"); + } + + + getEventTypeId() { + this.setDataService.getEventTypeId().subscribe(res => { + const result = res.json().Result; + this.EventTypeList = result; + }, error => (this.errorMessage = error)); + } + +} diff --git a/src/app/views/set/set001/set001-resolver.service.ts b/src/app/views/set/set001/set001-resolver.service.ts new file mode 100644 index 0000000..36acdaf --- /dev/null +++ b/src/app/views/set/set001/set001-resolver.service.ts @@ -0,0 +1,14 @@ +import { Injectable } from "@angular/core"; +import { Resolve } from "@angular/router"; +import { Set001Service } from "app/views/set/set001/set001.service"; +import { Observable } from "rxjs/Observable"; + +@Injectable() +export class Set001Resolver implements Resolve { + constructor(private set001Service: Set001Service) {} + + resolve(): Observable { + + return this.set001Service.selectedItem; + } +} diff --git a/src/app/views/set/set001/set001-set-site.component.html b/src/app/views/set/set001/set001-set-site.component.html new file mode 100644 index 0000000..976b758 --- /dev/null +++ b/src/app/views/set/set001/set001-set-site.component.html @@ -0,0 +1,97 @@ +
    +
    +
    +

    修改站點資料

    +
    +
    +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + + + + +
    +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + + + + +
    +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + + +
    + +
    +
    +
    +
    +
    diff --git a/src/app/views/set/set001/set001-set-site.component.ts b/src/app/views/set/set001/set001-set-site.component.ts new file mode 100644 index 0000000..95a4b37 --- /dev/null +++ b/src/app/views/set/set001/set001-set-site.component.ts @@ -0,0 +1,86 @@ +import { SetDataService } from "../../../service/set-data.service"; +import { Router } from "@angular/router"; +import swal from "sweetalert2"; + +import { Component, OnInit } from "@angular/core"; +import { ActivatedRoute } from "@angular/router"; +import { SiteInformationData } from "app/data/SiteInformationData"; + +@Component({ + selector: "app-set001-set-site", + templateUrl: "./set001-set-site.component.html" +}) +export class Set001SetSiteComponent implements OnInit { + errorMessage: String; + data: any; + siteInformationData: SiteInformationData; + + selectedItem: any; + itemId: number; + EventTypeList: any; + companyAllInfo: any; + + constructor( + private setDataService: SetDataService, + private route: ActivatedRoute, + private router: Router + ) {} + + ngOnInit() { + this.siteInformationData = new SiteInformationData(); + this.route.data.subscribe((data: { selectedItem: any }) => { + this.selectedItem = data.selectedItem; + }); + + this.EventTypeList = []; + this.getEventTypeId(); + this.companyAllInfo = []; + this.getCompanyAllInfo(); + } + + getCompanyAllInfo() { + this.setDataService.getCompanyAllInfo().subscribe(res => { + const result = res.json().Result; + this.companyAllInfo = result; + }, error => (this.errorMessage = error)); + } + + doEditSite() { + this.setDataService.putSiteData(this.selectedItem).subscribe(res => { + const result = res.json(); + if (result.Success === true) { + swal({ + type: "success", + title: "修改成功", + text: "轉跳回檢視頁面...", + showConfirmButton: false, + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => { + this.router.navigate(["set/set001"]); + } + }); + } else { + swal({ + type: "error", + title: "修改失敗", + text: "請檢查您輸入的資訊...", + showConfirmButton: true + }); + } + }); + } + + backPreviousPage() { + this.router.navigateByUrl("/set/set001"); + } + + getEventTypeId() { + this.setDataService.getEventTypeId().subscribe(res => { + const result = res.json().Result; + this.EventTypeList = result; + }, error => (this.errorMessage = error)); + } +} diff --git a/src/app/views/set/set001/set001-view-site.component.html b/src/app/views/set/set001/set001-view-site.component.html new file mode 100644 index 0000000..1532b53 --- /dev/null +++ b/src/app/views/set/set001/set001-view-site.component.html @@ -0,0 +1,81 @@ + +
    +
    +
    +

    檢視站點資料

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + 城市 + + {{selectedItem.Country}} +
    + 行政區 + + {{selectedItem.Area}} +
    + 站點ID + + {{selectedItem.SiteID}} +
    + 站點名稱 + + {{selectedItem.SiteName}} +
    + 事件類型 + + {{selectedItem.EventType}} +
    + 負責廠商 + + {{selectedItem.CompanyName}} +
    + 法規 + + {{selectedItem.Laws}} +
    + +
    +
    +
    diff --git a/src/app/views/set/set001/set001-view-site.component.ts b/src/app/views/set/set001/set001-view-site.component.ts new file mode 100644 index 0000000..e06650e --- /dev/null +++ b/src/app/views/set/set001/set001-view-site.component.ts @@ -0,0 +1,39 @@ +import { SetDataService } from "../../../service/set-data.service"; +import { Router } from "@angular/router"; +import { Component, OnInit } from "@angular/core"; +import { ActivatedRoute } from "@angular/router"; +import { HelperService } from "app/service/helper.service"; + +@Component({ + selector: "app-set001-view-site", + templateUrl: "./set001-view-site.component.html" +}) +export class Set001ViewSiteComponent implements OnInit { + errorMessage: String; + data: any; + + selectedItem: any; + itemId: number; + loading = false; + + constructor( + private setDataService: SetDataService, + private route: ActivatedRoute, + private router: Router, + private helperService: HelperService + ) {} + + ngOnInit() { + this.loading = true; + + this.route.data.subscribe((data: { selectedItem: any }) => { + this.loading = false; + this.selectedItem = data.selectedItem; + }); + } + + + backPreviousPage() { + this.router.navigateByUrl("/set/set001"); + } +} diff --git a/src/app/views/set/set001/set001.component.html b/src/app/views/set/set001/set001.component.html new file mode 100644 index 0000000..54ca0bc --- /dev/null +++ b/src/app/views/set/set001/set001.component.html @@ -0,0 +1,88 @@ +
    +
    +
    + +

    行政區管理

    + +
    + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + 項次 + + + 城市 + + + 行政區 + + 站點ID + + 站點 + + 事件類型 + + 負責廠商 + + 法規操作
    {{siteInformationData.Id}}{{siteInformationData.Country}}{{siteInformationData.Area}}{{siteInformationData.SiteID}}{{siteInformationData.SiteName}}{{siteInformationData.EventType}}{{siteInformationData.CompanyName}}{{siteInformationData.Laws}} + + + +
    +
    +
    + 暫無資料 +
    + +
    +
    +
    diff --git a/src/app/views/set/set001/set001.component.ts b/src/app/views/set/set001/set001.component.ts new file mode 100644 index 0000000..7958781 --- /dev/null +++ b/src/app/views/set/set001/set001.component.ts @@ -0,0 +1,193 @@ +import { AfterViewInit, Component, OnInit, ViewChildren } from "@angular/core"; +import { DataTableDirective } from "angular-datatables"; +import { Subject } from "rxjs/Subject"; +import { Http, Response } from "@angular/http"; +import { TableQueryData } from "../../../data/TableQueryData"; +import { SetDataService } from "app/service/set-data.service"; +import { Set001Service } from "app/views/set/set001/set001.service"; +import { Router } from "@angular/router"; +import { ActivatedRoute } from "@angular/router"; +import { HelperService } from "app/service/helper.service"; +import swal from "sweetalert2"; +import { SiteInformationData } from "app/data/SiteInformationData"; + +@Component({ + selector: "app-set001", + templateUrl: "./set001.component.html" +}) +export class Set001Component implements OnInit { + tableQueryData: TableQueryData; + IsAsc = true; + status = false; + loginRole = localStorage.getItem("role"); + setRole = "1"; + loading = false; + pageCount = 0; + pageLinkMarginCount = 2; + pageLinks = []; + item: string; + errorMessage: string; + siteInformationData: SiteInformationData; + siteInformationPageList = []; + + + + constructor( + private setDataService: SetDataService, + private set001Service: Set001Service, + private helperService: HelperService, + private route: ActivatedRoute, + private router: Router, + private http: Http + ) {} + + ngOnInit() { + this.loading = true; + this.siteInformationData = new SiteInformationData(); + this.tableQueryData = new TableQueryData(); + this.tableQueryData.CurrentPage = 0; + this.getSiteInformations(this.tableQueryData); + } + + + + getSiteInformations(tableQueryData: TableQueryData): any { + this.tableQueryData.CurrentPage = tableQueryData.Page + ? tableQueryData.Page + : 1; + this.setDataService.getSiteInformations(tableQueryData).subscribe(res => { + const result = res.json().Result; + this.siteInformationPageList = result.Data; + this.loading = false; + if (tableQueryData.Page === 1 || !tableQueryData.Page) { + this.pageCount = result.PageCount; + this.getPageLinks(); + } + }, error => (this.errorMessage = error)); + } + + + + + + getPageLinks() { + this.pageLinks = []; + let firstPageNumber = + this.tableQueryData.CurrentPage - this.pageLinkMarginCount; + let lastPageNumber = + this.tableQueryData.CurrentPage + this.pageLinkMarginCount; + if (firstPageNumber < 1) { + firstPageNumber = 1; + } + if (lastPageNumber > this.pageCount) { + lastPageNumber = this.pageCount; + } + if (firstPageNumber > 1) { + const isCurrentPage = firstPageNumber === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: "第一頁", + pageNo: 1, + isCurrent: isCurrentPage + }); + } + for (let i = firstPageNumber; i <= lastPageNumber; i++) { + const isCurrentPage = i === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: i, + pageNo: i, + isCurrent: isCurrentPage + }); + } + if (lastPageNumber < this.pageCount) { + const isCurrentPage = lastPageNumber === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: "最後頁(共 " + this.pageCount + " 頁)", + pageNo: this.pageCount, + isCurrent: isCurrentPage + }); + } + } + + onPageChange(e: Event, page) { + e.preventDefault(); + this.tableQueryData.CurrentPage = page; + this.tableQueryData.Page = this.tableQueryData.CurrentPage; + this.getPageLinks(); + this.getSiteInformations(this.tableQueryData); + } + + doSearch() { + this.tableQueryData.Page = null; + this.getSiteInformations(this.tableQueryData); + } + + clearSearch() { + this.tableQueryData.Term = null; + this.getSiteInformations(this.tableQueryData); + } + + order(item) { + this.IsAsc = !this.IsAsc; + this.item = item; + this.tableQueryData.Order = item; + this.tableQueryData.IsAsc = this.IsAsc.toString(); + this.getSiteInformations(this.tableQueryData); + } + + deleteSiteInformationData(id): any { + swal({ + title: "是否要刪除?", + type: "warning", + showCancelButton: true, + confirmButtonColor: "#70C2DA", + cancelButtonColor: "#f86c6b", + confirmButtonText: "是", + cancelButtonText: "否" + }).then(result => { + if (result.value) { + this.setDataService.deleteSiteInformationData(id).subscribe(res => { + const result2 = res.json(); + if (result2.Success === true) { + this.siteInformationPageList = this.siteInformationPageList.filter(u => { + return u.Id !== id; + }); + this.getSiteInformations(this.tableQueryData); + this.getPageLinks(); + swal({ + type: "success", + title: "刪除成功", + showConfirmButton: true, + confirmButtonColor: "#70C2DA", + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => {} + }); + } else { + swal({ + type: "error", + title: "刪除失敗", + showConfirmButton: true, + confirmButtonColor: "#70C2DA" + }); + } + }); + } + }); + } + + getVillageInfo(villageNo: number) { + return this.helperService.getVillageCodeText(villageNo); + } + + goDetail(item) { + this.set001Service.selectedItem = item; + this.router.navigate(["set/set001-view-site"]); + } + + goEdit(item) { + this.set001Service.selectedItem = item; + this.router.navigate(["set/set001-set-site"]); + } +} diff --git a/src/app/views/set/set001/set001.service.ts b/src/app/views/set/set001/set001.service.ts new file mode 100644 index 0000000..0379922 --- /dev/null +++ b/src/app/views/set/set001/set001.service.ts @@ -0,0 +1,3 @@ +export class Set001Service { + selectedItem: any; +} diff --git a/src/app/views/set/set002/set002-create-reason.component.html b/src/app/views/set/set002/set002-create-reason.component.html new file mode 100644 index 0000000..e71d466 --- /dev/null +++ b/src/app/views/set/set002/set002-create-reason.component.html @@ -0,0 +1,50 @@ + + +
    +
    +
    +
    +

    新增原因資料

    + +
    + + + *請選擇事件類型ID + + +
    + + + +
    + + + *此欄必填 + + +
    + +
    +
    +
    +
    diff --git a/src/app/views/set/set002/set002-create-reason.component.ts b/src/app/views/set/set002/set002-create-reason.component.ts new file mode 100644 index 0000000..2d5ee6a --- /dev/null +++ b/src/app/views/set/set002/set002-create-reason.component.ts @@ -0,0 +1,68 @@ +import { Component, OnInit } from "@angular/core"; +import { Router } from "@angular/router"; +import { SetDataService } from "app/service/set-data.service"; +import swal from "sweetalert2"; +import { ReasonData } from "app/data/ReasonData"; + +@Component({ + selector: "app-set002-create-reason", + templateUrl: "./set002-create-reason.component.html" +}) +export class Set002CreateReasonComponent implements OnInit { + reasonData: ReasonData; + fileToUpload: File = null; + isLightNoExisted: boolean; + errorMessage: string; + loading = false; + selectEventTypeId: any; + constructor(private setDataService: SetDataService, private router: Router) {} + + ngOnInit() { + this.reasonData = new ReasonData(); + this.getEventTypeId(); + } + + getEventTypeId() { + this.setDataService.getEventTypeId().subscribe(res => { + const result = res.json().Result; + this.selectEventTypeId = result; + }, error => (this.errorMessage = error)); + } + + + + createReasonData() { + this.setDataService.postReasonData(this.reasonData).subscribe(res => { + this.loading = true; + const result = res.json(); + if (result.Success === true) { + this.loading = false; + swal({ + type: "success", + title: "新增成功", + text: "轉跳回檢視頁面...", + showConfirmButton: false, + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => { + this.router.navigate(["set/set002"]); + } + }); + } else { + this.loading = false; + swal({ + type: "error", + title: "新增失敗", + text: "請檢查您輸入的資訊...", + showConfirmButton: true + }); + } + }); + } + + backPreviousPage() { + this.router.navigateByUrl("/set/set002"); + } +} diff --git a/src/app/views/set/set002/set002-resolver.service.ts b/src/app/views/set/set002/set002-resolver.service.ts new file mode 100644 index 0000000..0046e5f --- /dev/null +++ b/src/app/views/set/set002/set002-resolver.service.ts @@ -0,0 +1,14 @@ +import { Injectable } from "@angular/core"; +import { Resolve } from "@angular/router"; +import { Set002Service } from "app/views/set/set002/set002.service"; +import { Observable } from "rxjs/Observable"; + +@Injectable() +export class Set002Resolver implements Resolve { + constructor(private set002Service: Set002Service) {} + + resolve(): Observable { + + return this.set002Service.selectedItem; + } +} diff --git a/src/app/views/set/set002/set002-set-reason.component.html b/src/app/views/set/set002/set002-set-reason.component.html new file mode 100644 index 0000000..fcd344f --- /dev/null +++ b/src/app/views/set/set002/set002-set-reason.component.html @@ -0,0 +1,47 @@ +
    +
    +
    +

    修改原因資料

    +
    + +
    + + + *請選擇事件類型ID + + +
    + + + +
    + + + *此欄必填 + + +
    + +
    +
    +
    +
    diff --git a/src/app/views/set/set002/set002-set-reason.component.ts b/src/app/views/set/set002/set002-set-reason.component.ts new file mode 100644 index 0000000..d1f5519 --- /dev/null +++ b/src/app/views/set/set002/set002-set-reason.component.ts @@ -0,0 +1,75 @@ +import { SetDataService } from "../../../service/set-data.service"; +import { Router } from "@angular/router"; +import swal from "sweetalert2"; + +import { Component, OnInit } from "@angular/core"; +import { ActivatedRoute } from "@angular/router"; +import { ReasonData } from "app/data/ReasonData"; + +@Component({ + selector: "app-set002-set-reason", + templateUrl: "./set002-set-reason.component.html" +}) +export class Set002SetReasonComponent implements OnInit { + errorMessage: String; + data: any; + reasonData: ReasonData; + + selectedItem: any; + itemId: number; + + selectEventTypeId: any; + + constructor( + private setDataService: SetDataService, + private route: ActivatedRoute, + private router: Router + ) {} + + ngOnInit() { + this.reasonData = new ReasonData(); + this.route.data.subscribe((data: { selectedItem: any }) => { + this.selectedItem = data.selectedItem; + }); + this.getEventTypeId(); + } + + getEventTypeId() { + this.setDataService.getEventTypeId().subscribe(res => { + const result = res.json().Result; + this.selectEventTypeId = result; + }, error => (this.errorMessage = error)); + } + + doEditReason() { + this.setDataService.putReasonData(this.selectedItem).subscribe(res => { + const result = res.json(); + if (result.Success === true) { + swal({ + type: "success", + title: "修改成功", + text: "轉跳回檢視頁面...", + showConfirmButton: false, + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => { + this.router.navigate(["set/set002"]); + } + }); + } else { + swal({ + type: "error", + title: "修改失敗", + text: "請檢查您輸入的資訊...", + showConfirmButton: true + }); + } + }); + } + + backPreviousPage() { + this.router.navigateByUrl("/set/set002"); + } +} diff --git a/src/app/views/set/set002/set002-view-reason.component.html b/src/app/views/set/set002/set002-view-reason.component.html new file mode 100644 index 0000000..20cbfc9 --- /dev/null +++ b/src/app/views/set/set002/set002-view-reason.component.html @@ -0,0 +1,41 @@ + +
    +
    +
    +

    檢視原因資料

    + + + + + + + + + + + + +
    + 事件類型ID + + {{selectedItem.EventTypeId}} +
    + 不開單原因 + + {{selectedItem.NotPunishReason}} +
    + +
    +
    +
    diff --git a/src/app/views/set/set002/set002-view-reason.component.ts b/src/app/views/set/set002/set002-view-reason.component.ts new file mode 100644 index 0000000..b404cc3 --- /dev/null +++ b/src/app/views/set/set002/set002-view-reason.component.ts @@ -0,0 +1,40 @@ +import { SetDataService } from "../../../service/set-data.service"; +import { Router } from "@angular/router"; +import { Component, OnInit } from "@angular/core"; +import { ActivatedRoute } from "@angular/router"; +import { HelperService } from "app/service/helper.service"; +import { ReasonData } from "app/data/ReasonData"; + +@Component({ + selector: "app-set002-view-reason", + templateUrl: "./set002-view-reason.component.html" +}) +export class Set002ViewReasonComponent implements OnInit { + errorMessage: String; + data: any; + reasonData: ReasonData; + + selectedItem: any; + itemId: number; + loading = false; + + constructor( + private setDataService: SetDataService, + private route: ActivatedRoute, + private router: Router, + private helperService: HelperService + ) {} + + ngOnInit() { + this.loading = true; + this.reasonData = new ReasonData(); + this.route.data.subscribe((data: { selectedItem: any }) => { + this.loading = false; + this.selectedItem = data.selectedItem; + }); + } + + backPreviousPage() { + this.router.navigateByUrl("/set/set002"); + } +} diff --git a/src/app/views/set/set002/set002.component.html b/src/app/views/set/set002/set002.component.html new file mode 100644 index 0000000..911438d --- /dev/null +++ b/src/app/views/set/set002/set002.component.html @@ -0,0 +1,69 @@ +
    +
    +
    + +

    原因設定(不開單)

    + +
    + + + +
    +
    + + + + + + + + + + + + + + + + + +
    + + 事件類型ID + + + 不開單原因 + 操作
    {{reasonData.EventTypeId}}{{reasonData.NotPunishReason}} + + + +
    +
    +
    + 暫無資料 +
    + +
    +
    +
    diff --git a/src/app/views/set/set002/set002.component.ts b/src/app/views/set/set002/set002.component.ts new file mode 100644 index 0000000..f95833f --- /dev/null +++ b/src/app/views/set/set002/set002.component.ts @@ -0,0 +1,182 @@ +import { AfterViewInit, Component, OnInit, ViewChildren } from "@angular/core"; +import { DataTableDirective } from "angular-datatables"; +import { Subject } from "rxjs/Subject"; +import { Http, Response } from "@angular/http"; +import { TableQueryData } from "../../../data/TableQueryData"; +import { SetDataService } from "app/service/set-data.service"; +import { Router } from "@angular/router"; +import { ActivatedRoute } from "@angular/router"; +import { HelperService } from "app/service/helper.service"; +import swal from "sweetalert2"; +import { ReasonData } from "app/data/ReasonData"; +import { Set002Service } from "./set002.service"; + +@Component({ + selector: "app-set002", + templateUrl: "./set002.component.html" +}) +export class Set002Component implements OnInit { + reasonData: ReasonData; + reasonPageList = []; + tableQueryData: TableQueryData; + IsAsc = true; + status = false; + loginRole = localStorage.getItem("role"); + setRole = "1"; + loading = false; + pageCount = 0; + pageLinkMarginCount = 2; + pageLinks = []; + item: string; + errorMessage: string; + constructor( + private setDataService: SetDataService, + private set002Service: Set002Service, + private helperService: HelperService, + private route: ActivatedRoute, + private router: Router, + private http: Http + ) {} + + ngOnInit() { + this.loading = true; + this.reasonData = new ReasonData(); + this.tableQueryData = new TableQueryData(); + this.tableQueryData.CurrentPage = 0; + this.getReasonData(this.tableQueryData); + } + + getReasonData(tableQueryData: TableQueryData): any { + this.tableQueryData.CurrentPage = tableQueryData.Page + ? tableQueryData.Page + : 1; + this.setDataService.getReasonPageList(tableQueryData).subscribe(res => { + const result = res.json().Result; + this.reasonPageList = result.Data; + this.loading = false; + if (tableQueryData.Page === 1 || !tableQueryData.Page) { + this.pageCount = result.PageCount; + this.getPageLinks(); + } + }, error => (this.errorMessage = error)); + } + + getPageLinks() { + this.pageLinks = []; + let firstPageNumber = + this.tableQueryData.CurrentPage - this.pageLinkMarginCount; + let lastPageNumber = + this.tableQueryData.CurrentPage + this.pageLinkMarginCount; + if (firstPageNumber < 1) { + firstPageNumber = 1; + } + if (lastPageNumber > this.pageCount) { + lastPageNumber = this.pageCount; + } + if (firstPageNumber > 1) { + const isCurrentPage = firstPageNumber === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: "第一頁", + pageNo: 1, + isCurrent: isCurrentPage + }); + } + for (let i = firstPageNumber; i <= lastPageNumber; i++) { + const isCurrentPage = i === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: i, + pageNo: i, + isCurrent: isCurrentPage + }); + } + if (lastPageNumber < this.pageCount) { + const isCurrentPage = lastPageNumber === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: "最後頁(共 " + this.pageCount + " 頁)", + pageNo: this.pageCount, + isCurrent: isCurrentPage + }); + } + } + + onPageChange(e: Event, page) { + e.preventDefault(); + this.tableQueryData.CurrentPage = page; + this.tableQueryData.Page = this.tableQueryData.CurrentPage; + this.getPageLinks(); + this.getReasonData(this.tableQueryData); + } + + doSearch() { + this.tableQueryData.Page = null; + this.getReasonData(this.tableQueryData); + } + + clearSearch() { + this.tableQueryData.Term = null; + this.getReasonData(this.tableQueryData); + } + + order(item) { + this.IsAsc = !this.IsAsc; + this.item = item; + this.tableQueryData.Order = item; + this.tableQueryData.IsAsc = this.IsAsc.toString(); + this.getReasonData(this.tableQueryData); + } + + deleteReasonData(id): any { + swal({ + title: "是否要刪除?", + type: "warning", + showCancelButton: true, + confirmButtonColor: "#70C2DA", + cancelButtonColor: "#f86c6b", + confirmButtonText: "是", + cancelButtonText: "否" + }).then(result => { + if (result.value) { + this.setDataService.deleteReasonData(id).subscribe(res => { + const result2 = res.json(); + if (result2.Success === true) { + this.reasonPageList = this.reasonPageList.filter(u => { + return u.Id !== id; + }); + this.getReasonData(this.tableQueryData); + this.getPageLinks(); + swal({ + type: "success", + title: "刪除成功", + showConfirmButton: true, + confirmButtonColor: "#70C2DA", + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => {} + }); + } else { + swal({ + type: "error", + title: "刪除失敗", + showConfirmButton: true, + confirmButtonColor: "#70C2DA" + }); + } + }); + } + }); + } + + + goDetail(item) { + this.set002Service.selectedItem = item; + this.router.navigate(["set/set002-view-reason"]); + } + + goEdit(item) { + this.set002Service.selectedItem = item; + this.router.navigate(["set/set002-set-reason"]); + } + +} diff --git a/src/app/views/set/set002/set002.service.ts b/src/app/views/set/set002/set002.service.ts new file mode 100644 index 0000000..ff76d99 --- /dev/null +++ b/src/app/views/set/set002/set002.service.ts @@ -0,0 +1,3 @@ +export class Set002Service { + selectedItem: any; +} diff --git a/src/app/views/set/set003/set003-create-vendor.component.html b/src/app/views/set/set003/set003-create-vendor.component.html new file mode 100644 index 0000000..862e494 --- /dev/null +++ b/src/app/views/set/set003/set003-create-vendor.component.html @@ -0,0 +1,45 @@ + +
    +
    +
    +
    +

    新增廠商資料

    +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + *請輸入正確信箱格式 + + +
    + +
    +
    +
    +
    diff --git a/src/app/views/set/set003/set003-create-vendor.component.ts b/src/app/views/set/set003/set003-create-vendor.component.ts new file mode 100644 index 0000000..6fdc79b --- /dev/null +++ b/src/app/views/set/set003/set003-create-vendor.component.ts @@ -0,0 +1,56 @@ +import { Component, OnInit } from "@angular/core"; +import { Router } from "@angular/router"; +import { SetDataService } from "app/service/set-data.service"; +import swal from "sweetalert2"; +import { CompanyInformationData } from "../../../data/CompanyInformationData"; + +@Component({ + selector: "app-set003-create-vendor", + templateUrl: "./set003-create-vendor.component.html" +}) +export class Set003CreateVendorComponent implements OnInit { + errorMessage: string; + loading = false; + + companyInformationData: CompanyInformationData; + constructor(private setDataService: SetDataService, private router: Router) {} + + ngOnInit() { + this.companyInformationData = new CompanyInformationData(); + } + + createCompanyInformationData() { + this.setDataService.postCompanyInformation(this.companyInformationData).subscribe(res => { + this.loading = true; + const result = res.json(); + if (result.Success === true) { + this.loading = false; + swal({ + type: "success", + title: "新增成功", + text: "轉跳回檢視頁面...", + showConfirmButton: false, + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => { + this.router.navigate(["set/set003"]); + } + }); + } else { + this.loading = false; + swal({ + type: "error", + title: "新增失敗", + text: "請檢查您輸入的資訊...", + showConfirmButton: true + }); + } + }); + } + + backPreviousPage() { + this.router.navigateByUrl("/set/set003"); + } +} diff --git a/src/app/views/set/set003/set003-resolver.service.ts b/src/app/views/set/set003/set003-resolver.service.ts new file mode 100644 index 0000000..9dc1196 --- /dev/null +++ b/src/app/views/set/set003/set003-resolver.service.ts @@ -0,0 +1,14 @@ +import { Injectable } from "@angular/core"; +import { Resolve } from "@angular/router"; +import { Set003Service } from "app/views/set/set003/set003.service"; +import { Observable } from "rxjs/Observable"; + +@Injectable() +export class Set003Resolver implements Resolve { + constructor(private set003Service: Set003Service) {} + + resolve(): Observable { + + return this.set003Service.selectedItem; + } +} diff --git a/src/app/views/set/set003/set003-set-vendor.component.html b/src/app/views/set/set003/set003-set-vendor.component.html new file mode 100644 index 0000000..4287eee --- /dev/null +++ b/src/app/views/set/set003/set003-set-vendor.component.html @@ -0,0 +1,43 @@ +
    +
    +
    +

    修改廠商資料

    +
    +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + *請輸入正確信箱格式 + + +
    + +
    +
    +
    +
    diff --git a/src/app/views/set/set003/set003-set-vendor.component.ts b/src/app/views/set/set003/set003-set-vendor.component.ts new file mode 100644 index 0000000..c8804ac --- /dev/null +++ b/src/app/views/set/set003/set003-set-vendor.component.ts @@ -0,0 +1,65 @@ +import { SetDataService } from "../../../service/set-data.service"; +import { Router } from "@angular/router"; +import swal from "sweetalert2"; + +import { Component, OnInit } from "@angular/core"; +import { ActivatedRoute } from "@angular/router"; +import { CompanyInformationData } from "app/data/CompanyInformationData"; + +@Component({ + selector: "app-set003-set-vendor", + templateUrl: "./set003-set-vendor.component.html" +}) +export class Set003SetVendorComponent implements OnInit { + errorMessage: String; + data: any; + companyInformationData: CompanyInformationData; + + selectedItem: any; + itemId: number; + + constructor( + private setDataService: SetDataService, + private route: ActivatedRoute, + private router: Router + ) {} + + ngOnInit() { + this.companyInformationData = new CompanyInformationData(); + this.route.data.subscribe((data: { selectedItem: any }) => { + this.selectedItem = data.selectedItem; + }); + } + + doEditcompanyInformation() { + this.setDataService.putCompanyInformationData(this.selectedItem).subscribe(res => { + const result = res.json(); + if (result.Success === true) { + swal({ + type: "success", + title: "修改成功", + text: "轉跳回檢視頁面...", + showConfirmButton: false, + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => { + this.router.navigate(["set/set003"]); + } + }); + } else { + swal({ + type: "error", + title: "修改失敗", + text: "請檢查您輸入的資訊...", + showConfirmButton: true + }); + } + }); + } + + backPreviousPage() { + this.router.navigateByUrl("/set/set003"); + } +} diff --git a/src/app/views/set/set003/set003-view-vendor.component.html b/src/app/views/set/set003/set003-view-vendor.component.html new file mode 100644 index 0000000..38e74fa --- /dev/null +++ b/src/app/views/set/set003/set003-view-vendor.component.html @@ -0,0 +1,41 @@ + +
    +
    +
    +

    檢視廠商資料

    + + + + + + + + + + + + + + + +
    + 廠商代碼 + + {{selectedItem.companyCode}} +
    + 廠商名稱 + + {{selectedItem.companyName}} +
    + 廠商Email + + {{selectedItem.email}} +
    + +
    +
    +
    diff --git a/src/app/views/set/set003/set003-view-vendor.component.ts b/src/app/views/set/set003/set003-view-vendor.component.ts new file mode 100644 index 0000000..825362a --- /dev/null +++ b/src/app/views/set/set003/set003-view-vendor.component.ts @@ -0,0 +1,40 @@ +import { SetDataService } from "../../../service/set-data.service"; +import { Router } from "@angular/router"; +import { Component, OnInit } from "@angular/core"; +import { ActivatedRoute } from "@angular/router"; +import { HelperService } from "app/service/helper.service"; +import { CompanyInformationData } from "../../../data/CompanyInformationData"; + +@Component({ + selector: "app-set003-view-vendor", + templateUrl: "./set003-view-vendor.component.html" +}) +export class Set003ViewVendorComponent implements OnInit { + errorMessage: String; + data: any; + companyInformationData: CompanyInformationData; + + selectedItem: any; + itemId: number; + loading = false; + + constructor( + private setDataService: SetDataService, + private route: ActivatedRoute, + private router: Router, + private helperService: HelperService + ) {} + + ngOnInit() { + this.loading = true; + this.companyInformationData = new CompanyInformationData(); + this.route.data.subscribe((data: { selectedItem: any }) => { + this.loading = false; + this.selectedItem = data.selectedItem; + }); + } + + backPreviousPage() { + this.router.navigateByUrl("/set/set003"); + } +} diff --git a/src/app/views/set/set003/set003.component.html b/src/app/views/set/set003/set003.component.html new file mode 100644 index 0000000..07d1d44 --- /dev/null +++ b/src/app/views/set/set003/set003.component.html @@ -0,0 +1,69 @@ +
    +
    +
    + +

    廠商資料設定

    + +
    + + + +
    +
    + + + + + + + + + + + + + + + + + +
    + + 廠商代碼 + + + 廠商名稱 + + + 廠商Email + 操作
    {{companyInformationData.companyCode}}{{companyInformationData.companyName}}{{companyInformationData.email}} + + + +
    +
    +
    + 暫無資料 +
    + +
    +
    +
    diff --git a/src/app/views/set/set003/set003.component.ts b/src/app/views/set/set003/set003.component.ts new file mode 100644 index 0000000..83be003 --- /dev/null +++ b/src/app/views/set/set003/set003.component.ts @@ -0,0 +1,183 @@ +import { AfterViewInit, Component, OnInit, ViewChildren } from "@angular/core"; +import { DataTableDirective } from "angular-datatables"; +import { Subject } from "rxjs/Subject"; +import { Http, Response } from "@angular/http"; +import { TableQueryData } from "../../../data/TableQueryData"; +import { SetDataService } from "app/service/set-data.service"; +import { Set003Service } from "app/views/set/set003/set003.service"; +import { Router } from "@angular/router"; +import { ActivatedRoute } from "@angular/router"; +import { HelperService } from "app/service/helper.service"; +import swal from "sweetalert2"; +import { CompanyInformationData } from "../../../data/CompanyInformationData" + +@Component({ + selector: "app-set003", + templateUrl: "./set003.component.html" +}) +export class Set003Component implements OnInit { + + tableQueryData: TableQueryData; + IsAsc = true; + status = false; + loginRole = localStorage.getItem("role"); + setRole = "1"; + loading = false; + pageCount = 0; + pageLinkMarginCount = 2; + pageLinks = []; + item: string; + errorMessage: string; + + companyInformationData: CompanyInformationData; + companyInformatioPageList = []; + constructor( + private setDataService: SetDataService, + private set003Service: Set003Service, + private helperService: HelperService, + private route: ActivatedRoute, + private router: Router, + private http: Http + ) {} + + ngOnInit() { + this.loading = true; + this.companyInformationData = new CompanyInformationData(); + this.tableQueryData = new TableQueryData(); + this.tableQueryData.CurrentPage = 0; + this.getCompanyInformation(this.tableQueryData); + } + + getCompanyInformation(tableQueryData: TableQueryData): any { + this.tableQueryData.CurrentPage = tableQueryData.Page + ? tableQueryData.Page + : 1; + this.setDataService.getCompanyInformation(tableQueryData).subscribe(res => { + const result = res.json().Result; + this.companyInformatioPageList = result.Data; + this.loading = false; + if (tableQueryData.Page === 1 || !tableQueryData.Page) { + this.pageCount = result.PageCount; + this.getPageLinks(); + } + }, error => (this.errorMessage = error)); + } + + getPageLinks() { + this.pageLinks = []; + let firstPageNumber = + this.tableQueryData.CurrentPage - this.pageLinkMarginCount; + let lastPageNumber = + this.tableQueryData.CurrentPage + this.pageLinkMarginCount; + if (firstPageNumber < 1) { + firstPageNumber = 1; + } + if (lastPageNumber > this.pageCount) { + lastPageNumber = this.pageCount; + } + if (firstPageNumber > 1) { + const isCurrentPage = firstPageNumber === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: "第一頁", + pageNo: 1, + isCurrent: isCurrentPage + }); + } + for (let i = firstPageNumber; i <= lastPageNumber; i++) { + const isCurrentPage = i === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: i, + pageNo: i, + isCurrent: isCurrentPage + }); + } + if (lastPageNumber < this.pageCount) { + const isCurrentPage = lastPageNumber === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: "最後頁(共 " + this.pageCount + " 頁)", + pageNo: this.pageCount, + isCurrent: isCurrentPage + }); + } + } + + onPageChange(e: Event, page) { + e.preventDefault(); + this.tableQueryData.CurrentPage = page; + this.tableQueryData.Page = this.tableQueryData.CurrentPage; + this.getPageLinks(); + this.getCompanyInformation(this.tableQueryData); + } + + doSearch() { + this.tableQueryData.Page = null; + this.getCompanyInformation(this.tableQueryData); + } + + clearSearch() { + this.tableQueryData.Term = null; + this.getCompanyInformation(this.tableQueryData); + } + + order(item) { + this.IsAsc = !this.IsAsc; + this.item = item; + this.tableQueryData.Order = item; + this.tableQueryData.IsAsc = this.IsAsc.toString(); + this.getCompanyInformation(this.tableQueryData); + } + + deleteCompanyInformationData(id): any { + swal({ + title: "是否要刪除?", + type: "warning", + showCancelButton: true, + confirmButtonColor: "#70C2DA", + cancelButtonColor: "#f86c6b", + confirmButtonText: "是", + cancelButtonText: "否" + }).then(result => { + if (result.value) { + this.setDataService.deleteCompanyInformationData(id).subscribe(res => { + const result2 = res.json(); + if (result2.Success === true) { + this.companyInformatioPageList = this.companyInformatioPageList.filter(u => { + return u.Id !== id; + }); + this.getCompanyInformation(this.tableQueryData); + this.getPageLinks(); + swal({ + type: "success", + title: "刪除成功", + showConfirmButton: true, + confirmButtonColor: "#70C2DA", + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => {} + }); + } else { + swal({ + type: "error", + title: "刪除失敗", + showConfirmButton: true, + confirmButtonColor: "#70C2DA" + }); + } + }); + } + }); + } + + goDetail(item) { + this.set003Service.selectedItem = item; + this.router.navigate(["set/set003-view-vendor"]); + } + + goEdit(item) { + this.set003Service.selectedItem = item; + this.router.navigate(["set/set003-set-vendor"]); + } + +} diff --git a/src/app/views/set/set003/set003.service.ts b/src/app/views/set/set003/set003.service.ts new file mode 100644 index 0000000..4e740ad --- /dev/null +++ b/src/app/views/set/set003/set003.service.ts @@ -0,0 +1,3 @@ +export class Set003Service { + selectedItem: any; +} diff --git a/src/app/views/sys/sys-routing.module.ts b/src/app/views/sys/sys-routing.module.ts new file mode 100644 index 0000000..8525082 --- /dev/null +++ b/src/app/views/sys/sys-routing.module.ts @@ -0,0 +1,176 @@ +import { NgModule } from "@angular/core"; +import { Routes, RouterModule } from "@angular/router"; +import { Sys001Component } from "./sys001/sys001.component"; +import { Sys002Component } from "./sys002/sys002.component"; +import { Sys002CreateUserComponent } from "./sys002/sys002-create-user.component"; +import { Sys002SetUserComponent } from "./sys002/sys002-set-user.component"; +import { Sys002ViewUserComponent } from "./sys002/sys002-view-user.component"; +import { Sys002Resolver } from "app/views/sys/sys002/sys002-resolver.service"; +import { Sys003Component } from "./sys003/sys003.component"; +import { Sys004Component } from "./sys004/sys004.component"; +import { Sys004CreateRoleComponent } from "./sys004/sys004-create-role.component"; +import { Sys004SetRoleComponent } from "./sys004/sys004-set-role.component"; +import { Sys004Resolver } from "app/views/sys/sys004/sys004-resolver.service"; +import { Sys005Component } from "./sys005/sys005.component"; +import { Sys005CreatePageComponent } from "./sys005/sys005-create-page.component"; +import { Sys005SetPageComponent } from "./sys005/sys005-set-page.component"; +import { Sys005Resolver } from "app/views/sys/sys005/sys005-resolver.service"; +import { Sys006Component } from "./sys006/sys006.component"; +import { Sys006Resolver } from "app/views/sys/sys006/sys006-resolver.service"; +import { Sys006CreateGroupComponent } from "./sys006/sys006-create-group.component"; +import { Sys006SetGroupComponent } from "./sys006/sys006-set-group.component"; +import { Sys006ViewGroupComponent } from "./sys006/sys006-view-group.component"; + +import { AuthGuard } from "app/auth-guard.service"; + +const routes: Routes = [ + { + path: "", + data: { + title: "系統設定" + }, + children: [ + { + path: "sys001", + component: Sys001Component, + canActivate: [AuthGuard], + data: { + title: "變更密碼" + } + }, + { + path: "sys002", + component: Sys002Component, + canActivate: [AuthGuard], + data: { + title: "使用者管理" + } + }, + { + path: "sys002-create-user", + component: Sys002CreateUserComponent, + canActivate: [AuthGuard], + data: { + title: "新增使用者" + } + }, + { + path: "sys002-view-user", + component: Sys002ViewUserComponent, + canActivate: [AuthGuard], + resolve: { selectedUser: Sys002Resolver }, + data: { + title: "檢視使用者資料" + } + }, + { + path: "sys002-set-user", + component: Sys002SetUserComponent, + canActivate: [AuthGuard], + resolve: { selectedUser: Sys002Resolver }, + data: { + title: "修改使用者" + } + }, + { + path: "sys003", + component: Sys003Component, + canActivate: [AuthGuard], + data: { + title: "個人資料設定" + } + }, + { + path: "sys004", + component: Sys004Component, + canActivate: [AuthGuard], + data: { + title: "角色權限管理" + } + }, + { + path: "sys004-create-role", + component: Sys004CreateRoleComponent, + canActivate: [AuthGuard], + data: { + title: "新增權限" + } + }, + { + path: "sys004-set-role", + component: Sys004SetRoleComponent, + resolve: { selectedRole: Sys004Resolver }, + canActivate: [AuthGuard], + data: { + title: "設定權限" + } + }, + { + path: "sys006", + component: Sys006Component, + canActivate: [AuthGuard], + data: { + title: "分局管理" + } + }, + { + path: "sys006-create-group", + component: Sys006CreateGroupComponent, + canActivate: [AuthGuard], + data: { + title: "新增分局" + } + }, + { + path: "sys006-view-group", + component: Sys006ViewGroupComponent, + resolve: { selectedGroup: Sys006Resolver }, + canActivate: [AuthGuard], + data: { + title: "檢視分局" + } + }, + { + path: "sys006-set-group", + component: Sys006SetGroupComponent, + resolve: { selectedGroup: Sys006Resolver }, + canActivate: [AuthGuard], + data: { + title: "修改分局" + } + }, + { + path: "sys005", + component: Sys005Component, + canActivate: [AuthGuard], + data: { + title: "頁面管理" + } + }, + { + path: "sys005-create-page", + component: Sys005CreatePageComponent, + canActivate: [AuthGuard], + data: { + title: "新增頁面" + } + }, + { + path: "sys005-set-page", + component: Sys005SetPageComponent, + resolve: { selectedPage: Sys005Resolver }, + canActivate: [AuthGuard], + data: { + title: "修改頁面資料" + } + } + ] + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], + providers: [Sys002Resolver, Sys004Resolver, Sys005Resolver, Sys006Resolver] +}) +export class SysRoutingModule {} diff --git a/src/app/views/sys/sys.module.ts b/src/app/views/sys/sys.module.ts new file mode 100644 index 0000000..0a18d68 --- /dev/null +++ b/src/app/views/sys/sys.module.ts @@ -0,0 +1,63 @@ +import { NgModule } from "@angular/core"; +import { CommonModule } from "@angular/common"; +import { FormsModule } from "@angular/forms"; + +import { DataTablesModule } from "angular-datatables"; +import { LoadingModule } from "ngx-loading"; +import { MomentModule } from 'ngx-moment'; +import {MomentTimezoneModule} from 'angular-moment-timezone'; + +import { SysRoutingModule } from "./sys-routing.module"; +import { Sys001Component } from "./sys001/sys001.component"; +import { Sys002Component } from "./sys002/sys002.component"; +import { Sys002CreateUserComponent } from "./sys002/sys002-create-user.component"; +import { Sys002SetUserComponent } from "./sys002/sys002-set-user.component"; +import { Sys002ViewUserComponent } from "./sys002/sys002-view-user.component"; +import { Sys003Component } from "./sys003/sys003.component"; +import { Sys004Component } from "./sys004/sys004.component"; +import { Sys004CreateRoleComponent } from "./sys004/sys004-create-role.component"; +import { Sys004SetRoleComponent } from "./sys004/sys004-set-role.component"; +import { Sys005Component } from "./sys005/sys005.component"; +import { Sys005CreatePageComponent } from "./sys005/sys005-create-page.component"; +import { Sys005SetPageComponent } from "./sys005/sys005-set-page.component"; +import { Sys006Component } from "./sys006/sys006.component"; +import { Sys006CreateGroupComponent } from "./sys006/sys006-create-group.component"; +import { Sys006SetGroupComponent } from "./sys006/sys006-set-group.component"; +import { Sys006ViewGroupComponent } from "./sys006/sys006-view-group.component"; + +import { FieldMatchesValidatorDirective, EqualValidator } from "app/directives"; +import { FilterPipe } from "app/pipe/filter.pipe"; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + SysRoutingModule, + DataTablesModule, + MomentModule, + MomentTimezoneModule, + LoadingModule + ], + declarations: [ + Sys001Component, + Sys002Component, + Sys002CreateUserComponent, + Sys002SetUserComponent, + Sys002ViewUserComponent, + Sys003Component, + Sys004Component, + Sys004CreateRoleComponent, + Sys004SetRoleComponent, + Sys005Component, + Sys005CreatePageComponent, + Sys005SetPageComponent, + Sys006Component, + Sys006CreateGroupComponent, + Sys006SetGroupComponent, + Sys006ViewGroupComponent, + FieldMatchesValidatorDirective, + EqualValidator, + FilterPipe + ] +}) +export class SysModule {} diff --git a/src/app/views/sys/sys001/sys001.component.html b/src/app/views/sys/sys001/sys001.component.html new file mode 100644 index 0000000..e1c477d --- /dev/null +++ b/src/app/views/sys/sys001/sys001.component.html @@ -0,0 +1,40 @@ +
    +
    +
    +
    +

    變更密碼

    +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + *最少12碼 + *密碼應包含英文大寫、小寫、特殊符號、數字 + + +
    +
    + + + *此欄必填 + *與新密碼不相符 + + +
    + +
    +
    +
    +
    diff --git a/src/app/views/sys/sys001/sys001.component.ts b/src/app/views/sys/sys001/sys001.component.ts new file mode 100644 index 0000000..9455ae8 --- /dev/null +++ b/src/app/views/sys/sys001/sys001.component.ts @@ -0,0 +1,75 @@ +import { LoginService } from "../../../service/login.service"; +import { Component, OnInit, Input } from "@angular/core"; +import { SysDataService } from "app/service/sys-data.service"; +import { UserData } from "../../../data/UserData"; +import swal from "sweetalert2"; +import { Router } from "@angular/router"; +import { NgModel } from "@angular/forms"; + +@Component({ + selector: "app-sys001", + templateUrl: "./sys001.component.html" +}) +export class Sys001Component implements OnInit { + @Input("fieldMatches") fieldMatches: NgModel; + userData: UserData; + errorMessage: string; + constructor( + private sysDataService: SysDataService, + private loginService: LoginService, + private router: Router + ) {} + + ngOnInit() { + this.userData = new UserData(); + } + + putUserPassword(id: string) { + this.sysDataService.putUserPassword(this.userData).subscribe(res => { + const result = res.json(); + if (result.Success === true) { + swal({ + type: "success", + title: "修改成功", + text: "請用新密碼重新登入", + showConfirmButton: false, + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => { + this.loginService.logout(); + this.router.navigate(["/login"]); + } + }); + localStorage.removeItem("token"); + localStorage.removeItem("role"); + localStorage.removeItem("id"); + localStorage.removeItem("password"); + } else { + swal({ + type: "error", + title: "修改失敗", + text: "請檢查您輸入的密碼", + showConfirmButton: true, + confirmButtonColor: "#70C2DA" + }); + } + }, error => { + this.errorMessage = error._body; + swal({ + type: "error", + title: "錯誤訊息", + text: JSON.parse(this.errorMessage).Message, + showConfirmButton: false, + timer: 2000, + onOpen: () => { + + }, + onClose: () => { + // this.loading = false; + } + }); + }); + } +} diff --git a/src/app/views/sys/sys002/sys002-create-user.component.html b/src/app/views/sys/sys002/sys002-create-user.component.html new file mode 100644 index 0000000..da8641f --- /dev/null +++ b/src/app/views/sys/sys002/sys002-create-user.component.html @@ -0,0 +1,98 @@ +
    +
    +
    +
    +

    新增使用者

    + +
    + + + *此欄必填 + *帳號長度最少五碼 + + *帳號已存在 + *此帳號可用 + +
    + +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + *請輸入正確信箱格式 + + +
    +
    + + + *此欄必填 + + +
    +
    + + + *請選擇使用者所屬分局 + + +
    +
    + + + *請選擇使用者帳號權限 + + +
    +
    +
    +
    + {{area.Area}} + + +
    +
    +
    +
    + + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    diff --git a/src/app/views/sys/sys002/sys002-create-user.component.ts b/src/app/views/sys/sys002/sys002-create-user.component.ts new file mode 100644 index 0000000..3d05bc6 --- /dev/null +++ b/src/app/views/sys/sys002/sys002-create-user.component.ts @@ -0,0 +1,166 @@ +import { SysDataService } from "../../../service/sys-data.service"; +import { HelperService } from "../../../service/helper.service"; +import { Component, OnInit } from "@angular/core"; +import { Router } from "@angular/router"; +import { UserData } from "../../../data/UserData"; +import swal from "sweetalert2"; +import { AreaArrayData } from "app/data/SiteInformationData"; + +@Component({ + selector: "app-sys002-create-user", + templateUrl: "./sys002-create-user.component.html" +}) +export class Sys002CreateUserComponent implements OnInit { + userData: UserData; + selectGroup: any; + selectRole: any; + isAccountExisted: boolean; + errorMessage: string; + siteInformationList = []; + areaArray: any; + newAreaList: any = []; + Site_Id: any; + allIsChecked: any; + + constructor( + private sysDataService: SysDataService, + private helperService: HelperService, + private router: Router + ) {} + + ngOnInit() { + this.userData = new UserData(); + this.userData.GroupCode_Id = ""; + this.userData.RoleCode_Id = ""; + this.userData.Site_Id = []; + this.allIsChecked = false; + this.selectRole = this.helperService.RoleCode; + const t1 = setInterval(() => { + if (this.helperService.RoleCode) { + this.selectRole = this.helperService.RoleCode; + clearInterval(t1); + } + }, 10); + this.selectGroup = this.helperService.GroupCode; + const t2 = setInterval(() => { + if (this.helperService.GroupCode) { + this.selectGroup = this.helperService.GroupCode; + clearInterval(t2); + } + }); + + this.getSiteInformationAll(); + } + + getSiteInformationAll(): any { + this.sysDataService.getSiteInformationAll().subscribe(res => { + const result = res.json().Result; + + var allArea = result.map(function(item) { + return item.Area; + }); + this.areaArray = allArea.filter(function(element, index, arr) { + return arr.indexOf(element) === index; + }); + + this.siteInformationList = result; + + for (let index = 0; index < this.areaArray.length; index++) { + const element = this.areaArray[index]; + const newArea = new AreaArrayData(); + newArea.Area = element; + newArea.IsChecked = false; + this.newAreaList.push(newArea); + } + + }, error => (this.errorMessage = error)); + } + + selectSiteInformation(id) { + const index = this.userData.Site_Id.indexOf(id); + if (index === -1) { + this.userData.Site_Id.push(id); + } else { + this.userData.Site_Id.splice(index, 1); + } + } + + createNewUser() { + this.sysDataService.postUserData(this.userData).subscribe(res => { + const result = res.json(); + if (result.Success === true) { + swal({ + type: "success", + title: "新增成功", + text: "轉跳回檢視頁面...", + showConfirmButton: false, + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => { + this.router.navigate(["sys/sys002"]); + } + }); + } else { + swal({ + type: "error", + title: "新增失敗", + text: "請檢查您輸入的資訊...", + showConfirmButton: true, + confirmButtonColor: "#70C2DA" + }); + } + }); + } + + checkUserNameExist() { + this.sysDataService + .getExistUserName(this.userData.Account) + .subscribe(res => { + const result = res.json().Result; + + this.isAccountExisted = result; + // if (result === true) { + // console.log("帳號存在"); + // } else { + // console.log("此帳號可用"); + // } + }); + } + + + selectAllSiteInformation(area: AreaArrayData) { + for (let index = 0; index < this.siteInformationList.length; index++) { + const element = this.siteInformationList[index]; + if (element.Area === area.Area) { + if (area.IsChecked) { + const index1 = this.userData.Site_Id.indexOf(element.Id); + if (index1 === -1) { + this.userData.Site_Id.push(element.Id); + } else { + // this.userData.Site_Id.splice(index, 1); + } + + } else { + const index1 = this.userData.Site_Id.indexOf(element.Id); + if (index1 === -1) { + // this.userData.Site_Id.push(element.Id); + } else { + this.userData.Site_Id.splice(index1, 1); + } + } + element.IsChecked = area.IsChecked; + + } + + } + + } + + backPreviousPage() { + this.router.navigateByUrl("/sys/sys002"); + } + + +} diff --git a/src/app/views/sys/sys002/sys002-resolver.service.ts b/src/app/views/sys/sys002/sys002-resolver.service.ts new file mode 100644 index 0000000..fc0cf8d --- /dev/null +++ b/src/app/views/sys/sys002/sys002-resolver.service.ts @@ -0,0 +1,13 @@ +import { Injectable } from "@angular/core"; +import { Resolve } from "@angular/router"; +import { Sys002Service } from "app/views/sys/sys002/sys002.service"; +import { Observable } from "rxjs/Observable"; + +@Injectable() +export class Sys002Resolver implements Resolve { + constructor(private sys002Service: Sys002Service) {} + + resolve(): Observable { + return this.sys002Service.selectedUser; + } +} diff --git a/src/app/views/sys/sys002/sys002-set-user.component.html b/src/app/views/sys/sys002/sys002-set-user.component.html new file mode 100644 index 0000000..bc4273a --- /dev/null +++ b/src/app/views/sys/sys002/sys002-set-user.component.html @@ -0,0 +1,106 @@ +
    +
    +
    +
    +

    修改使用者資料

    +
    + + +
    +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + *請輸入正確信箱格式 + + +
    +
    + + + *此欄必填 + + +
    +
    + + + *請選擇 + + +
    +
    + + + *請選擇帳號權限 + + +
    + + + +
    +
    +
    + {{area.Area}} + + +
    +
    +
    +
    + + +
    +
    +
    +
    +
    + +
    +
    +
    +
    diff --git a/src/app/views/sys/sys002/sys002-set-user.component.ts b/src/app/views/sys/sys002/sys002-set-user.component.ts new file mode 100644 index 0000000..341ac28 --- /dev/null +++ b/src/app/views/sys/sys002/sys002-set-user.component.ts @@ -0,0 +1,178 @@ +import { SiteData } from './../../../data/SiteInformationData'; +import { SysDataService } from "../../../service/sys-data.service"; +import { HelperService } from "../../../service/helper.service"; +import { Component, OnInit } from "@angular/core"; +import { Router } from "@angular/router"; +import { ActivatedRoute } from "@angular/router"; +import swal from "sweetalert2"; +import { AreaArrayData } from "app/data/SiteInformationData"; + +@Component({ + selector: "app-sys002-set-user", + templateUrl: "./sys002-set-user.component.html" +}) +export class Sys002SetUserComponent implements OnInit { + errorMessage: String; + data: any; + selectRole: any; + selectGroup: any; + selectedUser: any; + roleId: number; + groupId: number; + + siteInformationList = []; + areaArray: any; + Site_Id: any; + newAreaList: any = []; + + constructor( + private sysDataService: SysDataService, + private helperService: HelperService, + private router: Router, + private route: ActivatedRoute + ) {} + + ngOnInit() { + this.selectRole = this.helperService.RoleCode; + this.selectGroup = this.helperService.GroupCode; + this.route.data.subscribe((data: { selectedUser: any }) => { + this.selectedUser = data.selectedUser; + this.roleId = this.selectedUser.RoleCode_Id; + this.groupId = this.selectedUser.GroupCode_Id; + }); + this.getSiteInformationAll(); + + + } + + getSiteInformationAll(): any { + this.sysDataService.getSiteInformationAll().subscribe(res => { + const result = res.json().Result; + + var allArea = result.map(function(item) { + return item.Area; + }); + this.areaArray = allArea.filter(function(element, index, arr) { + return arr.indexOf(element) === index; + }); + + this.siteInformationList = result; + + for (let index = 0; index < this.areaArray.length; index++) { + const element = this.areaArray[index]; + const newArea = new AreaArrayData(); + newArea.Area = element; + newArea.IsChecked = false; + this.newAreaList.push(newArea); + } + + for (let index = 0; index < this.siteInformationList.length; index++) { + const element = this.siteInformationList[index]; + element.IsChecked = false; + for (let i = 0 ; i < this.selectedUser.Site.length; i++) { + if (element.SiteID === this.selectedUser.Site[i].SiteId) { + element.IsChecked = true; + } + } + } + + }, error => (this.errorMessage = error)); + } + + selectSiteInformation(id) { + const sitedata = new SiteData(); + sitedata.Id = id.Id; + sitedata.SiteId = id.SiteID; + sitedata.SiteName = id.SiteName; + + const index = this.selectedUser.Site.map(function(e) { return e.SiteId; }).indexOf(sitedata.SiteId); + if (index === -1) { + this.selectedUser.Site.push(sitedata); + } else { + this.selectedUser.Site.splice(index, 1); + } + } + + isChecked(Id) { + + for (let i = 0 ; i < this.selectedUser.Site.length; i++) { + if (this.selectedUser.Site[i].SiteId === Id) { + return 1; + } + } + return 0; + } + + doEditUser() { + this.selectedUser.Site_Id = []; + for (let i = 0 ; i < this.selectedUser.Site.length; i++) { + this.selectedUser.Site_Id.push(this.selectedUser.Site[i].Id); + } + + this.sysDataService.putUserData(this.selectedUser).subscribe(res => { + const result = res.json(); + if (result.Success === true) { + swal({ + type: "success", + title: "修改成功", + text: "轉跳回檢視頁面...", + showConfirmButton: false, + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => { + this.router.navigate(["sys/sys002"]); + } + }); + } else { + swal({ + type: "error", + title: "修改失敗", + text: "請檢查您輸入的資訊...", + showConfirmButton: true, + confirmButtonColor: "#70C2DA" + }); + } + }); + } + + selectAllSiteInformation(area: AreaArrayData) { + for (let index = 0; index < this.siteInformationList.length; index++) { + const element = this.siteInformationList[index]; + if (element.Area === area.Area) { + if (area.IsChecked) { + const sitedata = new SiteData(); + sitedata.Id = element.Id; + sitedata.SiteId = element.SiteID; + sitedata.SiteName = element.SiteName; + const index1 = this.selectedUser.Site.map(function(e) { return e.SiteId; }).indexOf(sitedata.SiteId); + if (index1 === -1) { + this.selectedUser.Site.push(sitedata); + } else { + } + + } else { + const sitedata = new SiteData(); + sitedata.Id = element.Id; + sitedata.SiteId = element.SiteID; + sitedata.SiteName = element.SiteName; + const index1 = this.selectedUser.Site.map(function(e) { return e.SiteId; }).indexOf(sitedata.SiteId); + if (index1 === -1) { + } else { + this.selectedUser.Site.splice(index1, 1); + } + } + element.IsChecked = area.IsChecked; + + } + + } + + } + + + backPreviousPage() { + this.router.navigateByUrl("/sys/sys002"); + } +} diff --git a/src/app/views/sys/sys002/sys002-view-user.component.html b/src/app/views/sys/sys002/sys002-view-user.component.html new file mode 100644 index 0000000..5054ba0 --- /dev/null +++ b/src/app/views/sys/sys002/sys002-view-user.component.html @@ -0,0 +1,79 @@ +
    +
    +
    +

    檢視使用者資料

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + 帳號 + + {{selectedUser.Account}} +
    + 使用者名稱 + + {{selectedUser.UserName}} +
    + 使用者信箱 + + {{selectedUser.Email}} +
    + 使用者電話 + + {{selectedUser.PhoneNumber}} +
    + 所屬分局 + + {{getGroupCodeText(selectedUser.GroupCode_Id)}} +
    + 所屬角色 + + {{getRoleCodeText(selectedUser.RoleCode_Id)}} +
    + 所屬場域 + + {{getSiteNameText(selectedUser.Site)}} +
    + 狀態 + 啟用停用
    + +
    +
    +
    diff --git a/src/app/views/sys/sys002/sys002-view-user.component.ts b/src/app/views/sys/sys002/sys002-view-user.component.ts new file mode 100644 index 0000000..12df4cf --- /dev/null +++ b/src/app/views/sys/sys002/sys002-view-user.component.ts @@ -0,0 +1,56 @@ +import { SysDataService } from "../../../service/sys-data.service"; +import { HelperService } from "../../../service/helper.service"; +import { Router } from "@angular/router"; +import { Component, OnInit } from "@angular/core"; +import { ActivatedRoute } from "@angular/router"; + +@Component({ + selector: "app-sys002-view-user", + templateUrl: "./sys002-view-user.component.html" +}) +export class Sys002ViewUserComponent implements OnInit { + errorMessage: String; + data: any; + selectRole: any; + selectedUser: any; + roleId: number; + groupId: number; + siteNameText: string; + + constructor( + private sysDataService: SysDataService, + private helperService: HelperService, + private router: Router, + private route: ActivatedRoute + ) {} + + ngOnInit() { + this.selectRole = this.helperService.RoleCode; + this.route.data.subscribe((data: { selectedUser: any }) => { + this.selectedUser = data.selectedUser; + this.roleId = this.selectedUser.RoleCode_Id; + this.groupId = this.selectedUser.GroupCode_Id; + }); + } + + backPreviousPage() { + this.router.navigateByUrl("/sys/sys002"); + } + + getRoleCodeText(id: number) { + return this.helperService.getRoleCodeText(id); + } + + getGroupCodeText(id: number) { + return this.helperService.getGroupCodeText(id); + } + + getSiteNameText(siteIdArray: any) { + this.siteNameText = " "; + for (let i = 0 ; i < siteIdArray.length; i++) { + this.siteNameText += siteIdArray[i].SiteName + ", "; + + } + return this.siteNameText; + } +} diff --git a/src/app/views/sys/sys002/sys002.component.html b/src/app/views/sys/sys002/sys002.component.html new file mode 100644 index 0000000..73569d1 --- /dev/null +++ b/src/app/views/sys/sys002/sys002.component.html @@ -0,0 +1,86 @@ +
    +
    +
    + +

    使用者管理

    + +
    + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + 帳號 + + 使用者名稱 + + 所屬分局 + + 角色權限 + + 狀態執行動作
    {{user.Account}}{{user.UserName}}{{getGroupCodeText(user.GroupCode_Id)}}{{getRoleCodeText(user.RoleCode_Id)}}啟用停用 + + + + + + + +
    +
    +
    + 暫無資料 +
    + +
    +
    +
    diff --git a/src/app/views/sys/sys002/sys002.component.ts b/src/app/views/sys/sys002/sys002.component.ts new file mode 100644 index 0000000..a56a458 --- /dev/null +++ b/src/app/views/sys/sys002/sys002.component.ts @@ -0,0 +1,281 @@ +import { HelperService } from "../../../service/helper.service"; +import { SysDataService } from "../../../service/sys-data.service"; +import { Component, OnInit } from "@angular/core"; +import { Http, Response } from "@angular/http"; +import { Headers, RequestOptions } from "@angular/http"; +import { UserData } from "app/Data/UserData"; +import { TableQueryData } from "../../../data/TableQueryData"; +import { Sys002Service } from "app/views/sys/sys002/sys002.service"; +import { Router } from "@angular/router"; +import swal from "sweetalert2"; + +@Component({ + selector: "app-sys002", + templateUrl: "./sys002.component.html" +}) +export class Sys002Component implements OnInit { + deleted = false; + tableQueryData: TableQueryData; + tableQuerySiteData: TableQueryData; + IsAsc = true; + id: number; + userId = 3; + item: string; + currentPage = 0; + pageCount = 0; + pageLinkMarginCount = 2; + pageLinks = []; + userDataList = []; + siteInformationList = []; + errorMessage: String; + userName: String; + loginRole = localStorage.getItem("role"); + setRole = "1"; + loading = false; + + constructor( + private sysDataService: SysDataService, + private helperService: HelperService, + private sys002Service: Sys002Service, + private router: Router + ) {} + + ngOnInit() { + this.loading = true; + this.tableQueryData = new TableQueryData(); + this.tableQueryData.CurrentPage = 0; + this.tableQuerySiteData = new TableQueryData(); + this.tableQuerySiteData.CurrentPage = 0; + this.getUserData(this.tableQueryData, this.id); + } + + getUserData(tableQueryData: TableQueryData, id?: number): any { + this.tableQueryData.CurrentPage = tableQueryData.Page + ? tableQueryData.Page + : 1; + this.sysDataService.getUserPageData(tableQueryData, id).subscribe(res => { + const result = res.json().Result; + this.userDataList = result.Data; + this.loading = false; + if (tableQueryData.Page === 1 || !tableQueryData.Page) { + this.pageCount = result.PageCount; + this.getPageLinks(); + } + }, error => (this.errorMessage = error)); + } + + + getSiteInformations(tableQueryData: TableQueryData): any { + this.tableQueryData.CurrentPage = tableQueryData.Page + ? tableQueryData.Page + : 1; + this.sysDataService.getSiteInformations(tableQueryData).subscribe(res => { + const result = res.json().Result; + this.siteInformationList = result.Data; + this.loading = false; + if (tableQueryData.Page === 1 || !tableQueryData.Page) { + this.pageCount = result.PageCount; + this.getPageLinks(); + } + }, error => (this.errorMessage = error)); + } + + + getPageLinks() { + this.pageLinks = []; + let firstPageNumber = + this.tableQueryData.CurrentPage - this.pageLinkMarginCount; + let lastPageNumber = + this.tableQueryData.CurrentPage + this.pageLinkMarginCount; + if (firstPageNumber < 1) { + firstPageNumber = 1; + } + if (lastPageNumber > this.pageCount) { + lastPageNumber = this.pageCount; + } + if (firstPageNumber > 1) { + const isCurrentPage = firstPageNumber === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: "第一頁", + pageNo: 1, + isCurrent: isCurrentPage + }); + } + for (let i = firstPageNumber; i <= lastPageNumber; i++) { + const isCurrentPage = i === this.tableQueryData.CurrentPage; + this.pageLinks.push({ text: i, pageNo: i, isCurrent: isCurrentPage }); + } + if (lastPageNumber < this.pageCount) { + const isCurrentPage = lastPageNumber === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: "最後頁(共 " + this.pageCount + " 頁)", + pageNo: this.pageCount, + isCurrent: isCurrentPage + }); + } + } + + onPageChange(e: Event, page) { + e.preventDefault(); + this.tableQueryData.CurrentPage = page; + this.tableQueryData.Page = this.tableQueryData.CurrentPage; + this.getPageLinks(); + this.getUserData(this.tableQueryData, this.id); + } + + doSearch() { + this.tableQueryData.Page = null; + this.getUserData(this.tableQueryData, this.id); + } + + clearSearch() { + this.tableQueryData.Term = null; + this.getUserData(this.tableQueryData, this.id); + } + + order(item) { + this.IsAsc = !this.IsAsc; + this.item = item; + this.tableQueryData.Order = item; + this.tableQueryData.IsAsc = this.IsAsc.toString(); + this.getUserData(this.tableQueryData, this.id); + } + + deleteUserData(userId: string): any { + swal({ + title: "是否要刪除?", + type: "warning", + showCancelButton: true, + confirmButtonColor: "#70C2DA", + cancelButtonColor: "#f86c6b", + confirmButtonText: "是", + cancelButtonText: "否" + }).then(result => { + if (result.value) { + this.sysDataService.deleteUserData(userId).subscribe(res => { + const result2 = res.json(); + if (result2.Success === true) { + swal({ + type: "success", + title: "刪除成功", + showConfirmButton: true, + confirmButtonColor: "#70C2DA" + }); + this.userDataList = this.userDataList.filter(u => { + return u.Id !== userId; + }); + this.getUserData(this.tableQueryData, this.id); + } else { + swal({ + type: "error", + title: "刪除失敗", + // text: "請檢查您輸入的資訊...", + showConfirmButton: true, + confirmButtonColor: "#70C2DA" + }); + } + }); + } + }); + } + + + + + setUserStatus(user: any, status: number): any { + swal({ + title: "是否要變更狀態?", + type: "warning", + showCancelButton: true, + confirmButtonColor: "#70C2DA", + cancelButtonColor: "#f86c6b", + confirmButtonText: "是", + cancelButtonText: "否" + }).then(result => { + if (result.value) { + this.sysDataService.putUserStatus(user.Id, status).subscribe(res => { + const result2 = res.json(); + if (result2.Success === true) { + swal({ + type: "success", + title: "更新成功", + showConfirmButton: true, + confirmButtonColor: "#70C2DA" + }); + // this.userDataList = this.userDataList.filter(u => { + // return u.Id !== user.Id; + // }); + this.getUserData(this.tableQueryData, this.id); + } else { + swal({ + type: "error", + title: "更新失敗", + // text: "請檢查您輸入的資訊...", + showConfirmButton: true, + confirmButtonColor: "#70C2DA" + }); + } + }); + } + }); + } + + + setUserPassword(user: any): any { + swal({ + title: "是否要初始化密碼?", + type: "warning", + showCancelButton: true, + confirmButtonColor: "#70C2DA", + cancelButtonColor: "#f86c6b", + confirmButtonText: "是", + cancelButtonText: "否" + }).then(result => { + if (result.value) { + this.sysDataService.putUserPasswordById(user.Id).subscribe(res => { + const result2 = res.json(); + if (result2.Success === true) { + swal({ + type: "success", + title: "密碼初始化成功", + showConfirmButton: true, + confirmButtonColor: "#70C2DA" + }); + // this.userDataList = this.userDataList.filter(u => { + // return u.Id !== user.Id; + // }); + this.getUserData(this.tableQueryData, this.id); + } else { + swal({ + type: "error", + title: "密碼初始化失敗", + // text: "請檢查您輸入的資訊...", + showConfirmButton: true, + confirmButtonColor: "#70C2DA" + }); + } + }); + } + }); + } + + + + getGroupCodeText(id: number) { + return this.helperService.getGroupCodeText(id); + } + + getRoleCodeText(roleId: number) { + return this.helperService.getRoleCodeText(roleId); + } + + goUserDetail(user) { + this.sys002Service.selectedUser = user; + this.router.navigate(["sys/sys002-view-user"]); + } + + goEditUser(user) { + this.sys002Service.selectedUser = user; + this.router.navigate(["/sys/sys002-set-user"]); + } +} diff --git a/src/app/views/sys/sys002/sys002.service.ts b/src/app/views/sys/sys002/sys002.service.ts new file mode 100644 index 0000000..b0bcd3f --- /dev/null +++ b/src/app/views/sys/sys002/sys002.service.ts @@ -0,0 +1,3 @@ +export class Sys002Service { + selectedUser: any; +} diff --git a/src/app/views/sys/sys003/sys003.component.html b/src/app/views/sys/sys003/sys003.component.html new file mode 100644 index 0000000..320c5c1 --- /dev/null +++ b/src/app/views/sys/sys003/sys003.component.html @@ -0,0 +1,30 @@ +
    +
    +
    + +

    我的資料

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    diff --git a/src/app/views/sys/sys003/sys003.component.ts b/src/app/views/sys/sys003/sys003.component.ts new file mode 100644 index 0000000..0cb7085 --- /dev/null +++ b/src/app/views/sys/sys003/sys003.component.ts @@ -0,0 +1,60 @@ +import { SysDataService } from "../../../service/sys-data.service"; +import { HelperService } from "../../../service/helper.service"; +import { Component, OnInit } from "@angular/core"; +import { Router } from "@angular/router"; +import { ActivatedRoute } from "@angular/router"; +import swal from "sweetalert2"; +import { UserData } from "../../../data/UserData"; + +@Component({ + selector: "app-sys003", + templateUrl: "./sys003.component.html" +}) +export class Sys003Component implements OnInit { + selectedUser: any; + selectedUserId = +localStorage.getItem("id"); + term: string; + page: number; + loading = false; + errorMessage: String; + + constructor( + private sysDataService: SysDataService, + private helperService: HelperService, + private route: ActivatedRoute + ) {} + + ngOnInit() { + this.loading = true; + this.getUserDatabyId(this.selectedUserId); + } + + getUserDatabyId(id?: number): any { + this.sysDataService.getUserbyId(id).subscribe(res => { + this.selectedUser = res.json(); + this.loading = false; + }, error => (this.errorMessage = error)); + } + + doEditUser() { + this.sysDataService.putUserData(this.selectedUser).subscribe(res => { + const result = res.json(); + if (result.Success === true) { + swal({ + type: "success", + title: "修改成功", + showConfirmButton: true, + confirmButtonColor: "#70C2DA" + }); + } else { + swal({ + type: "error", + title: "修改失敗", + text: "請檢查您輸入的資訊...", + showConfirmButton: true, + confirmButtonColor: "#70C2DA" + }); + } + }); + } +} diff --git a/src/app/views/sys/sys004/sys004-create-role.component.html b/src/app/views/sys/sys004/sys004-create-role.component.html new file mode 100644 index 0000000..d3d2c8f --- /dev/null +++ b/src/app/views/sys/sys004/sys004-create-role.component.html @@ -0,0 +1,26 @@ +
    +
    +
    +
    +

    新增權限

    +
    + + + *此欄必填 + + +
    + +
    +
    +
    +
    diff --git a/src/app/views/sys/sys004/sys004-create-role.component.ts b/src/app/views/sys/sys004/sys004-create-role.component.ts new file mode 100644 index 0000000..dc1f950 --- /dev/null +++ b/src/app/views/sys/sys004/sys004-create-role.component.ts @@ -0,0 +1,54 @@ +import { SysDataService } from "../../../service/sys-data.service"; +import { Component, OnInit } from "@angular/core"; +import { RoleData } from "../../../data/RoleData"; +import { Router } from "@angular/router"; +import swal from "sweetalert2"; + +@Component({ + selector: "app-sys004-create-role", + templateUrl: "./sys004-create-role.component.html" +}) +export class Sys004CreateRoleComponent implements OnInit { + roleData: RoleData; + + errorMessage: string; + data: any; + constructor(private sysDataService: SysDataService, private router: Router) {} + + ngOnInit() { + this.roleData = new RoleData(); + } + + createNewRole() { + this.sysDataService.postRoleDataList(this.roleData).subscribe(res => { + const result = res.json(); + if (result.Success === true) { + swal({ + type: "success", + title: "新增成功", + text: "轉跳回檢視頁面...", + showConfirmButton: false, + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => { + this.router.navigate(["sys/sys004"]); + } + }); + } else { + swal({ + type: "error", + title: "新增失敗", + text: "請檢查您輸入的資訊...", + showConfirmButton: true, + confirmButtonColor: "#70C2DA" + }); + } + }); + } + + backPreviousPage() { + this.router.navigateByUrl("/sys/sys004"); + } +} diff --git a/src/app/views/sys/sys004/sys004-resolver.service.ts b/src/app/views/sys/sys004/sys004-resolver.service.ts new file mode 100644 index 0000000..5ba6b0f --- /dev/null +++ b/src/app/views/sys/sys004/sys004-resolver.service.ts @@ -0,0 +1,14 @@ +import { Injectable } from "@angular/core"; +import { Resolve } from "@angular/router"; +import { Sys004Service } from "app/views/sys/sys004/sys004.service"; +import { Observable } from "rxjs/Observable"; + +@Injectable() +export class Sys004Resolver implements Resolve { + constructor(private sys004Service: Sys004Service) {} + + resolve(): Observable { + + return this.sys004Service.selectedRole; + } +} diff --git a/src/app/views/sys/sys004/sys004-set-role.component.html b/src/app/views/sys/sys004/sys004-set-role.component.html new file mode 100644 index 0000000..cff66eb --- /dev/null +++ b/src/app/views/sys/sys004/sys004-set-role.component.html @@ -0,0 +1,41 @@ +
    +
    +
    +

    權限設定

    +
    +
    + + +
    +
    + + + + + + + + + + + + + + + +
    所屬模組頁面名稱權限狀態
    {{p.PageModule}}{{p.PageName}} + +
    +
    + +
    +
    +
    +
    diff --git a/src/app/views/sys/sys004/sys004-set-role.component.ts b/src/app/views/sys/sys004/sys004-set-role.component.ts new file mode 100644 index 0000000..d18feb5 --- /dev/null +++ b/src/app/views/sys/sys004/sys004-set-role.component.ts @@ -0,0 +1,50 @@ +import { SysDataService } from "../../../service/sys-data.service"; +import { Component, OnInit } from "@angular/core"; +import { Router } from "@angular/router"; +import { ActivatedRoute } from "@angular/router"; +import { PremissionData } from "../../../data/PremissionData"; + +@Component({ + selector: "app-sys004-set-role", + templateUrl: "./sys004-set-role.component.html" +}) +export class Sys004SetRoleComponent implements OnInit { + premissionList = []; + errorMessage: String; + data: any; + premissionData: PremissionData; + selectedRole: any; + roleId: number; + + constructor( + private sysDataService: SysDataService, + private router: Router, + private route: ActivatedRoute + ) {} + + ngOnInit() { + this.route.data.subscribe((data: { selectedRole: any }) => { + this.selectedRole = data.selectedRole; + this.roleId = this.selectedRole.Id; + this.premissionData = new PremissionData(); + this.getAllPagePermission(); + }); + } + + getAllPagePermission(): any { + this.premissionList = []; + this.sysDataService.getAllPagePermission(this.roleId).subscribe(data => { + this.premissionList = data; + }, error => (this.errorMessage = error)); + } + + onCheckEnable(p): any { + this.sysDataService.putPageRoleStatus(p).subscribe(data => { + p = data; + }, error => (this.errorMessage = error)); + } + + backPreviousPage() { + this.router.navigateByUrl("/sys/sys004"); + } +} diff --git a/src/app/views/sys/sys004/sys004.component.html b/src/app/views/sys/sys004/sys004.component.html new file mode 100644 index 0000000..5216f57 --- /dev/null +++ b/src/app/views/sys/sys004/sys004.component.html @@ -0,0 +1,50 @@ +
    +
    +
    + +

    角色權限管理

    + +
    + + + +
    +
    + + + + + + + + + + + + + +
    + + 角色權限名稱設定
    {{roleData.RoleName}} + +
    +
    +
    + 暫無資料 +
    + +
    +
    +
    diff --git a/src/app/views/sys/sys004/sys004.component.ts b/src/app/views/sys/sys004/sys004.component.ts new file mode 100644 index 0000000..b84e5f4 --- /dev/null +++ b/src/app/views/sys/sys004/sys004.component.ts @@ -0,0 +1,117 @@ +import { Component, OnInit } from "@angular/core"; +import { SysDataService } from "../../../service/sys-data.service"; +import { Http, Response } from "@angular/http"; +import { Headers, RequestOptions } from "@angular/http"; +import { Sys004Service } from "app/views/sys/sys004/sys004.service"; +import { RoleData } from "app/Data/RoleData"; +import { TableQueryData } from "../../../data/TableQueryData"; +import { Router } from "@angular/router"; + +@Component({ + selector: "app-sys004", + templateUrl: "./sys004.component.html" +}) +export class Sys004Component implements OnInit { + roleDataList = []; + tableQueryData: TableQueryData; + IsAsc = true; + item: string; + pageCount = 0; + loading = false; + pageLinks = []; + pageLinkMarginCount = 2; + errorMessage: String; + constructor( + private sysDataService: SysDataService, + private sys004Service: Sys004Service, + private router: Router + ) {} + + ngOnInit() { + this.loading = true; + this.tableQueryData = new TableQueryData(); + this.tableQueryData.CurrentPage = 0; + this.getRoleDataList(this.tableQueryData); + } + + getRoleDataList(tableQueryData: TableQueryData): any { + this.tableQueryData.CurrentPage = tableQueryData.Page + ? tableQueryData.Page + : 1; + this.sysDataService.getRoleDataList(tableQueryData).subscribe(res => { + const result = res.json().Result; + console.log(result) + console.log(res.json()) + this.roleDataList = result.Data; + this.loading = false; + if (tableQueryData.Page === 1 || !tableQueryData.Page) { + this.pageCount = result.PageCount; + this.getPageLinks(); + } + }, error => (this.errorMessage = error)); + } + + getPageLinks() { + this.pageLinks = []; + let firstPageNumber = + this.tableQueryData.CurrentPage - this.pageLinkMarginCount; + let lastPageNumber = + this.tableQueryData.CurrentPage + this.pageLinkMarginCount; + if (firstPageNumber < 1) { + firstPageNumber = 1; + } + if (lastPageNumber > this.pageCount) { + lastPageNumber = this.pageCount; + } + if (firstPageNumber > 1) { + const isCurrentPage = firstPageNumber === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: "第一頁", + pageNo: 1, + isCurrent: isCurrentPage + }); + } + for (let i = firstPageNumber; i <= lastPageNumber; i++) { + const isCurrentPage = i === this.tableQueryData.CurrentPage; + this.pageLinks.push({ text: i, pageNo: i, isCurrent: isCurrentPage }); + } + if (lastPageNumber < this.pageCount) { + const isCurrentPage = lastPageNumber === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: "最後頁(共 " + this.pageCount + " 頁)", + pageNo: this.pageCount, + isCurrent: isCurrentPage + }); + } + } + + onPageChange(e: Event, page) { + e.preventDefault(); + this.tableQueryData.CurrentPage = page; + this.tableQueryData.Page = this.tableQueryData.CurrentPage; + this.getPageLinks(); + this.getRoleDataList(this.tableQueryData); + } + + doSearch() { + this.tableQueryData.Page = null; + this.getRoleDataList(this.tableQueryData); + } + + clearSearch() { + this.tableQueryData.Term = null; + this.getRoleDataList(this.tableQueryData); + } + order(item) { + this.IsAsc = !this.IsAsc; + this.item = item; + this.tableQueryData.Order = item; + this.tableQueryData.IsAsc = this.IsAsc.toString(); + this.getRoleDataList(this.tableQueryData); + } + + goDetail(item) { + this.sys004Service.selectedRole = item; + this.router.navigate(["/sys/sys004-set-role"]); + } +} diff --git a/src/app/views/sys/sys004/sys004.service.ts b/src/app/views/sys/sys004/sys004.service.ts new file mode 100644 index 0000000..89feab8 --- /dev/null +++ b/src/app/views/sys/sys004/sys004.service.ts @@ -0,0 +1,3 @@ +export class Sys004Service { + selectedRole: any; +} diff --git a/src/app/views/sys/sys005/sys005-create-page.component.html b/src/app/views/sys/sys005/sys005-create-page.component.html new file mode 100644 index 0000000..d0eea2b --- /dev/null +++ b/src/app/views/sys/sys005/sys005-create-page.component.html @@ -0,0 +1,42 @@ +
    +
    +
    +
    +

    新增頁面資料

    +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + + +
    + +
    +
    +
    +
    diff --git a/src/app/views/sys/sys005/sys005-create-page.component.ts b/src/app/views/sys/sys005/sys005-create-page.component.ts new file mode 100644 index 0000000..baa0e39 --- /dev/null +++ b/src/app/views/sys/sys005/sys005-create-page.component.ts @@ -0,0 +1,51 @@ +import { SysDataService } from "../../../service/sys-data.service"; +import { Component, OnInit } from "@angular/core"; +import { PageData } from "../../../data/PageData"; +import { Router } from "@angular/router"; +import swal from "sweetalert2"; + +@Component({ + selector: "app-sys005-create-page", + templateUrl: "./sys005-create-page.component.html" +}) +export class Sys005CreatePageComponent implements OnInit { + pageData: PageData; + errorMessage: string; + data: any; + constructor(private sysDataService: SysDataService, private router: Router) {} + ngOnInit() { + this.pageData = new PageData(); + } + + postPageDataList() { + this.sysDataService.postPageListData(this.pageData).subscribe(res => { + const result = res.json(); + if (result.Success === true) { + swal({ + type: "success", + title: "新增成功", + text: "轉跳回檢視頁面...", + showConfirmButton: false, + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => { + this.router.navigate(["sys/sys005"]); + } + }); + } else { + swal({ + type: "error", + title: "新增失敗", + text: "請檢查您輸入的資訊...", + showConfirmButton: true + }); + } + }); + } + + backPreviousPage() { + this.router.navigateByUrl("/sys/sys005"); + } +} diff --git a/src/app/views/sys/sys005/sys005-resolver.service.ts b/src/app/views/sys/sys005/sys005-resolver.service.ts new file mode 100644 index 0000000..81d45ec --- /dev/null +++ b/src/app/views/sys/sys005/sys005-resolver.service.ts @@ -0,0 +1,13 @@ +import { Injectable } from "@angular/core"; +import { Resolve } from "@angular/router"; +import { Sys005Service } from "app/views/sys/sys005/sys005.service"; +import { Observable } from "rxjs/Observable"; + +@Injectable() +export class Sys005Resolver implements Resolve { + constructor(private sys005Service: Sys005Service) {} + + resolve(): Observable { + return this.sys005Service.selectedPage; + } +} diff --git a/src/app/views/sys/sys005/sys005-set-page.component.html b/src/app/views/sys/sys005/sys005-set-page.component.html new file mode 100644 index 0000000..7fc545f --- /dev/null +++ b/src/app/views/sys/sys005/sys005-set-page.component.html @@ -0,0 +1,39 @@ +
    +
    +
    +
    +

    修改頁面資料

    +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + + +
    + +
    +
    +
    +
    diff --git a/src/app/views/sys/sys005/sys005-set-page.component.ts b/src/app/views/sys/sys005/sys005-set-page.component.ts new file mode 100644 index 0000000..b2c8ca5 --- /dev/null +++ b/src/app/views/sys/sys005/sys005-set-page.component.ts @@ -0,0 +1,63 @@ +import { SysDataService } from "../../../service/sys-data.service"; +import { HelperService } from "../../../service/helper.service"; +import { Component, OnInit } from "@angular/core"; +import { Router } from "@angular/router"; +import { ActivatedRoute } from "@angular/router"; +import swal from "sweetalert2"; + +@Component({ + selector: "app-sys005-set-page", + templateUrl: "./sys005-set-page.component.html" +}) +export class Sys005SetPageComponent implements OnInit { + errorMessage: String; + data: any; + selectedPage: any; + roleId: number; + + constructor( + private sysDataService: SysDataService, + private helperService: HelperService, + private router: Router, + private route: ActivatedRoute + ) {} + + ngOnInit() { + this.route.data.subscribe((data: { selectedPage: any }) => { + this.selectedPage = data.selectedPage; + }); + } + + backPreviousPage() { + this.router.navigateByUrl("/sys/sys005"); + } + + doEditPageData() { + this.sysDataService.putPageData(this.selectedPage).subscribe(res => { + const result = res.json(); + if (result.Success === true) { + swal({ + type: "success", + title: "修改成功", + text: "轉跳回檢視頁面...", + showConfirmButton: false, + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => { + this.router.navigate(["sys/sys005"]); + } + }); + } else { + swal({ + type: "error", + title: "修改失敗", + text: "請檢查您輸入的資訊...", + showConfirmButton: true, + confirmButtonColor: "#70C2DA" + }); + } + }); + } +} diff --git a/src/app/views/sys/sys005/sys005.component.html b/src/app/views/sys/sys005/sys005.component.html new file mode 100644 index 0000000..927d34a --- /dev/null +++ b/src/app/views/sys/sys005/sys005.component.html @@ -0,0 +1,62 @@ +
    +
    +
    + +

    頁面管理

    + +
    + + + +
    +
    + + + + + + + + + + + + + + + + + +
    + + 所屬模組 + + 頁面名稱 + + 頁面URL執行動作
    {{pageData.PageModule}}{{pageData.PageName}}{{pageData.PageURL}} + + +
    +
    +
    + 暫無資料 +
    + +
    +
    +
    diff --git a/src/app/views/sys/sys005/sys005.component.ts b/src/app/views/sys/sys005/sys005.component.ts new file mode 100644 index 0000000..760add5 --- /dev/null +++ b/src/app/views/sys/sys005/sys005.component.ts @@ -0,0 +1,149 @@ +import { SysDataService } from "../../../service/sys-data.service"; +import { Component, OnInit } from "@angular/core"; +import { Sys005Service } from "app/views/sys/sys005/sys005.service"; +import { TableQueryData } from "../../../data/TableQueryData"; +import { Router } from "@angular/router"; +import swal from "sweetalert2"; + +@Component({ + selector: "app-sys005", + templateUrl: "./sys005.component.html" +}) +export class Sys005Component implements OnInit { + pageDataList = []; + loading = false; + tableQueryData: TableQueryData; + item: string; + IsAsc = true; + pageCount = 0; + pageLinks = []; + pageLinkMarginCount = 2; + + errorMessage: String; + constructor( + private sysDataService: SysDataService, + private sys005Service: Sys005Service, + private router: Router + ) {} + + ngOnInit() { + this.loading = true; + this.tableQueryData = new TableQueryData(); + this.tableQueryData.CurrentPage = 0; + this.getPageDataList(this.tableQueryData); + } + + getPageDataList(tableQueryData: TableQueryData): any { + this.tableQueryData.CurrentPage = tableQueryData.Page + ? tableQueryData.Page + : 1; + this.sysDataService.getPageDataList(tableQueryData).subscribe(res => { + const result = res.json().Result; + this.pageDataList = result.Data; + this.loading = false; + if (tableQueryData.Page === 1 || !tableQueryData.Page) { + this.pageCount = result.PageCount; + this.getPageLinks(); + } + }, error => (this.errorMessage = error)); + } + + getPageLinks() { + this.pageLinks = []; + let firstPageNumber = + this.tableQueryData.CurrentPage - this.pageLinkMarginCount; + let lastPageNumber = + this.tableQueryData.CurrentPage + this.pageLinkMarginCount; + if (firstPageNumber < 1) { + firstPageNumber = 1; + } + if (lastPageNumber > this.pageCount) { + lastPageNumber = this.pageCount; + } + if (firstPageNumber > 1) { + const isCurrentPage = firstPageNumber === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: "第一頁", + pageNo: 1, + isCurrent: isCurrentPage + }); + } + for (let i = firstPageNumber; i <= lastPageNumber; i++) { + const isCurrentPage = i === this.tableQueryData.CurrentPage; + this.pageLinks.push({ text: i, pageNo: i, isCurrent: isCurrentPage }); + } + if (lastPageNumber < this.pageCount) { + const isCurrentPage = lastPageNumber === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: "最後頁(共 " + this.pageCount + " 頁)", + pageNo: this.pageCount, + isCurrent: isCurrentPage + }); + } + } + + onPageChange(e: Event, page) { + e.preventDefault(); + this.tableQueryData.CurrentPage = page; + this.tableQueryData.Page = this.tableQueryData.CurrentPage; + this.getPageLinks(); + this.getPageDataList(this.tableQueryData); + } + + doSearch() { + this.tableQueryData.Page = null; + this.getPageDataList(this.tableQueryData); + } + + clearSearch() { + this.tableQueryData.Term = null; + this.getPageDataList(this.tableQueryData); + } + order(item) { + this.IsAsc = !this.IsAsc; + this.item = item; + this.tableQueryData.Order = item; + this.tableQueryData.IsAsc = this.IsAsc.toString(); + this.getPageDataList(this.tableQueryData); + } + + deletePageData(id: string): any { + swal({ + title: "是否要刪除?", + type: "warning", + showCancelButton: true, + confirmButtonColor: "#70C2DA", + cancelButtonColor: "#f86c6b", + confirmButtonText: "是", + cancelButtonText: "否" + }).then(result => { + if (result.value) { + this.sysDataService.deletePageData(id).subscribe(res => { + const result2 = res.json(); + if (result2.Success === true) { + swal({ + type: "success", + title: "刪除成功", + showConfirmButton: true, + confirmButtonColor: "#70C2DA" + }); + this.pageDataList = this.pageDataList.filter(p => { + return p.Id !== id; + }); + } else { + swal({ + type: "error", + title: "刪除失敗", + showConfirmButton: true + }); + } + }); + } + }); + } + + goEditPage(page) { + this.sys005Service.selectedPage = page; + this.router.navigate(["/sys/sys005-set-page"]); + } +} diff --git a/src/app/views/sys/sys005/sys005.service.ts b/src/app/views/sys/sys005/sys005.service.ts new file mode 100644 index 0000000..ac85939 --- /dev/null +++ b/src/app/views/sys/sys005/sys005.service.ts @@ -0,0 +1,3 @@ +export class Sys005Service { + selectedPage: any; +} diff --git a/src/app/views/sys/sys006/sys006-create-group.component.html b/src/app/views/sys/sys006/sys006-create-group.component.html new file mode 100644 index 0000000..ef12743 --- /dev/null +++ b/src/app/views/sys/sys006/sys006-create-group.component.html @@ -0,0 +1,34 @@ +
    +
    +
    +
    +

    新增分局

    +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + + +
    + +
    +
    +
    +
    diff --git a/src/app/views/sys/sys006/sys006-create-group.component.ts b/src/app/views/sys/sys006/sys006-create-group.component.ts new file mode 100644 index 0000000..51ba2d1 --- /dev/null +++ b/src/app/views/sys/sys006/sys006-create-group.component.ts @@ -0,0 +1,55 @@ +import { SysDataService } from "../../../service/sys-data.service"; +import { Component, OnInit } from "@angular/core"; +import { GroupData } from "../../../data/GroupData"; +import { Router } from "@angular/router"; +import swal from "sweetalert2"; + +@Component({ + selector: "app-sys006-create-group", + templateUrl: "./sys006-create-group.component.html" +}) +export class Sys006CreateGroupComponent implements OnInit { + groupData: GroupData; + + errorMessage: string; + data: any; + constructor(private sysDataService: SysDataService, private router: Router) {} + + ngOnInit() { + this.groupData = new GroupData(); + } + + createNewGroup() { + this.groupData.Id = 0; + this.sysDataService.postGroupData(this.groupData).subscribe(res => { + const result = res.json(); + if (result.Success === true) { + swal({ + type: "success", + title: "新增成功", + text: "轉跳回檢視頁面...", + showConfirmButton: false, + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => { + this.router.navigate(["sys/sys006"]); + } + }); + } else { + swal({ + type: "error", + title: "新增失敗", + text: "請檢查您輸入的資訊...", + showConfirmButton: true, + confirmButtonColor: "#70C2DA" + }); + } + }); + } + + backPreviousPage() { + this.router.navigateByUrl("/sys/sys006"); + } +} diff --git a/src/app/views/sys/sys006/sys006-resolver.service.ts b/src/app/views/sys/sys006/sys006-resolver.service.ts new file mode 100644 index 0000000..a35f1fe --- /dev/null +++ b/src/app/views/sys/sys006/sys006-resolver.service.ts @@ -0,0 +1,13 @@ +import { Injectable } from "@angular/core"; +import { Resolve } from "@angular/router"; +import { Sys006Service } from "app/views/sys/sys006/sys006.service"; +import { Observable } from "rxjs/Observable"; + +@Injectable() +export class Sys006Resolver implements Resolve { + constructor(private sys006Service: Sys006Service) {} + + resolve(): Observable { + return this.sys006Service.selectedGroup; + } +} diff --git a/src/app/views/sys/sys006/sys006-set-group.component.html b/src/app/views/sys/sys006/sys006-set-group.component.html new file mode 100644 index 0000000..423176c --- /dev/null +++ b/src/app/views/sys/sys006/sys006-set-group.component.html @@ -0,0 +1,34 @@ +
    +
    +
    +
    +

    編輯分局

    +
    + + + *此欄必填 + + +
    +
    + + + *此欄必填 + + +
    + +
    +
    +
    +
    diff --git a/src/app/views/sys/sys006/sys006-set-group.component.ts b/src/app/views/sys/sys006/sys006-set-group.component.ts new file mode 100644 index 0000000..600ec69 --- /dev/null +++ b/src/app/views/sys/sys006/sys006-set-group.component.ts @@ -0,0 +1,63 @@ +import { SysDataService } from "../../../service/sys-data.service"; +import { HelperService } from "../../../service/helper.service"; +import { Component, OnInit } from "@angular/core"; +import { Router } from "@angular/router"; +import { ActivatedRoute } from "@angular/router"; +import swal from "sweetalert2"; + +@Component({ + selector: "app-sys006-set-group", + templateUrl: "./sys006-set-group.component.html" +}) +export class Sys006SetGroupComponent implements OnInit { + errorMessage: String; + data: any; + selectedGroup: any; + groupId: number; + + constructor( + private sysDataService: SysDataService, + private helperService: HelperService, + private router: Router, + private route: ActivatedRoute + ) {} + + ngOnInit() { + this.route.data.subscribe((data: { selectedGroup: any }) => { + this.selectedGroup = data.selectedGroup; + }); + } + + backPreviousPage() { + this.router.navigateByUrl("sys/sys006"); + } + + doEditGroupData() { + this.sysDataService.putGroupData(this.selectedGroup).subscribe(res => { + const result = res.json(); + if (result.Success === true) { + swal({ + type: "success", + title: "修改成功", + text: "轉跳回檢視頁面...", + showConfirmButton: false, + timer: 1000, + onOpen: () => { + swal.showLoading(); + }, + onClose: () => { + this.router.navigate(["sys/sys006"]); + } + }); + } else { + swal({ + type: "error", + title: "修改失敗", + text: "請檢查您輸入的資訊...", + showConfirmButton: true, + confirmButtonColor: "#70C2DA" + }); + } + }); + } +} diff --git a/src/app/views/sys/sys006/sys006-view-group.component.html b/src/app/views/sys/sys006/sys006-view-group.component.html new file mode 100644 index 0000000..a9d84b0 --- /dev/null +++ b/src/app/views/sys/sys006/sys006-view-group.component.html @@ -0,0 +1,32 @@ +
    +
    +
    +

    檢視分局資料

    + + + + + + + + + + + +
    + 區域 + + {{selectedUser.selectedGroup.Area}} +
    + 分局名稱 + + {{selectedUser.selectedGroup.StationName}} +
    + +
    +
    +
    diff --git a/src/app/views/sys/sys006/sys006-view-group.component.ts b/src/app/views/sys/sys006/sys006-view-group.component.ts new file mode 100644 index 0000000..c7c8edf --- /dev/null +++ b/src/app/views/sys/sys006/sys006-view-group.component.ts @@ -0,0 +1,37 @@ +import { SysDataService } from "../../../service/sys-data.service"; +import { HelperService } from "../../../service/helper.service"; +import { Router } from "@angular/router"; +import { Component, OnInit } from "@angular/core"; +import { ActivatedRoute } from "@angular/router"; + +@Component({ + selector: "app-sys006-view-group", + templateUrl: "./sys006-view-group.component.html" +}) +export class Sys006ViewGroupComponent implements OnInit { + errorMessage: String; + data: any; + selectRole: any; + selectedUser: any; + roleId: number; + groupId: number; + + constructor( + private sysDataService: SysDataService, + private helperService: HelperService, + private router: Router, + private route: ActivatedRoute + ) {} + + ngOnInit() { + this.selectRole = this.helperService.RoleCode; + this.route.data.subscribe((data: { selectedUser: any }) => { + this.selectedUser = data; + }); + } + + backPreviousPage() { + this.router.navigateByUrl("/sys/sys006"); + } + +} diff --git a/src/app/views/sys/sys006/sys006.component.html b/src/app/views/sys/sys006/sys006.component.html new file mode 100644 index 0000000..086197d --- /dev/null +++ b/src/app/views/sys/sys006/sys006.component.html @@ -0,0 +1,59 @@ +
    +
    +
    + +

    分局管理

    + +
    + + + +
    +
    + + + + + + + + + + + + + + + +
    區域 + + 分局名稱執行動作
    {{groupData.Area}}{{groupData.StationName}} + + + +
    +
    +
    + 暫無資料 +
    + +
    +
    +
    diff --git a/src/app/views/sys/sys006/sys006.component.ts b/src/app/views/sys/sys006/sys006.component.ts new file mode 100644 index 0000000..9dbbcf5 --- /dev/null +++ b/src/app/views/sys/sys006/sys006.component.ts @@ -0,0 +1,154 @@ +import { SysDataService } from "../../../service/sys-data.service"; +import { Component, OnInit } from "@angular/core"; +import { Sys006Service } from "app/views/sys/sys006/sys006.service"; +import { TableQueryData } from "../../../data/TableQueryData"; +import { Router } from "@angular/router"; +import swal from "sweetalert2"; + +@Component({ + selector: "app-sys006", + templateUrl: "./sys006.component.html" +}) +export class Sys006Component implements OnInit { + groupDataList = []; + loading = false; + tableQueryData: TableQueryData; + item: string; + IsAsc = true; + pageCount = 0; + pageLinks = []; + pageLinkMarginCount = 2; + + errorMessage: String; + constructor( + private sysDataService: SysDataService, + private sys006Service: Sys006Service, + private router: Router + ) {} + + ngOnInit() { + this.loading = true; + this.tableQueryData = new TableQueryData(); + this.tableQueryData.CurrentPage = 0; + this.getGroupDataList(this.tableQueryData); + } + + getGroupDataList(tableQueryData: TableQueryData): any { + this.tableQueryData.CurrentPage = tableQueryData.Page + ? tableQueryData.Page + : 1; + this.sysDataService.getGroupData(tableQueryData).subscribe(res => { + const result = res.json().Result; + this.groupDataList = result.Data; + this.loading = false; + if (tableQueryData.Page === 1 || !tableQueryData.Page) { + this.pageCount = result.PageCount; + this.getPageLinks(); + } + }, error => (this.errorMessage = error)); + } + + getPageLinks() { + this.pageLinks = []; + let firstPageNumber = + this.tableQueryData.CurrentPage - this.pageLinkMarginCount; + let lastPageNumber = + this.tableQueryData.CurrentPage + this.pageLinkMarginCount; + if (firstPageNumber < 1) { + firstPageNumber = 1; + } + if (lastPageNumber > this.pageCount) { + lastPageNumber = this.pageCount; + } + if (firstPageNumber > 1) { + const isCurrentPage = firstPageNumber === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: "第一頁", + pageNo: 1, + isCurrent: isCurrentPage + }); + } + for (let i = firstPageNumber; i <= lastPageNumber; i++) { + const isCurrentPage = i === this.tableQueryData.CurrentPage; + this.pageLinks.push({ text: i, pageNo: i, isCurrent: isCurrentPage }); + } + if (lastPageNumber < this.pageCount) { + const isCurrentPage = lastPageNumber === this.tableQueryData.CurrentPage; + this.pageLinks.push({ + text: "最後頁(共 " + this.pageCount + " 頁)", + pageNo: this.pageCount, + isCurrent: isCurrentPage + }); + } + } + + onPageChange(e: Event, page) { + e.preventDefault(); + this.tableQueryData.CurrentPage = page; + this.tableQueryData.Page = this.tableQueryData.CurrentPage; + this.getPageLinks(); + this.getGroupDataList(this.tableQueryData); + } + + doSearch() { + this.tableQueryData.Page = null; + this.getGroupDataList(this.tableQueryData); + } + + clearSearch() { + this.tableQueryData.Term = null; + this.getGroupDataList(this.tableQueryData); + } + order(item) { + this.IsAsc = !this.IsAsc; + this.item = item; + this.tableQueryData.Order = item; + this.tableQueryData.IsAsc = this.IsAsc.toString(); + this.getGroupDataList(this.tableQueryData); + } + + deleteGroupData(id: string): any { + swal({ + title: "是否要刪除?", + type: "warning", + showCancelButton: true, + confirmButtonColor: "#70C2DA", + cancelButtonColor: "#f86c6b", + confirmButtonText: "是", + cancelButtonText: "否" + }).then(result => { + if (result.value) { + this.sysDataService.deleteGroupData(id).subscribe(res => { + const result2 = res.json(); + if (result2.Success === true) { + swal({ + type: "success", + title: "刪除成功", + showConfirmButton: true, + confirmButtonColor: "#70C2DA" + }); + this.groupDataList = this.groupDataList.filter(p => { + return p.Id !== id; + }); + } else { + swal({ + type: "error", + title: "刪除失敗", + showConfirmButton: true + }); + } + }); + } + }); + } + + goDetailGroup(group) { + this.sys006Service.selectedGroup = group; + this.router.navigate(["/sys/sys006-view-group"]); + } + + goEditGroup(group) { + this.sys006Service.selectedGroup = group; + this.router.navigate(["/sys/sys006-set-group"]); + } +} diff --git a/src/app/views/sys/sys006/sys006.service.ts b/src/app/views/sys/sys006/sys006.service.ts new file mode 100644 index 0000000..406c994 --- /dev/null +++ b/src/app/views/sys/sys006/sys006.service.ts @@ -0,0 +1,3 @@ +export class Sys006Service { + selectedGroup: any; +} diff --git a/src/assets/.gitkeep b/src/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/assets/.npmignore b/src/assets/.npmignore new file mode 100644 index 0000000..e69de29 diff --git a/src/assets/img/avatars/1.jpg b/src/assets/img/avatars/1.jpg new file mode 100644 index 0000000..0b08703 Binary files /dev/null and b/src/assets/img/avatars/1.jpg differ diff --git a/src/assets/img/avatars/2.jpg b/src/assets/img/avatars/2.jpg new file mode 100644 index 0000000..e736709 Binary files /dev/null and b/src/assets/img/avatars/2.jpg differ diff --git a/src/assets/img/avatars/3.jpg b/src/assets/img/avatars/3.jpg new file mode 100644 index 0000000..caf9a7e Binary files /dev/null and b/src/assets/img/avatars/3.jpg differ diff --git a/src/assets/img/avatars/4.jpg b/src/assets/img/avatars/4.jpg new file mode 100644 index 0000000..97f6769 Binary files /dev/null and b/src/assets/img/avatars/4.jpg differ diff --git a/src/assets/img/avatars/5.jpg b/src/assets/img/avatars/5.jpg new file mode 100644 index 0000000..82b025f Binary files /dev/null and b/src/assets/img/avatars/5.jpg differ diff --git a/src/assets/img/avatars/6.jpg b/src/assets/img/avatars/6.jpg new file mode 100644 index 0000000..1d2b884 Binary files /dev/null and b/src/assets/img/avatars/6.jpg differ diff --git a/src/assets/img/avatars/7.jpg b/src/assets/img/avatars/7.jpg new file mode 100644 index 0000000..2903cd2 Binary files /dev/null and b/src/assets/img/avatars/7.jpg differ diff --git a/src/assets/img/avatars/8.jpg b/src/assets/img/avatars/8.jpg new file mode 100644 index 0000000..3a5eba9 Binary files /dev/null and b/src/assets/img/avatars/8.jpg differ diff --git a/src/assets/img/customize/AreaIDCode.jpeg b/src/assets/img/customize/AreaIDCode.jpeg new file mode 100644 index 0000000..27f03d8 Binary files /dev/null and b/src/assets/img/customize/AreaIDCode.jpeg differ diff --git a/src/assets/img/customize/Taoyuan.jpg b/src/assets/img/customize/Taoyuan.jpg new file mode 100644 index 0000000..87b51d6 Binary files /dev/null and b/src/assets/img/customize/Taoyuan.jpg differ diff --git a/src/assets/img/customize/Taoyuan.png b/src/assets/img/customize/Taoyuan.png new file mode 100644 index 0000000..7420106 Binary files /dev/null and b/src/assets/img/customize/Taoyuan.png differ diff --git a/src/assets/img/customize/Taoyuan2.png b/src/assets/img/customize/Taoyuan2.png new file mode 100644 index 0000000..59e5a0a Binary files /dev/null and b/src/assets/img/customize/Taoyuan2.png differ diff --git a/src/assets/img/customize/Taoyuan3.png b/src/assets/img/customize/Taoyuan3.png new file mode 100644 index 0000000..7f62aff Binary files /dev/null and b/src/assets/img/customize/Taoyuan3.png differ diff --git a/src/assets/img/customize/road1.png b/src/assets/img/customize/road1.png new file mode 100644 index 0000000..39482f6 Binary files /dev/null and b/src/assets/img/customize/road1.png differ diff --git a/src/assets/img/customize/road2.png b/src/assets/img/customize/road2.png new file mode 100644 index 0000000..eb405cb Binary files /dev/null and b/src/assets/img/customize/road2.png differ diff --git a/src/assets/img/customize/test.png b/src/assets/img/customize/test.png new file mode 100644 index 0000000..81863c9 Binary files /dev/null and b/src/assets/img/customize/test.png differ diff --git a/src/assets/img/customize/test1.png b/src/assets/img/customize/test1.png new file mode 100644 index 0000000..e6bbd1d Binary files /dev/null and b/src/assets/img/customize/test1.png differ diff --git a/src/assets/img/customize/test2.png b/src/assets/img/customize/test2.png new file mode 100644 index 0000000..4443540 Binary files /dev/null and b/src/assets/img/customize/test2.png differ diff --git a/src/assets/img/favicon.png b/src/assets/img/favicon.png new file mode 100644 index 0000000..7f62aff Binary files /dev/null and b/src/assets/img/favicon.png differ diff --git a/src/assets/img/flags/ASEAN.png b/src/assets/img/flags/ASEAN.png new file mode 100644 index 0000000..1fb1b91 Binary files /dev/null and b/src/assets/img/flags/ASEAN.png differ diff --git a/src/assets/img/flags/Afghanistan.png b/src/assets/img/flags/Afghanistan.png new file mode 100644 index 0000000..2575b8a Binary files /dev/null and b/src/assets/img/flags/Afghanistan.png differ diff --git a/src/assets/img/flags/African Union.png b/src/assets/img/flags/African Union.png new file mode 100644 index 0000000..85b268e Binary files /dev/null and b/src/assets/img/flags/African Union.png differ diff --git a/src/assets/img/flags/Albania.png b/src/assets/img/flags/Albania.png new file mode 100644 index 0000000..2e16c3b Binary files /dev/null and b/src/assets/img/flags/Albania.png differ diff --git a/src/assets/img/flags/Algeria.png b/src/assets/img/flags/Algeria.png new file mode 100644 index 0000000..69477f0 Binary files /dev/null and b/src/assets/img/flags/Algeria.png differ diff --git a/src/assets/img/flags/American Samoa.png b/src/assets/img/flags/American Samoa.png new file mode 100644 index 0000000..b0d4cdc Binary files /dev/null and b/src/assets/img/flags/American Samoa.png differ diff --git a/src/assets/img/flags/Andorra.png b/src/assets/img/flags/Andorra.png new file mode 100644 index 0000000..e753cd6 Binary files /dev/null and b/src/assets/img/flags/Andorra.png differ diff --git a/src/assets/img/flags/Angola.png b/src/assets/img/flags/Angola.png new file mode 100644 index 0000000..97ae963 Binary files /dev/null and b/src/assets/img/flags/Angola.png differ diff --git a/src/assets/img/flags/Anguilla.png b/src/assets/img/flags/Anguilla.png new file mode 100644 index 0000000..7a6ac04 Binary files /dev/null and b/src/assets/img/flags/Anguilla.png differ diff --git a/src/assets/img/flags/Antarctica.png b/src/assets/img/flags/Antarctica.png new file mode 100644 index 0000000..a97b355 Binary files /dev/null and b/src/assets/img/flags/Antarctica.png differ diff --git a/src/assets/img/flags/Antigua & Barbuda.png b/src/assets/img/flags/Antigua & Barbuda.png new file mode 100644 index 0000000..cfc157a Binary files /dev/null and b/src/assets/img/flags/Antigua & Barbuda.png differ diff --git a/src/assets/img/flags/Arab League.png b/src/assets/img/flags/Arab League.png new file mode 100644 index 0000000..646a3f7 Binary files /dev/null and b/src/assets/img/flags/Arab League.png differ diff --git a/src/assets/img/flags/Argentina.png b/src/assets/img/flags/Argentina.png new file mode 100644 index 0000000..62d1518 Binary files /dev/null and b/src/assets/img/flags/Argentina.png differ diff --git a/src/assets/img/flags/Armenia.png b/src/assets/img/flags/Armenia.png new file mode 100644 index 0000000..f4f9bae Binary files /dev/null and b/src/assets/img/flags/Armenia.png differ diff --git a/src/assets/img/flags/Aruba.png b/src/assets/img/flags/Aruba.png new file mode 100644 index 0000000..0083ef6 Binary files /dev/null and b/src/assets/img/flags/Aruba.png differ diff --git a/src/assets/img/flags/Australia.png b/src/assets/img/flags/Australia.png new file mode 100644 index 0000000..8937404 Binary files /dev/null and b/src/assets/img/flags/Australia.png differ diff --git a/src/assets/img/flags/Austria.png b/src/assets/img/flags/Austria.png new file mode 100644 index 0000000..fe66fef Binary files /dev/null and b/src/assets/img/flags/Austria.png differ diff --git a/src/assets/img/flags/Azerbaijan.png b/src/assets/img/flags/Azerbaijan.png new file mode 100644 index 0000000..1850abc Binary files /dev/null and b/src/assets/img/flags/Azerbaijan.png differ diff --git a/src/assets/img/flags/Bahamas.png b/src/assets/img/flags/Bahamas.png new file mode 100644 index 0000000..753fc83 Binary files /dev/null and b/src/assets/img/flags/Bahamas.png differ diff --git a/src/assets/img/flags/Bahrain.png b/src/assets/img/flags/Bahrain.png new file mode 100644 index 0000000..c45c7b4 Binary files /dev/null and b/src/assets/img/flags/Bahrain.png differ diff --git a/src/assets/img/flags/Bangladesh.png b/src/assets/img/flags/Bangladesh.png new file mode 100644 index 0000000..8ef2443 Binary files /dev/null and b/src/assets/img/flags/Bangladesh.png differ diff --git a/src/assets/img/flags/Barbados.png b/src/assets/img/flags/Barbados.png new file mode 100644 index 0000000..d440d41 Binary files /dev/null and b/src/assets/img/flags/Barbados.png differ diff --git a/src/assets/img/flags/Belarus.png b/src/assets/img/flags/Belarus.png new file mode 100644 index 0000000..ce75c73 Binary files /dev/null and b/src/assets/img/flags/Belarus.png differ diff --git a/src/assets/img/flags/Belgium.png b/src/assets/img/flags/Belgium.png new file mode 100644 index 0000000..1d3df4c Binary files /dev/null and b/src/assets/img/flags/Belgium.png differ diff --git a/src/assets/img/flags/Belize.png b/src/assets/img/flags/Belize.png new file mode 100644 index 0000000..4a9aea0 Binary files /dev/null and b/src/assets/img/flags/Belize.png differ diff --git a/src/assets/img/flags/Benin.png b/src/assets/img/flags/Benin.png new file mode 100644 index 0000000..af46063 Binary files /dev/null and b/src/assets/img/flags/Benin.png differ diff --git a/src/assets/img/flags/Bermuda.png b/src/assets/img/flags/Bermuda.png new file mode 100644 index 0000000..880d965 Binary files /dev/null and b/src/assets/img/flags/Bermuda.png differ diff --git a/src/assets/img/flags/Bhutan.png b/src/assets/img/flags/Bhutan.png new file mode 100644 index 0000000..db0372e Binary files /dev/null and b/src/assets/img/flags/Bhutan.png differ diff --git a/src/assets/img/flags/Bolivia.png b/src/assets/img/flags/Bolivia.png new file mode 100644 index 0000000..a28f060 Binary files /dev/null and b/src/assets/img/flags/Bolivia.png differ diff --git a/src/assets/img/flags/Bosnia & Herzegovina.png b/src/assets/img/flags/Bosnia & Herzegovina.png new file mode 100644 index 0000000..806d05d Binary files /dev/null and b/src/assets/img/flags/Bosnia & Herzegovina.png differ diff --git a/src/assets/img/flags/Botswana.png b/src/assets/img/flags/Botswana.png new file mode 100644 index 0000000..9a06843 Binary files /dev/null and b/src/assets/img/flags/Botswana.png differ diff --git a/src/assets/img/flags/Brazil.png b/src/assets/img/flags/Brazil.png new file mode 100644 index 0000000..47a007f Binary files /dev/null and b/src/assets/img/flags/Brazil.png differ diff --git a/src/assets/img/flags/Brunei.png b/src/assets/img/flags/Brunei.png new file mode 100644 index 0000000..650cca6 Binary files /dev/null and b/src/assets/img/flags/Brunei.png differ diff --git a/src/assets/img/flags/Bulgaria.png b/src/assets/img/flags/Bulgaria.png new file mode 100644 index 0000000..c130192 Binary files /dev/null and b/src/assets/img/flags/Bulgaria.png differ diff --git a/src/assets/img/flags/Burkina Faso.png b/src/assets/img/flags/Burkina Faso.png new file mode 100644 index 0000000..13ff132 Binary files /dev/null and b/src/assets/img/flags/Burkina Faso.png differ diff --git a/src/assets/img/flags/Burundi.png b/src/assets/img/flags/Burundi.png new file mode 100644 index 0000000..15e76aa Binary files /dev/null and b/src/assets/img/flags/Burundi.png differ diff --git a/src/assets/img/flags/CARICOM.png b/src/assets/img/flags/CARICOM.png new file mode 100644 index 0000000..19dfeae Binary files /dev/null and b/src/assets/img/flags/CARICOM.png differ diff --git a/src/assets/img/flags/CIS.png b/src/assets/img/flags/CIS.png new file mode 100644 index 0000000..809c026 Binary files /dev/null and b/src/assets/img/flags/CIS.png differ diff --git a/src/assets/img/flags/Cambodja.png b/src/assets/img/flags/Cambodja.png new file mode 100644 index 0000000..65b4c06 Binary files /dev/null and b/src/assets/img/flags/Cambodja.png differ diff --git a/src/assets/img/flags/Cameroon.png b/src/assets/img/flags/Cameroon.png new file mode 100644 index 0000000..32eccee Binary files /dev/null and b/src/assets/img/flags/Cameroon.png differ diff --git a/src/assets/img/flags/Canada.png b/src/assets/img/flags/Canada.png new file mode 100644 index 0000000..bfff414 Binary files /dev/null and b/src/assets/img/flags/Canada.png differ diff --git a/src/assets/img/flags/Cape Verde.png b/src/assets/img/flags/Cape Verde.png new file mode 100644 index 0000000..103043c Binary files /dev/null and b/src/assets/img/flags/Cape Verde.png differ diff --git a/src/assets/img/flags/Cayman Islands.png b/src/assets/img/flags/Cayman Islands.png new file mode 100644 index 0000000..f2a6b6c Binary files /dev/null and b/src/assets/img/flags/Cayman Islands.png differ diff --git a/src/assets/img/flags/Central African Republic.png b/src/assets/img/flags/Central African Republic.png new file mode 100644 index 0000000..3f0b501 Binary files /dev/null and b/src/assets/img/flags/Central African Republic.png differ diff --git a/src/assets/img/flags/Chad.png b/src/assets/img/flags/Chad.png new file mode 100644 index 0000000..c74a4a4 Binary files /dev/null and b/src/assets/img/flags/Chad.png differ diff --git a/src/assets/img/flags/Chile.png b/src/assets/img/flags/Chile.png new file mode 100644 index 0000000..3e76462 Binary files /dev/null and b/src/assets/img/flags/Chile.png differ diff --git a/src/assets/img/flags/China.png b/src/assets/img/flags/China.png new file mode 100644 index 0000000..d0da550 Binary files /dev/null and b/src/assets/img/flags/China.png differ diff --git a/src/assets/img/flags/Colombia.png b/src/assets/img/flags/Colombia.png new file mode 100644 index 0000000..da19e53 Binary files /dev/null and b/src/assets/img/flags/Colombia.png differ diff --git a/src/assets/img/flags/Commonwealth.png b/src/assets/img/flags/Commonwealth.png new file mode 100644 index 0000000..aa0d8ab Binary files /dev/null and b/src/assets/img/flags/Commonwealth.png differ diff --git a/src/assets/img/flags/Comoros.png b/src/assets/img/flags/Comoros.png new file mode 100644 index 0000000..051fc5a Binary files /dev/null and b/src/assets/img/flags/Comoros.png differ diff --git a/src/assets/img/flags/Congo-Brazzaville.png b/src/assets/img/flags/Congo-Brazzaville.png new file mode 100644 index 0000000..f8c0b25 Binary files /dev/null and b/src/assets/img/flags/Congo-Brazzaville.png differ diff --git a/src/assets/img/flags/Congo-Kinshasa(Zaire).png b/src/assets/img/flags/Congo-Kinshasa(Zaire).png new file mode 100644 index 0000000..be42ea0 Binary files /dev/null and b/src/assets/img/flags/Congo-Kinshasa(Zaire).png differ diff --git a/src/assets/img/flags/Cook Islands.png b/src/assets/img/flags/Cook Islands.png new file mode 100644 index 0000000..7c432c8 Binary files /dev/null and b/src/assets/img/flags/Cook Islands.png differ diff --git a/src/assets/img/flags/Costa Rica.png b/src/assets/img/flags/Costa Rica.png new file mode 100644 index 0000000..44a3073 Binary files /dev/null and b/src/assets/img/flags/Costa Rica.png differ diff --git a/src/assets/img/flags/Cote d'Ivoire.png b/src/assets/img/flags/Cote d'Ivoire.png new file mode 100644 index 0000000..1fee82c Binary files /dev/null and b/src/assets/img/flags/Cote d'Ivoire.png differ diff --git a/src/assets/img/flags/Croatia.png b/src/assets/img/flags/Croatia.png new file mode 100644 index 0000000..4cb4ea7 Binary files /dev/null and b/src/assets/img/flags/Croatia.png differ diff --git a/src/assets/img/flags/Cuba.png b/src/assets/img/flags/Cuba.png new file mode 100644 index 0000000..4e3cf29 Binary files /dev/null and b/src/assets/img/flags/Cuba.png differ diff --git a/src/assets/img/flags/Cyprus.png b/src/assets/img/flags/Cyprus.png new file mode 100644 index 0000000..df22c03 Binary files /dev/null and b/src/assets/img/flags/Cyprus.png differ diff --git a/src/assets/img/flags/Czech Republic.png b/src/assets/img/flags/Czech Republic.png new file mode 100644 index 0000000..31f9ad9 Binary files /dev/null and b/src/assets/img/flags/Czech Republic.png differ diff --git a/src/assets/img/flags/Denmark.png b/src/assets/img/flags/Denmark.png new file mode 100644 index 0000000..3f4dac3 Binary files /dev/null and b/src/assets/img/flags/Denmark.png differ diff --git a/src/assets/img/flags/Djibouti.png b/src/assets/img/flags/Djibouti.png new file mode 100644 index 0000000..8f32f74 Binary files /dev/null and b/src/assets/img/flags/Djibouti.png differ diff --git a/src/assets/img/flags/Dominica.png b/src/assets/img/flags/Dominica.png new file mode 100644 index 0000000..e70b1a4 Binary files /dev/null and b/src/assets/img/flags/Dominica.png differ diff --git a/src/assets/img/flags/Dominican Republic.png b/src/assets/img/flags/Dominican Republic.png new file mode 100644 index 0000000..ca2d40a Binary files /dev/null and b/src/assets/img/flags/Dominican Republic.png differ diff --git a/src/assets/img/flags/Ecuador.png b/src/assets/img/flags/Ecuador.png new file mode 100644 index 0000000..4913cec Binary files /dev/null and b/src/assets/img/flags/Ecuador.png differ diff --git a/src/assets/img/flags/Egypt.png b/src/assets/img/flags/Egypt.png new file mode 100644 index 0000000..ee9fef0 Binary files /dev/null and b/src/assets/img/flags/Egypt.png differ diff --git a/src/assets/img/flags/El Salvador.png b/src/assets/img/flags/El Salvador.png new file mode 100644 index 0000000..adf8750 Binary files /dev/null and b/src/assets/img/flags/El Salvador.png differ diff --git a/src/assets/img/flags/England.png b/src/assets/img/flags/England.png new file mode 100644 index 0000000..22fb06b Binary files /dev/null and b/src/assets/img/flags/England.png differ diff --git a/src/assets/img/flags/Equatorial Guinea.png b/src/assets/img/flags/Equatorial Guinea.png new file mode 100644 index 0000000..13d3c92 Binary files /dev/null and b/src/assets/img/flags/Equatorial Guinea.png differ diff --git a/src/assets/img/flags/Eritrea.png b/src/assets/img/flags/Eritrea.png new file mode 100644 index 0000000..5f38c52 Binary files /dev/null and b/src/assets/img/flags/Eritrea.png differ diff --git a/src/assets/img/flags/Estonia.png b/src/assets/img/flags/Estonia.png new file mode 100644 index 0000000..3eadb29 Binary files /dev/null and b/src/assets/img/flags/Estonia.png differ diff --git a/src/assets/img/flags/Ethiopia.png b/src/assets/img/flags/Ethiopia.png new file mode 100644 index 0000000..b29191f Binary files /dev/null and b/src/assets/img/flags/Ethiopia.png differ diff --git a/src/assets/img/flags/European Union.png b/src/assets/img/flags/European Union.png new file mode 100644 index 0000000..18c86da Binary files /dev/null and b/src/assets/img/flags/European Union.png differ diff --git a/src/assets/img/flags/Faroes.png b/src/assets/img/flags/Faroes.png new file mode 100644 index 0000000..1bfb68e Binary files /dev/null and b/src/assets/img/flags/Faroes.png differ diff --git a/src/assets/img/flags/Fiji.png b/src/assets/img/flags/Fiji.png new file mode 100644 index 0000000..d96b232 Binary files /dev/null and b/src/assets/img/flags/Fiji.png differ diff --git a/src/assets/img/flags/Finland.png b/src/assets/img/flags/Finland.png new file mode 100644 index 0000000..97d47a9 Binary files /dev/null and b/src/assets/img/flags/Finland.png differ diff --git a/src/assets/img/flags/France.png b/src/assets/img/flags/France.png new file mode 100644 index 0000000..12318d4 Binary files /dev/null and b/src/assets/img/flags/France.png differ diff --git a/src/assets/img/flags/Gabon.png b/src/assets/img/flags/Gabon.png new file mode 100644 index 0000000..bb1f634 Binary files /dev/null and b/src/assets/img/flags/Gabon.png differ diff --git a/src/assets/img/flags/Gambia.png b/src/assets/img/flags/Gambia.png new file mode 100644 index 0000000..e4bee6c Binary files /dev/null and b/src/assets/img/flags/Gambia.png differ diff --git a/src/assets/img/flags/Georgia.png b/src/assets/img/flags/Georgia.png new file mode 100644 index 0000000..fb293a0 Binary files /dev/null and b/src/assets/img/flags/Georgia.png differ diff --git a/src/assets/img/flags/Germany.png b/src/assets/img/flags/Germany.png new file mode 100644 index 0000000..77e9338 Binary files /dev/null and b/src/assets/img/flags/Germany.png differ diff --git a/src/assets/img/flags/Ghana.png b/src/assets/img/flags/Ghana.png new file mode 100644 index 0000000..16ddfb4 Binary files /dev/null and b/src/assets/img/flags/Ghana.png differ diff --git a/src/assets/img/flags/Gibraltar.png b/src/assets/img/flags/Gibraltar.png new file mode 100644 index 0000000..3d3b66d Binary files /dev/null and b/src/assets/img/flags/Gibraltar.png differ diff --git a/src/assets/img/flags/Greece.png b/src/assets/img/flags/Greece.png new file mode 100644 index 0000000..b00fd5a Binary files /dev/null and b/src/assets/img/flags/Greece.png differ diff --git a/src/assets/img/flags/Greenland.png b/src/assets/img/flags/Greenland.png new file mode 100644 index 0000000..8dc87f4 Binary files /dev/null and b/src/assets/img/flags/Greenland.png differ diff --git a/src/assets/img/flags/Grenada.png b/src/assets/img/flags/Grenada.png new file mode 100644 index 0000000..26be61e Binary files /dev/null and b/src/assets/img/flags/Grenada.png differ diff --git a/src/assets/img/flags/Guadeloupe.png b/src/assets/img/flags/Guadeloupe.png new file mode 100644 index 0000000..53dca17 Binary files /dev/null and b/src/assets/img/flags/Guadeloupe.png differ diff --git a/src/assets/img/flags/Guam.png b/src/assets/img/flags/Guam.png new file mode 100644 index 0000000..f1d6b7a Binary files /dev/null and b/src/assets/img/flags/Guam.png differ diff --git a/src/assets/img/flags/Guatemala.png b/src/assets/img/flags/Guatemala.png new file mode 100644 index 0000000..e5580e9 Binary files /dev/null and b/src/assets/img/flags/Guatemala.png differ diff --git a/src/assets/img/flags/Guernsey.png b/src/assets/img/flags/Guernsey.png new file mode 100644 index 0000000..0514cc9 Binary files /dev/null and b/src/assets/img/flags/Guernsey.png differ diff --git a/src/assets/img/flags/Guinea-Bissau.png b/src/assets/img/flags/Guinea-Bissau.png new file mode 100644 index 0000000..d097a28 Binary files /dev/null and b/src/assets/img/flags/Guinea-Bissau.png differ diff --git a/src/assets/img/flags/Guinea.png b/src/assets/img/flags/Guinea.png new file mode 100644 index 0000000..f71c621 Binary files /dev/null and b/src/assets/img/flags/Guinea.png differ diff --git a/src/assets/img/flags/Guyana.png b/src/assets/img/flags/Guyana.png new file mode 100644 index 0000000..76eabd9 Binary files /dev/null and b/src/assets/img/flags/Guyana.png differ diff --git a/src/assets/img/flags/Haiti.png b/src/assets/img/flags/Haiti.png new file mode 100644 index 0000000..325cef0 Binary files /dev/null and b/src/assets/img/flags/Haiti.png differ diff --git a/src/assets/img/flags/Honduras.png b/src/assets/img/flags/Honduras.png new file mode 100644 index 0000000..1f327f1 Binary files /dev/null and b/src/assets/img/flags/Honduras.png differ diff --git a/src/assets/img/flags/Hong Kong.png b/src/assets/img/flags/Hong Kong.png new file mode 100644 index 0000000..46208e0 Binary files /dev/null and b/src/assets/img/flags/Hong Kong.png differ diff --git a/src/assets/img/flags/Hungary.png b/src/assets/img/flags/Hungary.png new file mode 100644 index 0000000..af757c6 Binary files /dev/null and b/src/assets/img/flags/Hungary.png differ diff --git a/src/assets/img/flags/Iceland.png b/src/assets/img/flags/Iceland.png new file mode 100644 index 0000000..33d68dd Binary files /dev/null and b/src/assets/img/flags/Iceland.png differ diff --git a/src/assets/img/flags/India.png b/src/assets/img/flags/India.png new file mode 100644 index 0000000..e0a8865 Binary files /dev/null and b/src/assets/img/flags/India.png differ diff --git a/src/assets/img/flags/Indonezia.png b/src/assets/img/flags/Indonezia.png new file mode 100644 index 0000000..ed42d1f Binary files /dev/null and b/src/assets/img/flags/Indonezia.png differ diff --git a/src/assets/img/flags/Iran.png b/src/assets/img/flags/Iran.png new file mode 100644 index 0000000..70da4fc Binary files /dev/null and b/src/assets/img/flags/Iran.png differ diff --git a/src/assets/img/flags/Iraq.png b/src/assets/img/flags/Iraq.png new file mode 100644 index 0000000..cdd0c4f Binary files /dev/null and b/src/assets/img/flags/Iraq.png differ diff --git a/src/assets/img/flags/Ireland.png b/src/assets/img/flags/Ireland.png new file mode 100644 index 0000000..74219ab Binary files /dev/null and b/src/assets/img/flags/Ireland.png differ diff --git a/src/assets/img/flags/Islamic Conference.png b/src/assets/img/flags/Islamic Conference.png new file mode 100644 index 0000000..cc4aa3b Binary files /dev/null and b/src/assets/img/flags/Islamic Conference.png differ diff --git a/src/assets/img/flags/Isle of Man.png b/src/assets/img/flags/Isle of Man.png new file mode 100644 index 0000000..9478023 Binary files /dev/null and b/src/assets/img/flags/Isle of Man.png differ diff --git a/src/assets/img/flags/Israel.png b/src/assets/img/flags/Israel.png new file mode 100644 index 0000000..3ba7553 Binary files /dev/null and b/src/assets/img/flags/Israel.png differ diff --git a/src/assets/img/flags/Italy.png b/src/assets/img/flags/Italy.png new file mode 100644 index 0000000..c31017e Binary files /dev/null and b/src/assets/img/flags/Italy.png differ diff --git a/src/assets/img/flags/Jamaica.png b/src/assets/img/flags/Jamaica.png new file mode 100644 index 0000000..e79cf2a Binary files /dev/null and b/src/assets/img/flags/Jamaica.png differ diff --git a/src/assets/img/flags/Japan.png b/src/assets/img/flags/Japan.png new file mode 100644 index 0000000..29c45d5 Binary files /dev/null and b/src/assets/img/flags/Japan.png differ diff --git a/src/assets/img/flags/Jersey.png b/src/assets/img/flags/Jersey.png new file mode 100644 index 0000000..b8f5ba6 Binary files /dev/null and b/src/assets/img/flags/Jersey.png differ diff --git a/src/assets/img/flags/Jordan.png b/src/assets/img/flags/Jordan.png new file mode 100644 index 0000000..b627a5c Binary files /dev/null and b/src/assets/img/flags/Jordan.png differ diff --git a/src/assets/img/flags/Kazakhstan.png b/src/assets/img/flags/Kazakhstan.png new file mode 100644 index 0000000..8980ad9 Binary files /dev/null and b/src/assets/img/flags/Kazakhstan.png differ diff --git a/src/assets/img/flags/Kenya.png b/src/assets/img/flags/Kenya.png new file mode 100644 index 0000000..e3d7f12 Binary files /dev/null and b/src/assets/img/flags/Kenya.png differ diff --git a/src/assets/img/flags/Kiribati.png b/src/assets/img/flags/Kiribati.png new file mode 100644 index 0000000..5d286d2 Binary files /dev/null and b/src/assets/img/flags/Kiribati.png differ diff --git a/src/assets/img/flags/Kosovo.png b/src/assets/img/flags/Kosovo.png new file mode 100644 index 0000000..1d46286 Binary files /dev/null and b/src/assets/img/flags/Kosovo.png differ diff --git a/src/assets/img/flags/Kuwait.png b/src/assets/img/flags/Kuwait.png new file mode 100644 index 0000000..8d7adb1 Binary files /dev/null and b/src/assets/img/flags/Kuwait.png differ diff --git a/src/assets/img/flags/Kyrgyzstan.png b/src/assets/img/flags/Kyrgyzstan.png new file mode 100644 index 0000000..cf2d885 Binary files /dev/null and b/src/assets/img/flags/Kyrgyzstan.png differ diff --git a/src/assets/img/flags/Laos.png b/src/assets/img/flags/Laos.png new file mode 100644 index 0000000..f3b2309 Binary files /dev/null and b/src/assets/img/flags/Laos.png differ diff --git a/src/assets/img/flags/Latvia.png b/src/assets/img/flags/Latvia.png new file mode 100644 index 0000000..6ace36d Binary files /dev/null and b/src/assets/img/flags/Latvia.png differ diff --git a/src/assets/img/flags/Lebanon.png b/src/assets/img/flags/Lebanon.png new file mode 100644 index 0000000..854717e Binary files /dev/null and b/src/assets/img/flags/Lebanon.png differ diff --git a/src/assets/img/flags/Lesotho.png b/src/assets/img/flags/Lesotho.png new file mode 100644 index 0000000..9af5c4a Binary files /dev/null and b/src/assets/img/flags/Lesotho.png differ diff --git a/src/assets/img/flags/Liberia.png b/src/assets/img/flags/Liberia.png new file mode 100644 index 0000000..cadfec1 Binary files /dev/null and b/src/assets/img/flags/Liberia.png differ diff --git a/src/assets/img/flags/Libya.png b/src/assets/img/flags/Libya.png new file mode 100644 index 0000000..8176ad5 Binary files /dev/null and b/src/assets/img/flags/Libya.png differ diff --git a/src/assets/img/flags/Liechtenshein.png b/src/assets/img/flags/Liechtenshein.png new file mode 100644 index 0000000..4661f3d Binary files /dev/null and b/src/assets/img/flags/Liechtenshein.png differ diff --git a/src/assets/img/flags/Lithuania.png b/src/assets/img/flags/Lithuania.png new file mode 100644 index 0000000..875dd3f Binary files /dev/null and b/src/assets/img/flags/Lithuania.png differ diff --git a/src/assets/img/flags/Luxembourg.png b/src/assets/img/flags/Luxembourg.png new file mode 100644 index 0000000..cef746a Binary files /dev/null and b/src/assets/img/flags/Luxembourg.png differ diff --git a/src/assets/img/flags/Macao.png b/src/assets/img/flags/Macao.png new file mode 100644 index 0000000..e413fa5 Binary files /dev/null and b/src/assets/img/flags/Macao.png differ diff --git a/src/assets/img/flags/Macedonia.png b/src/assets/img/flags/Macedonia.png new file mode 100644 index 0000000..0bc9151 Binary files /dev/null and b/src/assets/img/flags/Macedonia.png differ diff --git a/src/assets/img/flags/Madagascar.png b/src/assets/img/flags/Madagascar.png new file mode 100644 index 0000000..31e6d84 Binary files /dev/null and b/src/assets/img/flags/Madagascar.png differ diff --git a/src/assets/img/flags/Malawi.png b/src/assets/img/flags/Malawi.png new file mode 100644 index 0000000..b96d0ad Binary files /dev/null and b/src/assets/img/flags/Malawi.png differ diff --git a/src/assets/img/flags/Malaysia.png b/src/assets/img/flags/Malaysia.png new file mode 100644 index 0000000..92686c2 Binary files /dev/null and b/src/assets/img/flags/Malaysia.png differ diff --git a/src/assets/img/flags/Maldives.png b/src/assets/img/flags/Maldives.png new file mode 100644 index 0000000..92472ec Binary files /dev/null and b/src/assets/img/flags/Maldives.png differ diff --git a/src/assets/img/flags/Mali.png b/src/assets/img/flags/Mali.png new file mode 100644 index 0000000..189bff7 Binary files /dev/null and b/src/assets/img/flags/Mali.png differ diff --git a/src/assets/img/flags/Malta.png b/src/assets/img/flags/Malta.png new file mode 100644 index 0000000..a93f9ee Binary files /dev/null and b/src/assets/img/flags/Malta.png differ diff --git a/src/assets/img/flags/Marshall Islands.png b/src/assets/img/flags/Marshall Islands.png new file mode 100644 index 0000000..1d15869 Binary files /dev/null and b/src/assets/img/flags/Marshall Islands.png differ diff --git a/src/assets/img/flags/Martinique.png b/src/assets/img/flags/Martinique.png new file mode 100644 index 0000000..f2b7be4 Binary files /dev/null and b/src/assets/img/flags/Martinique.png differ diff --git a/src/assets/img/flags/Mauritania.png b/src/assets/img/flags/Mauritania.png new file mode 100644 index 0000000..fcf1b44 Binary files /dev/null and b/src/assets/img/flags/Mauritania.png differ diff --git a/src/assets/img/flags/Mauritius.png b/src/assets/img/flags/Mauritius.png new file mode 100644 index 0000000..e4c0b7d Binary files /dev/null and b/src/assets/img/flags/Mauritius.png differ diff --git a/src/assets/img/flags/Mexico.png b/src/assets/img/flags/Mexico.png new file mode 100644 index 0000000..f0557d0 Binary files /dev/null and b/src/assets/img/flags/Mexico.png differ diff --git a/src/assets/img/flags/Micronesia.png b/src/assets/img/flags/Micronesia.png new file mode 100644 index 0000000..02cf424 Binary files /dev/null and b/src/assets/img/flags/Micronesia.png differ diff --git a/src/assets/img/flags/Moldova.png b/src/assets/img/flags/Moldova.png new file mode 100644 index 0000000..344855a Binary files /dev/null and b/src/assets/img/flags/Moldova.png differ diff --git a/src/assets/img/flags/Monaco.png b/src/assets/img/flags/Monaco.png new file mode 100644 index 0000000..bda53b1 Binary files /dev/null and b/src/assets/img/flags/Monaco.png differ diff --git a/src/assets/img/flags/Mongolia.png b/src/assets/img/flags/Mongolia.png new file mode 100644 index 0000000..83b7542 Binary files /dev/null and b/src/assets/img/flags/Mongolia.png differ diff --git a/src/assets/img/flags/Montenegro.png b/src/assets/img/flags/Montenegro.png new file mode 100644 index 0000000..5142918 Binary files /dev/null and b/src/assets/img/flags/Montenegro.png differ diff --git a/src/assets/img/flags/Montserrat.png b/src/assets/img/flags/Montserrat.png new file mode 100644 index 0000000..a799545 Binary files /dev/null and b/src/assets/img/flags/Montserrat.png differ diff --git a/src/assets/img/flags/Morocco.png b/src/assets/img/flags/Morocco.png new file mode 100644 index 0000000..c1bb970 Binary files /dev/null and b/src/assets/img/flags/Morocco.png differ diff --git a/src/assets/img/flags/Mozambique.png b/src/assets/img/flags/Mozambique.png new file mode 100644 index 0000000..07c0a8a Binary files /dev/null and b/src/assets/img/flags/Mozambique.png differ diff --git a/src/assets/img/flags/Myanmar(Burma).png b/src/assets/img/flags/Myanmar(Burma).png new file mode 100644 index 0000000..2deafe1 Binary files /dev/null and b/src/assets/img/flags/Myanmar(Burma).png differ diff --git a/src/assets/img/flags/NATO.png b/src/assets/img/flags/NATO.png new file mode 100644 index 0000000..d651f06 Binary files /dev/null and b/src/assets/img/flags/NATO.png differ diff --git a/src/assets/img/flags/Namibia.png b/src/assets/img/flags/Namibia.png new file mode 100644 index 0000000..9d14ed3 Binary files /dev/null and b/src/assets/img/flags/Namibia.png differ diff --git a/src/assets/img/flags/Nauru.png b/src/assets/img/flags/Nauru.png new file mode 100644 index 0000000..f763397 Binary files /dev/null and b/src/assets/img/flags/Nauru.png differ diff --git a/src/assets/img/flags/Nepal.png b/src/assets/img/flags/Nepal.png new file mode 100644 index 0000000..f011adc Binary files /dev/null and b/src/assets/img/flags/Nepal.png differ diff --git a/src/assets/img/flags/Netherlands Antilles.png b/src/assets/img/flags/Netherlands Antilles.png new file mode 100644 index 0000000..e4f171f Binary files /dev/null and b/src/assets/img/flags/Netherlands Antilles.png differ diff --git a/src/assets/img/flags/Netherlands.png b/src/assets/img/flags/Netherlands.png new file mode 100644 index 0000000..d5ea768 Binary files /dev/null and b/src/assets/img/flags/Netherlands.png differ diff --git a/src/assets/img/flags/New Caledonia.png b/src/assets/img/flags/New Caledonia.png new file mode 100644 index 0000000..dc3e9e1 Binary files /dev/null and b/src/assets/img/flags/New Caledonia.png differ diff --git a/src/assets/img/flags/New Zealand.png b/src/assets/img/flags/New Zealand.png new file mode 100644 index 0000000..ef474ad Binary files /dev/null and b/src/assets/img/flags/New Zealand.png differ diff --git a/src/assets/img/flags/Nicaragua.png b/src/assets/img/flags/Nicaragua.png new file mode 100644 index 0000000..ad8ab44 Binary files /dev/null and b/src/assets/img/flags/Nicaragua.png differ diff --git a/src/assets/img/flags/Niger.png b/src/assets/img/flags/Niger.png new file mode 100644 index 0000000..06a7c08 Binary files /dev/null and b/src/assets/img/flags/Niger.png differ diff --git a/src/assets/img/flags/Nigeria.png b/src/assets/img/flags/Nigeria.png new file mode 100644 index 0000000..899e0be Binary files /dev/null and b/src/assets/img/flags/Nigeria.png differ diff --git a/src/assets/img/flags/North Korea.png b/src/assets/img/flags/North Korea.png new file mode 100644 index 0000000..f51a2bf Binary files /dev/null and b/src/assets/img/flags/North Korea.png differ diff --git a/src/assets/img/flags/Northern Cyprus.png b/src/assets/img/flags/Northern Cyprus.png new file mode 100644 index 0000000..cb34657 Binary files /dev/null and b/src/assets/img/flags/Northern Cyprus.png differ diff --git a/src/assets/img/flags/Northern Ireland.png b/src/assets/img/flags/Northern Ireland.png new file mode 100644 index 0000000..c0eafdf Binary files /dev/null and b/src/assets/img/flags/Northern Ireland.png differ diff --git a/src/assets/img/flags/Norway.png b/src/assets/img/flags/Norway.png new file mode 100644 index 0000000..2b03236 Binary files /dev/null and b/src/assets/img/flags/Norway.png differ diff --git a/src/assets/img/flags/OPEC.png b/src/assets/img/flags/OPEC.png new file mode 100644 index 0000000..5d9c242 Binary files /dev/null and b/src/assets/img/flags/OPEC.png differ diff --git a/src/assets/img/flags/Olimpic Movement.png b/src/assets/img/flags/Olimpic Movement.png new file mode 100644 index 0000000..71d97ae Binary files /dev/null and b/src/assets/img/flags/Olimpic Movement.png differ diff --git a/src/assets/img/flags/Oman.png b/src/assets/img/flags/Oman.png new file mode 100644 index 0000000..111b114 Binary files /dev/null and b/src/assets/img/flags/Oman.png differ diff --git a/src/assets/img/flags/Pakistan.png b/src/assets/img/flags/Pakistan.png new file mode 100644 index 0000000..1630f55 Binary files /dev/null and b/src/assets/img/flags/Pakistan.png differ diff --git a/src/assets/img/flags/Palau.png b/src/assets/img/flags/Palau.png new file mode 100644 index 0000000..21a45c4 Binary files /dev/null and b/src/assets/img/flags/Palau.png differ diff --git a/src/assets/img/flags/Palestine.png b/src/assets/img/flags/Palestine.png new file mode 100644 index 0000000..6f654e3 Binary files /dev/null and b/src/assets/img/flags/Palestine.png differ diff --git a/src/assets/img/flags/Panama.png b/src/assets/img/flags/Panama.png new file mode 100644 index 0000000..e39849d Binary files /dev/null and b/src/assets/img/flags/Panama.png differ diff --git a/src/assets/img/flags/Papua New Guinea.png b/src/assets/img/flags/Papua New Guinea.png new file mode 100644 index 0000000..7b0d0ee Binary files /dev/null and b/src/assets/img/flags/Papua New Guinea.png differ diff --git a/src/assets/img/flags/Paraguay.png b/src/assets/img/flags/Paraguay.png new file mode 100644 index 0000000..d8cc505 Binary files /dev/null and b/src/assets/img/flags/Paraguay.png differ diff --git a/src/assets/img/flags/Peru.png b/src/assets/img/flags/Peru.png new file mode 100644 index 0000000..f971a35 Binary files /dev/null and b/src/assets/img/flags/Peru.png differ diff --git a/src/assets/img/flags/Philippines.png b/src/assets/img/flags/Philippines.png new file mode 100644 index 0000000..d025d4d Binary files /dev/null and b/src/assets/img/flags/Philippines.png differ diff --git a/src/assets/img/flags/Poland.png b/src/assets/img/flags/Poland.png new file mode 100644 index 0000000..7a71804 Binary files /dev/null and b/src/assets/img/flags/Poland.png differ diff --git a/src/assets/img/flags/Portugal.png b/src/assets/img/flags/Portugal.png new file mode 100644 index 0000000..5b39073 Binary files /dev/null and b/src/assets/img/flags/Portugal.png differ diff --git a/src/assets/img/flags/Puerto Rico.png b/src/assets/img/flags/Puerto Rico.png new file mode 100644 index 0000000..146ca81 Binary files /dev/null and b/src/assets/img/flags/Puerto Rico.png differ diff --git a/src/assets/img/flags/Qatar.png b/src/assets/img/flags/Qatar.png new file mode 100644 index 0000000..1dd1183 Binary files /dev/null and b/src/assets/img/flags/Qatar.png differ diff --git a/src/assets/img/flags/Red Cross.png b/src/assets/img/flags/Red Cross.png new file mode 100644 index 0000000..fd79967 Binary files /dev/null and b/src/assets/img/flags/Red Cross.png differ diff --git a/src/assets/img/flags/Reunion.png b/src/assets/img/flags/Reunion.png new file mode 100644 index 0000000..8087909 Binary files /dev/null and b/src/assets/img/flags/Reunion.png differ diff --git a/src/assets/img/flags/Romania.png b/src/assets/img/flags/Romania.png new file mode 100644 index 0000000..b8cdad8 Binary files /dev/null and b/src/assets/img/flags/Romania.png differ diff --git a/src/assets/img/flags/Russia.png b/src/assets/img/flags/Russia.png new file mode 100644 index 0000000..a5b9528 Binary files /dev/null and b/src/assets/img/flags/Russia.png differ diff --git a/src/assets/img/flags/Rwanda.png b/src/assets/img/flags/Rwanda.png new file mode 100644 index 0000000..f6f5163 Binary files /dev/null and b/src/assets/img/flags/Rwanda.png differ diff --git a/src/assets/img/flags/Saint Lucia.png b/src/assets/img/flags/Saint Lucia.png new file mode 100644 index 0000000..987e1f0 Binary files /dev/null and b/src/assets/img/flags/Saint Lucia.png differ diff --git a/src/assets/img/flags/Samoa.png b/src/assets/img/flags/Samoa.png new file mode 100644 index 0000000..e671ebb Binary files /dev/null and b/src/assets/img/flags/Samoa.png differ diff --git a/src/assets/img/flags/San Marino.png b/src/assets/img/flags/San Marino.png new file mode 100644 index 0000000..92bd72b Binary files /dev/null and b/src/assets/img/flags/San Marino.png differ diff --git a/src/assets/img/flags/Sao Tome & Principe.png b/src/assets/img/flags/Sao Tome & Principe.png new file mode 100644 index 0000000..b5187c6 Binary files /dev/null and b/src/assets/img/flags/Sao Tome & Principe.png differ diff --git a/src/assets/img/flags/Saudi Arabia.png b/src/assets/img/flags/Saudi Arabia.png new file mode 100644 index 0000000..9630e83 Binary files /dev/null and b/src/assets/img/flags/Saudi Arabia.png differ diff --git a/src/assets/img/flags/Scotland.png b/src/assets/img/flags/Scotland.png new file mode 100644 index 0000000..4ac5281 Binary files /dev/null and b/src/assets/img/flags/Scotland.png differ diff --git a/src/assets/img/flags/Senegal.png b/src/assets/img/flags/Senegal.png new file mode 100644 index 0000000..13c9365 Binary files /dev/null and b/src/assets/img/flags/Senegal.png differ diff --git a/src/assets/img/flags/Serbia(Yugoslavia).png b/src/assets/img/flags/Serbia(Yugoslavia).png new file mode 100644 index 0000000..b2afcf5 Binary files /dev/null and b/src/assets/img/flags/Serbia(Yugoslavia).png differ diff --git a/src/assets/img/flags/Seychelles.png b/src/assets/img/flags/Seychelles.png new file mode 100644 index 0000000..de605e6 Binary files /dev/null and b/src/assets/img/flags/Seychelles.png differ diff --git a/src/assets/img/flags/Sierra Leone.png b/src/assets/img/flags/Sierra Leone.png new file mode 100644 index 0000000..47b26eb Binary files /dev/null and b/src/assets/img/flags/Sierra Leone.png differ diff --git a/src/assets/img/flags/Singapore.png b/src/assets/img/flags/Singapore.png new file mode 100644 index 0000000..4b88785 Binary files /dev/null and b/src/assets/img/flags/Singapore.png differ diff --git a/src/assets/img/flags/Slovakia.png b/src/assets/img/flags/Slovakia.png new file mode 100644 index 0000000..418c786 Binary files /dev/null and b/src/assets/img/flags/Slovakia.png differ diff --git a/src/assets/img/flags/Slovenia.png b/src/assets/img/flags/Slovenia.png new file mode 100644 index 0000000..cfa83b5 Binary files /dev/null and b/src/assets/img/flags/Slovenia.png differ diff --git a/src/assets/img/flags/Solomon Islands.png b/src/assets/img/flags/Solomon Islands.png new file mode 100644 index 0000000..f1ffebb Binary files /dev/null and b/src/assets/img/flags/Solomon Islands.png differ diff --git a/src/assets/img/flags/Somalia.png b/src/assets/img/flags/Somalia.png new file mode 100644 index 0000000..6a02c72 Binary files /dev/null and b/src/assets/img/flags/Somalia.png differ diff --git a/src/assets/img/flags/Somaliland.png b/src/assets/img/flags/Somaliland.png new file mode 100644 index 0000000..d44f580 Binary files /dev/null and b/src/assets/img/flags/Somaliland.png differ diff --git a/src/assets/img/flags/South Africa.png b/src/assets/img/flags/South Africa.png new file mode 100644 index 0000000..d1920de Binary files /dev/null and b/src/assets/img/flags/South Africa.png differ diff --git a/src/assets/img/flags/South Korea.png b/src/assets/img/flags/South Korea.png new file mode 100644 index 0000000..13e27e1 Binary files /dev/null and b/src/assets/img/flags/South Korea.png differ diff --git a/src/assets/img/flags/Spain.png b/src/assets/img/flags/Spain.png new file mode 100644 index 0000000..38b66bc Binary files /dev/null and b/src/assets/img/flags/Spain.png differ diff --git a/src/assets/img/flags/Sri Lanka.png b/src/assets/img/flags/Sri Lanka.png new file mode 100644 index 0000000..2a7d925 Binary files /dev/null and b/src/assets/img/flags/Sri Lanka.png differ diff --git a/src/assets/img/flags/St Kitts & Nevis.png b/src/assets/img/flags/St Kitts & Nevis.png new file mode 100644 index 0000000..75f3ed2 Binary files /dev/null and b/src/assets/img/flags/St Kitts & Nevis.png differ diff --git a/src/assets/img/flags/St Vincent & the Grenadines.png b/src/assets/img/flags/St Vincent & the Grenadines.png new file mode 100644 index 0000000..e633360 Binary files /dev/null and b/src/assets/img/flags/St Vincent & the Grenadines.png differ diff --git a/src/assets/img/flags/Sudan.png b/src/assets/img/flags/Sudan.png new file mode 100644 index 0000000..3a37985 Binary files /dev/null and b/src/assets/img/flags/Sudan.png differ diff --git a/src/assets/img/flags/Suriname.png b/src/assets/img/flags/Suriname.png new file mode 100644 index 0000000..cb4a87a Binary files /dev/null and b/src/assets/img/flags/Suriname.png differ diff --git a/src/assets/img/flags/Swaziland.png b/src/assets/img/flags/Swaziland.png new file mode 100644 index 0000000..3585ac0 Binary files /dev/null and b/src/assets/img/flags/Swaziland.png differ diff --git a/src/assets/img/flags/Sweden.png b/src/assets/img/flags/Sweden.png new file mode 100644 index 0000000..2c9bd9d Binary files /dev/null and b/src/assets/img/flags/Sweden.png differ diff --git a/src/assets/img/flags/Switzerland.png b/src/assets/img/flags/Switzerland.png new file mode 100644 index 0000000..223154d Binary files /dev/null and b/src/assets/img/flags/Switzerland.png differ diff --git a/src/assets/img/flags/Syria.png b/src/assets/img/flags/Syria.png new file mode 100644 index 0000000..0584c20 Binary files /dev/null and b/src/assets/img/flags/Syria.png differ diff --git a/src/assets/img/flags/Tahiti(French Polinesia).png b/src/assets/img/flags/Tahiti(French Polinesia).png new file mode 100644 index 0000000..cbc56d0 Binary files /dev/null and b/src/assets/img/flags/Tahiti(French Polinesia).png differ diff --git a/src/assets/img/flags/Taiwan.png b/src/assets/img/flags/Taiwan.png new file mode 100644 index 0000000..956d853 Binary files /dev/null and b/src/assets/img/flags/Taiwan.png differ diff --git a/src/assets/img/flags/Tajikistan.png b/src/assets/img/flags/Tajikistan.png new file mode 100644 index 0000000..09a7907 Binary files /dev/null and b/src/assets/img/flags/Tajikistan.png differ diff --git a/src/assets/img/flags/Tanzania.png b/src/assets/img/flags/Tanzania.png new file mode 100644 index 0000000..f0e1f39 Binary files /dev/null and b/src/assets/img/flags/Tanzania.png differ diff --git a/src/assets/img/flags/Thailand.png b/src/assets/img/flags/Thailand.png new file mode 100644 index 0000000..8f3b5e7 Binary files /dev/null and b/src/assets/img/flags/Thailand.png differ diff --git a/src/assets/img/flags/Timor-Leste.png b/src/assets/img/flags/Timor-Leste.png new file mode 100644 index 0000000..296fba0 Binary files /dev/null and b/src/assets/img/flags/Timor-Leste.png differ diff --git a/src/assets/img/flags/Togo.png b/src/assets/img/flags/Togo.png new file mode 100644 index 0000000..5a100b1 Binary files /dev/null and b/src/assets/img/flags/Togo.png differ diff --git a/src/assets/img/flags/Tonga.png b/src/assets/img/flags/Tonga.png new file mode 100644 index 0000000..f62ba37 Binary files /dev/null and b/src/assets/img/flags/Tonga.png differ diff --git a/src/assets/img/flags/Trinidad & Tobago.png b/src/assets/img/flags/Trinidad & Tobago.png new file mode 100644 index 0000000..cf85660 Binary files /dev/null and b/src/assets/img/flags/Trinidad & Tobago.png differ diff --git a/src/assets/img/flags/Tunisia.png b/src/assets/img/flags/Tunisia.png new file mode 100644 index 0000000..d867a5e Binary files /dev/null and b/src/assets/img/flags/Tunisia.png differ diff --git a/src/assets/img/flags/Turkey.png b/src/assets/img/flags/Turkey.png new file mode 100644 index 0000000..0398e54 Binary files /dev/null and b/src/assets/img/flags/Turkey.png differ diff --git a/src/assets/img/flags/Turkmenistan.png b/src/assets/img/flags/Turkmenistan.png new file mode 100644 index 0000000..e3c50ed Binary files /dev/null and b/src/assets/img/flags/Turkmenistan.png differ diff --git a/src/assets/img/flags/Turks and Caicos Islands.png b/src/assets/img/flags/Turks and Caicos Islands.png new file mode 100644 index 0000000..fc66ef0 Binary files /dev/null and b/src/assets/img/flags/Turks and Caicos Islands.png differ diff --git a/src/assets/img/flags/Tuvalu.png b/src/assets/img/flags/Tuvalu.png new file mode 100644 index 0000000..3a403a6 Binary files /dev/null and b/src/assets/img/flags/Tuvalu.png differ diff --git a/src/assets/img/flags/USA.png b/src/assets/img/flags/USA.png new file mode 100644 index 0000000..48c448f Binary files /dev/null and b/src/assets/img/flags/USA.png differ diff --git a/src/assets/img/flags/Uganda.png b/src/assets/img/flags/Uganda.png new file mode 100644 index 0000000..744d39d Binary files /dev/null and b/src/assets/img/flags/Uganda.png differ diff --git a/src/assets/img/flags/Ukraine.png b/src/assets/img/flags/Ukraine.png new file mode 100644 index 0000000..78e4945 Binary files /dev/null and b/src/assets/img/flags/Ukraine.png differ diff --git a/src/assets/img/flags/United Arab Emirates.png b/src/assets/img/flags/United Arab Emirates.png new file mode 100644 index 0000000..1161375 Binary files /dev/null and b/src/assets/img/flags/United Arab Emirates.png differ diff --git a/src/assets/img/flags/United Nations.png b/src/assets/img/flags/United Nations.png new file mode 100644 index 0000000..6b5f639 Binary files /dev/null and b/src/assets/img/flags/United Nations.png differ diff --git a/src/assets/img/flags/United-Kingdom.png b/src/assets/img/flags/United-Kingdom.png new file mode 100644 index 0000000..3853f5e Binary files /dev/null and b/src/assets/img/flags/United-Kingdom.png differ diff --git a/src/assets/img/flags/Uruguay.png b/src/assets/img/flags/Uruguay.png new file mode 100644 index 0000000..0eddedc Binary files /dev/null and b/src/assets/img/flags/Uruguay.png differ diff --git a/src/assets/img/flags/Uzbekistan.png b/src/assets/img/flags/Uzbekistan.png new file mode 100644 index 0000000..97ade3f Binary files /dev/null and b/src/assets/img/flags/Uzbekistan.png differ diff --git a/src/assets/img/flags/Vanutau.png b/src/assets/img/flags/Vanutau.png new file mode 100644 index 0000000..ff6cbef Binary files /dev/null and b/src/assets/img/flags/Vanutau.png differ diff --git a/src/assets/img/flags/Vatican City.png b/src/assets/img/flags/Vatican City.png new file mode 100644 index 0000000..c344e8b Binary files /dev/null and b/src/assets/img/flags/Vatican City.png differ diff --git a/src/assets/img/flags/Venezuela.png b/src/assets/img/flags/Venezuela.png new file mode 100644 index 0000000..8ba69c4 Binary files /dev/null and b/src/assets/img/flags/Venezuela.png differ diff --git a/src/assets/img/flags/Viet Nam.png b/src/assets/img/flags/Viet Nam.png new file mode 100644 index 0000000..c9368df Binary files /dev/null and b/src/assets/img/flags/Viet Nam.png differ diff --git a/src/assets/img/flags/Virgin Islands British.png b/src/assets/img/flags/Virgin Islands British.png new file mode 100644 index 0000000..eb22e44 Binary files /dev/null and b/src/assets/img/flags/Virgin Islands British.png differ diff --git a/src/assets/img/flags/Virgin Islands US.png b/src/assets/img/flags/Virgin Islands US.png new file mode 100644 index 0000000..13be807 Binary files /dev/null and b/src/assets/img/flags/Virgin Islands US.png differ diff --git a/src/assets/img/flags/Wales.png b/src/assets/img/flags/Wales.png new file mode 100644 index 0000000..3c49345 Binary files /dev/null and b/src/assets/img/flags/Wales.png differ diff --git a/src/assets/img/flags/Western Sahara.png b/src/assets/img/flags/Western Sahara.png new file mode 100644 index 0000000..5eb501c Binary files /dev/null and b/src/assets/img/flags/Western Sahara.png differ diff --git a/src/assets/img/flags/Yemen.png b/src/assets/img/flags/Yemen.png new file mode 100644 index 0000000..987a212 Binary files /dev/null and b/src/assets/img/flags/Yemen.png differ diff --git a/src/assets/img/flags/Zambia.png b/src/assets/img/flags/Zambia.png new file mode 100644 index 0000000..639c3ac Binary files /dev/null and b/src/assets/img/flags/Zambia.png differ diff --git a/src/assets/img/flags/Zimbabwe.png b/src/assets/img/flags/Zimbabwe.png new file mode 100644 index 0000000..39106df Binary files /dev/null and b/src/assets/img/flags/Zimbabwe.png differ diff --git a/src/assets/img/logo-symbol.png b/src/assets/img/logo-symbol.png new file mode 100644 index 0000000..7f62aff Binary files /dev/null and b/src/assets/img/logo-symbol.png differ diff --git a/src/assets/img/test.png b/src/assets/img/test.png new file mode 100644 index 0000000..98a1946 Binary files /dev/null and b/src/assets/img/test.png differ diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts new file mode 100644 index 0000000..3612073 --- /dev/null +++ b/src/environments/environment.prod.ts @@ -0,0 +1,3 @@ +export const environment = { + production: true +}; diff --git a/src/environments/environment.ts b/src/environments/environment.ts new file mode 100644 index 0000000..00313f1 --- /dev/null +++ b/src/environments/environment.ts @@ -0,0 +1,8 @@ +// The file contents for the current environment will overwrite these during build. +// The build system defaults to the dev environment which uses `environment.ts`, but if you do +// `ng build --env=prod` then `environment.prod.ts` will be used instead. +// The list of which env maps to which file can be found in `angular-cli.json`. + +export const environment = { + production: false +}; diff --git a/src/favicon.ico b/src/favicon.ico new file mode 100644 index 0000000..8081c7c Binary files /dev/null and b/src/favicon.ico differ diff --git a/src/img/favicon.png b/src/img/favicon.png new file mode 100644 index 0000000..7f62aff Binary files /dev/null and b/src/img/favicon.png differ diff --git a/src/img/light-bulb.png b/src/img/light-bulb.png new file mode 100644 index 0000000..74b8ab7 Binary files /dev/null and b/src/img/light-bulb.png differ diff --git a/src/img/login-bg.jpg b/src/img/login-bg.jpg new file mode 100644 index 0000000..62df102 Binary files /dev/null and b/src/img/login-bg.jpg differ diff --git a/src/img/logo-symbol.png b/src/img/logo-symbol.png new file mode 100644 index 0000000..7f62aff Binary files /dev/null and b/src/img/logo-symbol.png differ diff --git a/src/img/logo.jpg b/src/img/logo.jpg new file mode 100644 index 0000000..87b51d6 Binary files /dev/null and b/src/img/logo.jpg differ diff --git a/src/img/logo.png b/src/img/logo.png new file mode 100644 index 0000000..7420106 Binary files /dev/null and b/src/img/logo.png differ diff --git a/src/img/logo1.png b/src/img/logo1.png new file mode 100644 index 0000000..475f932 Binary files /dev/null and b/src/img/logo1.png differ diff --git a/src/img/logo2.png b/src/img/logo2.png new file mode 100644 index 0000000..59e5a0a Binary files /dev/null and b/src/img/logo2.png differ diff --git a/src/img/logo4.png b/src/img/logo4.png new file mode 100644 index 0000000..7f62aff Binary files /dev/null and b/src/img/logo4.png differ diff --git a/src/img/taiwan-map-icon.zip b/src/img/taiwan-map-icon.zip new file mode 100644 index 0000000..8105e34 Binary files /dev/null and b/src/img/taiwan-map-icon.zip differ diff --git a/src/img/unlogin-repair-bg.jpg b/src/img/unlogin-repair-bg.jpg new file mode 100644 index 0000000..ee579b8 Binary files /dev/null and b/src/img/unlogin-repair-bg.jpg differ diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..ca042d7 --- /dev/null +++ b/src/index.html @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + 智慧違規偵測整合平台 + + + + + + + + + + + + diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..a9ca1ca --- /dev/null +++ b/src/main.ts @@ -0,0 +1,11 @@ +import { enableProdMode } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/src/polyfills.ts b/src/polyfills.ts new file mode 100644 index 0000000..41d3b96 --- /dev/null +++ b/src/polyfills.ts @@ -0,0 +1,69 @@ +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), + * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. + * + * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html + */ + +/*************************************************************************************************** + * BROWSER POLYFILLS + */ + +/** IE9, IE10 and IE11 requires all of the following polyfills. **/ +import 'core-js/es6/symbol'; +import 'core-js/es6/object'; +import 'core-js/es6/function'; +import 'core-js/es6/parse-int'; +import 'core-js/es6/parse-float'; +import 'core-js/es6/number'; +import 'core-js/es6/math'; +import 'core-js/es6/string'; +import 'core-js/es6/date'; +import 'core-js/es6/array'; +import 'core-js/es6/regexp'; +import 'core-js/es6/map'; +import 'core-js/es6/set'; +import 'core-js/es6/reflect'; + +/** IE10 and IE11 requires the following for NgClass support on SVG elements */ +// import 'classlist.js'; // Run `npm install --save classlist.js`. + +/** IE10 and IE11 requires the following to support `@angular/animation`. */ +// import 'web-animations-js'; // Run `npm install --save web-animations-js`. + + +/** Evergreen browsers require these. **/ +import 'core-js/es6/reflect'; +import 'core-js/es7/reflect'; + + +/** ALL Firefox browsers require the following to support `@angular/animation`. **/ +// import 'web-animations-js'; // Run `npm install --save web-animations-js`. + + + +/*************************************************************************************************** + * Zone JS is required by Angular itself. + */ +import 'zone.js/dist/zone'; // Included with Angular CLI. + + + +/*************************************************************************************************** + * APPLICATION IMPORTS + */ + +/** + * Date, currency, decimal and percent pipes. + * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10 + */ +// import 'intl'; // Run `npm install --save intl`. diff --git a/src/scss/_bootstrap-variables.scss b/src/scss/_bootstrap-variables.scss new file mode 100644 index 0000000..90f1bd0 --- /dev/null +++ b/src/scss/_bootstrap-variables.scss @@ -0,0 +1,110 @@ +// Bootstrap overrides + +// +// Color system +// + +$white: #fff; +$gray-100: #f0f3f5; +$gray-200: #c2cfd6; +$gray-300: #a4b7c1; +$gray-400: #869fac; +$gray-500: #678898; +$gray-600: #536c79; +$gray-700: #3e515b; +$gray-800: #29363d; +$gray-900: #151b1e; +$black: #000 !default; + +$blue: #20a8d8; +$indigo: #6610f2 !default; +$purple: #6f42c1 !default; +$pink: #e83e8c !default; +$red: #f86c6b; +$orange: #f8cb00; +$yellow: #ffc107 !default; +$green: #4dbd74; +$teal: #20c997 !default; +$cyan: #63c2de; + +$colors: ( + blue: $blue, + indigo: $indigo, + purple: $purple, + pink: $pink, + red: $red, + orange: $orange, + yellow: $yellow, + green: $green, + teal: $teal, + cyan: $cyan, + white: $white, + gray: $gray-600, + gray-dark: $gray-800 +); + +$theme-colors: ( + primary: $blue, + secondary: $gray-300, + success: $green, + info: $cyan, + warning: $yellow, + danger: $red, + light: $gray-100, + dark: $gray-800 +); + +// Options +// +// Quickly modify global styling by enabling or disabling optional features. + +$enable-transitions: true; +$enable-rounded: false; + +// Body +// +// Settings for the `` element. + +$body-bg: #e4e5e6; + +// Typography +// +// Font, line-height, and color for body text, headings, and more. + +//fontsizehere +$font-size-base: 1rem; + +// Breadcrumbs + +$breadcrumb-bg: #fff; +$breadcrumb-margin-bottom: 1.5rem; + +// Cards + +$card-border-color: $gray-200; +$card-cap-bg: $gray-100; + +// Dropdowns + +$dropdown-padding-y: 0; +$dropdown-border-color: $gray-200; +$dropdown-divider-bg: $gray-100; + +// Buttons + +$btn-secondary-border: $gray-300; + +// Progress bars + +$progress-bg: $gray-100; + +// Tables + +$table-bg-accent: $gray-100; +$table-bg-hover: $gray-100; + +// Forms + +$input-group-addon-bg: $gray-100; +$input-border-color: $gray-200; +$input-group-addon-border-color: $gray-200; diff --git a/src/scss/_core-variables.scss b/src/scss/_core-variables.scss new file mode 100644 index 0000000..906e13a --- /dev/null +++ b/src/scss/_core-variables.scss @@ -0,0 +1 @@ +// core overrides diff --git a/src/scss/_custom.scss b/src/scss/_custom.scss new file mode 100644 index 0000000..b82dd76 --- /dev/null +++ b/src/scss/_custom.scss @@ -0,0 +1,583 @@ +@import url("http://fonts.googleapis.com/css?family=Rationale"); +$myfont: "微軟正黑體"; +$myfontsize: 14px; +@mixin label-status($colorLabelStatus) { + display: inline; + padding: 0.2em 0.6em 0.3em; + font-weight: bold; + font-size: 14px; + line-height: 1; + color: #ffffff; + background-color: $colorLabelStatus; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25em; +} + +.scroll { + max-height: 300px; + overflow-y: auto; + +} + +.checkboxselect { + background-color: #4dec1d; +} + +.checkbox-lg .custom-control-label::before, +.checkbox-lg .custom-control-label::after { + top: .8rem; + width: 1.55rem; + height: 1.55rem; +} + +.checkbox-lg .custom-control-label { + padding-top: 13px; + padding-left: 6px; +} + + +.checkbox-xl .custom-control-label::before, +.checkbox-xl .custom-control-label::after { + top: 1.2rem; + width: 1.85rem; + height: 1.85rem; +} + +.checkbox-xl .custom-control-label { + padding-top: 23px; + padding-left: 10px; +} + + + + + +*, +.rc-anchor-checkbox-label, +.modal-title, +.addUser, +.btn { + font-family: $myfont; +} + +html{ + background-size: 100% auto; + background-repeat: no-repeat; + background-position: 0 80%; + min-height: 100vh; + background-color: #f2f2f2; +} + +body { + display: flex; + justify-content: center; + min-height: 100vh; + font-family: $myfont; + background-color: #f2f2f2; + // -ms-overflow-style: -ms-autohiding-scrollbar; +} + +.login-bg { + // background-image: url("../img/login-bg.jpg"); + background-position: center; + background-size: cover; + background-repeat: no-repeat; +} + +// https://lh4.googleusercontent.com/-XplyTa1Za-I/VMSgIyAYkHI/AAAAAAAADxM/oL-rD6VP4ts/w1184-h666/Android-Lollipop-wallpapers-Google-Now-Wallpaper-2.png +.noLogin-repair-bg { + // background-image: url("../img/unlogin-repair-bg.jpg"); + background-size: cover; + background-repeat: no-repeat; +} + +.noLogin-repair-tab { + background-color: rgba(255, 255, 255, 0.13); +} + +.content-block { + background-color: #fff; + padding: 10px; + margin-bottom: 20px; + border-radius: 2px; + width: 100%; + height: 100%; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); +} + +.content-block-dashboard { + background-color: #fff; + padding: 20px; + margin-bottom: 20px; + border-radius: 10px; + width: 100%; + height: 100%; // &:hover { + // box-shadow: 1px 1px 20px grey; + // -webkit-transition: box-shadow 0.3s ease-in; + // } +} + +.loginCard { + border-radius: 10px; + border: none; + background-color: rgba( + 164, 183, 193, 0.5 + ); // background-color: rgba(0, 0, 0, 0.13); + // &:hover { + // box-shadow: 1px 1px 200px #fff279; + // border: none; + // -webkit-transition: box-shadow 0.3s ease-in; + // } +} + +h1.loginCard-title { + color: white; + font-weight: bold; + word-spacing: 10px; +} + +h2.title { + font-family: $myfont; + display: flex; + margin-bottom: 10px; + color: #4883a1; + font-size: 35px; + // font-weight: bold; +} + +span.subtitle { + color: #a9a9a9; +} + +.light-map-title { + font-family: $myfont; + font-weight: bold; + font-size: 14px; +} + +ul.map li { + // list-style-type: none; + list-style-image: url("https://www.shareicon.net/data/12x12/2016/10/11/842365_keyboard_512x512.png"); + list-style-position: outside; //text-align: center; + font-size: 14px; + margin-bottom: 5px; +} + +//https://www.shareicon.net/data/32x32/2016/11/03/849864_light-bulb_512x512.png +.accordion:hover .nav-stacked, +.btn-group:hover .dropdown-menu, +.dropdown:hover .dropdown-menu { + display: block; +} + +.table > thead > tr > th { + cursor: pointer; +} + +.table > thead > tr > th, +.table > tbody > tr > td { + vertical-align: middle; + text-align: center; +} + +.label-enabled { + @include label-status(#73a839); +} + +.label-disabled { + @include label-status(#f0ad4e); +} + +.btn-sign-out { + padding: 0.25rem 0.5rem; + font-size: 15px; + margin-right: 30px; + color: #ffffff; + border-radius: 99em; + background-color: #63c2de; + border-color: #63c2de; + &:hover { + background: darken(#63c2de, 5%); + } +} + +.btn-footer { + text-align: center; + margin: 0% auto; +} + +.btn-bar { + text-align: center; + margin: 5px; +} + +.noData { + text-align: center; + padding: 100px; + font-size: 30px; + color: #a9a9a9; +} + +.dashboardClock { + font-size: 50px; + font-family: 'Rationale'; + font-weight: bold; + padding: 5px; + margin-left: auto; + margin-right: auto; + margin-top: 5px; + margin-bottom: 5px; + text-align: center; + letter-spacing: 3px; + color: #4883a1; + text-shadow: #a4b7c1 6px 2px 5px; // background-color: #666666; + // -webkit-background-clip: text; + // -moz-background-clip: text; + // background-clip: text; + // color: transparent; + // text-shadow: rgba(255, 255, 255, 0.5) 0px 3px 3px; +} + +.loginPageTitle { + font-size: 70px; + font-family: Rationale, $myfont; + font-weight: bold; + margin-top: 10px; + margin-bottom: 20px; + text-align: center; + letter-spacing: 3px; + color: #fff; + text-shadow: 0px 0px 8px #000000; +} + +.verticalTable, +.verticalTable tr th, +.verticalTable tr td { + margin-left: auto; + margin-right: auto; + margin-top: 10px; + margin-bottom: 20px; + border: 2px solid #c2cfd6; + font-size: 16px; + padding: 10px; + text-align: center; + width: 100%; + height: 80%; +} + +.verticalTable tr th { + width: 50%; +} + +.verticalTable tr:nth-child(odd) { + background-color: #f5f5f5; + &:hover { + background: #f0f3f5; + } +} + +.verticalTable tr:nth-child(even) { + background-color: #fff; + &:hover { + background: #f0f3f5; + } +} + +.customClass { + background-color: #f8f8f8; + border: #d0d0d0 dashed 1px; + border-radius: 3px; + color: #9b9b9b; +} + +agm-map { + height: 75vh; +} + +.pagination { + display: inline-block; + cursor: pointer; + margin-bottom: 20px; +} + +.pagination a { + color: black; + padding: 8px 16px; + text-decoration: none; + transition: background-color 0.3s; +} + +.pagination a.active { + background-color: #63c2de; + color: white; + &:hover { + color: white; + } +} + +.pagination a:hover:not(.active) { + background-color: #ddd; +} + +.pagination_center { + text-align: center; +} + +.invalid-column { + display: none; + margin-top: 0.25rem; + font-size: 0.875rem; + color: #dc3545; +} + +.invalidMessage { + padding: 5px; + font-size: 14px; + color: #dc3545; +} + +.validMessage { + padding: 5px; + font-size: 14px; + color: #73a839; +} + +.resultPage { + text-align: center; + font-size: 30px; + color: #fff; +} + +.right { + float: right; + overflow: hidden; + margin-bottom: 5px; +} + +.search-result li { + border-bottom: 1px solid rgba(99, 194, 222, 0.5); + border-left: 1px solid rgba(99, 194, 222, 0.5); + border-right: 1px solid rgba(99, 194, 222, 0.5); + padding: 10px; + background-color: white; + cursor: pointer; + list-style-type: none; +} + +.search-result li:hover { + color: white; + background-color: rgba(99, 194, 222, 0.5); + font-weight: bold; +} + +.search-result li a { + color: #888; + display: block; + text-decoration: none; +} + +.search-result li a:hover { + color: white; +} + +.search-result li a:active { + color: white; +} + +ul.search-result { + margin-top: 0; + padding-left: 0; +} + +.aa { + float: left; +} + +.chart-search-bar { + display: flex; + margin-bottom: 5px; +} + +.desc { + color: #dc3545; + font-weight: bold; +} + +.asc { + color: #73a839; + font-weight: bold; +} + +.ss { + font-weight: bold; + color: white; + background-color: rgba(255, 209, 70, 0.85); + display: -webkit-inline-box; + padding: 2px 5px; + margin: 2px 2px; + border-radius: 5px; + cursor: pointer; +} + +.sss { + font-weight: bold; + color: white; + background-color: #63c2de; + display: -webkit-inline-box; + padding: 2px 5px; + margin: 2px 2px; + border-radius: 5px; + cursor: pointer; +} + +.search-bar-out{ + display: flex; + align-items: center; + justify-content: center;} + +.search-bar{ + max-width: 50%; +} + +::-webkit-scrollbar { + // -ms-overflow-style: -ms-autohiding-scrollbar; + width: 0px; /* remove scrollbar space */ + background: transparent; /* optional: just make scrollbar invisible */ +} + +.checkbox { + cursor: pointer; + -webkit-tap-highlight-color: rgba(21, 27, 31, 0.58); + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + + > input[type="checkbox"] { + position: absolute; + opacity: 0; + z-index: -1; + } +} + + .checkbox__icon { + @extend %icon; + display: inline-block; + + /* Default State */ + color: #999; + @extend .icon--check-empty; + + /* Active State */ + input[type="checkbox"]:checked ~ & { + color: rgba(222, 99, 99, 0.8); + @extend .icon--check; + } + } + + /* IE6-8 Fallback */ + @media \0screen\,screen\9 { + .checkbox__icon { + display: none; + } + .checkbox > input[type="checkbox"] { + position: static; + } + } + +/**************************** + **************************** + **************************** + * Helpers + */ +%icon:before { + font-family: "icons"; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.icon--check:before { + content: "\e601"; +} +.icon--check-empty:before { + content: "\e600"; +} + +@font-face { + font-family: "icons"; + font-weight: normal; + font-style: normal; + src: url("data:application/x-font-woff;charset=utf-8;base64,d09GRk9UVE8AAAR4AAoAAAAABDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAPgAAAD4fZUAVE9TLzIAAAHsAAAAYAAAAGAIIvy3Y21hcAAAAkwAAABMAAAATBpVzFhnYXNwAAACmAAAAAgAAAAIAAAAEGhlYWQAAAKgAAAANgAAADYAeswzaGhlYQAAAtgAAAAkAAAAJAPiAedobXR4AAAC/AAAABgAAAAYBQAAAG1heHAAAAMUAAAABgAAAAYABlAAbmFtZQAAAxwAAAE5AAABOUQYtNZwb3N0AAAEWAAAACAAAAAgAAMAAAEABAQAAQEBCGljb21vb24AAQIAAQA6+BwC+BsD+BgEHgoAGVP/i4seCgAZU/+LiwwHi2v4lPh0BR0AAAB8Dx0AAACBER0AAAAJHQAAAO8SAAcBAQgPERMWGyBpY29tb29uaWNvbW9vbnUwdTF1MjB1RTYwMHVFNjAxAAACAYkABAAGAQEEBwoNL2X8lA78lA78lA77lA6L+HQVi/yU+JSLi/iU/JSLBd83Fffsi4v77Pvsi4v37AUOi/h0FYv8lPiUi4v33zc3i/s3++yLi/fs9zeL398F9wCFFftN+05JzUdI9xr7GveR95FHzwUO+JQU+JQViwwKAAMCAAGQAAUAAAFMAWYAAABHAUwBZgAAAPUAGQCEAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA5gEB4P/g/+AB4AAgAAAAAQAAAAAAAAAAAAAAIAAAAAAAAgAAAAMAAAAUAAMAAQAAABQABAA4AAAACgAIAAIAAgABACDmAf/9//8AAAAAACDmAP/9//8AAf/jGgQAAwABAAAAAAAAAAAAAAABAAH//wAPAAEAAAAAAACkYCfgXw889QALAgAAAAAAz65FuwAAAADPrkW7AAD/4AIAAeAAAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAAgAAAQAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAABAAAAAgAAAAIAAAAAAFAAAAYAAAAAAA4ArgABAAAAAAABAA4AAAABAAAAAAACAA4ARwABAAAAAAADAA4AJAABAAAAAAAEAA4AVQABAAAAAAAFABYADgABAAAAAAAGAAcAMgABAAAAAAAKACgAYwADAAEECQABAA4AAAADAAEECQACAA4ARwADAAEECQADAA4AJAADAAEECQAEAA4AVQADAAEECQAFABYADgADAAEECQAGAA4AOQADAAEECQAKACgAYwBpAGMAbwBtAG8AbwBuAFYAZQByAHMAaQBvAG4AIAAxAC4AMABpAGMAbwBtAG8AbwBuaWNvbW9vbgBpAGMAbwBtAG8AbwBuAFIAZQBnAHUAbABhAHIAaQBjAG8AbQBvAG8AbgBHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4AAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") format("woff"); +} + + + +.table-responsive::-webkit-scrollbar { + -webkit-appearance: none; +} + +.table-responsive::-webkit-scrollbar:vertical { + width: 12px; +} + +.table-responsive::-webkit-scrollbar:horizontal { + height: 12px; +} + +.table-responsive::-webkit-scrollbar-thumb { + background-color: rgba(0, 0, 0, .5); + border-radius: 10px; + border: 2px solid #ffffff; +} + +.table-responsive::-webkit-scrollbar-track { + border-radius: 10px; + background-color: #ffffff; +} + +.container { + max-width: 2000px !important +} + +.editor-tag { + cursor: text; + font-size: 16px; + padding: 10px 0px 10px 10px; + border-radius: 5px; + background: white; + //border: 1px #cccccc solid; + + & .tag-item { + line-height: 20px; + border-radius: 14px; + height: 20px; + font-size: 14px; + display: inline-block; + background: greenyellow; + padding-left: 5px; + + .remove-tag { + padding-right: 5px; + cursor: pointer; + } + } + + & .tag-item:not(:first-child) { + margin-left: 5px; + } + + & input { + margin: 0; + padding-left: 5px; + border: none; + outline: none; + border-radius: 5px; + } +} diff --git a/src/scss/core/_animate.scss b/src/scss/core/_animate.scss new file mode 100644 index 0000000..c0a244b --- /dev/null +++ b/src/scss/core/_animate.scss @@ -0,0 +1,27 @@ +// scss-lint:disable all +.animated { + animation-duration: 1s; + // animation-fill-mode: both; +} + +.animated.infinite { + animation-iteration-count: infinite; +} + +.animated.hinge { + animation-duration: 2s; +} + +@keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +.fadeIn { + animation-name: fadeIn; +} diff --git a/src/scss/core/_aside.scss b/src/scss/core/_aside.scss new file mode 100644 index 0000000..fc71e42 --- /dev/null +++ b/src/scss/core/_aside.scss @@ -0,0 +1,64 @@ +.aside-menu { + z-index: $zindex-sticky - 1; + width: $aside-menu-width; + color: $aside-menu-color; + background: $aside-menu-bg; + @include borders($aside-menu-borders); + + .nav-tabs { + border-color: $border-color; + .nav-link { + padding: $aside-menu-nav-padding-y $aside-menu-nav-padding-x; + color: $body-color; + border-top: 0; + &.active { + color: theme-color("primary"); + border-right-color: $border-color; + border-left-color: $border-color; + } + } + .nav-item:first-child { + .nav-link { + border-left: 0; + } + } + } + + .tab-content { + position: relative; + overflow-x: hidden; + overflow-y: auto; + border: 0; + border-top: 1px solid $border-color; + -ms-overflow-style: -ms-autohiding-scrollbar; + + &::-webkit-scrollbar { + width: 10px; + margin-left: -10px; + -webkit-appearance: none; + } + + // &::-webkit-scrollbar-button { } + + &::-webkit-scrollbar-track { + background-color: lighten($aside-menu-bg, 5%); + border-right: 1px solid darken($aside-menu-bg, 5%); + border-left: 1px solid darken($aside-menu-bg, 5%); + } + + // &::-webkit-scrollbar-track-piece { } + + &::-webkit-scrollbar-thumb { + height: 50px; + background-color: darken($aside-menu-bg, 10%); + background-clip: content-box; + border-color: transparent; + border-style: solid; + border-width: 1px 2px; + } + + .tab-pane { + padding: 0; + } + } +} diff --git a/src/scss/core/_avatars.scss b/src/scss/core/_avatars.scss new file mode 100644 index 0000000..623016e --- /dev/null +++ b/src/scss/core/_avatars.scss @@ -0,0 +1,51 @@ +.img-avatar { + border-radius: 50em; +} + +.avatar { + $width: 36px; + $status-width: 10px; + @include avatar($width,$status-width); +} + +.avatar.avatar-xs { + $width: 20px; + $status-width: 8px; + @include avatar($width,$status-width); +} + +.avatar.avatar-sm { + $width: 24px; + $status-width: 8px; + @include avatar($width,$status-width); +} + +.avatar.avatar-lg { + $width: 72px; + $status-width: 12px; + @include avatar($width,$status-width); +} + +.avatars-stack { + .avatar.avatar-xs { + margin-right: -10px; + } + + // .avatar.avatar-sm { + // + // } + + .avatar { + margin-right: -15px; + transition: margin-left $layout-transition-speed, margin-right $layout-transition-speed; + + &:hover { + margin-right: 0 !important; + } + } + + // .avatar.avatar-lg { + // + // } + +} diff --git a/src/scss/core/_badge.scss b/src/scss/core/_badge.scss new file mode 100644 index 0000000..3104885 --- /dev/null +++ b/src/scss/core/_badge.scss @@ -0,0 +1,3 @@ +.badge-pill { + border-radius: $badge-pill-border-radius; +} diff --git a/src/scss/core/_breadcrumb-menu.scss b/src/scss/core/_breadcrumb-menu.scss new file mode 100644 index 0000000..4d8473a --- /dev/null +++ b/src/scss/core/_breadcrumb-menu.scss @@ -0,0 +1,37 @@ +.breadcrumb-menu { + margin-left: auto; + + &::before { + display: none; + } + + .btn-group { + vertical-align: top; + } + + .btn { + padding: 0 $input-btn-padding-x; + color: $text-muted; + vertical-align: top; + border: 0; + font-weight: bold; + + &:hover, + &.active { + color: $body-color; + background: transparent; + } + } + + .open { + .btn { + color: $body-color; + background: transparent; + } + } + + .dropdown-menu { + min-width: 180px; + line-height: $line-height-base; + } +} diff --git a/src/scss/core/_breadcrumb.scss b/src/scss/core/_breadcrumb.scss new file mode 100644 index 0000000..d8a003d --- /dev/null +++ b/src/scss/core/_breadcrumb.scss @@ -0,0 +1,4 @@ +.breadcrumb { + position: relative; + @include borders($breadcrumb-borders); +} diff --git a/src/scss/core/_buttons.scss b/src/scss/core/_buttons.scss new file mode 100644 index 0000000..12126d3 --- /dev/null +++ b/src/scss/core/_buttons.scss @@ -0,0 +1,568 @@ +button { + cursor: pointer; + font-family: "微軟正黑體"; +} + +.btn { + .badge { + position: absolute; + top: 2px; + right: 6px; + font-size: 9px; + } +} + +.btn-transparent { + color: #fff; + background-color: transparent; + border-color: transparent; +} + +.btn { + [class^="icon-"], + [class*=" icon-"] { + display: inline-block; + margin-top: -2px; + vertical-align: middle; + } +} + +.btn-facebook, +.btn-twitter, +.btn-linkedin, +.btn-flickr, +.btn-tumblr, +.btn-xing, +.btn-github, +.btn-html5, +.btn-openid, +.btn-stack-overflow, +.btn-youtube, +.btn-css3, +.btn-dribbble, +.btn-google-plus, +.btn-instagram, +.btn-pinterest, +.btn-vk, +.btn-yahoo, +.btn-behance, +.btn-dropbox, +.btn-reddit, +.btn-spotify, +.btn-vine, +.btn-foursquare, +.btn-vimeo { + position: relative; + overflow: hidden; + color: #fff !important; + text-align: center; + + &::before { + position: absolute; + top: 0; + left: 0; + display: block; + font-family: "FontAwesome"; + font-style: normal; + font-weight: normal; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + } + + &:hover { + color: #fff; + } + + &.icon { + span { + display: none; + } + } + + &.text { + &::before { + display: none; + } + + span { + margin-left: 0 !important; + } + } + @include button-social-size( + $input-btn-padding-y, + $input-btn-padding-x, + $font-size-base, + $line-height-base, + $btn-border-radius + ); + + &.btn-lg { + @include button-social-size( + $input-btn-padding-y-lg, + $input-btn-padding-x-lg, + $font-size-lg, + $line-height-lg, + $btn-border-radius-lg + ); + } + + &.btn-sm { + @include button-social-size( + $input-btn-padding-y-sm, + $input-btn-padding-x-sm, + $font-size-sm, + $line-height-sm, + $btn-border-radius-sm + ); + } +} + +.btn-facebook { + $color: $facebook; + + background: $color; + &::before { + content: "\f09a"; + background: darken($color, 5%); + } + + &:hover { + background: darken($color, 5%); + + &::before { + background: darken($color, 10%); + } + } +} + +.btn-twitter { + $color: $twitter; + + background: $color; + &::before { + content: "\f099"; + background: darken($color, 5%); + } + + &:hover { + background: darken($color, 5%); + + &::before { + background: darken($color, 10%); + } + } +} + +.btn-linkedin { + $color: $linkedin; + + background: $color; + &::before { + content: "\f0e1"; + background: darken($color, 5%); + } + + &:hover { + background: darken($color, 5%); + + &::before { + background: darken($color, 10%); + } + } +} + +.btn-flickr { + $color: $flickr; + + background: $color; + &::before { + content: "\f16e"; + background: darken($color, 5%); + } + + &:hover { + background: darken($color, 5%); + + &::before { + background: darken($color, 10%); + } + } +} + +.btn-tumblr { + $color: $tumblr; + + background: $color; + &::before { + content: "\f173"; + background: darken($color, 5%); + } + + &:hover { + background: darken($color, 5%); + + &::before { + background: darken($color, 10%); + } + } +} + +.btn-xing { + $color: $xing; + + background: $color; + &::before { + content: "\f168"; + background: darken($color, 5%); + } + + &:hover { + background: darken($color, 5%); + + &::before { + background: darken($color, 10%); + } + } +} + +.btn-github { + $color: $github; + + background: $color; + &::before { + content: "\f09b"; + background: darken($color, 5%); + } + + &:hover { + background: darken($color, 5%); + + &::before { + background: darken($color, 10%); + } + } +} + +.btn-html5 { + $color: $html5; + + background: $color; + &::before { + content: "\f13b"; + background: darken($color, 5%); + } + + &:hover { + background: darken($color, 5%); + + &::before { + background: darken($color, 10%); + } + } +} + +.btn-openid { + $color: $openid; + + background: $color; + &::before { + content: "\f19b"; + background: darken($color, 5%); + } + + &:hover { + background: darken($color, 5%); + + &::before { + background: darken($color, 10%); + } + } +} + +.btn-stack-overflow { + $color: $stack-overflow; + + background: $color; + &::before { + content: "\f16c"; + background: darken($color, 5%); + } + + &:hover { + background: darken($color, 5%); + + &::before { + background: darken($color, 10%); + } + } +} + +.btn-css3 { + $color: $css3; + + background: $color; + &::before { + content: "\f13c"; + background: darken($color, 5%); + } + + &:hover { + background: darken($color, 5%); + + &::before { + background: darken($color, 10%); + } + } +} + +.btn-youtube { + $color: $youtube; + + background: $color; + &::before { + content: "\f167"; + background: darken($color, 5%); + } + + &:hover { + background: darken($color, 5%); + + &::before { + background: darken($color, 10%); + } + } +} + +.btn-dribbble { + $color: $dribbble; + + background: $color; + &::before { + content: "\f17d"; + background: darken($color, 5%); + } + + &:hover { + background: darken($color, 5%); + + &::before { + background: darken($color, 10%); + } + } +} + +.btn-google-plus { + $color: $google-plus; + + background: $color; + &::before { + content: "\f0d5"; + background: darken($color, 5%); + } + + &:hover { + background: darken($color, 5%); + + &::before { + background: darken($color, 10%); + } + } +} + +.btn-instagram { + $color: $instagram; + + background: $color; + &::before { + content: "\f16d"; + background: darken($color, 5%); + } + + &:hover { + background: darken($color, 5%); + + &::before { + background: darken($color, 10%); + } + } +} + +.btn-pinterest { + $color: $pinterest; + + background: $color; + &::before { + content: "\f0d2"; + background: darken($color, 5%); + } + + &:hover { + background: darken($color, 5%); + + &::before { + background: darken($color, 10%); + } + } +} + +.btn-vk { + $color: $vk; + + background: $color; + &::before { + content: "\f189"; + background: darken($color, 5%); + } + + &:hover { + background: darken($color, 5%); + + &::before { + background: darken($color, 10%); + } + } +} + +.btn-yahoo { + $color: $yahoo; + + background: $color; + &::before { + content: "\f19e"; + background: darken($color, 5%); + } + + &:hover { + background: darken($color, 5%); + + &::before { + background: darken($color, 10%); + } + } +} + +.btn-behance { + $color: $behance; + + background: $color; + &::before { + content: "\f1b4"; + background: darken($color, 5%); + } + + &:hover { + background: darken($color, 5%); + + &::before { + background: darken($color, 10%); + } + } +} + +.btn-dropbox { + $color: $dropbox; + + background: $color; + &::before { + content: "\f16b"; + background: darken($color, 5%); + } + + &:hover { + background: darken($color, 5%); + + &::before { + background: darken($color, 10%); + } + } +} + +.btn-reddit { + $color: $reddit; + + background: $color; + &::before { + content: "\f1a1"; + background: darken($color, 5%); + } + + &:hover { + background: darken($color, 5%); + + &::before { + background: darken($color, 10%); + } + } +} + +.btn-spotify { + $color: $spotify; + + background: $color; + &::before { + content: "\f1bc"; + background: darken($color, 5%); + } + + &:hover { + background: darken($color, 5%); + + &::before { + background: darken($color, 10%); + } + } +} + +.btn-vine { + $color: $vine; + + background: $color; + &::before { + content: "\f1ca"; + background: darken($color, 5%); + } + + &:hover { + background: darken($color, 5%); + + &::before { + background: darken($color, 10%); + } + } +} + +.btn-foursquare { + $color: $foursquare; + + background: $color; + &::before { + content: "\f180"; + background: darken($color, 5%); + } + + &:hover { + background: darken($color, 5%); + + &::before { + background: darken($color, 10%); + } + } +} + +.btn-vimeo { + $color: $vimeo; + + background: $color; + &::before { + content: "\f194"; + background: darken($color, 5%); + } + + &:hover { + background: darken($color, 5%); + + &::before { + background: darken($color, 10%); + } + } +} diff --git a/src/scss/core/_callout.scss b/src/scss/core/_callout.scss new file mode 100644 index 0000000..b98ebac --- /dev/null +++ b/src/scss/core/_callout.scss @@ -0,0 +1,55 @@ +.callout { + position: relative; + padding: 0 $spacer; + margin: $spacer 0; + border: 0 solid $border-color; + border-left-width: .25rem; + + @if $enable-rounded { + border-radius: .25rem; + } + + .chart-wrapper { + position: absolute; + top: 10px; + left: 50%; + float: right; + width: 50%; + } +} + +.callout-bordered { + border: 1px solid $border-color; + border-left-width: .25rem; +} +.callout code { + border-radius: .25rem; +} +.callout h4 { + margin-top: 0; + margin-bottom: .25rem; +} +.callout p:last-child { + margin-bottom: 0; +} +.callout + .callout { + margin-top: - .25rem; +} + +.callout-default { + border-left-color: $text-muted; + + h4 { + color: $text-muted; + } +} + +@each $color, $value in $theme-colors { + .callout-#{$color} { + border-left-color: $value; + + h4 { + color: $value; + } + } +} diff --git a/src/scss/core/_card.scss b/src/scss/core/_card.scss new file mode 100644 index 0000000..8790e33 --- /dev/null +++ b/src/scss/core/_card.scss @@ -0,0 +1,193 @@ +.card { + margin-bottom: 1.5 * $spacer; + + // Cards with color accent + @each $color, $value in $theme-colors { + &.bg-#{$color} { + border-color: darken($value, 12.5%); + .card-header { + background-color: darken($value, 3%); + border-color: darken($value, 12.5%); + } + } + } +} + +.text-white .text-muted { + color: rgba(255, 255, 255, 0.6) !important; +} + +.card-header { + .icon-bg { + display: inline-body; + padding: $card-spacer-y $card-spacer-x !important; + margin-top: -$card-spacer-y; + margin-right: $card-spacer-x; + margin-bottom: -$card-spacer-y; + margin-left: -$card-spacer-x; + line-height: inherit; + color: $card-icon-color; + vertical-align: bottom; + background: $card-icon-bg; + border-right: $card-border-width solid $card-border-color; + } + + .nav.nav-tabs { + margin-top: -$card-spacer-y; + margin-bottom: -$card-spacer-y; + border-bottom: 0; + + .nav-item { + border-top: 0; + } + + .nav-link { + padding: $card-spacer-y $card-spacer-x / 2; + color: $text-muted; + border-top: 0; + + &.active { + color: $body-color; + background: #fff; + } + } + } + + &.card-header-inverse { + color: #fff; + } + + .btn { + margin-top: -$input-btn-padding-y; + } + .btn-sm { + margin-top: -$input-btn-padding-y-sm; + } + .btn-lg { + margin-top: -$input-btn-padding-y-lg; + } +} +// +.card-footer { + ul { + display: table; + width: 100%; + padding: 0; + margin: 0; + table-layout: fixed; + + li { + display: table-cell; + padding: 0 $card-spacer-x; + text-align: center; + } + } +} + +[class*="card-outline-"] { + .card-body { + background: #fff !important; + } + + &.card-outline-top { + border-top-width: 2px; + border-right-color: $border-color; + border-bottom-color: $border-color; + border-left-color: $border-color; + } +} + +// Cards with color accent +@each $color, $value in $theme-colors { + .card-accent-#{$color} { + @include card-accent-variant($value); + } +} + +// Card Actions +.card-header { + > i { + margin-right: $spacer / 2; + } + .card-actions { + position: absolute; + top: 0; + right: 0; + //height: inherit; + + a, + button { + display: block; + float: left; + width: 50px; + padding: $card-spacer-y 0; + margin: 0 !important; + color: $body-color; + text-align: center; + background: transparent; + border: 0; + border-left: 1px solid $border-color; + box-shadow: 0; + + &:hover { + text-decoration: none; + } + + [class^="icon-"], + [class*=" icon-"] { + display: inline-body; + vertical-align: middle; + } + + i { + display: inline-body; + transition: 0.4s; + } + + .r180 { + transform: rotate(180deg); + } + } + + .input-group { + width: 230px; + margin: 6px; + + .input-group-addon { + background: #fff; + } + + input { + border-left: 0; + } + } + } +} + +.card-full { + margin-top: -$spacer; + margin-right: -$grid-gutter-width / 2; + margin-left: -$grid-gutter-width / 2; + border: 0; + border-bottom: $card-border-width solid $border-color; +} + +@include media-breakpoint-up(sm) { + .card-columns { + &.cols-2 { + column-count: 2; + } + } +} + +.card { + &.drag, + .drag { + cursor: move; + } +} + +.card-placeholder { + background: rgba(0, 0, 0, 0.025); + border: 1px dashed $gray-300; +} diff --git a/src/scss/core/_charts.scss b/src/scss/core/_charts.scss new file mode 100644 index 0000000..e7ff702 --- /dev/null +++ b/src/scss/core/_charts.scss @@ -0,0 +1,10 @@ +.chart-wrapper { + canvas { + width: 100% !important; + // height:85vh !important; + } +} +// scss-lint:disable QualifyingElement +base-chart.chart { + display: block !important; +} diff --git a/src/scss/core/_dropdown-menu-right.scss b/src/scss/core/_dropdown-menu-right.scss new file mode 100644 index 0000000..4f19546 --- /dev/null +++ b/src/scss/core/_dropdown-menu-right.scss @@ -0,0 +1,8 @@ +// Temp fix for reactstrap +.app-header { + .navbar-nav { + .dropdown-menu-right { + right: auto; + } + } +} diff --git a/src/scss/core/_dropdown.scss b/src/scss/core/_dropdown.scss new file mode 100644 index 0000000..564e4df --- /dev/null +++ b/src/scss/core/_dropdown.scss @@ -0,0 +1,69 @@ +// Links, buttons, and more within the dropdown menu +.dropdown-item { + position: relative; + padding: 10px 20px; + border-bottom: 1px solid $dropdown-border-color; + + &:last-child { + border-bottom: 0; + } + + i { + display: inline-block; + width: 20px; + margin-right: 10px; + margin-left: -10px; + color: $dropdown-border-color; + text-align: center; + } + + .badge { + position: absolute; + right: 10px; + margin-top: 2px; + } +} + +// Dropdown section headers +.dropdown-header { + padding: 8px 20px; + background: $dropdown-divider-bg; + border-bottom: 1px solid $dropdown-border-color; + + .btn { + margin-top: -7px; + color: $dropdown-header-color; + + &:hover { + color: $body-color; + } + + &.pull-right { + margin-right: -20px; + } + } +} + +.dropdown-menu-lg { + width: 250px; +} +.app-header { + .navbar-nav { + .dropdown-menu { + position: absolute; + } + // Menu positioning + // + // Add extra class to `.dropdown-menu` to flip the alignment of the dropdown + // menu with the parent. + .dropdown-menu-right { + right: 0; + left: auto; // Reset the default from `.dropdown-menu` + } + + .dropdown-menu-left { + right: auto; + left: 0; + } + } +} diff --git a/src/scss/core/_footer.scss b/src/scss/core/_footer.scss new file mode 100644 index 0000000..e01595a --- /dev/null +++ b/src/scss/core/_footer.scss @@ -0,0 +1,9 @@ +.app-footer { + display: flex; + flex-wrap: wrap; + align-items: center; + padding: 0 $spacer; + color: $footer-color; + background: $footer-bg; + @include borders($footer-borders); +} diff --git a/src/scss/core/_grid.scss b/src/scss/core/_grid.scss new file mode 100644 index 0000000..0d0963c --- /dev/null +++ b/src/scss/core/_grid.scss @@ -0,0 +1,15 @@ +.row.row-equal { + padding-right: ($grid-gutter-width / 4); + padding-left: ($grid-gutter-width / 4); + margin-right: ($grid-gutter-width / -2); + margin-left: ($grid-gutter-width / -2); + + [class*="col-"] { + padding-right: ($grid-gutter-width / 4); + padding-left: ($grid-gutter-width / 4); + } +} + +.main .container-fluid { + padding: 0 30px; +} diff --git a/src/scss/core/_input-group.scss b/src/scss/core/_input-group.scss new file mode 100644 index 0000000..23b2512 --- /dev/null +++ b/src/scss/core/_input-group.scss @@ -0,0 +1,6 @@ +.input-group-addon, +.input-group-btn { + min-width: 40px; + white-space: nowrap; + vertical-align: middle; // Match the inputs +} diff --git a/src/scss/core/_layout.scss b/src/scss/core/_layout.scss new file mode 100644 index 0000000..d1b21c5 --- /dev/null +++ b/src/scss/core/_layout.scss @@ -0,0 +1,403 @@ +// IE10&11 Flexbox fix +@media all and (-ms-high-contrast: none) { + html { + display: flex; + flex-direction: column; + } +} + +// app-dashboard and app-root are Angular2+ selectors. You can add here your own selectors if you need. +.app, +app-dashboard, +app-root { + display: flex; + flex-direction: column; + min-height: 100vh; +} + +.app-header { + flex: 0 0 $navbar-height; +} + +.app-footer { + flex: 0 0 $footer-height; +} + +.app-body { + display: flex; + flex-direction: row; + flex-grow: 1; + overflow-x: hidden; + + .main { + flex: 1; + min-width: 0; + } + + .sidebar { + // $sidebar-width is the width of the columns + flex: 0 0 $sidebar-width; + // put the nav on the left + order: -1; + } + + .aside-menu { + // $aside-menu-width is the width of the columns + flex: 0 0 $aside-menu-width; + } +} + +// +// header +// +.header-fixed { + .app-header { + position: fixed; + z-index: $zindex-sticky; + width: 100%; + } + .app-body { + margin-top: $navbar-height; + } +} + +// +// Sidebar +// +.sidebar-hidden { + .sidebar { + margin-left: -$sidebar-width; + } +} + +.sidebar-fixed { + .sidebar { + position: fixed; + z-index: $zindex-sticky - 1; + width: $sidebar-width; + height: calc(100vh - #{$navbar-height}); + // margin-top: - $navbar-height; + + // .sidebar-nav { + // height: calc(100vh - #{$navbar-height}); + // } + } + + .main, + .app-footer { + margin-left: $sidebar-width; + } + + &.sidebar-hidden { + .main, + .app-footer { + margin-left: 0; + } + } +} + +.sidebar-off-canvas { + .sidebar { + position: fixed; + z-index: $zindex-sticky - 1; + height: calc(100vh - #{$navbar-height}); + } +} + +@include media-breakpoint-up(lg) { + .sidebar-compact { + .sidebar { + flex: 0 0 $sidebar-compact-width; + } + + &.sidebar-hidden { + .sidebar { + margin-left: -$sidebar-compact-width; + } + } + + &.sidebar-fixed { + .main, + .app-footer { + margin-left: $sidebar-compact-width; + } + + .sidebar { + width: $sidebar-compact-width; + } + + &.sidebar-hidden { + .main, + .app-footer { + margin-left: 0; + } + } + } + } + + .sidebar-minimized { + .sidebar { + flex: 0 0 $sidebar-minimized-width; + } + + &.sidebar-hidden { + .sidebar { + margin-left: -$sidebar-minimized-width; + } + } + + &.sidebar-fixed { + .main, + .app-footer { + margin-left: $sidebar-minimized-width; + } + + .sidebar { + width: $sidebar-minimized-width; + } + + &.sidebar-hidden { + .main, + .app-footer { + margin-left: 0; + } + } + } + } +} + +// +// Aside Menu +// +.aside-menu-hidden { + .aside-menu { + margin-right: -$aside-menu-width; + } +} + +.aside-menu-fixed { + .aside-menu { + position: fixed; + right: 0; + height: 100%; + + .tab-content { + height: calc( + 100vh - #{$aside-menu-nav-padding-y * 2 + $font-size-base} - #{$navbar-height} + ); + } + } + + .main, + .app-footer { + margin-right: $aside-menu-width; + } + + &.aside-menu-hidden { + .main, + .app-footer { + margin-right: 0; + } + } +} + +.aside-menu-off-canvas { + .aside-menu { + position: fixed; + right: 0; + z-index: $zindex-sticky - 1; + height: 100%; + + .tab-content { + height: calc( + 100vh - #{$aside-menu-nav-padding-y * 2 + $font-size-base} - #{$navbar-height} + ); + } + } +} + +// +// Breadcrumb +// +.breadcrumb-fixed { + .main { + $breadcrumb-height: 2 * $breadcrumb-padding-y + $font-size-base + 1.5 * + $spacer; + padding-top: $breadcrumb-height; + } + + .breadcrumb { + position: fixed; + top: $navbar-height; + right: 0; + left: 0; + z-index: $zindex-sticky - 2; + } + + // if sidebar + main + aside + .main:nth-child(2) { + .breadcrumb { + right: $aside-menu-width; + left: $sidebar-width; + } + } + + // if sidebar + main + .main:first-child { + .breadcrumb { + right: $aside-menu-width; + left: 0; + } + } + + // if main + aside + .main:last-child { + .breadcrumb { + right: 0; + } + } + + &.sidebar-minimized { + .main .breadcrumb { + left: $sidebar-minimized-width; + } + } + + &.sidebar-hidden, + &.sidebar-off-canvas { + .main .breadcrumb { + left: 0; + } + } + + &.aside-menu-hidden, + &.aside-menu-off-canvas { + .main .breadcrumb { + right: 0; + } + } +} + +// +// Footer +// +.footer-fixed { + .app-footer { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: $zindex-sticky; + height: $footer-height; + } + + .app-body { + margin-bottom: $footer-height; + } +} + +// +// Animations +// +.app-header, +.app-footer, +.sidebar, +.main, +.aside-menu { + transition: margin-left $layout-transition-speed, + margin-right $layout-transition-speed, width $layout-transition-speed, + flex $layout-transition-speed; +} +.sidebar-nav { + transition: width $layout-transition-speed; +} +.breadcrumb { + transition: left $layout-transition-speed, right $layout-transition-speed, + width $layout-transition-speed; +} + +// +// Mobile layout +// + +@include media-breakpoint-down(md) { + .app-header.navbar { + position: fixed !important; + z-index: $zindex-sticky; + width: 100%; + text-align: center; + background-color: $navbar-brand-bg; + @include borders($navbar-brand-border); + + .navbar-toggler { + @if (lightness($navbar-brand-bg) > 40) { + color: $navbar-color; + } @else { + color: #fff; + } + } + + .navbar-brand { + position: absolute; + left: 50%; + margin-left: -($navbar-brand-width / 2); + } + } + + .app-body { + margin-top: $navbar-height; + } + + .breadcrumb-fixed { + .main:nth-child(2) .breadcrumb { + right: auto; + left: auto; + width: 100%; + } + } + + .sidebar { + position: fixed; + z-index: $zindex-sticky - 1; + width: $mobile-sidebar-width; + height: calc(100vh - #{$navbar-height}); + margin-left: -$mobile-sidebar-width; + + .sidebar-nav, + .nav { + width: $mobile-sidebar-width; + min-height: calc(100vh - #{$navbar-height}); + } + + .sidebar-minimizer { + display: none; + } + } + + .main, + .app-footer { + margin-left: 0 !important; + } + + // .aside-menu { + // margin-right: - $aside-menu-width; + // } + + .sidebar-hidden { + .sidebar { + margin-left: -$mobile-sidebar-width; + } + } + + .sidebar-mobile-show { + .sidebar { + width: $mobile-sidebar-width; + margin-left: 0; + } + + .main { + margin-right: -$mobile-sidebar-width !important; + margin-left: $mobile-sidebar-width !important; + } + } +} diff --git a/src/scss/core/_loading.scss b/src/scss/core/_loading.scss new file mode 100644 index 0000000..3e409fb --- /dev/null +++ b/src/scss/core/_loading.scss @@ -0,0 +1,128 @@ +// Angular Version +// Make clicks pass-through +// scss-lint:disable all +#loading-bar, +#loading-bar-spinner { + -webkit-pointer-events: none; + pointer-events: none; + -moz-transition: 350ms linear all; + -o-transition: 350ms linear all; + -webkit-transition: 350ms linear all; + transition: 350ms linear all; +} + +#loading-bar.ng-enter, +#loading-bar.ng-leave.ng-leave-active, +#loading-bar-spinner.ng-enter, +#loading-bar-spinner.ng-leave.ng-leave-active { + opacity: 0; +} + +#loading-bar.ng-enter.ng-enter-active, +#loading-bar.ng-leave, +#loading-bar-spinner.ng-enter.ng-enter-active, +#loading-bar-spinner.ng-leave { + opacity: 1; +} + +#loading-bar .bar { + position: fixed; + top: 0; + left: 0; + z-index: 20002; + width: 100%; + height: 2px; + background: theme-color("primary"); + border-top-right-radius: 1px; + border-bottom-right-radius: 1px; + -moz-transition: width 350ms; + -o-transition: width 350ms; + -webkit-transition: width 350ms; + transition: width 350ms; +} + +// Fancy blur effect +#loading-bar .peg { + position: absolute; + top: 0; + right: 0; + width: 70px; + height: 2px; + -moz-border-radius: 100%; + -webkit-border-radius: 100%; + border-radius: 100%; + -moz-box-shadow: #29d 1px 0 6px 1px; + -ms-box-shadow: #29d 1px 0 6px 1px; + -webkit-box-shadow: #29d 1px 0 6px 1px; + box-shadow: #29d 1px 0 6px 1px; + opacity: .45; +} + +#loading-bar-spinner { + position: fixed; + top: 10px; + left: 10px; + z-index: 10002; + display: block; +} + +#loading-bar-spinner .spinner-icon { + width: 14px; + height: 14px; + + border: solid 2px transparent; + border-top-color: #29d; + border-left-color: #29d; + border-radius: 50%; + + -moz-animation: loading-bar-spinner 400ms linear infinite; + -ms-animation: loading-bar-spinner 400ms linear infinite; + -o-animation: loading-bar-spinner 400ms linear infinite; + -webkit-animation: loading-bar-spinner 400ms linear infinite; + animation: loading-bar-spinner 400ms linear infinite; +} + +@-webkit-keyframes loading-bar-spinner { + 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } + 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } +} +@-moz-keyframes loading-bar-spinner { + 0% { -moz-transform: rotate(0deg); transform: rotate(0deg); } + 100% { -moz-transform: rotate(360deg); transform: rotate(360deg); } +} +@-o-keyframes loading-bar-spinner { + 0% { -o-transform: rotate(0deg); transform: rotate(0deg); } + 100% { -o-transform: rotate(360deg); transform: rotate(360deg); } +} +@-ms-keyframes loading-bar-spinner { + 0% { -ms-transform: rotate(0deg); transform: rotate(0deg); } + 100% { -ms-transform: rotate(360deg); transform: rotate(360deg); } +} +@keyframes loading-bar-spinner { + 0% { transform: rotate(0deg); transform: rotate(0deg); } + 100% { transform: rotate(360deg); transform: rotate(360deg); } +} + +//Ajax & Static Version +.pace { + -webkit-pointer-events: none; + pointer-events: none; + + -moz-user-select: none; + -webkit-user-select: none; + user-select: none; +} + +.pace-inactive { + display: none; +} + +.pace .pace-progress { + position: fixed; + top: 0; + right: 100%; + z-index: 2000; + width: 100%; + height: 2px; + background: theme-color("primary"); +} diff --git a/src/scss/core/_mixins.scss b/src/scss/core/_mixins.scss new file mode 100644 index 0000000..153f1d3 --- /dev/null +++ b/src/scss/core/_mixins.scss @@ -0,0 +1,116 @@ +@mixin button-social-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) { + padding: $padding-y $padding-x; + font-size: $font-size; + line-height: $line-height; + border: 0; + @include border-radius($border-radius); + + &::before { + width: ($padding-y * 2) + ($font-size * $line-height); + height: ($padding-y * 2) + ($font-size * $line-height); + padding: $padding-y 0; + font-size: $font-size; + line-height: $line-height; + @include border-radius($border-radius); + } + + span { + margin-left: ($padding-y * 2) + ($font-size * $line-height); + } + + &.icon { + width: ($padding-y * 2) + ($font-size * $line-height); + height: ($padding-y * 2) + ($font-size * $line-height); + } +} + +@mixin avatar($width, $status-width) { + position: relative; + display: inline-block; + width: $width; + + .img-avatar { + width: $width; + height: $width; + } + + .avatar-status { + position: absolute; + right: 0; + bottom: 0; + display: block; + width: $status-width; + height: $status-width; + border: 1px solid #fff; + border-radius: 50em; + } +} + +@mixin borders($borders) { + @each $border in $borders { + $direction: nth($border, 1); + @if $direction == "all" { + $size: map-get(map-get($borders, $direction), size); + $style: map-get(map-get($borders, $direction), style); + $color: map-get(map-get($borders, $direction), color); + border: $size $style $color; + } @else if $direction == "top" { + $size: map-get(map-get($borders, $direction), size); + $style: map-get(map-get($borders, $direction), style); + $color: map-get(map-get($borders, $direction), color); + border-top: $size $style $color; + } @else if $direction == "right" { + $size: map-get(map-get($borders, $direction), size); + $style: map-get(map-get($borders, $direction), style); + $color: map-get(map-get($borders, $direction), color); + border-right: $size $style $color; + } @else if $direction == "bottom" { + $size: map-get(map-get($borders, $direction), size); + $style: map-get(map-get($borders, $direction), style); + $color: map-get(map-get($borders, $direction), color); + border-bottom: $size $style $color; + } @else if $direction == "left" { + $size: map-get(map-get($borders, $direction), size); + $style: map-get(map-get($borders, $direction), style); + $color: map-get(map-get($borders, $direction), color); + border-left: $size $style $color; + } + } +} + +@mixin sidebar-width($borders, $width) { + $sidebar-width: $width; + + @each $border in $borders { + $direction: nth($border, 1); + @if $direction == "all" { + $size: map-get(map-get($borders, $direction), size); + $sidebar-width: ($sidebar-width - (2 * $size)); + } @else if $direction == "right" { + $size: map-get(map-get($borders, $direction), size); + $sidebar-width: $sidebar-width - $size; + } @else if $direction == "left" { + $size: map-get(map-get($borders, $direction), size); + $sidebar-width: $sidebar-width - $size; + } + width: $sidebar-width; + } +} + +@mixin bg-variant($parent, $color) { + #{$parent} { + @include border-radius($card-border-radius-inner $card-border-radius-inner $card-border-radius-inner $card-border-radius-inner); + color: #fff !important; + background-color: $color !important; + } + a#{$parent} { + @include hover-focus { + background-color: darken($color, 10%); + } + } +} + +@mixin card-accent-variant($color) { + border-top-width: 2px; + border-top-color: $color; +} diff --git a/src/scss/core/_mobile.scss b/src/scss/core/_mobile.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/scss/core/_modal.scss b/src/scss/core/_modal.scss new file mode 100644 index 0000000..1c44ddd --- /dev/null +++ b/src/scss/core/_modal.scss @@ -0,0 +1,13 @@ +@each $color, $value in $theme-colors { + .modal-#{$color} { + + .modal-content { + border-color: $value; + } + + .modal-header { + color: #fff; + background-color: $value; + } + } +} diff --git a/src/scss/core/_nav.scss b/src/scss/core/_nav.scss new file mode 100644 index 0000000..700885e --- /dev/null +++ b/src/scss/core/_nav.scss @@ -0,0 +1,34 @@ +.nav-tabs { + .nav-link { + color: $gray-600; + &.active { + color: $gray-800; + background: #fff; + border-color: $border-color; + border-bottom-color: #fff; + &:focus { + background: #fff; + border-color: $border-color; + border-bottom-color: #fff; + } + } + } +} + +.tab-content { + margin-top: -1px; + // background-color: rgba(0, 0, 0, 0.13); + // color: white; + background: #fff; + border: 1px solid $border-color; + .tab-pane { + padding: $spacer; + } +} + +.card-block { + .tab-content { + margin-top: 0; + border: 0; + } +} diff --git a/src/scss/core/_navbar.scss b/src/scss/core/_navbar.scss new file mode 100644 index 0000000..221ab12 --- /dev/null +++ b/src/scss/core/_navbar.scss @@ -0,0 +1,127 @@ +.app-header.navbar { + position: relative; + flex-direction: row; + height: $navbar-height; + padding: 0; + margin: 0; + background-color: $navbar-bg; + @include borders($navbar-border); + + .navbar-brand { + display: inline-block; + width: $navbar-brand-width; + height: $navbar-height; + padding: $navbar-padding-y $navbar-padding-x; + margin-right: 0; + background-color: $navbar-brand-bg; + background-image: $navbar-brand-logo; + background-repeat: no-repeat; + background-position: center center; + background-size: $navbar-brand-logo-size; + @include borders($navbar-brand-border); + } + + .navbar-toggler { + min-width: 50px; + padding: $navbar-toggler-padding-y 0; + + &:hover .navbar-toggler-icon { + background-image: $navbar-toggler-icon-hover; + } + } + + .navbar-toggler-icon { + height: 23px; + background-image: $navbar-toggler-icon; + } + + .navbar-nav { + flex-direction: row; + align-items: center; + } + + .nav-item { + position: relative; + min-width: 50px; + margin: 0 !important; + text-align: center; + + button { + margin: 0 auto; + } + + .nav-link { + padding-top: 0; + padding-bottom: 0; + background: 0; + border: 0; + + .badge { + position: absolute; + top: 50%; + left: 50%; + margin-top: -16px; + margin-left: 0; + } + + > .img-avatar { + height: $navbar-height - 20px; + margin: 0 10px; + } + } + } + + .dropdown-menu { + padding-bottom: 0; + line-height: $line-height-base; + } + + .dropdown-item { + min-width: 180px; + } +} + +.navbar-brand { + color: $navbar-active-color; + + @include hover-focus { + color: $navbar-active-color; + } +} + +.navbar-nav { + .nav-link { + color: $navbar-color; + + @include hover-focus { + color: $navbar-hover-color; + } + } + + .open > .nav-link, + .active > .nav-link, + .nav-link.open, + .nav-link.active { + @include plain-hover-focus { + color: $navbar-active-color; + } + } +} + +.navbar-divider { + background-color: rgba(0,0,0,.075); +} + +@include media-breakpoint-up(lg) { + .brand-minimized { + .app-header.navbar { + .navbar-brand { + width: $navbar-brand-minimized-width; + background-color: $navbar-brand-minimized-bg; + background-image: $navbar-brand-minimized-logo; + background-size: $navbar-brand-minimized-logo-size; + @include borders($navbar-brand-minimized-border); + } + } + } +} diff --git a/src/scss/core/_others.scss b/src/scss/core/_others.scss new file mode 100644 index 0000000..381baab --- /dev/null +++ b/src/scss/core/_others.scss @@ -0,0 +1,4 @@ +// scss-lint:disable QualifyingElement +hr.transparent { + border-top: 1px solid transparent; +} diff --git a/src/scss/core/_progress.scss b/src/scss/core/_progress.scss new file mode 100644 index 0000000..65f56dd --- /dev/null +++ b/src/scss/core/_progress.scss @@ -0,0 +1,15 @@ +.progress-xs { + height: 4px; +} + +.progress-sm { + height: 8px; +} + +// White progress bar +.progress-white { + background-color: rgba(255,255,255,.2) !important; + .progress-bar { + background-color: #fff; + } +} diff --git a/src/scss/core/_rtl.scss b/src/scss/core/_rtl.scss new file mode 100644 index 0000000..28db385 --- /dev/null +++ b/src/scss/core/_rtl.scss @@ -0,0 +1,281 @@ +// +// RTL Support +// +// scss-lint:disable NestingDepth, SelectorDepth +*[dir="rtl"] { + direction: rtl; + unicode-bidi: embed; + + ul { + -webkit-padding-start: 0; + } + + table tr th { + text-align: right; + } + + // Breadcrumb + + .breadcrumb-item { + float: right; + } + + .breadcrumb-menu { + right: auto; + left: $breadcrumb-padding-x; + } + + // Dropdown + .dropdown-item { + text-align: right; + + i { + margin-right: -10px; + margin-left: 10px; + } + + .badge { + right: auto; + left: 10px; + } + } + + // + // Sidebar + // + .sidebar-hidden { + .sidebar { + margin-right: - $sidebar-width; + } + } + + .sidebar-fixed { + .main, .app-footer { + margin-right: $sidebar-width; + } + + &.sidebar-hidden { + .main, .app-footer { + margin-right: 0; + } + } + } + + .sidebar-minimized { + .sidebar { + flex: 0 0 $sidebar-minimized-width; + } + + &.sidebar-hidden { + .sidebar { + margin-right: - $sidebar-minimized-width; + margin-left: 0; + } + } + + &.sidebar-fixed { + .main, .app-footer { + margin-right: $sidebar-minimized-width; + } + + &.sidebar-hidden { + .main, .app-footer { + margin-left: 0; + } + } + } + } + + // + // Aside Menu + // + .aside-menu-hidden { + .aside-menu { + margin-right: 0; + margin-left: - $aside-menu-width; + } + } + + .aside-menu-fixed { + .aside-menu { + right: auto; + left: 0; + } + + .main, .app-footer { + //margin-right: 0; + margin-left: $aside-menu-width; + } + + &.aside-menu-hidden { + .main, .app-footer { + margin-left: 0; + } + } + } + + .aside-menu-off-canvas { + .aside-menu { + position: fixed; + right: 0; + z-index: $zindex-sticky - 1; + height: 100%; + + .tab-content { + height: calc(100vh - #{$aside-menu-nav-padding-y * 2 + $font-size-base} - #{$navbar-height}); + } + } + } + + // Sidebar Menu + .sidebar { + .sidebar-nav { + .nav { + .nav-item { + .nav-link { + direction: rtl; + i { + margin: 0 0 0 ($sidebar-nav-link-padding-x / 2); + } + .badge { + float: left; + margin-top: 2px; + // margin-left: 10px; + } + &.nav-dropdown-toggle { + &::before { + position: absolute; + right: auto !important; + left: $sidebar-nav-link-padding-x; + transform: rotate(180deg); + } + } + } + &.nav-dropdown { + &.open { + > .nav-link.nav-dropdown-toggle::before { + transform: rotate(270deg); + } + } + } + } + } + } + } + + .sidebar-minimized .sidebar { + .nav-link { + padding-right: 0; + i { + float: right; + padding: 0; + margin: 0; + } + .badge { + right: auto; + left: 15px; + } + } + .nav > .nav-dropdown { + + &:hover { + > .nav-dropdown-items { + right: $sidebar-minimized-width; + left: 0; + } + } + } + } + + // Horizontal bars + .horizontal-bars { + + li { + + .bars { + padding-right: 100px; + padding-left: 0; + + .progress:first-child { + margin-bottom: 2px; + } + } + } + + &.type-2 { + + li { + + i { + margin-right: 5px; + margin-left: $spacer; + } + + .value { + float: left; + font-weight: 600; + } + + .bars { + padding: 0; + } + } + } + } + + // Icon list + .icons-list { + + li { + position: relative; + height: 40px; + vertical-align: middle; + + i { + float: right; + } + + .desc { + margin-right: 50px; + margin-left: 0; + } + + .value { + right: auto; + left: 45px; + text-align: left; + + strong { + display: block; + margin-top: -3px; + } + } + + .actions { + right: auto; + left: 10px; + } + } + } + + // Callouts + .callout { + border: 0 solid $border-color; + border-right-width: .25rem; + + @each $color, $value in $theme-colors { + &.callout-#{$color} { + border-right-color: $value; + } + } + + .chart-wrapper { + left: 0; + float: left; + } + } + + .callout-default { + border-right-color: $text-muted; + } +} diff --git a/src/scss/core/_sidebar.scss b/src/scss/core/_sidebar.scss new file mode 100644 index 0000000..7a341f8 --- /dev/null +++ b/src/scss/core/_sidebar.scss @@ -0,0 +1,466 @@ +// scss-lint:disable NestingDepth, SelectorDepth +.sidebar { + display: flex; + flex-direction: column; + padding: $sidebar-padding; + color: $sidebar-color; + //sidebar側邊選單底色 + background-color: #064d73; + // background: $sidebar-bg; + @include borders($sidebar-borders); + + .sidebar-close { + position: absolute; + right: 0; + display: none; + padding: 0 $spacer; + font-size: 24px; + font-weight: 800; + line-height: $navbar-height; + color: $sidebar-color; + background: 0; + border: 0; + opacity: 0.8; + + &:hover { + opacity: 1; + } + } + + // Will be added soon + // .sidebar-brand { } + + .sidebar-header { + flex: 0 0 $sidebar-header-height; + padding: $sidebar-header-padding-y $sidebar-header-padding-x; + text-align: center; + background: $sidebar-header-bg; + } + + .sidebar-form .form-control { + color: $sidebar-form-color; + background: $sidebar-form-bg; + border: $sidebar-form-border; + + &::placeholder { + color: $sidebar-form-placeholder-color; + } + } + + .sidebar-nav { + position: relative; + flex: 1; + overflow-x: hidden; + overflow-y: auto; + -ms-overflow-style: -ms-autohiding-scrollbar; + @include sidebar-width($sidebar-borders, $sidebar-width); + + &::-webkit-scrollbar { + position: absolute; + width: 10px; + margin-left: -10px; + -webkit-appearance: none; + } + + &::-webkit-scrollbar-track { + background-color: lighten($sidebar-bg, 5%); + border-right: 1px solid darken($sidebar-bg, 5%); + border-left: 1px solid darken($sidebar-bg, 5%); + } + + &::-webkit-scrollbar-thumb { + height: 50px; + background-color: darken($sidebar-bg, 10%); + background-clip: content-box; + border-color: transparent; + border-style: solid; + border-width: 1px 2px; + } + } + + .nav { + @include sidebar-width($sidebar-borders, $sidebar-width); + flex-direction: column; + min-height: 100%; + } + + .nav-title { + padding: $sidebar-nav-title-padding-y $sidebar-nav-title-padding-x; + font-size: 11px; + font-weight: 600; + color: $sidebar-nav-title-color; + text-transform: uppercase; + } + + .nav-divider, + .divider { + height: 10px; + } + + .nav-item { + position: relative; + margin: 0; + transition: background 0.3s ease-in-out; + } + + .nav-dropdown-items { + max-height: 0; + padding: 0; + margin: 0; + overflow-y: hidden; + transition: max-height 0.3s ease-in-out; + + .nav-item { + padding: 0; + list-style: none; + } + } + + .nav-link { + display: block; + padding: $sidebar-nav-link-padding-y $sidebar-nav-link-padding-x; + // color: yellow; 首頁字顏色 + color: $sidebar-nav-link-color; + text-decoration: none; + // background: yellow; + background: $sidebar-nav-link-bg; + @include borders($sidebar-nav-link-borders); + @if $enable-sidebar-nav-rounded { + border-radius: $border-radius; + } + + i { + display: inline-block; + width: 20px; + margin: 0 ($sidebar-nav-link-padding-x / 2) 0 0; + font-size: 14px; + //sidebar側邊選單 icon顏色 + color: #fff; + // color: $sidebar-nav-link-icon-color; + text-align: center; + } + + .badge { + float: right; + margin-top: 2px; + } + + &.active { + //sidebar側邊選單點選之後字的顏色 + color: $sidebar-nav-link-active-color; + //sidebar側邊選單點選之後背景顏色 + background-color: #3b7089; + + // background: $sidebar-nav-link-active-bg; + @include borders($sidebar-nav-link-active-borders); + + i { + // color: yellow;sidebar側邊選單 icon顏色 + color: $sidebar-nav-link-active-icon-color; + } + } + + &:hover { + color: $sidebar-nav-link-hover-color; + background: $sidebar-nav-link-hover-bg; + @include borders($sidebar-nav-link-hover-borders); + + i { + color: $sidebar-nav-link-hover-icon-color; + } + + &.nav-dropdown-toggle::before { + background-image: $sidebar-nav-dropdown-indicator-hover; + } + } + + @each $color, $value in $theme-colors { + &.nav-link-#{$color} { + background: $value; + i { + color: rgba(255, 255, 255, 0.7); + } + &:hover { + background: darken($value, 5%) !important; + i { + color: #fff; + } + } + } + } + } + + // ex. Components + .nav-dropdown-toggle { + position: relative; + + &::before { + position: absolute; + top: 50%; + right: $sidebar-nav-link-padding-x; + display: block; + width: 8px; + height: 8px; + padding: 0; + margin-top: -4px; + content: ""; + background-image: $sidebar-nav-dropdown-indicator; + background-repeat: no-repeat; + background-position: center; + transition: transform 0.3s; + } + } + + // ex.