From 044b72c8202334ac78fa033a6d74331b8f549b9a Mon Sep 17 00:00:00 2001 From: Matthew Ross Date: Sat, 30 Jun 2018 08:33:22 -0400 Subject: [PATCH] WIP - New context menu impl --- .travis.yml | 2 +- README.md | 8 +- package-lock.json | 1269 ++++++++++++++--- package.json | 38 +- src/api/composer.lock | 10 +- src/app/app.api-http.ts | 6 +- src/app/board/board.component.ts | 36 +- src/app/board/board.service.ts | 68 + src/app/board/column/column.component.html | 6 +- src/app/board/column/column.component.ts | 32 +- src/app/board/task/task.component.html | 68 +- src/app/board/task/task.component.ts | 186 +-- .../context-menu-item.component.html | 7 +- .../context-menu-item.component.ts | 16 +- .../context-menu/context-menu.component.html | 2 +- .../context-menu/context-menu.component.ts | 42 +- src/app/shared/models/task.model.ts | 3 + src/scss/_context-menu.scss | 17 + test/app/app.api-http.spec.ts | 8 +- .../context-menu.component.spec.ts | 2 - 20 files changed, 1363 insertions(+), 463 deletions(-) diff --git a/.travis.yml b/.travis.yml index a0310b5..f09c203 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,5 +20,5 @@ after_success: - touch fakeconfig - echo "OAUTH_ACCESS_TOKEN=$OAUTH_ACCESS_TOKEN" > fakeconfig - ./dropbox_uploader.sh -f fakeconfig upload coverage/api coverage-$(php version.php)/ - - ./dropbox_uploader.sh -f fakeconfig upload coverage/app coverage-$(php version.php)/ + - ./dropbox_uploader.sh -f fakeconfig upload coverage/app/lcov-report coverage-$(php version.php)/ diff --git a/README.md b/README.md index 0910913..6678997 100644 --- a/README.md +++ b/README.md @@ -155,11 +155,11 @@ Because I like seeing the numbers. Language | Files | Blank | Comment | Code -------------|--------:|---------:|--------:|---------: -TypeScript | 64 | 925 | 86 | 4091 +TypeScript | 63 | 904 | 78 | 3932 PHP | 19 | 624 | 27 | 1997 -HTML | 19 | 152 | 1 | 1422 -SASS | 14 | 269 | 12 | 1215 -__SUM:__ | __116__ | __1970__ | __126__ | __8725__ +HTML | 20 | 159 | 0 | 1479 +SASS | 14 | 269 | 12 | 1211 +__SUM:__ | __116__ | __1956__ | __117__ | __8619__ Command: `cloc --exclude-dir=vendor --exclude-ext=json src/` diff --git a/package-lock.json b/package-lock.json index bb6e6a9..31fd2cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,25 +5,25 @@ "requires": true, "dependencies": { "@angular-devkit/architect": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.6.5.tgz", - "integrity": "sha512-HlCCnpg301XGbNAycPCadZlSVCOHlFtw2qz2zzNBIWW2Cbi9q3eazWCg/OeD237qgJ8hxvGSkOi7vWG2AoYkIg==", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.6.8.tgz", + "integrity": "sha512-ZKTm/zC61iY9IBHOEAKoMSzZpvhkmv+1O/HHzpHEuR551jCzu6vSyCmMY9Z7GBcccscCV+hjeSMwgFrFRcqlkw==", "dev": true, "requires": { - "@angular-devkit/core": "0.6.5", + "@angular-devkit/core": "0.6.8", "rxjs": "^6.0.0" } }, "@angular-devkit/build-angular": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.6.5.tgz", - "integrity": "sha512-+ikh/nntfIgpIV5meunbWKdQQ0nlx/hR94UDo0YwpZjJPScEBrd3i3nhoAw6iTK1PfoGwYXSzZTnTJyQAGMUAg==", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.6.8.tgz", + "integrity": "sha512-VGqYAk8jpISraz2UHfsDre270NOUmV0CTSZw2p9sm5g/XIr5m+IHetFZz3gpoAr9+If2aFTs8Rt3sGdCRzwBqA==", "dev": true, "requires": { - "@angular-devkit/architect": "0.6.5", - "@angular-devkit/build-optimizer": "0.6.5", - "@angular-devkit/core": "0.6.5", - "@ngtools/webpack": "6.0.5", + "@angular-devkit/architect": "0.6.8", + "@angular-devkit/build-optimizer": "0.6.8", + "@angular-devkit/core": "0.6.8", + "@ngtools/webpack": "6.0.8", "ajv": "~6.4.0", "autoprefixer": "^8.4.1", "cache-loader": "^1.2.2", @@ -92,21 +92,29 @@ } }, "@angular-devkit/build-optimizer": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.6.5.tgz", - "integrity": "sha512-GXV3XLHvzmXwBRcpaXKiMrAFq0t8VTq9GwsQk9W1diUstlNCnuNSmwj1fpJxR23pPsH+5mvrrfWYdoXt8TWzHw==", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.6.8.tgz", + "integrity": "sha512-of5syQbv3uNPp4AQkfRecfnp8AE8kvffbfYi+FFPZ6OGr7e59T1fGwk6+Zgb2qQFQg8HO2tzWI/uygtLIqmbmw==", "dev": true, "requires": { "loader-utils": "^1.1.0", "source-map": "^0.5.6", - "typescript": "~2.7.2", + "typescript": "~2.9.1", "webpack-sources": "^1.1.0" + }, + "dependencies": { + "typescript": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.1.tgz", + "integrity": "sha512-h6pM2f/GDchCFlldnriOhs1QHuwbnmj6/v7499eMHqPeW4V2G0elua2eIc2nu8v2NdHV0Gm+tzX83Hr6nUFjQA==", + "dev": true + } } }, "@angular-devkit/core": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-0.6.5.tgz", - "integrity": "sha512-DpowzV6ObjVJb6ccElAD5rlqL9BN32ZGspg14YVyXf9mlmcNw3gm+P9BGIhuwJ8rt9fqmse87W59/Z2MLUTVkQ==", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-0.6.8.tgz", + "integrity": "sha512-rkIa1OSVWTt4g9leLSK/PsqOj3HZbDKHbZjqlslyfVa3AyCeiumFoOgViOVXlYgPX3HHDbE5uH24nyUWSD8uww==", "dev": true, "requires": { "ajv": "~6.4.0", @@ -764,9 +772,9 @@ } }, "@angular/animations": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-6.0.4.tgz", - "integrity": "sha512-Ro1XEwShk8XRAogfu73fKLTBLnND1s+MGhN+ymwr7ib9hqxVr7jMNE+MXPqG2/1BX9c+7NHb30B8G4woQn62vw==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-6.0.7.tgz", + "integrity": "sha512-yOig45sxzpEmlXy+eFgh2v2yxoE/Hh9rn7BX82uj71yobSpCYoe58AEOay1cu0FCcLi/P5qltHepDrRRxNxPMw==", "requires": { "tslib": "^1.9.0" } @@ -1142,25 +1150,25 @@ } }, "@angular/common": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-6.0.4.tgz", - "integrity": "sha512-z2UE6a43u49omsqjzwdHhwD+wpCPauuD13FMkVQMLwzugKhNri0LjMk5I0I9xLz9OyXICm2B+wPAQN4d07savg==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-6.0.7.tgz", + "integrity": "sha512-MUCCs3FLwqyp5wuvkUTHVGMTd3bNGDxD5IJNvaLgVliGe4r0IlETRXYqyRPs7gdVFPbiJ97P1DUONArj9xL9XA==", "requires": { "tslib": "^1.9.0" } }, "@angular/compiler": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-6.0.4.tgz", - "integrity": "sha512-qwjuPacuRKUroD+xev653mljV9Jwhi2tvwGo/cVadq0isJ2rVH1hO6sa1FWFnNf1KPnyolMobZlMgg8DFW/yRw==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-6.0.7.tgz", + "integrity": "sha512-J9I2U4NiWIBXl0ZOJkBW5G7xXhphggSirTwFLD4yKCTeJXgyldZytJZRkDUx1uouZtI2/PycvaOZoRr85N67AA==", "requires": { "tslib": "^1.9.0" } }, "@angular/compiler-cli": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-6.0.4.tgz", - "integrity": "sha512-bkN21JJrsbIdXNfOc9I9iB7AETUe4/QvApC25R3/pERSyhkK7UNNHTqg4FY5xMdSxlZd1ccWj8rvSbS+hFbTBw==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-6.0.7.tgz", + "integrity": "sha512-nDIo4TtE3oXgZiQ5vJEcr5fi3FuXRDJQSOeOQinpCrtEt3s4pU5WAX5DLFGPSD2C/EXRDvHZgF9OTJeu5U4ErQ==", "dev": true, "requires": { "chokidar": "^1.4.2", @@ -1178,66 +1186,66 @@ } }, "@angular/core": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-6.0.4.tgz", - "integrity": "sha512-WCW8wyRoIKkjGjOjVLFpUyhQw/K0//s3W0qo1/vH6m9njC63jP/VP+2Xnt8bdtgeET2NYUeyl+w/0vUXqYlnEA==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-6.0.7.tgz", + "integrity": "sha512-aZ0NvbYsMGqg0zUu7+9vuDxnGzwe++RsBBhlwHZHz1ZZwJmU6VJhUhaI+MuKC7rHyFFr9vUxvJ7ilhGaK2+J7A==", "requires": { "tslib": "^1.9.0" } }, "@angular/forms": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-6.0.4.tgz", - "integrity": "sha512-JcKyCCkAwF3NlWuwPxtpRhFX/8QbFUkA4W0N62L+Odm8G0/P4QhMw/99o5kRs5xrsQRVyFlGvdYOrkgDyyZkGg==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-6.0.7.tgz", + "integrity": "sha512-bFRdWxLmTiG7z0yZaq22oBHTgVSpJwUJEbZ5ieu21JqTgIDYne+YR/xCJrPj+P2S5NDlEK84g/4y4GoNt/thhQ==", "requires": { "tslib": "^1.9.0" } }, "@angular/http": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@angular/http/-/http-6.0.4.tgz", - "integrity": "sha512-bq7cS0/5hM3Af3FolEe7HpKP19/7MJWIPGi5k9rYCGM4dXKFiKa+LA/SbXE0DMiKxhAQbZDwQ9HN04r70DRyBQ==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/@angular/http/-/http-6.0.7.tgz", + "integrity": "sha512-zk/kjsfEXjEQIRpmsjuJO5wgFNxj7JGY6Bq0nianZuyCuj/mlm0zflww2NLX4O22IMnvVSun2Kx+kDY44n4hfw==", "requires": { "tslib": "^1.9.0" } }, "@angular/language-service": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-6.0.4.tgz", - "integrity": "sha512-LyFh/sFtnyjJJYO5UKM31nGSSkmGYFMwqzwbG+l0QNQXNoa9jj+OApvu0oOY5F0WP9DBrOAzj74j2M5olprtMQ==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-6.0.7.tgz", + "integrity": "sha512-R96kTy9Hpy5QPHirJz+5JjnzjJZdwbGwZ6rpq79Fe15RYaYfMjFTAAhmmOgWrnTFBug0QWBWyKV7950JcJIr3Q==", "dev": true }, "@angular/platform-browser": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-6.0.4.tgz", - "integrity": "sha512-4y6rSqOLuBs+RL0CIM+RZ5T8a5Tm1NisZcTUGvM8lVYPNkqTzNfHQXhBq8mTgRw9JopEwOj+UEqBbgrNX715yQ==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-6.0.7.tgz", + "integrity": "sha512-CASH1CDr2DD+aBrWN9qpDDFTI3H6p/oqH23h28bEV+LZl7F57r4sj8KXKgaE+mcrOFRQqXTAlPoq3hRCLmhtVA==", "requires": { "tslib": "^1.9.0" } }, "@angular/platform-browser-dynamic": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-6.0.4.tgz", - "integrity": "sha512-uh7MoQi9kyKPFHrD7HPOU5gWyhF4pPJuGltyMTOtM/f5TNL9QQI2EugijKnnSFLQ8+7UQjmFAVeRqH9jylhIyQ==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-6.0.7.tgz", + "integrity": "sha512-8G45A9w8UJvX3vPEHqeJHt/sd0zu6w1M+rsnOCo78r35SjsLbrmDNhc4VkLZFJ+iNjgPWtNtdpeXQqtTHE46yw==", "requires": { "tslib": "^1.9.0" } }, "@angular/router": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-6.0.4.tgz", - "integrity": "sha512-IKUtbbRtHN8I+Hp8/pLqBPyXJmQHrPFGzKU3H43TovD++mmT5AaYVCeJgkGUB//wjtLN3y0X/yrmyWFWcN35Gw==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-6.0.7.tgz", + "integrity": "sha512-KuQBeIgfiwV3bLafepMhYVJQIAF8cTckCudFh5Z0OqckJgGsWSgtvEdtBctPi+lzt7OQBi7Ym2rOv3X0dOvu0Q==", "requires": { "tslib": "^1.9.0" } }, "@ngtools/webpack": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-6.0.5.tgz", - "integrity": "sha512-bJwsBW9X9mX8nk8JJDyNZuglL8Ym/RQVM1kmLvUztgQSAMnBo046zDWEkjamXxxiTvznwHpwQTVgUzEEVdAQjg==", + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-6.0.8.tgz", + "integrity": "sha512-jorGpTd82ILbyUwg4JQekovHFaYwSMlZan4f7x+sd3+2WgyL3Z1+ZbVSGKvXZWKS/mAVx7eLkRikzJkuC4FgHw==", "dev": true, "requires": { - "@angular-devkit/core": "0.6.5", + "@angular-devkit/core": "0.6.8", "tree-kill": "^1.0.0", "webpack-sources": "^1.1.0" } @@ -1918,9 +1926,9 @@ } }, "@types/jasmine": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.8.7.tgz", - "integrity": "sha512-RdbrPcW1aD78UmdLiDa9ZCKrbR5Go8PXh6GCpb4oIOkWVEusubSJJDrP4c5RYOu8m/CBz+ygZpicj6Pgms5a4Q==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.8.8.tgz", + "integrity": "sha512-OJSUxLaxXsjjhob2DBzqzgrkLmukM3+JMpRp0r0E4HTdT1nwDCWhaswjYxazPij6uOdzHCJfNbDjmQ1/rnNbCg==", "dev": true }, "@types/jasminewd2": { @@ -1933,9 +1941,9 @@ } }, "@types/node": { - "version": "10.1.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.1.4.tgz", - "integrity": "sha512-GpQxofkdlHYxjHad98UUdNoMO7JrmzQZoAaghtNg14Gwg7YkohcrCoJEcEMSgllx4VIZ+mYw7ZHjfaeIagP/rg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.5.0.tgz", + "integrity": "sha512-baXPuqA7EVcBUpA5so2K26DTzk7NCWBc9xrPMu9PbUMwgusJRm9zJBPhiDmJVEcnTQ3aOxUZeuFHpd9qMYDNRg==", "dev": true }, "@types/q": { @@ -2179,9 +2187,9 @@ } }, "acorn": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", - "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.6.2.tgz", + "integrity": "sha512-zUzo1E5dI2Ey8+82egfnttyMlMZ2y0D8xOCO3PNPPlYXpl8NZvF6Qk9L9BEtJs+43FqEmfBViDqc5d1ckRDguw==", "dev": true }, "acorn-dynamic-import": { @@ -2371,9 +2379,9 @@ } }, "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=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.1.0.tgz", + "integrity": "sha1-mL9lmTJ+zqGZMJhm6BQDaP0uZGo=", "dev": true }, "append-transform": { @@ -2537,6 +2545,23 @@ "dev": true, "requires": { "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "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" + } + } } }, "assert-plus": { @@ -2551,9 +2576,9 @@ "dev": true }, "ast-types": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.3.tgz", - "integrity": "sha512-XA5o5dsNw8MhyW0Q7MWXJWc4oOzZKbdsEJq45h7c8q/d9DwWZ5F2ugUc1PuMLPGsUnphCt/cNDHu8JeBbxf1qA==", + "version": "0.11.5", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.5.tgz", + "integrity": "sha512-oJjo+5e7/vEc2FBK8gUalV0pba4L3VdBIs2EKhOLHLcOd2FgQIVQN9xb0eZ9IjEWyAL7vq6fGJxOvVvdCHNyMw==", "dev": true, "optional": true }, @@ -2600,13 +2625,13 @@ "dev": true }, "autoprefixer": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.5.1.tgz", - "integrity": "sha512-0zXQ6OqbnVaplQKkKTASxHFPMNy6WfrXS5QRDJ4zTDxEBB3r7NPDSK4h9KCyQi1tq0tX5MsN4RdzChVBn2k/aw==", + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.6.2.tgz", + "integrity": "sha512-cv9v1mYYBcAnZq4MHseJ9AIdjQmNahnpCpPO46oTkQJS2GggsBp2azHjNpAuQ95Epvsg+AIsyjYhfI9YwFxGSA==", "dev": true, "requires": { "browserslist": "^3.2.8", - "caniuse-lite": "^1.0.30000846", + "caniuse-lite": "^1.0.30000851", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", "postcss": "^6.0.22", @@ -3000,9 +3025,9 @@ } }, "bourbon": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bourbon/-/bourbon-5.0.0.tgz", - "integrity": "sha512-1BOgwfr0dvAqdL3mj0HZbuYJjt/Ilz6fLhSz55kIo9zYTYsQDg4AzrpwepWJoVLY3tKKYV5Z/0dKHEUz3ecXAg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/bourbon/-/bourbon-5.0.1.tgz", + "integrity": "sha512-bLxjuGghrEHVXwymt/tEQmH78NA0XjkRNXKnazQU+OrHMHT48PLB4y3O00x7FkWWwCKzzvReUez+AxRWgr5WSA==", "dev": true }, "bourbon-neat": { @@ -3337,9 +3362,9 @@ } }, "caniuse-lite": { - "version": "1.0.30000846", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000846.tgz", - "integrity": "sha512-qxUOHr5mTaadWH1ap0ueivHd8x42Bnemcn+JutVr7GWmm2bU4zoBhjuv5QdXgALQnnT626lOQros7cCDf8PwCg==", + "version": "1.0.30000853", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000853.tgz", + "integrity": "sha512-vMrE8BED4MJC9IhDJKP8ok6bJUfn5+YHvxwXMYfiPqQOJ3r2B9ihcArlUnXu6yPWf7b3jHqiEBwXZEbrbiFUqg==", "dev": true }, "capture-stack-trace": { @@ -3604,9 +3629,9 @@ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "codelyzer": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-4.3.0.tgz", - "integrity": "sha512-RLMrtLwrBS0dfo2/KTP+2NHofCpzcuh0bEp/A/naqvQonbUL4AW/qWQdbpn8dMNudtpmzEx9eS8KEpGdVPg1BA==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-4.4.2.tgz", + "integrity": "sha512-tW796ECKMAynFtl/yyS5NRYhufbT3CEKjjMQ450kUeCcQlK7OIqD9VGRVwC3gSQSK4VaewCKCaVL0bzv9PhsLg==", "dev": true, "requires": { "app-root-path": "^2.0.1", @@ -3614,7 +3639,15 @@ "cssauron": "^1.4.0", "semver-dsl": "^1.0.1", "source-map": "^0.5.7", - "sprintf-js": "^1.0.3" + "sprintf-js": "^1.1.1" + }, + "dependencies": { + "sprintf-js": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.1.tgz", + "integrity": "sha1-Nr54Mgr+WAH2zqPueLblqrlA6gw=", + "dev": true + } } }, "collection-visit": { @@ -3701,12 +3734,20 @@ "dev": true }, "compressible": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.13.tgz", - "integrity": "sha1-DRAgq5JLL9tNYnmHXH1tq6a6p6k=", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.14.tgz", + "integrity": "sha1-MmxfUH+7BV9UEWeCuWmoG2einac=", "dev": true, "requires": { - "mime-db": ">= 1.33.0 < 2" + "mime-db": ">= 1.34.0 < 2" + }, + "dependencies": { + "mime-db": { + "version": "1.34.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.34.0.tgz", + "integrity": "sha1-RS0Oz/XDA0am3B5kseruDTcZ/5o=", + "dev": true + } } }, "compression": { @@ -4702,9 +4743,9 @@ } }, "es5-ext": { - "version": "0.10.43", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.43.tgz", - "integrity": "sha512-cZd1vezWuTM5qMlasKWqQFioFKwO352nVBzhOTMUf/pKQl5Gcq5EdJzqtSNXKnFQSCJDiQZjCYlYbnzFB657OA==", + "version": "0.10.45", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.45.tgz", + "integrity": "sha512-FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==", "dev": true, "requires": { "es6-iterator": "~2.0.3", @@ -4760,9 +4801,9 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", - "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.10.0.tgz", + "integrity": "sha512-fjUOf8johsv23WuIKdNQU4P9t9jhQ4Qzx6pC2uW890OloK3Zs1ZAoCNpg/2larNF501jLl3UNy0kIRcF6VI22g==", "dev": true, "optional": true, "requires": { @@ -5197,14 +5238,14 @@ } }, "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", "dev": true, "requires": { "is-number": "^2.1.0", "isobject": "^2.0.0", - "randomatic": "^1.1.3", + "randomatic": "^3.0.0", "repeat-element": "^1.1.2", "repeat-string": "^1.5.2" } @@ -5858,12 +5899,14 @@ "mime-db": { "version": "1.27.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "mime-types": { "version": "2.1.15", "bundled": true, "dev": true, + "optional": true, "requires": { "mime-db": "1.27.0" } @@ -5939,7 +5982,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "oauth-sign": { "version": "0.8.2", @@ -6750,9 +6794,9 @@ } }, "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==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.4.tgz", + "integrity": "sha512-A6RlQvvZEtFS5fLU43IDu0QUmBy+fDO9VMdTXvufKwIkt/rFfvICAViCax5fbDO4zdNzaC3/27ZhKUok5bAJyw==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -7343,9 +7387,9 @@ "dev": true }, "ieee754": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz", - "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", "dev": true }, "iferr": { @@ -8331,14 +8375,14 @@ } }, "karma": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/karma/-/karma-2.0.2.tgz", - "integrity": "sha1-TS25QChQpmVR+nhLAWT7CCTtjEs=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/karma/-/karma-2.0.4.tgz", + "integrity": "sha512-32yhTwoi6BZgJZhR78GwhzyFABbYG/1WwQqYgY7Vh96Demvua2jM3+FyRltIMTUH/Kd5xaQvDw2L7jTvkYFeXg==", "dev": true, "requires": { "bluebird": "^3.3.0", "body-parser": "^1.16.1", - "chokidar": "^1.4.1", + "chokidar": "^2.0.3", "colors": "^1.1.0", "combine-lists": "^1.0.0", "connect": "^3.6.0", @@ -8351,7 +8395,7 @@ "http-proxy": "^1.13.0", "isbinaryfile": "^3.0.0", "lodash": "^4.17.4", - "log4js": "^2.3.9", + "log4js": "^2.5.3", "mime": "^1.3.4", "minimatch": "^3.0.2", "optimist": "^0.6.1", @@ -8365,11 +8409,862 @@ "useragent": "2.2.1" }, "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.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "chokidar": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" + } + }, + "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": { + "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" + } + }, + "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" + } + }, + "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 + } + } + }, + "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" + }, + "dependencies": { + "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" + } + }, + "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" + } + } + } + }, + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "fsevents": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "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 + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "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.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": 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.5.1", + "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.2", + "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.21", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": "^2.1.0" + } + }, + "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 + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": 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 + }, + "minipass": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.0", + "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.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.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.3", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", + "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 + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": 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.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.5.1", + "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.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.0.5" + } + }, + "safe-buffer": { + "version": "5.1.1", + "bundled": true, + "dev": 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.5.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, + "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, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true, + "dev": true + } + } + }, + "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-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-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": "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" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "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.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, "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 + }, + "upath": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "dev": true } } }, @@ -8770,6 +9665,12 @@ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, "lodash.mergewith": { "version": "4.6.1", "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", @@ -8791,9 +9692,9 @@ } }, "log4js": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-2.6.1.tgz", - "integrity": "sha512-BOoWTr8gxJ9XRkQr/f68KUciHR6qnLESgbXuoD7VAhtu/aMq5kD1WD7IFMMaKjCDKLUHsjwT3V2cw34ENiJKig==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-2.10.0.tgz", + "integrity": "sha512-NnhN9PjFF9zhxinAjlmDYvkqqrIW+yA3LLJAoTJ3fs6d1zru86OqQHfsxiUcc1kRq3z+faGR4DeyXUfiNbVxKQ==", "dev": true, "requires": { "amqplib": "^0.5.2", @@ -9026,9 +9927,9 @@ } }, "mailgun-js": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/mailgun-js/-/mailgun-js-0.18.0.tgz", - "integrity": "sha512-o0P6jjZlx5CQj12tvVgDTbgjTqVN0+5h6/6P1+3c6xmozVKBwniQ6Qt3MkCSF0+ueVTbobAfWyGpWRZMJu8t1g==", + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/mailgun-js/-/mailgun-js-0.18.1.tgz", + "integrity": "sha512-lvuMP14u24HS2uBsJEnzSyPMxzU2b99tQsIx1o6QNjqxjk8b3WvR+vq5oG1mjqz/IBYo+5gF+uSoDS0RkMVHmg==", "dev": true, "optional": true, "requires": { @@ -9113,6 +10014,12 @@ "resolved": "https://registry.npmjs.org/marked/-/marked-0.4.0.tgz", "integrity": "sha512-tMsdNBgOsrUophCAFQl0XPe6Zqk/uy9gnue+jIIKhykO51hxyu6uNx7zBPy0+y/WKYVZZMspV9YeXLNdKk+iYw==" }, + "math-random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "dev": true + }, "md5.js": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", @@ -10562,9 +11469,9 @@ "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==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { "p-try": "^1.0.0" @@ -11438,43 +12345,27 @@ "dev": true }, "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", + "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", "dev": true, "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.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" - }, - "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" - } - } - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true }, "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" - } + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, @@ -11979,9 +12870,9 @@ } }, "rxjs": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.2.0.tgz", - "integrity": "sha512-qBzf5uu6eOKiCZuAE0SgZ0/Qp+l54oeVxFfC2t+mJ2SFI6IB8gmMdJHs5DUMu5kqifqcCtsKS2XHjhZu6RKvAw==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.2.1.tgz", + "integrity": "sha512-OwMxHxmnmHTUpgO+V7dZChf3Tixf4ih95cmXjzzadULziVl/FKhHScGLj4goEw9weePVOH2Q0+GcCBUhKCZc/g==", "requires": { "tslib": "^1.9.0" } @@ -12012,9 +12903,9 @@ } }, "sass-loader": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.0.1.tgz", - "integrity": "sha512-MeVVJFejJELlAbA7jrRchi88PGP6U9yIfqyiG+bBC4a9s2PX+ulJB9h8bbEohtPBfZmlLhNZ0opQM9hovRXvlw==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.0.3.tgz", + "integrity": "sha512-iaSFtQcGo4SSgDw5Aes5p4VTrA5jCGSA7sGmhPIcOloBlgI1VktM2MUrk2IHHjbNagckXlPz+HWq1vAAPrcYxA==", "dev": true, "requires": { "clone-deep": "^2.0.1", @@ -12910,9 +13801,9 @@ } }, "stream-http": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.2.tgz", - "integrity": "sha512-QllfrBhqF1DPcz46WxKTs6Mz1Bpc+8Qm6vbqOpVav5odAXwbyzwnEczoWqtxrsmlO+cJqtPrp/8gWKWjaKLLlA==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "dev": true, "requires": { "builtin-status-codes": "^3.0.0", @@ -13352,36 +14243,25 @@ } }, "ts-node": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-6.0.5.tgz", - "integrity": "sha512-iNhWu2hli9/1p9PGLJ/4OZS+NR0IVEVk63KCrH3qa7jJZxXa+oPheBj5JyM8tuQM9RkBpw1PrNUEUPJR9wTGDw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.0.tgz", + "integrity": "sha512-klJsfswHP0FuOLsvBZ/zzCfUvakOSSxds78mVeK7I+qP76YWtxf16hEZsp3U+b0kIo82R5UatGFeblYMqabb2Q==", "dev": true, "requires": { "arrify": "^1.0.0", - "chalk": "^2.3.0", + "buffer-from": "^1.1.0", "diff": "^3.1.0", "make-error": "^1.1.1", "minimist": "^1.2.0", "mkdirp": "^0.5.1", - "source-map-support": "^0.5.3", + "source-map-support": "^0.5.6", "yn": "^2.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "buffer-from": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", + "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==", "dev": true }, "minimist": { @@ -13405,15 +14285,6 @@ "buffer-from": "^1.0.0", "source-map": "^0.6.0" } - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -13882,9 +14753,9 @@ } }, "url-parse": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.0.tgz", - "integrity": "sha512-ERuGxDiQ6Xw/agN4tuoCRbmwRuZP0cJ1lJxJubXr5Q/5cDa78+Dc4wfvtxzhzhkm5VvmW6Mf8EVj9SPGN4l8Lg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.1.tgz", + "integrity": "sha512-x95Td74QcvICAA0+qERaVkRpTGKyBHHYdwL2LXZm5t/gBtCB9KQSO/0zQgSTYEV1p0WcvSg79TLNPSvd5IDJMQ==", "dev": true, "requires": { "querystringify": "^2.0.0", @@ -13936,20 +14807,12 @@ } }, "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", "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 - } + "inherits": "2.0.3" } }, "util-deprecate": { diff --git a/package.json b/package.json index 2984775..aaacdd9 100644 --- a/package.json +++ b/package.json @@ -40,15 +40,15 @@ "postinstall": "cd src/api/ && composer update && composer install --optimize-autoloader && cd ../../" }, "dependencies": { - "@angular/animations": "^6.0.4", - "@angular/common": "^6.0.4", - "@angular/compiler": "^6.0.4", - "@angular/core": "^6.0.4", - "@angular/forms": "^6.0.4", - "@angular/http": "^6.0.4", - "@angular/platform-browser": "^6.0.4", - "@angular/platform-browser-dynamic": "^6.0.4", - "@angular/router": "^6.0.4", + "@angular/animations": "^6.0.7", + "@angular/common": "^6.0.7", + "@angular/compiler": "^6.0.7", + "@angular/core": "^6.0.7", + "@angular/forms": "^6.0.7", + "@angular/http": "^6.0.7", + "@angular/platform-browser": "^6.0.7", + "@angular/platform-browser-dynamic": "^6.0.7", + "@angular/router": "^6.0.7", "chartist": "^0.11.0", "chartist-plugin-tooltips": "^0.0.17", "classlist.js": "^1.1.20150312", @@ -58,25 +58,25 @@ "marked": "^0.4.0", "ng2-dragula": "^1.5.0", "node-sass": "^4.9.0", - "rxjs": "^6.2.0", + "rxjs": "^6.2.1", "scss-base": "^1.4.0", "zone.js": "^0.8.26" }, "devDependencies": { - "@angular-devkit/build-angular": "~0.6.5", + "@angular-devkit/build-angular": "~0.6.8", "@angular/cli": "^6.0.8", - "@angular/compiler-cli": "^6.0.4", - "@angular/language-service": "^6.0.4", - "@types/jasmine": "~2.8.7", + "@angular/compiler-cli": "^6.0.7", + "@angular/language-service": "^6.0.7", + "@types/jasmine": "~2.8.8", "@types/jasminewd2": "~2.0.3", - "@types/node": "~10.1.4", - "bourbon": "5.0.0", + "@types/node": "~10.5.0", + "bourbon": "5.0.1", "bourbon-neat": "1.9.0", - "codelyzer": "^4.3.0", + "codelyzer": "^4.4.2", "jasmine": "^3.1.0", "jasmine-core": "^3.1.0", "jasmine-spec-reporter": "~4.2.1", - "karma": "~2.0.2", + "karma": "~2.0.4", "karma-chrome-launcher": "~2.2.0", "karma-coverage-istanbul-reporter": "^2.0.1", "karma-jasmine": "~1.1.2", @@ -85,7 +85,7 @@ "nodemon": "^1.17.5", "npm-run-all": "^4.1.3", "protractor": "~5.3.2", - "ts-node": "~6.0.5", + "ts-node": "~7.0.0", "tslint": "~5.10.0", "typescript": "^2.7.2" } diff --git a/src/api/composer.lock b/src/api/composer.lock index 47c59bf..25bceb0 100644 --- a/src/api/composer.lock +++ b/src/api/composer.lock @@ -258,16 +258,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.8.0", + "version": "1.8.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "478465659fd987669df0bd8a9bf22a8710e5f1b6" + "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/478465659fd987669df0bd8a9bf22a8710e5f1b6", - "reference": "478465659fd987669df0bd8a9bf22a8710e5f1b6", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", + "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", "shasum": "" }, "require": { @@ -302,7 +302,7 @@ "object", "object graph" ], - "time": "2018-05-29T17:25:09+00:00" + "time": "2018-06-11T23:09:50+00:00" }, { "name": "myclabs/php-enum", diff --git a/src/app/app.api-http.ts b/src/app/app.api-http.ts index 5b8a54f..3a76e59 100644 --- a/src/app/app.api-http.ts +++ b/src/app/app.api-http.ts @@ -26,7 +26,7 @@ export class ApiInterceptor implements HttpInterceptor { const headers = { 'Content-Type': 'application/json' }; - const token = localStorage.getItem(this.JWT_KEY); + const token = sessionStorage.getItem(this.JWT_KEY); if (token !== null) { headers['Authorization'] = token; @@ -45,14 +45,14 @@ export class ApiInterceptor implements HttpInterceptor { if ((evt.status === 401 || evt.status === 400) && (evt.url + '').indexOf('login') === -1) { - localStorage.removeItem(this.JWT_KEY); + sessionStorage.removeItem(this.JWT_KEY); this.router.navigate(['']); return; } const response: ApiResponse = evt.body; if (response.data) { - localStorage.setItem(this.JWT_KEY, response.data[0]); + sessionStorage.setItem(this.JWT_KEY, response.data[0]); } }) ); diff --git a/src/app/board/board.component.ts b/src/app/board/board.component.ts index b19eace..b50b963 100644 --- a/src/app/board/board.component.ts +++ b/src/app/board/board.component.ts @@ -76,12 +76,7 @@ export class BoardDisplay implements OnInit, OnDestroy, AfterContentInit { this.pageName = this.strings.boards; - sub = this.boardService.getBoards().subscribe((response: ApiResponse) => { - this.boards = []; - this.updateBoardsList(response.data[1]); - this.loading = false; - }); - this.subs.push(sub); + this.updateBoards(); sub = boardService.activeBoardChanged.subscribe((board: Board) => { if (!board) { @@ -137,7 +132,14 @@ export class BoardDisplay implements OnInit, OnDestroy, AfterContentInit { } }); - this.dragula.dropModel.subscribe((value: any) => { + let makeCall = false; + this.dragula.dropModel.subscribe(async (value: any) => { + makeCall = !makeCall; + + if (!makeCall) { + return; + } + let taskId = +value[1].id, toColumnId = +value[2].parentNode.id, fromColumnId = +value[3].parentNode.id; @@ -146,6 +148,8 @@ export class BoardDisplay implements OnInit, OnDestroy, AfterContentInit { fromColumnId = -1; } + let updateList = []; + this.activeBoard.columns.forEach(column => { if (column.id === toColumnId || column.id === fromColumnId) { let position = 1, @@ -158,10 +162,17 @@ export class BoardDisplay implements OnInit, OnDestroy, AfterContentInit { position++; }); - let oneOff = this.boardService.updateColumn(column).subscribe(); - oneOff.unsubscribe(); + updateList.push(column); } }); + + const update = async (column) => { + this.boardService.updateColumn(column).subscribe(); + } + + for (let i = 0, len = updateList.length; i < len; ++i) { + await update(updateList[i]); + } }); } @@ -239,6 +250,13 @@ export class BoardDisplay implements OnInit, OnDestroy, AfterContentInit { return false; } + private updateBoards(): void { + this.boardService.getBoards().subscribe((response: ApiResponse) => { + this.boards = []; + this.updateBoardsList(response.data[1]); + }); + } + private updateBoardsList(boards: Array): void { let activeBoards: Array = []; diff --git a/src/app/board/board.service.ts b/src/app/board/board.service.ts index 715b2cc..d31cda7 100644 --- a/src/app/board/board.service.ts +++ b/src/app/board/board.service.ts @@ -1,6 +1,8 @@ import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; +import * as marked from 'marked'; +import * as hljs from 'highlight.js'; import { BehaviorSubject, Observable, of } from 'rxjs'; import { map, catchError } from 'rxjs/operators'; @@ -13,13 +15,42 @@ import { User } from '../shared/models'; +interface MarkedReturn { + html: string; + counts: any; +} + @Injectable() export class BoardService { + private checkCounts = { + total: 0, + complete: 0 + } private activeBoard = new BehaviorSubject(null); + private defaultCallback = (err: any, text: string) => { + console.log('default', err, text); + return text; + }; public activeBoardChanged = this.activeBoard.asObservable(); constructor(private http: HttpClient) { + this.initMarked(); + } + + convertMarkdown(markdown: string, callback = this.defaultCallback, doCount = false): MarkedReturn { + this.checkCounts.total = 0; + this.checkCounts.complete = 0; + + let retVal: MarkedReturn = { html: '', counts: {} }; + + retVal.html = marked(markdown, callback); + + if (doCount) { + retVal.counts = this.checkCounts; + } + + return retVal; } updateActiveBoard(board: Board): void { @@ -124,5 +155,42 @@ export class BoardService { boardData.ownIssuetracker, boardData.sharedUser); } + + private initMarked(): void { + let renderer = new marked.Renderer(); + + renderer.checkbox = isChecked => { + let text = ''; + + this.checkCounts.total += 1; + + if (isChecked) { + this.checkCounts.complete += 1; + } + + return text; + }; + + renderer.link = (href, title, text) => { + let out = ''; + + return out; + }; + + marked.setOptions({ + renderer, + smartypants: true, + highlight: code => { + return hljs.highlightAuto(code).value; + } + }); + } + } diff --git a/src/app/board/column/column.component.html b/src/app/board/column/column.component.html index 07fd228..513ba73 100644 --- a/src/app/board/column/column.component.html +++ b/src/app/board/column/column.component.html @@ -87,7 +87,9 @@ - Column Test + + {{ strings['boards_addTask'] }} +
+ [innerHtml]="viewModalProps.html">
diff --git a/src/app/board/column/column.component.ts b/src/app/board/column/column.component.ts index 2c8081a..e181227 100644 --- a/src/app/board/column/column.component.ts +++ b/src/app/board/column/column.component.ts @@ -9,9 +9,6 @@ import { } from '@angular/core'; import { DomSanitizer, SafeHtml } from '@angular/platform-browser'; -import * as marked from 'marked'; -import * as hljs from 'highlight.js'; - import { ApiResponse, ActivitySimple, @@ -74,7 +71,8 @@ export class ColumnDisplay implements OnInit, OnDestroy { @Input('column') columnData: Column; @Input('boards') boards: Array; - @Output('on-update-boards') onUpdateBoards: EventEmitter = new EventEmitter(); + @Output('on-update-boards') + onUpdateBoards: EventEmitter = new EventEmitter(); constructor(private elRef: ElementRef, private auth: AuthService, @@ -99,11 +97,6 @@ export class ColumnDisplay implements OnInit, OnDestroy { let sub = stringsService.stringsChanged.subscribe(newStrings => { this.strings = newStrings; - - // this.contextMenuItems = [ - // new ContextMenuItem(this.strings.boards_addTask, - // this.getShowModalFunction()) - // ]; }); this.subs.push(sub); @@ -477,6 +470,11 @@ export class ColumnDisplay implements OnInit, OnDestroy { updatedTask.ownAttachment, updatedTask.sharedUser, updatedTask.sharedCategory); + const data = this.boardService.convertMarkdown(task.description, + (_, text) => { return text; }, true); + + task.html = data.html; + return task; } @@ -536,14 +534,9 @@ export class ColumnDisplay implements OnInit, OnDestroy { return text; } - private getTaskDescription() { - let html = marked(this.viewModalProps.description, this.markedCallback); - return html.replace(/(\{)([^}]+)(\})/g, '{{ "{" }}$2{{ "}" }}'); - } - private getComment(text: string) { - let html = marked(text, this.markedCallback); - return this.sanitizer.bypassSecurityTrustHtml(html); + let data = this.boardService.convertMarkdown(text, this.markedCallback); + return this.sanitizer.bypassSecurityTrustHtml(data.html); } private getUserName(userId: number) { @@ -579,12 +572,7 @@ export class ColumnDisplay implements OnInit, OnDestroy { }); this.newComment = ''; - this.viewModalProps = new Task(viewTask.id, viewTask.title, - viewTask.description, viewTask.color, - viewTask.due_date, viewTask.points, - viewTask.position, viewTask.column_id, - viewTask.comments, viewTask.attachments, - viewTask.assignees, viewTask.categories); + this.viewModalProps = this.convertToTask(viewTask); this.checkDueDate(); if (this.showActivity) { diff --git a/src/app/board/task/task.component.html b/src/app/board/task/task.component.html index 2b0cd14..0f34b7b 100644 --- a/src/app/board/task/task.component.html +++ b/src/app/board/task/task.component.html @@ -19,7 +19,7 @@
+ [innerHtml]="taskData.html">
@@ -56,9 +56,71 @@
- - Task Test + + {{ strings['boards_viewTask'] }} + + {{ strings['boards_editTask'] }} + + + {{ strings['boards_removeTask'] }} + + +
+ + + + {{ strings['boards_copyTaskTo'] }}: + + + + + + {{ strings['boards_moveTaskTo'] }}: + + + +
+ +
+ + + + {{ strings['boards_moveTask'] }}: + + +
+ + + + + {{ strings['boards_addTask'] }} + +
diff --git a/src/app/board/task/task.component.ts b/src/app/board/task/task.component.ts index 0c7771c..4e108d0 100644 --- a/src/app/board/task/task.component.ts +++ b/src/app/board/task/task.component.ts @@ -7,9 +7,6 @@ import { } from '@angular/core'; import { DomSanitizer, SafeHtml } from '@angular/platform-browser'; -import * as marked from 'marked'; -import * as hljs from 'highlight.js'; - import { ApiResponse, Board, @@ -31,8 +28,6 @@ import { BoardService } from '../board.service'; templateUrl: './task.component.html' }) export class TaskDisplay implements OnInit { - private totalTasks: number; - private completeTasks: number; private isOverdue: boolean; private isNearlyDue: boolean; @@ -54,7 +49,6 @@ export class TaskDisplay implements OnInit { @Input('boards') set boards(boards: Array) { this.boardsList = boards; - // this.generateContextMenuItems(); } constructor(private auth: AuthService, @@ -64,16 +58,10 @@ export class TaskDisplay implements OnInit { private notes: NotificationsService, private stringsService: StringsService) { this.onUpdateBoards = new EventEmitter(); - this.totalTasks = 0; - this.completeTasks = 0; this.percentComplete = 0; stringsService.stringsChanged.subscribe(newStrings => { this.strings = newStrings; - - if (this.taskData) { - // this.generateContextMenuItems(); - } }); auth.userChanged.subscribe(() => { @@ -86,27 +74,21 @@ export class TaskDisplay implements OnInit { } ngOnInit() { - // Since marked is global, the counts need to be stored uniquely per task. - // String literal access needed because augmenting the type doesn't work. - marked['taskCounts'] = []; // tslint:disable-line - if (!this.taskData) { - return; - } - - marked['taskCounts'][this.taskData.id] = { // tslint:disable-line - total: 0, - complete: 0 - }; - - // this.generateContextMenuItems(); - this.initMarked(); - this.calcPercentComplete(); this.checkDueDate(); + this.convertTaskDescription(); } - getTaskDescription(): string { - let html = marked(this.taskData.description, this.markedCallback); - return html.replace(/(\{)([^}]+)(\})/g, '{{ "{" }}$2{{ "}" }}'); + private convertTaskDescription() { + let data = this.boardService.convertMarkdown( + this.taskData.description, this.markedCallback, true + ); + + data.html.replace(/(\{)([^}]+)(\})/g, '{{ "{" }}$2{{ "}" }}'); + if (data.counts.total) { + this.percentComplete = data.counts.complete / data.counts.total; + } + + this.taskData.html = this.sanitizer.bypassSecurityTrustHtml(data.html); } getPercentStyle() { @@ -131,7 +113,12 @@ export class TaskDisplay implements OnInit { return yiq >= 140 ? '#333333' : '#efefef'; } - changeTaskColumn() { + changeTaskColumn(event: any) { + if (event.target.tagName !== 'SELECT') { + return; + } + event.target.parentElement.parentElement.click(); + let select = document.getElementById('columnsList' + this.taskData.id) as HTMLSelectElement, id = +select[select.selectedIndex].value; @@ -151,7 +138,12 @@ export class TaskDisplay implements OnInit { }); } - copyTaskToBoard() { + copyTaskToBoard(event: any) { + if (event.target.tagName !== 'SELECT') { + return; + } + event.target.parentElement.parentElement.click(); + let select = document.getElementById('boardsList' + this.taskData.id + this.strings.boards_copyTaskTo.split(' ')[0]) as HTMLSelectElement; @@ -184,7 +176,12 @@ export class TaskDisplay implements OnInit { }); } - moveTaskToBoard() { + moveTaskToBoard(event: any) { + if (event.target.tagName !== 'SELECT') { + return; + } + event.target.parentElement.parentElement.click(); + let select = document.getElementById('boardsList' + this.taskData.id + this.strings.boards_moveTaskTo.split(' ')[0]) as HTMLSelectElement; @@ -217,7 +214,7 @@ export class TaskDisplay implements OnInit { } private checkDueDate() { - if (this.taskData.due_date === '') { + if (!this.taskData || this.taskData.due_date === '') { return; } @@ -270,126 +267,5 @@ export class TaskDisplay implements OnInit { return text; } - - // private getMoveMenuItem() { - // let menuText = this.strings.boards_moveTask + - // ': '; - // - // let action = (event: any) => { - // if (event.target.tagName !== 'SELECT') { - // return; - // } - // - // this.changeTaskColumn(); - // }; - // - // return new ContextMenuItem(menuText, action, false, false, true); - // } - - private calcPercentComplete() { - this.percentComplete = 0; - - // String literal access needed because augmenting the type doesn't work. - marked['taskCounts'][this.taskData.id] = { // tslint:disable-line - total: 0, - complete: 0 - }; - - marked(this.taskData.description); - - if (marked['taskCounts'][this.taskData.id].total) { // tslint:disable-line - this.percentComplete = marked['taskCounts'][this.taskData.id].complete / // tslint:disable-line - marked['taskCounts'][this.taskData.id].total; // tslint:disable-line - } - } - - // private generateContextMenuItems() { - // this.contextMenuItems = [ - // new ContextMenuItem(this.strings.boards_viewTask, this.viewTask), - // new ContextMenuItem(this.strings.boards_editTask, this.editTask), - // new ContextMenuItem(this.strings.boards_removeTask, this.removeTask), - // new ContextMenuItem('', null, true), - // this.getMoveMenuItem(), - // new ContextMenuItem('', null, true), - // new ContextMenuItem(this.strings.boards_addTask, this.addTask) - // ]; - // - // if (this.boardsList && this.boardsList.length > 1) { - // this.contextMenuItems - // .splice(3, 0, - // new ContextMenuItem('', null, true), - // this.getMenuItem(this.strings.boards_copyTaskTo), - // this.getMenuItem(this.strings.boards_moveTaskTo)); - // } - // } - - // private getMenuItem(text: string): ContextMenuItem { - // let menuText = text + ': ' + - // ' ' + - // ''; - // - // let action = (event: any) => { - // if (event.target.tagName !== 'SELECT') { - // return; - // } - // - // if (text === this.strings.boards_copyTaskTo) { - // this.copyTaskToBoard(); - // return; - // } - // - // this.moveTaskToBoard(); - // }; - // - // return new ContextMenuItem(menuText, action, false, false, true); - // } - - private initMarked() { - let renderer = new marked.Renderer(); - - renderer.checkbox = isChecked => { - let text = ''; - return text; - }; - - renderer.link = (href, title, text) => { - let out = '
'; - - return out; - }; - - marked.setOptions({ - renderer, - smartypants: true, - highlight: code => { - return hljs.highlightAuto(code).value; - } - }); - } } diff --git a/src/app/shared/context-menu/context-menu-item.component.html b/src/app/shared/context-menu/context-menu-item.component.html index 91de65e..5a3ed0d 100644 --- a/src/app/shared/context-menu/context-menu-item.component.html +++ b/src/app/shared/context-menu/context-menu-item.component.html @@ -1,2 +1,5 @@ - -
+ + +
+
diff --git a/src/app/shared/context-menu/context-menu-item.component.ts b/src/app/shared/context-menu/context-menu-item.component.ts index c55e330..502cce9 100644 --- a/src/app/shared/context-menu/context-menu-item.component.ts +++ b/src/app/shared/context-menu/context-menu-item.component.ts @@ -1,10 +1,4 @@ -import { - Component, - ElementRef, - EventEmitter, - Input, - Output -} from '@angular/core'; +import { Component, ElementRef, EventEmitter, Input } from '@angular/core'; @Component({ selector: 'tb-context-menu-item', @@ -24,19 +18,17 @@ export class ContextMenuItem { @Input() isSeparator: boolean; - @Output() - clickEvent: EventEmitter = new EventEmitter(); + @Input() + isCustomEvent: boolean; constructor(private el: ElementRef) { const elem = el.nativeElement; elem.onclick = (event) => { - if (this.isSeparator) { + if (this.isSeparator || this.isCustomEvent) { this.killEvent(event); return; } - - this.clickEvent.next(event); }; elem.oncontextmenu = (event) => { diff --git a/src/app/shared/context-menu/context-menu.component.html b/src/app/shared/context-menu/context-menu.component.html index d1e9134..e23e688 100644 --- a/src/app/shared/context-menu/context-menu.component.html +++ b/src/app/shared/context-menu/context-menu.component.html @@ -1,4 +1,4 @@ -
+
diff --git a/src/app/shared/context-menu/context-menu.component.ts b/src/app/shared/context-menu/context-menu.component.ts index d21d4f6..a363900 100644 --- a/src/app/shared/context-menu/context-menu.component.ts +++ b/src/app/shared/context-menu/context-menu.component.ts @@ -15,33 +15,43 @@ export class ContextMenu { const parentEl = el.nativeElement.parentElement; + if (!parentEl) { + return; + } + parentEl.oncontextmenu = (event: MouseEvent) => { this.parentEventHandler(event); + + setTimeout(() => { + this.updatePosition(event); + }, 0); }; } + private updatePosition(event: MouseEvent) { + const edgeBuffer = 10; + + // Adjust position if near an edge + const target = this.el.nativeElement.firstElementChild; + + if (!target) { + return; + } + + const rect = target.getBoundingClientRect(); + const offsetX = (event.pageX + rect.width + edgeBuffer) > window.innerWidth; + const offsetY = (event.pageY + rect.height + edgeBuffer) > window.innerHeight; + + target.style.left = event.pageX - (offsetX ? rect.width : 0) + 'px'; + target.style.top = event.pageY - (offsetY ? rect.height : 0) + 'px'; + } + private parentEventHandler(event: MouseEvent) { event.preventDefault(); event.stopPropagation(); this.menuService.closeAllMenus(); - this.el.nativeElement.style.top = '-10000px'; this.isOpen = true; - - const edgeBuffer = 10; - - // Adjust position if near an edge - const adjustPosition = () => { - const target = this.el.nativeElement.firstElementChild; - const rect = target.getBoundingClientRect(); - const offsetX = (event.pageX + rect.width + edgeBuffer) > window.innerWidth; - const offsetY = (event.pageY + rect.height + edgeBuffer) > window.innerHeight; - - target.style.left = event.pageX - (offsetX ? rect.width : 0) + 'px'; - target.style.top = event.pageY - (offsetY ? rect.height : 0) + 'px'; - }; - - setTimeout(adjustPosition, 0); } } diff --git a/src/app/shared/models/task.model.ts b/src/app/shared/models/task.model.ts index fe36fb7..e7d3cd1 100644 --- a/src/app/shared/models/task.model.ts +++ b/src/app/shared/models/task.model.ts @@ -1,3 +1,5 @@ +import { SafeHtml } from '@angular/platform-browser'; + import { Attachment } from './attachment.model'; import { Category } from './category.model'; import { Comment } from './comment.model'; @@ -8,6 +10,7 @@ export class Task { public attachments: Array; public assignees: Array; public categories: Array; + public html: SafeHtml; public filtered: boolean; public hideFiltered: boolean; diff --git a/src/scss/_context-menu.scss b/src/scss/_context-menu.scss index 5e6bb1c..f255e19 100644 --- a/src/scss/_context-menu.scss +++ b/src/scss/_context-menu.scss @@ -16,3 +16,20 @@ z-index: 100; } +tb-context-menu-item { + cursor: pointer; +} + +tb-context-menu-item:hover { + background-color: darken($white, 5%); +} + +tb-context-menu-item[isseparator] { + cursor: default; + height: 1em; +} + +tb-context-menu-item[isseparator] { + background-color: $white; +} + diff --git a/test/app/app.api-http.spec.ts b/test/app/app.api-http.spec.ts index 5dcec8b..1d82c3a 100644 --- a/test/app/app.api-http.spec.ts +++ b/test/app/app.api-http.spec.ts @@ -63,7 +63,7 @@ describe('ApiInterceptor', () => { it('adds Authorization header when JWT is present', inject([HttpClient, HttpTestingController], (http: HttpClient, httpMock: HttpTestingController) => { - localStorage.setItem('taskboard.jwt', 'fake'); + sessionStorage.setItem('taskboard.jwt', 'fake'); http.post('', {}).subscribe(response => { expect(response).toBeTruthy(); @@ -76,7 +76,7 @@ describe('ApiInterceptor', () => { expect(req.request.method).toEqual('POST'); req.flush({ data: ['newToken'] }); - expect(localStorage.getItem('taskboard.jwt')).toEqual('newToken'); + expect(sessionStorage.getItem('taskboard.jwt')).toEqual('newToken'); } ) ) @@ -84,7 +84,7 @@ describe('ApiInterceptor', () => { it('handles errors and clears the JWT', inject([HttpClient, HttpTestingController], (http: HttpClient, httpMock: HttpTestingController) => { - localStorage.setItem('taskboard.jwt', 'fake'); + sessionStorage.setItem('taskboard.jwt', 'fake'); http.get('').subscribe(response => { expect(response).toBeTruthy(); @@ -100,7 +100,7 @@ describe('ApiInterceptor', () => { const error = new HttpErrorResponse({ status: 401 }); req.flush(error); - expect(localStorage.getItem('Authorization')).toEqual(null); + expect(sessionStorage.getItem('Authorization')).toEqual(null); } ) ) diff --git a/test/app/shared/context-menu/context-menu.component.spec.ts b/test/app/shared/context-menu/context-menu.component.spec.ts index 9ba9e3e..910fda5 100644 --- a/test/app/shared/context-menu/context-menu.component.spec.ts +++ b/test/app/shared/context-menu/context-menu.component.spec.ts @@ -20,8 +20,6 @@ describe('ContextMenu', () => { fixture: ComponentFixture, elementRef: ElementRefMock; - const getPrivateFunction = name => component[name].bind(component); - beforeEach(() => { elementRef = new ElementRefMock();