From ee624760843d6ac6f84db841c3d95d5a61fee36f Mon Sep 17 00:00:00 2001 From: Joe Van Boxtel <joe.vanboxtel@wisc.edu> Date: Fri, 9 Nov 2018 21:20:10 +0000 Subject: [PATCH] Roenroll 1223 sidenav --- .gitignore | 1 + angular.json | 2 +- package-lock.json | 1051 +++++++++++++---- package.json | 46 +- src/app/app.component.html | 2 +- src/app/app.component.spec.ts | 4 +- src/app/app.component.ts | 6 +- src/app/app.module.ts | 10 +- src/app/core/data.service.ts | 4 +- src/app/core/models/course.ts | 2 +- src/app/core/models/term.ts | 20 +- .../core/navigation/navigation.component.scss | 2 +- .../core/navigation/navigation.component.ts | 2 +- .../degree-planner.component.html | 88 +- .../degree-planner.component.spec.ts | 16 +- .../degree-planner.component.ts | 3 +- .../degree-planner/degree-planner.module.ts | 9 +- .../favorites-container.component.spec.ts | 32 +- .../favorites-container.component.ts | 12 +- .../course-item/course-item.component.spec.ts | 71 +- .../course-item/course-item.component.ts | 2 +- .../sidenav-menu-item.component.html | 2 +- .../sidenav-menu-item.component.scss | 2 +- .../sidenav-menu-item.component.spec.ts | 10 +- .../sidenav-menu-item.component.ts | 2 +- .../term-container.component.html | 2 +- .../term-container.component.spec.ts | 28 +- .../term-container.component.ts | 2 +- src/app/shared/shared.module.ts | 18 +- src/assets/sass/general.scss | 2 +- src/index.html | 4 +- src/tslint.json | 4 +- tsconfig.json | 6 +- 33 files changed, 1096 insertions(+), 371 deletions(-) diff --git a/.gitignore b/.gitignore index 408f9b7..d33346a 100644 --- a/.gitignore +++ b/.gitignore @@ -128,6 +128,7 @@ hs_err_pid* .idea_modules/ /node_modules/ /dist/ +/coverage/ # JIRA plugin atlassian-ide-plugin.xml diff --git a/angular.json b/angular.json index 5c81dd9..6849d22 100644 --- a/angular.json +++ b/angular.json @@ -7,7 +7,7 @@ "root": "", "sourceRoot": "src", "projectType": "application", - "prefix": "app", + "prefix": "cse", "schematics": {}, "architect": { "build": { diff --git a/package-lock.json b/package-lock.json index 7496305..292cf6f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,31 +5,31 @@ "requires": true, "dependencies": { "@angular-devkit/architect": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.10.2.tgz", - "integrity": "sha512-jMok3FvXpj1zfI7tPmrMYe9yyBP2qivaBGxJqKa0H5SdwJFdudD+KwQOwamBdqz68WfEfzwvS2YCqE67thak7g==", + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.10.5.tgz", + "integrity": "sha512-QMR09kIWD8YR9VgNQZXMGASV1UbAtygSdXokBj3njNtTif7xdb+bxo6VQBRqjpB8ZZGtUsE+LdJ4LeKafRnzRQ==", "dev": true, "requires": { - "@angular-devkit/core": "7.0.2", + "@angular-devkit/core": "7.0.5", "rxjs": "6.3.3" } }, "@angular-devkit/build-angular": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.10.2.tgz", - "integrity": "sha512-0bLcql8Hf0W9G4pgMFc5vhRIGPUjLreGt+NiJgGP2SaM8bhWYm2097tybS18hdDi2eVfALpzsSOUYCtAowh4Pw==", + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.10.5.tgz", + "integrity": "sha512-I32FrMnYO5XU33ifOwhefO0tVCD+xHcTcAIprv5MFbSl3sGXI/CVsh9DGjWfyHlUaMlLUOpHQ+VcgeFGTcCVpA==", "dev": true, "requires": { - "@angular-devkit/architect": "0.10.2", - "@angular-devkit/build-optimizer": "0.10.2", - "@angular-devkit/build-webpack": "0.10.2", - "@angular-devkit/core": "7.0.2", - "@ngtools/webpack": "7.0.2", + "@angular-devkit/architect": "0.10.5", + "@angular-devkit/build-optimizer": "0.10.5", + "@angular-devkit/build-webpack": "0.10.5", + "@angular-devkit/core": "7.0.5", + "@ngtools/webpack": "7.0.5", "ajv": "6.5.3", - "autoprefixer": "8.4.1", + "autoprefixer": "9.1.5", "circular-dependency-plugin": "5.0.2", "clean-css": "4.2.1", - "copy-webpack-plugin": "4.5.3", + "copy-webpack-plugin": "4.5.4", "file-loader": "2.0.0", "glob": "7.1.3", "istanbul": "0.4.5", @@ -37,7 +37,7 @@ "karma-source-map-support": "1.3.0", "less": "3.8.1", "less-loader": "4.1.0", - "license-webpack-plugin": "2.0.1", + "license-webpack-plugin": "2.0.2", "loader-utils": "1.1.0", "mini-css-extract-plugin": "0.4.3", "minimatch": "3.0.4", @@ -45,9 +45,9 @@ "opn": "5.3.0", "parse5": "4.0.0", "portfinder": "1.0.17", - "postcss": "6.0.23", - "postcss-import": "11.1.0", - "postcss-loader": "2.1.6", + "postcss": "7.0.5", + "postcss-import": "12.0.0", + "postcss-loader": "3.0.0", "raw-loader": "0.5.1", "rxjs": "6.3.3", "sass-loader": "7.1.0", @@ -92,14 +92,14 @@ } }, "@angular-devkit/build-optimizer": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.10.2.tgz", - "integrity": "sha512-vPX3VqpZ6Gu2cSDOAnMxqU/VwQ0isj1iI89DM3E8yJK2D+Sh82WEeGo9rpTEbGps9Y1VOddSRu8M3UXOlSEkdw==", + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.10.5.tgz", + "integrity": "sha512-jhiD/ct7ngzNjT0yNUTT4TUjRzH9ZXdMm3Z4wbTFtKhXfr3bZgvLGKEoq0pIGlnlWq7lrGb8Doue4xcbRKTgmw==", "dev": true, "requires": { "loader-utils": "1.1.0", "source-map": "0.5.6", - "typescript": "3.1.3", + "typescript": "3.1.6", "webpack-sources": "1.2.0" }, "dependencies": { @@ -112,20 +112,20 @@ } }, "@angular-devkit/build-webpack": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.10.2.tgz", - "integrity": "sha512-anJQdhDTCoqloMn28+xHDMottBwnPUzzvm996aEOE8ziEHesdTYTR1JU8LeL149+HPFnufqVVkkzn2+lfG0yOg==", + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.10.5.tgz", + "integrity": "sha512-RNhuz/1s6wGVau+dRcQAUbbrt1pexyW8nT/X+uzNd0r/zhOrAPj6ET51Xdkv2V6zaH8frXyPZK9JZL/JrDJsUA==", "dev": true, "requires": { - "@angular-devkit/architect": "0.10.2", - "@angular-devkit/core": "7.0.2", + "@angular-devkit/architect": "0.10.5", + "@angular-devkit/core": "7.0.5", "rxjs": "6.3.3" } }, "@angular-devkit/core": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.0.2.tgz", - "integrity": "sha512-liVqobArUfTvf0cZcjr3VI5tnHR+QjzfvC4HFBwIArls6/RxIATqd9GE9mFMWpy17xgVq8N7WmD6bymv1trbfA==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.0.5.tgz", + "integrity": "sha512-QaORf9NCnwlHEuMs45Vb/KBf5eO2m+hIdNdIK0MnTaK9SrvhQhg0AFjo2KCPtOjI9eCcvsDz/O7W28CHJrG1iA==", "dev": true, "requires": { "ajv": "6.5.3", @@ -144,27 +144,27 @@ } }, "@angular-devkit/schematics": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.0.2.tgz", - "integrity": "sha512-b+ex7La9ZFxdh1JyuTvjhPKHsyCcXpGG2MQ43QQm0xbR1IigzVv5N2eyvm02rvQK+rY36+rG+FvO+korUeoLhw==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.0.5.tgz", + "integrity": "sha512-mWtPfBtObXXw5IWnMuOXBLn/Bv2lPxdmSqrCX9chTmxLXlFuv5e6HkzJfuF4BxjRUMaA+OW1qhnsHRJSI+p6sQ==", "dev": true, "requires": { - "@angular-devkit/core": "7.0.2", + "@angular-devkit/core": "7.0.5", "rxjs": "6.3.3" } }, "@angular/animations": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-7.0.0.tgz", - "integrity": "sha512-IYdryQXdYfPvhJpExLSAr0o9rlUeyVS++a6h/sjqN1dkUt/yJBHLRreuHx8Udvlj2nH70raHJgevk8FwhAkTdA==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-7.0.3.tgz", + "integrity": "sha512-jCRHlt+ghfSnP5a8HKr6R/Adc5Cq7i/mcYsn3V6M2QBpGFCVmy0ZWZa66QOhRaqler8u8EGi1PdoCCoGAZc4OA==", "requires": { "tslib": "^1.9.0" } }, "@angular/cdk": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-7.0.1.tgz", - "integrity": "sha512-WCIz2kbNMrEXkGxbHfBMRvjH7sxzp+nBR2gEhBvUEm9Ap/wBIJaTnHOF743D2fEhtW3IgpaYsTDTKiVryOFcQg==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-7.0.3.tgz", + "integrity": "sha512-QT7U2tOBVfwn8Q71Nyh0UjlyXfZNKdanq3+b8GJ/+IB/d8mVdMRTXBGQ4PqY7CP+wpkgm+wbbUt3urZF1AqdmQ==", "requires": { "parse5": "^5.0.0", "tslib": "^1.7.1" @@ -179,16 +179,16 @@ } }, "@angular/cli": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-7.0.2.tgz", - "integrity": "sha512-z53fPkdwm+l4yii8+EwJqeYHgDtyTPywe9ZnpeUu4IvIoM5Mffeu+Rlen3sdwb4+7iL3qpLKtwdMosLJwin85w==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-7.0.5.tgz", + "integrity": "sha512-qGFDuO9VQAq+pEPgIyeEdTVa8m2xNYOyvgwp0Z4E51BMBsvzEufT0Vj/U/HuD6a162EOBW1N+Aprpie+swe+MQ==", "dev": true, "requires": { - "@angular-devkit/architect": "0.10.2", - "@angular-devkit/core": "7.0.2", - "@angular-devkit/schematics": "7.0.2", - "@schematics/angular": "7.0.2", - "@schematics/update": "0.10.2", + "@angular-devkit/architect": "0.10.5", + "@angular-devkit/core": "7.0.5", + "@angular-devkit/schematics": "7.0.5", + "@schematics/angular": "7.0.5", + "@schematics/update": "0.10.5", "inquirer": "6.2.0", "opn": "5.3.0", "rxjs": "6.3.3", @@ -205,28 +205,28 @@ } }, "@angular/common": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-7.0.0.tgz", - "integrity": "sha512-jp6MA6EOq/a1m+F0c1aZC345pAYYYFpN1m7GMM91JlqkjzJMhyYVk+Bod9xQOEWadcpY+RFudG+jRsPCMO8bvQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-7.0.3.tgz", + "integrity": "sha512-aiuQh6+5kWFp34SYEtpnkAJWU3Qn17S/9LjWSZbgfiaYG6MyszepxqLZPBSBPTElxx2u5VoCPh97+TpKoDqx+g==", "requires": { "tslib": "^1.9.0" } }, "@angular/compiler": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-7.0.0.tgz", - "integrity": "sha512-4fkohfGyG1BEpeYenOartuJmduyZ/R3XQx46hDDiR/9A8/Go4qLGkgr9Bd/JL/gPIR1XAHH9D5ii2sh+28ZEmA==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-7.0.3.tgz", + "integrity": "sha512-1eF4PzWej9eoEQhHwuMxujx9B4oSjP70vORIs9pgXF8O4nWDWTKtfPQyNCPxc8mY+Fwb0+nSOEvvA+Ou8Hnreg==", "requires": { "tslib": "^1.9.0" } }, "@angular/compiler-cli": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-7.0.0.tgz", - "integrity": "sha512-fj5ixB4X3BsUnUukFx+dK5z2KkO7lCx5vlbUT2GOMbGCG43dIH6JKUfy5HbpCodLsJHG0gRgZZuY7/k+pbzS+g==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-7.0.3.tgz", + "integrity": "sha512-8/SNgyce0Eqhfn8N/XkwSDSxTJryA+/EVLA68D2IopOSg/95u6GgYv3mVNNQnclSzC4g1FuK0zt4z0zRIWZ6JA==", "dev": true, "requires": { - "canonical-path": "0.0.2", + "canonical-path": "1.0.0", "chokidar": "^1.4.2", "convert-source-map": "^1.5.1", "dependency-graph": "^0.7.2", @@ -557,9 +557,9 @@ } }, "@angular/core": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-7.0.0.tgz", - "integrity": "sha512-DjVyWNGBWKEeBvxeXy8FGBNlnr/W/tNygOZEd6/uCktcXTG4DNyNQrWuNZUKEpr7RuIT3YVMj+UNwgTq0jB/9g==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-7.0.3.tgz", + "integrity": "sha512-x/OYYykVsi2vrKlYQJ37I8HYAI/s/CtL3Sd9bl87F6AnqLWnnKIxQaofT/ShfAfdP44LQoN5BNp5j+sjs8K4Kg==", "requires": { "tslib": "^1.9.0" } @@ -573,55 +573,55 @@ } }, "@angular/forms": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-7.0.0.tgz", - "integrity": "sha512-rTg1UHq9gHR6zY3Kkip1KCm/YTck/rlR8CvVFIMwF0bdQxUCT51SXVn58nXts9yDaieABcGaQHNkQn1mARslgw==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-7.0.3.tgz", + "integrity": "sha512-URbSpsNDQOg2NxmAt2FgeXIbEXvJS2yQwP02NLkHGqqCe38dpcifijj6HlUxeH14ZBkoqeTQjtSkXlMkgt22YA==", "requires": { "tslib": "^1.9.0" } }, "@angular/http": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@angular/http/-/http-7.0.0.tgz", - "integrity": "sha512-gHMVKosbhXu+2sXccR1fnKpaJBtZioneW+jpG6CW3oo6f4L5FXnGGx/lqYLsgKFM8yHiOs6OXqvuHh8wYEjayA==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@angular/http/-/http-7.0.3.tgz", + "integrity": "sha512-aL+z1/tbVY8oJw5v46rbMli5vBGDVyJvs95d1l2n3hWnwMTzS9AVetjcL3B3uruAYuXoh4QlSJ+ysBgdmV1+IA==", "requires": { "tslib": "^1.9.0" } }, "@angular/language-service": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-7.0.0.tgz", - "integrity": "sha512-JlBAXvKrXCCdFc9AnQRaMDl9c0qmASagmmbEX+fuxJbcyqtsUF2y/15Hy5UUmmA+ldZ+mwAoX/naPZZrFSP2rw==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-7.0.3.tgz", + "integrity": "sha512-a8S/kTK/f7QaA7Nwm0KmfR+e7p4ZJ1keotfQD8r9Zq73+DD6yS+DSc+NBikmHui9mn9zY1C08C4SJQ5/5HtVhA==", "dev": true }, "@angular/material": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-7.0.1.tgz", - "integrity": "sha512-/gf2G+/W/SB/54Q+EDKWfaDFuj403XYMSY3IcFJmuR4H8KkDtDr6bM9/HrRpYWNIlrVwOrKE9ByeoFzm5yDmvA==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-7.0.3.tgz", + "integrity": "sha512-acJ2zU44k/rsd4OeTdAMVP0R3te8aXwfubDQGc8YI1CdRVW1XqMSvAWkToYDVaGvnZV53zQt/iSi1XWaSXYf1Q==", "requires": { "tslib": "^1.7.1" } }, "@angular/platform-browser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-7.0.0.tgz", - "integrity": "sha512-XyvL30d6meJ+SXlOmdR+sxoLdSvkQdmVNvpdvUzAHC/EqwA/byg4V3bTe5lpZmypclgFCjkGoTsz6uOnnwlQhw==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-7.0.3.tgz", + "integrity": "sha512-OKDGce2dYw9Fw8agpcSNJA+ecMMnMQCi9xoPHNIp1pYdvte7mUXKUvUzR7chqQ7b83d7SzVeEhqAZYa4BUwFRA==", "requires": { "tslib": "^1.9.0" } }, "@angular/platform-browser-dynamic": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-7.0.0.tgz", - "integrity": "sha512-lH2KuH+Em1y/mTOE6yTJmsOxYkMbYKzKLP9gYzc9vZu3er1df6Jx6jxefeBmAr9v+kNCLnpnHWHz2y4GzAesJA==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-7.0.3.tgz", + "integrity": "sha512-hrdBtlkKyq2CZRY6z2RWFTcGF4n4MirM7EEzByEjlgiXSU+c4qHYb0a8z30qdCF1D/DZ6Md7cRRH+1uR/rCqxQ==", "requires": { "tslib": "^1.9.0" } }, "@angular/router": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-7.0.0.tgz", - "integrity": "sha512-BK6Ho/7ckldFKc724piuPuMX0HPYXD8SUfwNj6yc0wgzDxdWzSmZj/xPEYll2pGNIA9x8Tg1NQKCD+kp1WXngw==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-7.0.3.tgz", + "integrity": "sha512-885svORDpD9DkaMKjvGwn4g5bf0n3JR8os+gCNhzk0p4TPfpc+vmNo8SyY2jwdLMh2rQzrUQTDkn9SzzgiOfDQ==", "requires": { "tslib": "^1.9.0" } @@ -814,12 +814,12 @@ "integrity": "sha512-zLXXioHg7iiHO+zhBH3P1Kc2mN5q2vXcyn2JN0ReCAFBK2/zk7fHvu6m+sUVk9RU5iR3GXecuWZ6ga8nxbwEdQ==" }, "@ngtools/webpack": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.0.2.tgz", - "integrity": "sha512-xEZEsZZgwmL/sCv3hAbZVgf+wVB7UzPcTkyprzD2K+2zFivCDd43uYAOdlrOnihCoEIpwnPTn69urjopMqmcjg==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.0.5.tgz", + "integrity": "sha512-KARXUp1SCg6TNGHaXOITiOfbGBJAd7gkdo0OKWF77ARqWb/pSN4rwFV4kxm0CB2kkmJ40JQCQG+TiltX+3Jnqg==", "dev": true, "requires": { - "@angular-devkit/core": "7.0.2", + "@angular-devkit/core": "7.0.5", "enhanced-resolve": "4.1.0", "rxjs": "6.3.3", "tree-kill": "1.2.0", @@ -827,24 +827,24 @@ } }, "@schematics/angular": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-7.0.2.tgz", - "integrity": "sha512-EMYo3CguVFqpVkXPlyXdyMaPA3LIDDfHtrjc4kAkb+yLorTsKETTWoVFwOzG7xoF3uIG+inkeKr/MzU0OejrUw==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-7.0.5.tgz", + "integrity": "sha512-a8oWALnxs4+QwapeeBZfVBq1YEs5bdgmErBecCHioonhHidoBZX0GjJWQOH/TN8qA8HenNDf7b07WN7sRAVC1Q==", "dev": true, "requires": { - "@angular-devkit/core": "7.0.2", - "@angular-devkit/schematics": "7.0.2", - "typescript": "3.1.3" + "@angular-devkit/core": "7.0.5", + "@angular-devkit/schematics": "7.0.5", + "typescript": "3.1.6" } }, "@schematics/update": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.10.2.tgz", - "integrity": "sha512-/U/HlA/1DRmN2rj/P5htxEWDiMyJE/pa/gGbG2z0IBabOaGsMfEDHPqqXphpB2+03lc2tmC+B19j6pHKtgXZUg==", + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.10.5.tgz", + "integrity": "sha512-eFpDq+iI5DfCC3HGYtJtCZhk+rEoCAyrxnta3rQeZZbi7Lqg+aA4PZxFIpnI3omqxof+I0EdpwUquAaNcJR5fA==", "dev": true, "requires": { - "@angular-devkit/core": "7.0.2", - "@angular-devkit/schematics": "7.0.2", + "@angular-devkit/core": "7.0.5", + "@angular-devkit/schematics": "7.0.5", "npm-registry-client": "8.6.0", "rxjs": "6.3.3", "semver": "5.5.1", @@ -860,24 +860,24 @@ } }, "@types/jasmine": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.8.9.tgz", - "integrity": "sha512-8dPZwjosElZOGGYw1nwTvOEMof4gjwAWNFS93nBI091BoEfd5drnHOLRMiRF/LOPuMTn5LgEdv0bTUO8QFVuHQ==", + "version": "2.8.11", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.8.11.tgz", + "integrity": "sha512-ITPYT5rkV9S0BcucyBwXIUzqzSODVhvAzhOGV0bwZMuqWJeU0Kfdd6IJeJjGI8Gob+lDyAtKaWUfhG6QXJIPRg==", "dev": true }, "@types/jasminewd2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.5.tgz", - "integrity": "sha512-1awkm/O4pQCR9hI2F80HmIOda/L+ogkSL8Arj1k00eue5VLY5ooewhSOyF/cUJE0S+/34uD5EYY3zmd6fu2OCA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.6.tgz", + "integrity": "sha512-2ZOKrxb8bKRmP/po5ObYnRDgFE4i+lQiEB27bAMmtMWLgJSqlIDqlLx6S0IRorpOmOPRQ6O80NujTmQAtBkeNw==", "dev": true, "requires": { "@types/jasmine": "*" } }, "@types/node": { - "version": "10.12.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.0.tgz", - "integrity": "sha512-3TUHC3jsBAB7qVRGxT6lWyYo2v96BMmD2PTcl47H25Lu7UXtFH/2qqmKiVrnel6Ne//0TFYf6uvNX+HW2FRkLQ==", + "version": "10.12.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.4.tgz", + "integrity": "sha512-0aFZiYCvoxyKP/Mg6PvqBb2UtWGIPf63r6rOAvRBrgyJOfanbL60yUH2U4FSpg+Yn6FW+JVYWtzn6hLTy745Fg==", "dev": true }, "@types/q": { @@ -1123,6 +1123,12 @@ "integrity": "sha512-L8vcjDTCOIJk7wFvmlEUN7AsSb8T+2JrdP7KINBjzr24TJ5Mwj590sLu3BC7zNZowvJWa/JtPmD8eJCzdtDWjA==", "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": "4.2.1", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", @@ -1289,6 +1295,12 @@ "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=", "dev": true }, + "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", @@ -1310,6 +1322,12 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -1400,6 +1418,12 @@ "dev": true, "optional": true }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -1413,16 +1437,16 @@ "dev": true }, "autoprefixer": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.4.1.tgz", - "integrity": "sha512-YqUclCBDXUT9Y7aQ8Xv+ja8yhTZYJoMsOD7WS++gZIJLCpCu+gPcKGDlhk6S3WxhLkTcNVdaMZAWys2nzZCH7g==", + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.1.5.tgz", + "integrity": "sha512-kk4Zb6RUc58ld7gdosERHMF3DzIYJc2fp5sX46qEsGXQQy5bXsu8qyLjoxuY1NuQ/cJuCYnx99BfjwnRggrYIw==", "dev": true, "requires": { - "browserslist": "^3.2.6", - "caniuse-lite": "^1.0.30000832", + "browserslist": "^4.1.0", + "caniuse-lite": "^1.0.30000884", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^6.0.22", + "postcss": "^7.0.2", "postcss-value-parser": "^3.2.3" } }, @@ -1559,6 +1583,12 @@ "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", @@ -1620,12 +1650,24 @@ } } }, + "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.3.0", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", "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", @@ -1642,6 +1684,15 @@ "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", @@ -1654,6 +1705,12 @@ "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", "dev": true }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", + "dev": true + }, "block-stream": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", @@ -1842,13 +1899,14 @@ } }, "browserslist": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", - "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.3.4.tgz", + "integrity": "sha512-u5iz+ijIMUlmV8blX82VGFrB9ecnUg5qEt55CMZ/YJEhha+d8qpBfOFuutJ6F/VKRXjZoD33b6uvarpPxcl3RA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" + "caniuse-lite": "^1.0.30000899", + "electron-to-chromium": "^1.3.82", + "node-releases": "^1.0.1" } }, "browserstack": { @@ -1871,6 +1929,28 @@ "isarray": "^1.0.0" } }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -1951,6 +2031,12 @@ "unset-value": "^1.0.0" } }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, "camelcase": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", @@ -1970,15 +2056,15 @@ } }, "caniuse-lite": { - "version": "1.0.30000898", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000898.tgz", - "integrity": "sha512-ytlTZqO4hYe4rNAJhMynUAIUI33jsP2Bb1two/9OVC39wZjPZ8exIO0eCLw5mqAtegOGiGF0kkTWTn3B02L+mw==", + "version": "1.0.30000907", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000907.tgz", + "integrity": "sha512-No5sQ/OB2Nmka8MNOOM6nJx+Hxt6MQ6h7t7kgJFu9oTuwjykyKRSBP/+i/QAyFHxeHB+ddE0Da1CG5ihx9oehQ==", "dev": true }, "canonical-path": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-0.0.2.tgz", - "integrity": "sha1-4x65N6jJPuKgHfGDl5RyGQKHRXQ=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz", + "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", "dev": true }, "caseless": { @@ -2056,6 +2142,12 @@ "integrity": "sha512-oC7/DVAyfcY3UWKm0sN/oVoDedQDQiw/vIiAnuTWTpE5s0zWf7l3WY417Xw/Fbi/QbAjctAkxgMiS9P0s3zkmA==", "dev": true }, + "circular-json": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz", + "integrity": "sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==", + "dev": true + }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -2210,6 +2302,15 @@ "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.7", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", @@ -2237,12 +2338,24 @@ "integrity": "sha512-tK69D7oNXXqUW3ZNo/z7NXTEz22TCF0pTE+YF9cxvaAM9XnkLo1fV621xCLrRR6aevJlKxExkss0vWqUCUpqdg==", "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.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "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.15", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz", @@ -2293,6 +2406,41 @@ "typedarray": "^0.0.6" } }, + "connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + }, + "dependencies": { + "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" + } + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + } + } + }, "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", @@ -2374,9 +2522,9 @@ "dev": true }, "copy-webpack-plugin": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.5.3.tgz", - "integrity": "sha512-VKCiNXQcc8zyznaepXfKpCH2cZD+/j3T3B+gsFY97P7qMlEsj34wr/sI9OCG7QPUUh7gAHVx3q8Q1rdQIDM4bA==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.5.4.tgz", + "integrity": "sha512-0lstlEyj74OAtYMrDxlNZsU7cwFijAI3Ofz2fD6Mpo9r4xCv4yegfa3uHIKvZY1NSuOtE9nvG6TAhJ+uz9gDaQ==", "dev": true, "requires": { "cacache": "^10.0.4", @@ -2532,6 +2680,12 @@ "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", @@ -2547,6 +2701,12 @@ "assert-plus": "^1.0.0" } }, + "date-format": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz", + "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=", + "dev": true + }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", @@ -2746,6 +2906,12 @@ "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", "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.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", @@ -2798,6 +2964,18 @@ "buffer-indexof": "^1.0.0" } }, + "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" + } + }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", @@ -2834,9 +3012,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.80", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.80.tgz", - "integrity": "sha512-WClidEWEUNx7OfwXehB0qaxCuetjbKjev2SmXWgybWPLKAThBiMTF/2Pd8GSUDtoGOavxVzdkKwfFAPRSWlkLw==", + "version": "1.3.84", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.84.tgz", + "integrity": "sha512-IYhbzJYOopiTaNWMBp7RjbecUBsbnbDneOP86f3qvS0G0xfzwNSvMJpTrvi5/Y1gU7tg2NAgeg8a8rCYvW9Whw==", "dev": true }, "elliptic": { @@ -2875,6 +3053,74 @@ "once": "^1.4.0" } }, + "engine.io": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", + "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~3.3.1" + }, + "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" + } + } + } + }, + "engine.io-client": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "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" + } + } + } + }, + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, "enhanced-resolve": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", @@ -2886,6 +3132,12 @@ "tapable": "^1.0.0" } }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, "errno": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", @@ -3082,6 +3334,56 @@ "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": { + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "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": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -4385,6 +4687,29 @@ "ansi-regex": "^2.0.0" } }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "dev": true, + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "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": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -5112,6 +5437,15 @@ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, + "isbinaryfile": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "dev": true, + "requires": { + "buffer-alloc": "^1.2.0" + } + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -5389,9 +5723,9 @@ } }, "jasmine-core": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.2.1.tgz", - "integrity": "sha512-pa9tbBWgU0EE4SWgc85T4sa886ufuQdsgruQANhECYjwqgV4z7Vw/499aCaP8ZH79JDS4vhm8doDG9HO4+e4sA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.3.0.tgz", + "integrity": "sha512-3/xSmG/d35hf80BEN66Y6g9Ca5l/Isdeg/j6zvbTYlTzeKinzmaTM4p9am5kYqOmE05D7s1t8FGjzdSnbUbceA==", "dev": true }, "jasmine-spec-reporter": { @@ -5554,6 +5888,55 @@ } } }, + "karma": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/karma/-/karma-3.1.1.tgz", + "integrity": "sha512-NetT3wPCQMNB36uiL9LLyhrOt8SQwrEKt0xD3+KpTCfm0VxVyUJdPL5oTq2Ic5ouemgL/Iz4wqXEbF3zea9kQQ==", + "dev": true, + "requires": { + "bluebird": "^3.3.0", + "body-parser": "^1.16.1", + "chokidar": "^2.0.3", + "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": "^4.17.4", + "log4js": "^3.0.0", + "mime": "^2.3.1", + "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": "2.1.1", + "source-map": "^0.6.1", + "tmp": "0.0.33", + "useragent": "2.2.1" + }, + "dependencies": { + "mime": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", + "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", + "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 + } + } + }, "karma-chrome-launcher": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", @@ -5581,9 +5964,9 @@ "dev": true }, "karma-jasmine-html-reporter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.3.1.tgz", - "integrity": "sha512-J8pUc58QeRhpHQ+sXBRZ016ZW9ZOjU4vjYA6Jah69WvBaqR7tGvXUzy7w/DoULbNrD8+hnZCpvdeEtqXtirY2g==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.4.0.tgz", + "integrity": "sha512-0wxhwA8PLPpICZ4o2GRnPi67hf3JhfQm5WCB8nElh4qsE6wRNOTtrqooyBPNqI087Xr2SBhxLg5fU+BJ/qxRrw==", "dev": true }, "karma-source-map-support": { @@ -5664,9 +6047,9 @@ } }, "license-webpack-plugin": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.0.1.tgz", - "integrity": "sha512-XUSJoU+M2w/N5ZdzHm++mFSM2BVKAdnSORXF7nbkpBJVdfi3hiiMpNdiuUR7S4OvsceiXQp1yoBwhiAP+gtC2g==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.0.2.tgz", + "integrity": "sha512-GsomZw5VoT20ST8qH2tOjBgbyhn6Pgs9M94g0mbvfBIV1VXufm1iKY+4dbgfTObj1Mp6nSRE3Zf74deOZr0KwA==", "dev": true, "requires": { "webpack-sources": "^1.2.0" @@ -5767,6 +6150,36 @@ "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", "dev": true }, + "log4js": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.6.tgz", + "integrity": "sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ==", + "dev": true, + "requires": { + "circular-json": "^0.5.5", + "date-format": "^1.2.0", + "debug": "^3.1.0", + "rfdc": "^1.1.2", + "streamroller": "0.7.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, "loglevel": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", @@ -6270,6 +6683,15 @@ } } }, + "node-releases": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.0.3.tgz", + "integrity": "sha512-ZaZWMsbuDcetpHmYeKWPO6e63pSXLb50M7lJgCbcM2nC/nQC3daNifmtp5a2kp7EWwYfhuvH6zLPWkrF8IiDdw==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, "node-sass": { "version": "4.9.3", "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.3.tgz", @@ -6524,6 +6946,12 @@ "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", @@ -6843,6 +7271,24 @@ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", "dev": true }, + "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", @@ -6979,14 +7425,14 @@ "dev": true }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.5.tgz", + "integrity": "sha512-HBNpviAUFCKvEh7NZhw1e8MBPivRszIiUnhrJ+sBFVSYSqubrzwX3KG51mYgcRHX8j/cAgZJedONZcm5jTBdgQ==", "dev": true, "requires": { "chalk": "^2.4.1", "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "supports-color": "^5.5.0" }, "dependencies": { "source-map": { @@ -6994,16 +7440,25 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, "postcss-import": { - "version": "11.1.0", - "resolved": "http://registry.npmjs.org/postcss-import/-/postcss-import-11.1.0.tgz", - "integrity": "sha512-5l327iI75POonjxkXgdRCUS+AlzAdBx4pOvMEhTKTCjb1p8IEeVR9yx3cPbmN7LIWJLbfnIXxAhoB4jpD0c/Cw==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.0.tgz", + "integrity": "sha512-3KqKRZcaZAvxbY8DVLdd81tG5uKzbUQuiWIvy0o0fzEC42bKacqPYFWbfCQyw6L4LWUaqPz/idvIdbhpgQ32eQ==", "dev": true, "requires": { - "postcss": "^6.0.1", + "postcss": "^7.0.1", "postcss-value-parser": "^3.2.3", "read-cache": "^1.0.0", "resolve": "^1.1.7" @@ -7020,27 +7475,15 @@ } }, "postcss-loader": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.1.6.tgz", - "integrity": "sha512-hgiWSc13xVQAq25cVw80CH0l49ZKlAnU1hKPOdRrNj89bokRr/bZF2nT+hebPPF9c9xs8c3gw3Fr2nxtmXYnNg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", "dev": true, "requires": { "loader-utils": "^1.1.0", - "postcss": "^6.0.0", + "postcss": "^7.0.0", "postcss-load-config": "^2.0.0", - "schema-utils": "^0.4.0" - }, - "dependencies": { - "schema-utils": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" - } - } + "schema-utils": "^1.0.0" } }, "postcss-value-parser": { @@ -7290,6 +7733,12 @@ "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", "dev": true }, + "qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true + }, "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", @@ -7315,9 +7764,9 @@ "dev": true }, "randomatic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.0.tgz", - "integrity": "sha512-KnGPVE0lo2WoXxIZ7cPR8YBpiol4gsSuOwDSg410oHh80ZMp5EiypNqL2K4Z77vJn6lB5rap7IkAmcUlalcnBQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", "dev": true, "requires": { "is-number": "^4.0.0", @@ -7873,6 +8322,12 @@ "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", "dev": true }, + "rfdc": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.2.tgz", + "integrity": "sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA==", + "dev": true + }, "rimraf": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", @@ -8360,6 +8815,98 @@ } } }, + "socket.io": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", + "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", + "dev": true, + "requires": { + "debug": "~3.1.0", + "engine.io": "~3.2.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.1.1", + "socket.io-parser": "~3.2.0" + }, + "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" + } + } + } + }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", + "dev": true + }, + "socket.io-client": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", + "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", + "dev": true, + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "engine.io-client": "~3.2.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.2.0", + "to-array": "0.1.4" + }, + "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" + } + } + } + }, + "socket.io-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "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" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + } + } + }, "sockjs": { "version": "0.3.19", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", @@ -8498,9 +9045,9 @@ } }, "spdx-license-ids": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz", - "integrity": "sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz", + "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==", "dev": true }, "spdy": { @@ -8518,9 +9065,9 @@ } }, "spdy-transport": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.1.0.tgz", - "integrity": "sha512-bpUeGpZcmZ692rrTiqf9/2EUakI6/kXX1Rpe0ib/DyOzbiexVfXkw6GnvI9hVGvIwVaUhkaBojjCZwLNRGQg1g==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.1.1.tgz", + "integrity": "sha512-q7D8c148escoB3Z7ySCASadkegMmUZW8Wb/Q1u0/XBgDKMO880rLQDj8Twiew/tYi7ghemKUi/whSYOwE17f5Q==", "dev": true, "requires": { "debug": "^2.6.8", @@ -8667,6 +9214,35 @@ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, + "streamroller": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz", + "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==", + "dev": true, + "requires": { + "date-format": "^1.2.0", + "debug": "^3.1.0", + "mkdirp": "^0.5.1", + "readable-stream": "^2.3.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -8827,9 +9403,9 @@ } }, "terser": { - "version": "3.10.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.10.2.tgz", - "integrity": "sha512-+QrFoqBImmsQGB4c/HvaqgZynmbNvNBwoBxuu7fYXtq5EEtlLUzph+WimDj+xMkuqawXPMl2lgCIz81CdXvt+w==", + "version": "3.10.11", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.10.11.tgz", + "integrity": "sha512-iruZ7j14oBbRYJC5cP0/vTU7YOWjN+J1ZskEGoF78tFzXdkK2hbCL/3TRZN8XB+MuvFhvOHMp7WkOCBO4VEL5g==", "dev": true, "requires": { "commander": "~2.17.1", @@ -8862,9 +9438,9 @@ }, "dependencies": { "cacache": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.2.0.tgz", - "integrity": "sha512-IFWl6lfK6wSeYCHUXh+N1lY72UDrpyrYQJNIVQf48paDuWbv5RbAtJYf/4gUQFObTCHZwdZ5sI8Iw7nqwP6nlQ==", + "version": "11.3.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.1.tgz", + "integrity": "sha512-2PEw4cRRDu+iQvBTTuttQifacYjLPhET+SYO/gEFMy8uhi+jlJREDAjSF5FWSdV/Aw5h18caHA7vMTw2c+wDzA==", "dev": true, "requires": { "bluebird": "^3.5.1", @@ -8998,12 +9574,12 @@ "dev": true }, "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { - "readable-stream": "^2.1.5", + "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, @@ -9031,6 +9607,12 @@ "os-tmpdir": "~1.0.2" } }, + "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", @@ -9249,35 +9831,11 @@ "dev": true }, "typescript": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.1.3.tgz", - "integrity": "sha512-+81MUSyX+BaSo+u2RbozuQk/UWx6hfG0a5gHu4ANEM4sU96XbuIyAB+rWBW1u70c6a5QuZfuYICn3s2UjuHUpA==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.1.6.tgz", + "integrity": "sha512-tDMYfVtvpb96msS1lDX9MEdHrW4yOuZ4Kdc4Him9oU796XldPYF/t2+uKoX0BBa0hXXwDlqYQbXY5Rzjzc5hBA==", "dev": true }, - "uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", - "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-js": { "version": "3.4.9", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", @@ -9321,6 +9879,12 @@ "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.7", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", @@ -9336,9 +9900,25 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true + }, + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "dev": true, + "requires": { + "commander": "~2.13.0", + "source-map": "~0.6.1" + } } } }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", + "dev": true + }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", @@ -9484,9 +10064,9 @@ "dev": true }, "url-parse": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.3.tgz", - "integrity": "sha512-rh+KuAW36YKo0vClhQzLLveoj8FwPJNu65xLb7Mrt+eZht0IPT0IXgSv8gcMegZ6NvjJUALf6Mf25POlMwD1Fw==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", + "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", "dev": true, "requires": { "querystringify": "^2.0.0", @@ -9499,6 +10079,24 @@ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, + "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.4", "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", @@ -9571,6 +10169,12 @@ "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.6.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", @@ -10066,6 +10670,17 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + }, "xml2js": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", @@ -10090,6 +10705,12 @@ "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", "dev": true }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true + }, "xregexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", @@ -10171,6 +10792,12 @@ } } }, + "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", diff --git a/package.json b/package.json index f44e9d9..38dd38b 100644 --- a/package.json +++ b/package.json @@ -5,25 +5,27 @@ "ng": "ng", "start": "ng serve --proxy-config proxy.json", "build": "ng build", - "test": "ng test", + "test": " ng test --browsers ChromeHeadless", + "test-coverage": " ng test --browsers ChromeHeadless --watch=false --code-coverage", + "test-prod": " ng test --browsers ChromeHeadless --watch=false --sourceMap=false", "lint": "ng lint", "e2e": "ng e2e", "build-prod": "npm version patch && node ./update-version.js" }, "private": true, "dependencies": { - "@angular/animations": "^7.0.0", - "@angular/cdk": "^7.0.0", - "@angular/common": "^7.0.0", - "@angular/compiler": "^7.0.0", - "@angular/core": "^7.0.0", + "@angular/animations": "^7.0.3", + "@angular/cdk": "^7.0.3", + "@angular/common": "^7.0.3", + "@angular/compiler": "^7.0.3", + "@angular/core": "^7.0.3", "@angular/flex-layout": "^7.0.0-beta.19", - "@angular/forms": "^7.0.0", - "@angular/http": "^7.0.0", - "@angular/material": "^7.0.0", - "@angular/platform-browser": "^7.0.0", - "@angular/platform-browser-dynamic": "^7.0.0", - "@angular/router": "^7.0.0", + "@angular/forms": "^7.0.3", + "@angular/http": "^7.0.3", + "@angular/material": "^7.0.3", + "@angular/platform-browser": "^7.0.3", + "@angular/platform-browser-dynamic": "^7.0.3", + "@angular/router": "^7.0.3", "classlist.js": "^1.1.20150312", "core-js": "^2.5.4", "intl": "^1.2.5", @@ -38,25 +40,25 @@ "@webcomponents/webcomponentsjs": "^2.1.3" }, "devDependencies": { - "@angular-devkit/build-angular": "^0.10.1", - "@angular/cli": "^7.0.1", - "@angular/compiler-cli": "^7.0.0", - "@angular/language-service": "^7.0.0", - "@types/jasmine": "^2.8.9", - "@types/jasminewd2": "^2.0.5", - "@types/node": "~10.12.0", + "@angular-devkit/build-angular": "~0.10.0", + "@angular/cli": "^7.0.5", + "@angular/compiler-cli": "^7.0.3", + "@angular/language-service": "^7.0.3", + "@types/jasmine": "^2.8.11", + "@types/jasminewd2": "^2.0.6", + "@types/node": "~10.12.4", "codelyzer": "~4.5.0", - "jasmine-core": "~3.2.1", + "jasmine-core": "~3.3.0", "jasmine-spec-reporter": "~4.2.1", "karma": "~3.1.0", "karma-chrome-launcher": "~2.2.0", "karma-coverage-istanbul-reporter": "^2.0.4", "karma-jasmine": "~1.1.1", - "karma-jasmine-html-reporter": "^1.3.1", + "karma-jasmine-html-reporter": "^1.4.0", "protractor": "^5.4.1", "replace-in-file": "^3.4.2", "ts-node": "~7.0.1", "tslint": "~5.11.0", - "typescript": "~3.1.3" + "typescript": "~3.1.6" } } diff --git a/src/app/app.component.html b/src/app/app.component.html index ba9b00f..1043b37 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -47,7 +47,7 @@ </myuw-app-bar> -<app-navigation></app-navigation> +<cse-navigation></cse-navigation> <main class="uw-row"> <div class="uw-col"> <router-outlet></router-outlet> diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts index f7ade39..be93f78 100644 --- a/src/app/app.component.spec.ts +++ b/src/app/app.component.spec.ts @@ -3,6 +3,8 @@ import { Component, NgModule, NO_ERRORS_SCHEMA } from '@angular/core'; import { Router, RouterModule, Routes } from '@angular/router'; import { RouterTestingModule } from '@angular/router/testing'; +import { CoreModule } from '@app/core/core.module'; +import { SharedModule } from '@app/shared/shared.module'; import { AppComponent } from './app.component'; import { AppRoutingModule } from './app.routing.module'; @@ -27,7 +29,7 @@ const routes: Routes = [ describe('AppComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - imports: [RouterModule, RouterTestingModule.withRoutes(routes)], + imports: [ CoreModule, SharedModule, RouterModule, RouterTestingModule.withRoutes(routes)], schemas: [ NO_ERRORS_SCHEMA ], declarations: [ AppComponent diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 402edb6..bde5875 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,13 +1,11 @@ import { Component } from '@angular/core'; @Component({ - selector: 'app-root', + selector: 'cse-root', templateUrl: './app.component.html', styleUrls: ['./app.component.scss'] }) -export class AppComponent { - title = 'app'; -} +export class AppComponent { } document.addEventListener('WebComponentsReady', function() { const customEvent = new CustomEvent('myuw-login', { diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 1d6e466..bb75ece 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -5,19 +5,17 @@ import { HttpClientModule } from '@angular/common/http'; import { AppRoutingModule } from './app.routing.module'; import { AppComponent } from './app.component'; -import { CoreModule } from './core/core.module'; -import { SharedModule } from './shared/shared.module'; -import { DegreePlannerModule } from './degree-planner/degree-planner.module'; +import { CoreModule } from '@app/core/core.module'; +import { SharedModule } from '@app/shared/shared.module'; @NgModule({ imports: [ BrowserModule, BrowserAnimationsModule, - DegreePlannerModule, + HttpClientModule, CoreModule, SharedModule, - AppRoutingModule, - HttpClientModule + AppRoutingModule ], declarations: [ AppComponent diff --git a/src/app/core/data.service.ts b/src/app/core/data.service.ts index 5e3d13f..15ebcc5 100644 --- a/src/app/core/data.service.ts +++ b/src/app/core/data.service.ts @@ -1,6 +1,6 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { Response } from '@angular/http'; +import { HttpErrorResponse } from '@angular/common/http'; import { throwError, Observable } from 'rxjs'; import { catchError, map } from 'rxjs/operators'; import { ConfigService } from './config.service'; @@ -33,7 +33,7 @@ export class DataService { .pipe(catchError(this.errorHandler)); } - private errorHandler(error: Response) { + private errorHandler(error: HttpErrorResponse) { return throwError(error || 'Server Error'); } } diff --git a/src/app/core/models/course.ts b/src/app/core/models/course.ts index 0343f60..75a8e92 100644 --- a/src/app/core/models/course.ts +++ b/src/app/core/models/course.ts @@ -26,4 +26,4 @@ export interface Course { enrollmentOptions?: any; packageEnrollmentStatus?: any; creditRange?: any; -} \ No newline at end of file +} diff --git a/src/app/core/models/term.ts b/src/app/core/models/term.ts index ac63696..79e7cd0 100644 --- a/src/app/core/models/term.ts +++ b/src/app/core/models/term.ts @@ -1,11 +1,11 @@ export interface Term { - termCode: string; - shortDescription: string; - longDescription: string; - beginDate: number; - endDate: number; - instructionBeginDate: number; - instructionEndDate: number; - academicYear: string; - pastTerm: boolean; -} \ No newline at end of file + termCode: string; + shortDescription: string; + longDescription: string; + beginDate: number; + endDate: number; + instructionBeginDate: number; + instructionEndDate: number; + academicYear: string; + pastTerm: boolean; +} diff --git a/src/app/core/navigation/navigation.component.scss b/src/app/core/navigation/navigation.component.scss index 4371901..ce59282 100644 --- a/src/app/core/navigation/navigation.component.scss +++ b/src/app/core/navigation/navigation.component.scss @@ -1,5 +1,5 @@ @import '~@angular/material/theming'; -@import '~src/assets/material-theme.scss'; +@import 'assets/material-theme.scss'; .uw-nav-menu .uw-nav-menu-reverse a, .uw-nav-menu .uw-dropdown a { cursor: pointer; diff --git a/src/app/core/navigation/navigation.component.ts b/src/app/core/navigation/navigation.component.ts index 16d55fe..8673337 100644 --- a/src/app/core/navigation/navigation.component.ts +++ b/src/app/core/navigation/navigation.component.ts @@ -1,7 +1,7 @@ import { Component } from '@angular/core'; @Component({ - selector: 'app-navigation', + selector: 'cse-navigation', templateUrl: './navigation.component.html', styleUrls: ['./navigation.component.scss'] }) diff --git a/src/app/degree-planner/degree-planner.component.html b/src/app/degree-planner/degree-planner.component.html index f9b34c7..bebbcf0 100644 --- a/src/app/degree-planner/degree-planner.component.html +++ b/src/app/degree-planner/degree-planner.component.html @@ -1,46 +1,60 @@ <mat-sidenav-container id="plans-container"> + <!-- Menu side nav --> + <mat-sidenav #rightSideNav position="end" mode="side" [opened]="true" disableClose> + <cse-sidenav-menu-item></cse-sidenav-menu-item> + </mat-sidenav> - <mat-sidenav #sidenav position="end" mode="side" [opened]=true disableClose> - <app-sidenav-menu-item></app-sidenav-menu-item> + <!-- Add course sidenav --> + <mat-sidenav #leftSideNav position="start" mode="side" [opened]="false"> + <div>sidenav 2</div> + <button mat-button class="btn-primary" (click)="leftSideNav2.toggle()">Three</button> </mat-sidenav> <mat-sidenav-content> - <div fxLayout="row" fxLayout.lt-sm="column" fxLayoutGap="20px" fxLayoutAlign="start center" style="margin: 24px 0px 24px 24px;"> - <div> - <mat-form-field> - <mat-select placeholder="Degree Plans" [disableOptionCentering]=true [value]="selectedDegreePlan"> - <mat-option *ngFor="let degreePlan of degreePlans" [value]="degreePlan.roadmapId"> - {{ degreePlan.name }} - </mat-option> - </mat-select> - </mat-form-field> - </div> - <button mat-button class="btn-primary">Check Plan (DARS)</button> - <button id="menu-toggle-btn" mat-button (click)="sidenav.toggle()"> - <i *ngIf="sidenav.opened" class="material-icons">chevron_right</i> - <i *ngIf="!sidenav.opened" class="material-icons">chevron_left</i> - </button> - </div> + <mat-sidenav-container hasBackdrop="false"> + <!-- Secondary side nav used after #leftSideNav is shown --> + <mat-sidenav #leftSideNav2 position="start" mode="over" [opened]="false"> + <div>sidenav 3</div> + </mat-sidenav> + + <mat-sidenav-content> + <div fxLayout="row" fxLayout.lt-sm="column" fxLayoutGap="20px" fxLayoutAlign="start center" style="margin: 24px 0px 24px 24px;"> + <mat-form-field> + <mat-select placeholder="Degree Plans" [disableOptionCentering]="true" [value]="selectedDegreePlan"> + <mat-option *ngFor="let degreePlan of degreePlans" [value]="degreePlan.roadmapId"> + {{ degreePlan.name }} + </mat-option> + </mat-select> + </mat-form-field> + <button mat-button class="btn-primary">Check Plan (DARS)</button> + <button id="menu-toggle-btn" mat-button (click)="rightSideNav.toggle()"> + <i *ngIf="rightSideNav.opened" class="material-icons">chevron_right</i> + <i *ngIf="!rightSideNav.opened" class="material-icons">chevron_left</i> + </button> + </div> - <div fxLayout="column" fxLayoutGap="20px" fxLayoutAlign="start stretch" style="margin: 24px"> + <div fxLayout="column" fxLayoutGap="20px" fxLayoutAlign="start stretch" style="margin: 24px"> + <mat-accordion> + <mat-expansion-panel *ngFor="let year of termsByAcademicYear | keyvalue" class="year-container"> <!--[expanded]="true"--> + <mat-expansion-panel-header> + <mat-panel-title> + {{ termsByAcademicYear[year.key].year | academicYearState }} + </mat-panel-title> + </mat-expansion-panel-header> + <div fxLayout="row" fxLayout.lt-md="column" fxLayoutGap="20px" fxLayoutAlign="start stretch"> + <cse-term-container + *ngFor="let term of termsByAcademicYear[year.key].terms | keyvalue" + [term]="termsByAcademicYear[year.key].terms[term.key]" + [courses]="getCoursesByTerm(year.key + term.key)" + fxFlex="33%" + ></cse-term-container> + </div> + </mat-expansion-panel> + </mat-accordion> + </div> + </mat-sidenav-content> - <mat-accordion> - <mat-expansion-panel *ngFor="let year of termsByAcademicYear | keyvalue" class="year-container"> <!--[expanded]="true"--> - <mat-expansion-panel-header> - <mat-panel-title> - {{ termsByAcademicYear[year.key].year | academicYearState }} - </mat-panel-title> - </mat-expansion-panel-header> - <div fxLayout="row" fxLayout.lt-md="column" fxLayoutGap="20px" fxLayoutAlign="start stretch"> - <app-term-container - *ngFor="let term of termsByAcademicYear[year.key].terms | keyvalue" - [term]="termsByAcademicYear[year.key].terms[term.key]" - [courses]="getCoursesByTerm(year.key + term.key)" - fxFlex="33%" - ></app-term-container> - </div> - </mat-expansion-panel> - </mat-accordion> - </div> + </mat-sidenav-container> </mat-sidenav-content> + </mat-sidenav-container> diff --git a/src/app/degree-planner/degree-planner.component.spec.ts b/src/app/degree-planner/degree-planner.component.spec.ts index b68f7ee..5ceba80 100644 --- a/src/app/degree-planner/degree-planner.component.spec.ts +++ b/src/app/degree-planner/degree-planner.component.spec.ts @@ -1,6 +1,17 @@ +import { NO_ERRORS_SCHEMA } from '@angular/core'; import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { RouterTestingModule } from '@angular/router/testing'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; + +import { SharedModule } from '@app/shared/shared.module'; +import { CoreModule } from '@app/core/core.module'; +import { SharedDegreePlannerModule } from './shared/shared.module'; import { DegreePlannerComponent } from './degree-planner.component'; +import { DataService } from '@app/core/data.service'; +import { HttpClient } from '@angular/common/http'; +import { HttpHandler } from '@angular/common/http'; + describe('DegreePlannerComponent', () => { let component: DegreePlannerComponent; @@ -8,7 +19,10 @@ describe('DegreePlannerComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ DegreePlannerComponent ] + imports: [RouterTestingModule, CoreModule, SharedModule, SharedDegreePlannerModule, BrowserAnimationsModule], + declarations: [DegreePlannerComponent], + providers: [DataService, HttpClient, HttpHandler], + schemas: [NO_ERRORS_SCHEMA] }).compileComponents(); })); diff --git a/src/app/degree-planner/degree-planner.component.ts b/src/app/degree-planner/degree-planner.component.ts index a78f67c..eed02df 100644 --- a/src/app/degree-planner/degree-planner.component.ts +++ b/src/app/degree-planner/degree-planner.component.ts @@ -2,11 +2,10 @@ import { Component } from '@angular/core'; import { DataService } from '../core/data.service'; import { DegreePlan } from '../core/models/degree-plan'; -import { Course } from '../core/models/course'; import { Term } from '../core/models/term'; @Component({ - selector: 'app-degree-planner', + selector: 'cse-degree-planner', templateUrl: './degree-planner.component.html', styleUrls: ['./degree-planner.component.scss'] }) diff --git a/src/app/degree-planner/degree-planner.module.ts b/src/app/degree-planner/degree-planner.module.ts index 640702d..54cc17e 100644 --- a/src/app/degree-planner/degree-planner.module.ts +++ b/src/app/degree-planner/degree-planner.module.ts @@ -1,7 +1,7 @@ import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; + import { DegreePlannerComponent } from './degree-planner.component'; -import { SharedModule } from '../shared/shared.module'; +import { SharedModule } from '@app/shared/shared.module'; import {SharedDegreePlannerModule} from './shared/shared.module'; import { DegreePlannerRoutingModule } from './degree-planner.routing.module'; import { TermContainerComponent } from './term-container/term-container.component'; @@ -10,10 +10,9 @@ import { FavoritesContainerComponent } from './favorites-container/favorites-con @NgModule({ imports: [ - CommonModule, SharedModule, - SharedDegreePlannerModule, - DegreePlannerRoutingModule + DegreePlannerRoutingModule, + SharedDegreePlannerModule ], declarations: [ DegreePlannerComponent, diff --git a/src/app/degree-planner/favorites-container/favorites-container.component.spec.ts b/src/app/degree-planner/favorites-container/favorites-container.component.spec.ts index 541bfaf..a6c3734 100644 --- a/src/app/degree-planner/favorites-container/favorites-container.component.spec.ts +++ b/src/app/degree-planner/favorites-container/favorites-container.component.spec.ts @@ -3,23 +3,23 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { FavoritesContainerComponent } from './favorites-container.component'; describe('FavoritesContainerComponent', () => { - let component: FavoritesContainerComponent; - let fixture: ComponentFixture<FavoritesContainerComponent>; + let component: FavoritesContainerComponent; + let fixture: ComponentFixture<FavoritesContainerComponent>; - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ FavoritesContainerComponent ] - }) - .compileComponents(); - })); + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ FavoritesContainerComponent ] + }) + .compileComponents(); + })); - beforeEach(() => { - fixture = TestBed.createComponent(FavoritesContainerComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); + beforeEach(() => { + fixture = TestBed.createComponent(FavoritesContainerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); - it('should create', () => { - expect(component).toBeTruthy(); - }); + it('should create', () => { + expect(component).toBeTruthy(); + }); }); diff --git a/src/app/degree-planner/favorites-container/favorites-container.component.ts b/src/app/degree-planner/favorites-container/favorites-container.component.ts index 7fcae1e..12a3734 100644 --- a/src/app/degree-planner/favorites-container/favorites-container.component.ts +++ b/src/app/degree-planner/favorites-container/favorites-container.component.ts @@ -1,15 +1,15 @@ import { Component, OnInit } from '@angular/core'; @Component({ - selector: 'app-favorites-container', - templateUrl: './favorites-container.component.html', - styleUrls: ['./favorites-container.component.scss'] + selector: 'cse-favorites-container', + templateUrl: './favorites-container.component.html', + styleUrls: ['./favorites-container.component.scss'] }) export class FavoritesContainerComponent implements OnInit { - constructor() { } + constructor() { } - ngOnInit() { - } + ngOnInit() { + } } diff --git a/src/app/degree-planner/shared/course-item/course-item.component.spec.ts b/src/app/degree-planner/shared/course-item/course-item.component.spec.ts index 699fc04..f25fe80 100644 --- a/src/app/degree-planner/shared/course-item/course-item.component.spec.ts +++ b/src/app/degree-planner/shared/course-item/course-item.component.spec.ts @@ -1,25 +1,64 @@ +import { NO_ERRORS_SCHEMA } from '@angular/core'; import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { RouterTestingModule } from '@angular/router/testing'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; + +import { Course } from '@app/core/models/course'; +import { SharedModule } from '@app/shared/shared.module'; +import { CoreModule } from '@app/core/core.module'; import { CourseItemComponent } from './course-item.component'; describe('CourseItemComponent', () => { - let component: CourseItemComponent; - let fixture: ComponentFixture<CourseItemComponent>; + let component: CourseItemComponent; + let fixture: ComponentFixture<CourseItemComponent>; - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ CourseItemComponent ] - }) - .compileComponents(); - })); + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [RouterTestingModule, BrowserAnimationsModule, CoreModule, SharedModule], + declarations: [CourseItemComponent], + schemas: [NO_ERRORS_SCHEMA] + }) + .compileComponents(); + })); - beforeEach(() => { - fixture = TestBed.createComponent(CourseItemComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); + beforeEach(() => { + fixture = TestBed.createComponent(CourseItemComponent); + component = fixture.componentInstance; + const course: Course = { + 'id': null, + 'courseId': '022973', + 'termCode': null, + 'topicId': 0, + 'title': 'A Wisconsin Experience Seminar', + 'subjectCode': '270', + 'catalogNumber': '125', + 'credits': 0, + 'creditMin': 0, + 'creditMax': 0, + 'grade': 'A', + 'classNumber': '53611', + 'courseOrder': 0, + 'honors': null, + 'waitlist': null, + 'relatedClassNumber1': null, + 'relatedClassNumber2': null, + 'classPermissionNumber': null, + 'sessionCode': null, + 'validationResults': [], + 'enrollmentResults': [], + 'pendingEnrollments': [], + 'details': null, + 'classMeetings': null, + 'enrollmentOptions': null, + 'packageEnrollmentStatus': null, + 'creditRange': null + }; + component.course = course; + fixture.detectChanges(); + }); - it('should create', () => { - expect(component).toBeTruthy(); - }); + it('should create', () => { + expect(component).toBeTruthy(); + }); }); diff --git a/src/app/degree-planner/shared/course-item/course-item.component.ts b/src/app/degree-planner/shared/course-item/course-item.component.ts index 8eb107b..0e1cc14 100644 --- a/src/app/degree-planner/shared/course-item/course-item.component.ts +++ b/src/app/degree-planner/shared/course-item/course-item.component.ts @@ -2,7 +2,7 @@ import { Component, Input } from '@angular/core'; import { Course } from '../../../core/models/course'; @Component({ - selector: 'app-course-item', + selector: 'cse-course-item', templateUrl: './course-item.component.html', styleUrls: ['./course-item.component.scss'] }) diff --git a/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.html b/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.html index 2e4babd..a5d771b 100644 --- a/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.html +++ b/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.html @@ -37,6 +37,6 @@ <h3>Favorites</h3> </mat-panel-title> </mat-expansion-panel-header> - <app-favorites-container></app-favorites-container> + <cse-favorites-container></cse-favorites-container> </mat-expansion-panel> </div> \ No newline at end of file diff --git a/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.scss b/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.scss index 8b5c378..41019fe 100644 --- a/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.scss +++ b/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.scss @@ -1,5 +1,5 @@ @import '~@angular/material/theming'; -@import '~src/assets/material-theme.scss'; +@import 'assets/material-theme.scss'; #sidenav-container { height: 100vh; diff --git a/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.spec.ts b/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.spec.ts index 54b0fec..e0d0e51 100644 --- a/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.spec.ts +++ b/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.spec.ts @@ -1,4 +1,10 @@ +import { NO_ERRORS_SCHEMA } from '@angular/core'; import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { RouterTestingModule } from '@angular/router/testing'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; + +import { SharedModule } from '@app/shared/shared.module'; +import { CoreModule } from '@app/core/core.module'; import { SidenavMenuItemComponent } from './sidenav-menu-item.component'; @@ -8,7 +14,9 @@ describe('SidenavMenuItemComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ SidenavMenuItemComponent ] + imports: [RouterTestingModule, BrowserAnimationsModule, CoreModule, SharedModule], + declarations: [SidenavMenuItemComponent], + schemas: [NO_ERRORS_SCHEMA] }) .compileComponents(); })); diff --git a/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.ts b/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.ts index eb207a5..eb57284 100644 --- a/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.ts +++ b/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit } from '@angular/core'; @Component({ - selector: 'app-sidenav-menu-item', + selector: 'cse-sidenav-menu-item', templateUrl: './sidenav-menu-item.component.html', styleUrls: ['./sidenav-menu-item.component.scss'] }) diff --git a/src/app/degree-planner/term-container/term-container.component.html b/src/app/degree-planner/term-container/term-container.component.html index 5e7fbd2..bf1ab92 100644 --- a/src/app/degree-planner/term-container/term-container.component.html +++ b/src/app/degree-planner/term-container/term-container.component.html @@ -3,7 +3,7 @@ <h2>{{ term.termCode | getTermDescription }}</h2><p class="text-right semi-bold credits">{{getTotalCredits()}} Credits</p> </div> <div cdkDropList> - <app-course-item *ngFor="let course of courses" [course]="course" [status]="'complete'" cdkDrag></app-course-item> + <cse-course-item *ngFor="let course of courses" [course]="course" [status]="'complete'" cdkDrag></cse-course-item> <p *ngIf="!courses" class="no-courses text-center semi-bold">No Courses Taken</p> </div> </mat-card> \ No newline at end of file diff --git a/src/app/degree-planner/term-container/term-container.component.spec.ts b/src/app/degree-planner/term-container/term-container.component.spec.ts index 5f26e0c..a1c835c 100644 --- a/src/app/degree-planner/term-container/term-container.component.spec.ts +++ b/src/app/degree-planner/term-container/term-container.component.spec.ts @@ -1,25 +1,45 @@ +import { NO_ERRORS_SCHEMA } from '@angular/core'; import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { RouterTestingModule } from '@angular/router/testing'; + +import { SharedModule } from '@app/shared/shared.module'; +import { CoreModule } from '@app/core/core.module'; import { TermContainerComponent } from './term-container.component'; +import { Term } from '@app/core/models/term'; describe('TermContainerComponent', () => { - let component: TermContainerComponent; + let termComponent: TermContainerComponent; let fixture: ComponentFixture<TermContainerComponent>; beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ TermContainerComponent ] + imports: [RouterTestingModule, CoreModule, SharedModule], + declarations: [TermContainerComponent], + schemas: [NO_ERRORS_SCHEMA] }) .compileComponents(); })); beforeEach(() => { fixture = TestBed.createComponent(TermContainerComponent); - component = fixture.componentInstance; + termComponent = fixture.componentInstance; + const term: Term = { + academicYear: '2018-19', + beginDate: 1545631200000, + endDate: 1557723599999, + instructionBeginDate: 1548136800000, + instructionEndDate: 1556945999999, + longDescription: 'Spring 2018-2019', + pastTerm: false, + shortDescription: '2019 Sprng', + termCode: '1194' + }; + termComponent.term = term; fixture.detectChanges(); }); it('should create', () => { - expect(component).toBeTruthy(); + expect(termComponent).toBeTruthy(); }); }); diff --git a/src/app/degree-planner/term-container/term-container.component.ts b/src/app/degree-planner/term-container/term-container.component.ts index f29680e..abbdc40 100644 --- a/src/app/degree-planner/term-container/term-container.component.ts +++ b/src/app/degree-planner/term-container/term-container.component.ts @@ -4,7 +4,7 @@ import { Course } from '../../core/models/course'; import { CdkDragDrop, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop'; @Component({ - selector: 'app-term-container', + selector: 'cse-term-container', templateUrl: './term-container.component.html', styleUrls: ['./term-container.component.scss'] }) diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index 34514e3..0abddb9 100644 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -1,16 +1,16 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; + import { FlexLayoutModule } from '@angular/flex-layout'; -import { - MatButtonModule, - MatMenuModule, - MatIconModule, - MatTabsModule, - MatExpansionModule, - MatCardModule, - MatSelectModule, - MatSidenavModule } from '@angular/material'; +import { MatButtonModule } from '@angular/material/button'; +import { MatMenuModule } from '@angular/material/menu'; +import { MatIconModule } from '@angular/material/icon'; +import { MatTabsModule } from '@angular/material/tabs'; +import { MatCardModule } from '@angular/material/card'; +import { MatSelectModule } from '@angular/material/select'; +import { MatSidenavModule } from '@angular/material/sidenav'; +import { MatExpansionModule } from '@angular/material/expansion'; import { GetTermDescriptionPipe } from './get-term-description.pipe'; import { AcademicYearStatePipe } from './academic-year-state.pipe'; diff --git a/src/assets/sass/general.scss b/src/assets/sass/general.scss index 7ed1e86..905649d 100644 --- a/src/assets/sass/general.scss +++ b/src/assets/sass/general.scss @@ -1,4 +1,4 @@ -@import '~src/assets/material-theme.scss'; +@import 'assets/material-theme.scss'; body { background-color: #ccc; diff --git a/src/index.html b/src/index.html index 303a981..952cbd8 100644 --- a/src/index.html +++ b/src/index.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8"> - <title>Angular Starter</title> + <title>MyUW | Course Search & Enroll</title> <base href="/"> <meta name="viewport" content="width=device-width, initial-scale=1"> @@ -17,6 +17,6 @@ </script> </head> <body> - <app-root></app-root> + <cse-root></cse-root> </body> </html> diff --git a/src/tslint.json b/src/tslint.json index 52e2c1a..700a7f7 100644 --- a/src/tslint.json +++ b/src/tslint.json @@ -4,13 +4,13 @@ "directive-selector": [ true, "attribute", - "app", + "cse", "camelCase" ], "component-selector": [ true, "element", - "app", + "cse", "kebab-case" ] } diff --git a/tsconfig.json b/tsconfig.json index 916247e..bcd4f08 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,11 @@ { "compileOnSave": false, "compilerOptions": { - "baseUrl": "./", + "baseUrl": "./src", + "paths": { + "@app/*": ["app/*"], + "@env/*": ["environments/*"] + }, "outDir": "./dist/out-tsc", "sourceMap": true, "declaration": false, -- GitLab