From 6af8ccbf7a88ba6b41b1c267178ea776bcf95cec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A1vid=20Danyi?= Date: Fri, 14 Sep 2018 17:06:12 +0200 Subject: [PATCH] * parametered animation for slideshow direction * keyboard control * angular2 update --- package-lock.json | 308 ++++++++++-------- package.json | 32 +- src/app/app.component.css | 9 + src/app/app.component.html | 3 +- src/app/app.component.ts | 28 +- .../commit-tracker.component.ts | 30 +- .../kanban-board/kanban-board.component.css | 3 +- .../kanban-board/kanban-board.component.ts | 18 +- src/app/display/slide-show.service.ts | 78 +++-- .../slide-show/slide-show.component.ts | 12 +- .../display/watchers/watchers.component.ts | 12 +- src/app/shared/service/settings.service.ts | 7 + src/app/shared/service/timer.service.ts | 26 +- src/app/shared/slide-in-out-animation.ts | 4 +- 14 files changed, 345 insertions(+), 225 deletions(-) mode change 100644 => 100755 src/app/app.component.css mode change 100644 => 100755 src/app/app.component.html mode change 100644 => 100755 src/app/app.component.ts mode change 100644 => 100755 src/app/display/kanban-board/kanban-board.component.css mode change 100644 => 100755 src/app/shared/slide-in-out-animation.ts diff --git a/package-lock.json b/package-lock.json index 70e63e8..93aeb8c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -125,9 +125,9 @@ } }, "@angular/animations": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-6.1.6.tgz", - "integrity": "sha512-fK7onQeVsPgUx/sFcBvcGisuIuxvodzATpoKV9SnsQc6xWE5qsvJRZijrzZIN+Hxy/DgsLaVWRCPn1hG75/D2Q==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-6.1.7.tgz", + "integrity": "sha512-bjX3VEVEh5scGDDmxEKPzYI8DWUbqOFA34aYDY2cHPnDkLM0I7pEtO44qb72FSbWwXn77sYlby/dx2gtRayOOA==", "requires": { "tslib": "^1.9.0" } @@ -174,25 +174,25 @@ } }, "@angular/common": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-6.1.6.tgz", - "integrity": "sha512-aFQcfCB2vFfNqR6/e6R34JjFpIFmF3zqr6Ubti1PJOsRuhITZHG/qRYIYA7mh1KVkkf0VXC56B+8QzYbdGcKOQ==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-6.1.7.tgz", + "integrity": "sha512-zFK2xM0hqR2ZWIfUsn+06jg+0K5PolzTxPjfUtVQDCZo+JHHKTVHEwtfORUaMTMfH9EqKrvfB3t6fCwK0523ag==", "requires": { "tslib": "^1.9.0" } }, "@angular/compiler": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-6.1.6.tgz", - "integrity": "sha512-Z9Og0DVH5krG/xMhfcRJMr5GF2HzqnG3f6Hr+e6d6FB8oehnCX/w9b34zZfVGUWAydAYj32SpXJLE6fQm/ljzA==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-6.1.7.tgz", + "integrity": "sha512-JKuK/fzKNCF+mNPmPmGQjr0uHVpfxmrOqXBriJMklCtdsKeQW94BLUoNjn8h1H10rFbUqYuD5v9AAKdH77FgnA==", "requires": { "tslib": "^1.9.0" } }, "@angular/compiler-cli": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-6.1.6.tgz", - "integrity": "sha512-CvgQXuuUJDfmCwnuhZec41aMAiY7nJMSMJxvZWNbFLRiwq+05LiHc7EJYDc6uVQmddWmSqGwfyghjVaiaKJGMg==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-6.1.7.tgz", + "integrity": "sha512-HzrwmtvrgKwUowfkPTsb6AOqdoQajY3Uso3i0jNc9/bXvpeikH0vj0YIKuQzAJDemluHsowHk/ImEsVGGr2w9g==", "dev": true, "requires": { "chokidar": "^1.4.2", @@ -335,77 +335,77 @@ } }, "@angular/core": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-6.1.6.tgz", - "integrity": "sha512-RFkxNDq8iIfO1SaOuUYqOGD/pujMqifJ9FeVg8M2v7ucW01coXAG0IwqUEMMShQj3GGJGHj+F9BNswN7aD2uvw==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-6.1.7.tgz", + "integrity": "sha512-3MtS8EQy+saNcImDWghphOr/h3l5CpFnZW6aaHiL8T5CpTBNdB86uEmAwtiNQkJ0UeO+cztF1zNCzhm9R93/3w==", "requires": { "tslib": "^1.9.0" } }, "@angular/forms": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-6.1.6.tgz", - "integrity": "sha512-6ddk8bhsEtSONctj9PUrEJnTTRL1xHCULaxo2N4GQh5XyV8ScRM0ewOTLcpoL0IU4lgtQmU0VsLWdQvKr3g3Ng==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-6.1.7.tgz", + "integrity": "sha512-McCElnn6Abr+HAjwxa1ldvIMs101TT0NGq8EHXLyF9QcKG24dU7425+MdLuW0OrtgBql2+RjlqnSiKuxDQHxJA==", "requires": { "tslib": "^1.9.0" } }, "@angular/http": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@angular/http/-/http-6.1.6.tgz", - "integrity": "sha512-V4qF68tUSsc3cKvQERJmpfXgZSKgxhb67I2jAfmwU9mEH66wh9FNfZ0b0GPV9hXoCulw3POz4ZUwZZ1E6mLy4A==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@angular/http/-/http-6.1.7.tgz", + "integrity": "sha512-N0wXHpEL/CsNM4l44Z+dU51Y994mBEHjt9yb0SeKf02mdrsTJK+cEvfZ0JkVDjGddqdWHvWFn3zSmkR79qLrSQ==", "requires": { "tslib": "^1.9.0" } }, "@angular/language-service": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-6.1.6.tgz", - "integrity": "sha512-EEtM6mJtiEgmmm3VjzJxv5BavvonaBFtBrPUcevIW851DtIqn4CS8yDcLcGFiSvSLtAYxRX8dkacPv9vvM1Khg==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-6.1.7.tgz", + "integrity": "sha512-L6upXuyO42Z5XhtvbDoDuQEmXEOdSYeGOBmXSxb3ywb/0eh8kHk1Xft+8aaKKtazYjol0t+M+DlZgehqvk4vEA==", "dev": true }, "@angular/platform-browser": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-6.1.6.tgz", - "integrity": "sha512-fwI/w+MhdolVJEfdoCSZFarQo+SctG1pNa+V3PxMkXhxnAbv7oWPQdxzdCrhTWdxJTJ5enSfumMmlJEZtg1bag==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-6.1.7.tgz", + "integrity": "sha512-YOYg944aefCWElJhnma8X+3wJDb6nHf6aBAVN+YPg0bUplEFacR4y6PeM9QR8vjh5Y0kbGG9ZPGDT/WwP2t4sQ==", "requires": { "tslib": "^1.9.0" } }, "@angular/platform-browser-dynamic": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-6.1.6.tgz", - "integrity": "sha512-Ep4vq2ssb1r8XOAw7dJW530vzFKKVY5fj0CYp7VMPfDkwYolEG4TBKQ/ouJkF8n/jdDVFP73+MzU1TLa9/lMQQ==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-6.1.7.tgz", + "integrity": "sha512-sSF7n4SpwPiP1fMwocu/RUegpp/45jHK/+r9biXUXUBD12zO5QMcLHU393sjoNi7e6+meuXEH0pnWa66dTznjw==", "requires": { "tslib": "^1.9.0" } }, "@angular/router": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-6.1.6.tgz", - "integrity": "sha512-fOFeOe3uBrSRUYhXdWxHjDPf80eq3ZNCeWfujzfBADtcmiezlO7cxc1v5Eu81t577frU/3z+w8JvmF257p4RZg==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-6.1.7.tgz", + "integrity": "sha512-YaOTq2icKAd9FDls2qo2Qp8FrmLGke3eA+bZ3FvOhFydxyUAvlU96N9Y9Gb05tXTtBaQNzAInov2bbp2YMFEFA==", "requires": { "tslib": "^1.9.0" } }, "@babel/code-frame": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.51.tgz", - "integrity": "sha1-vXHZsZKvl435FYKdOdQJRFZDmgw=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", "dev": true, "requires": { - "@babel/highlight": "7.0.0-beta.51" + "@babel/highlight": "^7.0.0" } }, "@babel/generator": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.51.tgz", - "integrity": "sha1-bHV1/952HQdIXgS67cA5LG2eMPY=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0.tgz", + "integrity": "sha512-/BM2vupkpbZXq22l1ALO7MqXJZH2k8bKVv8Y+pABFnzWdztDB/ZLveP5At21vLz5c2YtSE6p7j2FZEsqafMz5Q==", "dev": true, "requires": { - "@babel/types": "7.0.0-beta.51", + "@babel/types": "^7.0.0", "jsesc": "^2.5.1", - "lodash": "^4.17.5", + "lodash": "^4.17.10", "source-map": "^0.5.0", "trim-right": "^1.0.1" }, @@ -419,88 +419,94 @@ } }, "@babel/helper-function-name": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.51.tgz", - "integrity": "sha1-IbSHSiJ8+Z7K/MMKkDAtpaJkBWE=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0.tgz", + "integrity": "sha512-Zo+LGvfYp4rMtz84BLF3bavFTdf8y4rJtMPTe2J+rxYmnDOIeH8le++VFI/pRJU+rQhjqiXxE4LMaIau28Tv1Q==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "7.0.0-beta.51", - "@babel/template": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51" + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/types": "^7.0.0" } }, "@babel/helper-get-function-arity": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.51.tgz", - "integrity": "sha1-MoGy0EWvlcFyzpGyCCXYXqRnZBE=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", + "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", "dev": true, "requires": { - "@babel/types": "7.0.0-beta.51" + "@babel/types": "^7.0.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.51.tgz", - "integrity": "sha1-imw/ZsTSZTUvwHdIT59ugKUauXg=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", + "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", "dev": true, "requires": { - "@babel/types": "7.0.0-beta.51" + "@babel/types": "^7.0.0" } }, "@babel/highlight": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.51.tgz", - "integrity": "sha1-6IRK4loVlcz9QriWI7Q3bKBtIl0=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", "dev": true, "requires": { "chalk": "^2.0.0", "esutils": "^2.0.2", - "js-tokens": "^3.0.0" + "js-tokens": "^4.0.0" + }, + "dependencies": { + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + } } }, "@babel/parser": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.0.0-beta.51.tgz", - "integrity": "sha1-J87C30Cd9gr1gnDtj2qlVAnqhvY=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.0.0.tgz", + "integrity": "sha512-RgJhNdRinpO8zibnoHbzTTexNs4c8ROkXFBanNDZTLHjwbdLk8J5cJSKulx/bycWTLYmKVNCkxRtVCoJnqPk+g==", "dev": true }, "@babel/template": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.51.tgz", - "integrity": "sha1-lgKkCuvPNXrpZ34lMu9fyBD1+/8=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0.tgz", + "integrity": "sha512-VLQZik/G5mjYJ6u19U3W2u7eM+rA/NGzH+GtHDFFkLTKLW66OasFrxZ/yK7hkyQcswrmvugFyZpDFRW0DjcjCw==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0-beta.51", - "@babel/parser": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51", - "lodash": "^4.17.5" + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/types": "^7.0.0" } }, "@babel/traverse": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.51.tgz", - "integrity": "sha1-mB2vLOw0emIx06odnhgDsDqqpKg=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0.tgz", + "integrity": "sha512-ka/lwaonJZTlJyn97C4g5FYjPOx+Oxd3ab05hbDr1Mx9aP1FclJ+SUHyLx3Tx40sGmOVJApDxE6puJhd3ld2kw==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0-beta.51", - "@babel/generator": "7.0.0-beta.51", - "@babel/helper-function-name": "7.0.0-beta.51", - "@babel/helper-split-export-declaration": "7.0.0-beta.51", - "@babel/parser": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51", + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.0.0", + "@babel/helper-function-name": "^7.0.0", + "@babel/helper-split-export-declaration": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/types": "^7.0.0", "debug": "^3.1.0", "globals": "^11.1.0", - "invariant": "^2.2.0", - "lodash": "^4.17.5" + "lodash": "^4.17.10" }, "dependencies": { "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.5.tgz", + "integrity": "sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "globals": { @@ -508,17 +514,23 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.7.0.tgz", "integrity": "sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg==", "dev": true + }, + "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 } } }, "@babel/types": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.51.tgz", - "integrity": "sha1-2AK3tUO1g2x3iqaReXq/APPZfqk=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0.tgz", + "integrity": "sha512-5tPDap4bGKTLPtci2SUl/B7Gv8RnuJFuQoWx26RJobS0fFrz4reUA3JnwIM+HVHEmWE0C1mzKhDtTp8NsWY02Q==", "dev": true, "requires": { "esutils": "^2.0.2", - "lodash": "^4.17.5", + "lodash": "^4.17.10", "to-fast-properties": "^2.0.0" }, "dependencies": { @@ -576,9 +588,9 @@ } }, "@types/jasmine": { - "version": "2.8.6", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.8.6.tgz", - "integrity": "sha512-clg9raJTY0EOo5pVZKX3ZlMjlYzVU73L71q5OV1jhE2Uezb7oF94jh4CvwrW6wInquQAdhOxJz5VDF2TLUGmmA==", + "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": { @@ -603,7 +615,7 @@ }, "@types/q": { "version": "0.0.32", - "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", + "resolved": "http://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", "dev": true }, @@ -3042,9 +3054,9 @@ } }, "es6-promise": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", - "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz", + "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==", "dev": true }, "es6-promisify": { @@ -4868,13 +4880,19 @@ }, "dependencies": { "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.5.tgz", + "integrity": "sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==", "dev": true, "requires": { - "ms": "2.0.0" + "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 } } }, @@ -5411,9 +5429,9 @@ } }, "istanbul-api": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-2.0.5.tgz", - "integrity": "sha512-GE5gqFpZsHKgsAbVsgPXlcWKV7fAKP7Bbrma4BJbzBQ+O7KVd/o94WjXOTn4m6eThMhBjWOGOKmaWPwJ3tHVIA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-2.0.6.tgz", + "integrity": "sha512-8W5oeAGWXhtTJjAyVfvavOLVyZCTNCKsyF6GON/INKlBdO7uJ/bv3qnPj5M6ERKzmMCJS1kntnjjGuJ86fn3rQ==", "dev": true, "requires": { "async": "^2.6.1", @@ -5421,10 +5439,10 @@ "fileset": "^2.0.3", "istanbul-lib-coverage": "^2.0.1", "istanbul-lib-hook": "^2.0.1", - "istanbul-lib-instrument": "^2.3.2", - "istanbul-lib-report": "^2.0.1", + "istanbul-lib-instrument": "^3.0.0", + "istanbul-lib-report": "^2.0.2", "istanbul-lib-source-maps": "^2.0.1", - "istanbul-reports": "^2.0.0", + "istanbul-reports": "^2.0.1", "js-yaml": "^3.12.0", "make-dir": "^1.3.0", "once": "^1.4.0" @@ -5446,16 +5464,16 @@ "dev": true }, "istanbul-lib-instrument": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-2.3.2.tgz", - "integrity": "sha512-l7TD/VnBsIB2OJvSyxaLW/ab1+92dxZNH9wLH7uHPPioy3JZ8tnx2UXUdKmdkgmP2EFPzg64CToUP6dAS3U32Q==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.0.0.tgz", + "integrity": "sha512-eQY9vN9elYjdgN9Iv6NS/00bptm02EBBk70lRMaVjeA6QYocQgenVrSgC28TJurdnZa80AGO3ASdFN+w/njGiQ==", "dev": true, "requires": { - "@babel/generator": "7.0.0-beta.51", - "@babel/parser": "7.0.0-beta.51", - "@babel/template": "7.0.0-beta.51", - "@babel/traverse": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51", + "@babel/generator": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", "istanbul-lib-coverage": "^2.0.1", "semver": "^5.5.0" } @@ -5538,9 +5556,9 @@ } }, "istanbul-lib-report": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.1.tgz", - "integrity": "sha512-pXYOWwpDNc5AHIY93WjFTuxzkDOOZ7B8eSa0cBHTmTnKRst5ccc/xBfWu/5wcNJqB6/Qy0lDMhpn+Uy0qyyUjA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.2.tgz", + "integrity": "sha512-rJ8uR3peeIrwAxoDEbK4dJ7cqqtxBisZKCuwkMtMv0xYzaAnsAi3AHrHPAAtNXzG/bcCgZZ3OJVqm1DTi9ap2Q==", "dev": true, "requires": { "istanbul-lib-coverage": "^2.0.1", @@ -5570,12 +5588,12 @@ }, "dependencies": { "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.5.tgz", + "integrity": "sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "istanbul-lib-coverage": { @@ -5584,6 +5602,12 @@ "integrity": "sha512-nPvSZsVlbG9aLhZYaC3Oi1gT/tpyo3Yt5fNyf6NmcKIayz4VV/txxJFFKAK/gU4dcNn8ehsanBbVHVl0+amOLA==", "dev": true }, + "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 + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -5593,9 +5617,9 @@ } }, "istanbul-reports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.0.0.tgz", - "integrity": "sha512-d2YRSnAOHHb+6vMc5qjJEyPN4VapkgUMhKlMmr3BzKdMDWdJbyYGEi/7m5AjDjkvRRTjs68ttPRZ7W2jBZ31SQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.0.1.tgz", + "integrity": "sha512-CT0QgMBJqs6NJLF678ZHcquUAZIoBIUNzdJrRJfpkI9OnzG6MkUfHxbJC3ln981dMswC7/B1mfX3LNkhgJxsuw==", "dev": true, "requires": { "handlebars": "^4.0.11" @@ -5760,7 +5784,7 @@ }, "es6-promise": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", + "resolved": "http://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=", "dev": true }, @@ -5772,7 +5796,7 @@ }, "readable-stream": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", "dev": true, "requires": { @@ -5971,9 +5995,9 @@ } }, "karma-coverage-istanbul-reporter": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.0.3.tgz", - "integrity": "sha512-UVs9IDulfwkBxjEnUzfR/nIc3oBneOPuorpLVBvEMtz2hy0wnVLhCMxpkqAtuQWqvOZRQlGqs+dDtMUeRydTQA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.0.4.tgz", + "integrity": "sha512-xJS7QSQIVU6VK9HuJ/ieE5yynxKhjCCkd96NLY/BX/HXsx0CskU9JJiMQbd4cHALiddMwI4OWh1IIzeWrsavJw==", "dev": true, "requires": { "istanbul-api": "^2.0.5", @@ -5981,9 +6005,9 @@ } }, "karma-jasmine": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.1.tgz", - "integrity": "sha1-b+hA51oRYAydkehLM8RY4cRqNSk=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.2.tgz", + "integrity": "sha1-OU8rJf+0pkS5rabyLUQ+L9CIhsM=", "dev": true }, "karma-jasmine-html-reporter": { @@ -7662,9 +7686,9 @@ "dev": true }, "protractor": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.4.0.tgz", - "integrity": "sha512-6TSYqMhUUzxr4/wN0ttSISqPMKvcVRXF4k8jOEpGWD8OioLak4KLgfzHK9FJ49IrjzRrZ+Mx1q2Op8Rk0zEcnQ==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.4.1.tgz", + "integrity": "sha512-ORey5ewQMYiXQxcQohsqEiKYOg/r5yJoJbt0tuROmmgajdg/CA3gTOZNIFJncUVMAJIk5YFqBBLUjKVmQO6tfA==", "dev": true, "requires": { "@types/node": "^6.0.46", @@ -7681,7 +7705,7 @@ "saucelabs": "^1.5.0", "selenium-webdriver": "3.6.0", "source-map-support": "~0.4.0", - "webdriver-js-extender": "2.0.0", + "webdriver-js-extender": "2.1.0", "webdriver-manager": "^12.0.6" }, "dependencies": { @@ -8361,9 +8385,9 @@ } }, "rxjs": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.1.tgz", - "integrity": "sha512-hRVfb1Mcf8rLXq1AZEjYpzBnQbO7Duveu1APXkWRTvqzhmkoQ40Pl2F9Btacx+gJCOqsMiugCGG4I2HPQgJRtA==", + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.2.tgz", + "integrity": "sha512-hV7criqbR0pe7EeL3O66UYVg92IR0XsA97+9y+BWTePK9SKmEI5Qd3Zj6uPnGkNzXsBywBQWTvujPl+1Kn9Zjw==", "requires": { "tslib": "^1.9.0" } @@ -10171,9 +10195,9 @@ } }, "webdriver-js-extender": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.0.0.tgz", - "integrity": "sha512-fbyKiVu3azzIc5d4+26YfuPQcFTlgFQV5yQ/0OQj4Ybkl4g1YQuIPskf5v5wqwRJhHJnPHthB6tqCjWHOKLWag==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz", + "integrity": "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==", "dev": true, "requires": { "@types/selenium-webdriver": "^3.0.0", diff --git a/package.json b/package.json index 8ed345a..627b583 100644 --- a/package.json +++ b/package.json @@ -11,31 +11,31 @@ }, "private": true, "dependencies": { - "@angular/animations": "^6.1.0", - "@angular/common": "^6.1.0", - "@angular/compiler": "^6.1.0", - "@angular/core": "^6.1.0", - "@angular/forms": "^6.1.0", - "@angular/http": "^6.1.0", - "@angular/platform-browser": "^6.1.0", - "@angular/platform-browser-dynamic": "^6.1.0", - "@angular/router": "^6.1.0", + "@angular/animations": "^6.1.7", + "@angular/common": "^6.1.7", + "@angular/compiler": "^6.1.7", + "@angular/core": "^6.1.7", + "@angular/forms": "^6.1.7", + "@angular/http": "^6.1.7", + "@angular/platform-browser": "^6.1.7", + "@angular/platform-browser-dynamic": "^6.1.7", + "@angular/router": "^6.1.7", "@types/date-fns": "^2.6.0", "@types/marked": "^0.4.1", "core-js": "^2.5.4", "date-fns": "^1.29.0", "marked": "^0.5.0", "ng2-semantic-ui": "^0.9.7", - "rxjs": "^6.0.0", + "rxjs": "^6.3.2", "semantic-ui-css": "^2.3.3", "zone.js": "~0.8.26" }, "devDependencies": { "@angular-devkit/build-angular": "~0.7.0", "@angular/cli": "~6.1.5", - "@angular/compiler-cli": "^6.1.0", - "@angular/language-service": "^6.1.0", - "@types/jasmine": "~2.8.6", + "@angular/compiler-cli": "^6.1.7", + "@angular/language-service": "^6.1.7", + "@types/jasmine": "^2.8.8", "@types/jasminewd2": "~2.0.3", "@types/node": "~8.9.4", "codelyzer": "~4.2.1", @@ -43,10 +43,10 @@ "jasmine-spec-reporter": "~4.2.1", "karma": "~1.7.1", "karma-chrome-launcher": "~2.2.0", - "karma-coverage-istanbul-reporter": "~2.0.0", - "karma-jasmine": "~1.1.1", + "karma-coverage-istanbul-reporter": "^2.0.4", + "karma-jasmine": "^1.1.2", "karma-jasmine-html-reporter": "^0.2.2", - "protractor": "~5.4.0", + "protractor": "^5.4.1", "ts-node": "~5.0.1", "tslint": "~5.9.1", "typescript": "~2.7.2" diff --git a/src/app/app.component.css b/src/app/app.component.css old mode 100644 new mode 100755 index e69de29..2f2ec10 --- a/src/app/app.component.css +++ b/src/app/app.component.css @@ -0,0 +1,9 @@ +.pause-indicator { + position: fixed; + width: 100%; + z-index: 999; + background-color: lightgrey; + color: red; + text-align: center; + font-weight: bold; +} diff --git a/src/app/app.component.html b/src/app/app.component.html old mode 100644 new mode 100755 index 90c6b64..cf874bf --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1 +1,2 @@ - \ No newline at end of file +
Slideshow is paused
+ diff --git a/src/app/app.component.ts b/src/app/app.component.ts old mode 100644 new mode 100755 index 2ba89df..634e045 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,5 +1,6 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, HostListener, OnInit } from '@angular/core'; import { TimerService } from './shared/service/timer.service'; +import { SlideShowService } from './display/slide-show.service'; @Component({ selector: 'app-root', @@ -7,6 +8,29 @@ import { TimerService } from './shared/service/timer.service'; styleUrls: ['./app.component.css'] }) export class AppComponent implements OnInit { - constructor(private timerService: TimerService) {} + constructor(private timerService: TimerService, + private slideShowService: SlideShowService) {} + public ngOnInit() {} + + @HostListener('document:keyup', ['$event.key']) + private keyPressed(key: string) { + switch (key) { + case ' ': + this.timerService.togglePause(); + break; + case 'ArrowLeft': + this.timerService.pause(); + this.slideShowService.prevSlide(); + break; + case 'ArrowRight': + this.timerService.pause(); + this.slideShowService.nextSlide(); + break; + } + } + + public get paused(): boolean { + return this.timerService.paused; + } } diff --git a/src/app/display/commit-tracker/commit-tracker.component.ts b/src/app/display/commit-tracker/commit-tracker.component.ts index fc0fb8a..4d972d1 100755 --- a/src/app/display/commit-tracker/commit-tracker.component.ts +++ b/src/app/display/commit-tracker/commit-tracker.component.ts @@ -1,16 +1,16 @@ -import { Component, HostBinding, OnDestroy, OnInit } from '@angular/core'; -import { Title } from '@angular/platform-browser'; -import { ActivatedRoute } from '@angular/router'; -import { Subscription, timer } from 'rxjs'; +import {Component, HostBinding, OnDestroy, OnInit} from '@angular/core'; +import {Title} from '@angular/platform-browser'; +import {ActivatedRoute} from '@angular/router'; +import {Subscription, timer} from 'rxjs'; -import { slideInOutAnimation } from '../../shared/slide-in-out-animation'; -import { CommitTrackerService } from '../../shared/service/commit-tracker.service'; -import { SettingsService } from '../../shared/service/settings.service'; -import { Commit } from '../../shared/commit'; -import { CommitStatus } from '../../shared/commit-status.enum'; -import { Result } from '../../shared/result.enum'; -import { Build } from '../../shared/build'; -import { environment } from '../../../environments/environment'; +import {slideInOutAnimation} from '../../shared/slide-in-out-animation'; +import {CommitTrackerService} from '../../shared/service/commit-tracker.service'; +import {AnimationDirection, SettingsService} from '../../shared/service/settings.service'; +import {Commit} from '../../shared/commit'; +import {CommitStatus} from '../../shared/commit-status.enum'; +import {Result} from '../../shared/result.enum'; +import {Build} from '../../shared/build'; +import {environment} from '../../../environments/environment'; const TIMER_COMMITTRACKER_REFRESH = 10000; const DEFAULT_AVATAR = '/assets/riddler.png'; @@ -27,7 +27,11 @@ export class CommitTrackerComponent implements OnInit, OnDestroy { private refreshCommitTrackerTimer: Subscription; @HostBinding('@slideInOutAnimation') - slideIn = false; + public get slideInOutAnimation() { + return this.settings.animationDirection === AnimationDirection.RIGHT + ? {value: 'right', params: {offsetEnter: 100, offsetLeave: -100}} + : {value: 'left', params: {offsetEnter: -100, offsetLeave: 100}}; + } constructor(private commitTrackerService: CommitTrackerService, private settings: SettingsService, diff --git a/src/app/display/kanban-board/kanban-board.component.css b/src/app/display/kanban-board/kanban-board.component.css old mode 100644 new mode 100755 index 66f5da1..60b4ac5 --- a/src/app/display/kanban-board/kanban-board.component.css +++ b/src/app/display/kanban-board/kanban-board.component.css @@ -1,7 +1,8 @@ :host { display: inline-block; height: 100vh; - overflow: hidden; + overflow-x: hidden; + overflow-y: scroll; background-color: #444; padding: 10px; } diff --git a/src/app/display/kanban-board/kanban-board.component.ts b/src/app/display/kanban-board/kanban-board.component.ts index f86ada3..8098e7f 100755 --- a/src/app/display/kanban-board/kanban-board.component.ts +++ b/src/app/display/kanban-board/kanban-board.component.ts @@ -1,10 +1,10 @@ -import { Component, HostBinding, OnInit } from '@angular/core'; -import { Title } from '@angular/platform-browser'; -import { ActivatedRoute } from '@angular/router'; +import {Component, HostBinding, OnInit} from '@angular/core'; +import {Title} from '@angular/platform-browser'; +import {ActivatedRoute} from '@angular/router'; -import { KanbanBoard, KanbanEntry, KanbanService, } from '../shared'; -import { slideInOutAnimation } from '../../shared/slide-in-out-animation'; -import { SettingsService } from '../../shared/service/settings.service'; +import {KanbanBoard, KanbanEntry, KanbanService,} from '../shared'; +import {slideInOutAnimation} from '../../shared/slide-in-out-animation'; +import {AnimationDirection, SettingsService} from '../../shared/service/settings.service'; @Component({ selector: 'app-kanban-board', @@ -15,7 +15,11 @@ import { SettingsService } from '../../shared/service/settings.service'; export class KanbanBoardComponent implements OnInit { @HostBinding('@slideInOutAnimation') - slideIn = true; + public get slideInOutAnimation() { + return this.settingService.animationDirection === AnimationDirection.RIGHT + ? {value: 'right', params: {offsetEnter: 100, offsetLeave: -100}} + : {value: 'left', params: {offsetEnter: -100, offsetLeave: 100}}; + } constructor(private titleService: Title, private route: ActivatedRoute, diff --git a/src/app/display/slide-show.service.ts b/src/app/display/slide-show.service.ts index 2bae1e4..66fa29f 100755 --- a/src/app/display/slide-show.service.ts +++ b/src/app/display/slide-show.service.ts @@ -1,8 +1,8 @@ -import { Injectable } from '@angular/core'; -import { Slide, SlideVisibility } from '../shared/slide'; -import { SlideService } from '../shared/service/slide.service'; -import { Router } from '@angular/router'; -import { SettingsService } from '../shared/service/settings.service'; +import {Injectable} from '@angular/core'; +import {Slide, SlideVisibility} from '../shared/slide'; +import {SlideService} from '../shared/service/slide.service'; +import {Router} from '@angular/router'; +import {AnimationDirection, SettingsService} from '../shared/service/settings.service'; @Injectable() export class SlideShowService { @@ -17,30 +17,52 @@ export class SlideShowService { this.reloadSlides(); } - public nextSlide() { - switch (this.currentSlideIndex) { - case this.slides.length - 1: - this.currentSlideIndex++; - this.router.navigate(['/kanban']); - break; - case this.slides.length: - this.currentSlideIndex++; - this.router.navigate(['/commit-tracker']); - break; - case this.slides.length + 1: - this.currentSlideIndex = -1; - this.reloadSlides(); - this.router.navigate(['/watchers']); - break; - default: - this.oddEven = !this.oddEven; - this.currentSlideIndex++; - this.router.navigate([ - this.oddEven ? '/slideshow-odd' : '/slideshow-even', - this.slides[this.currentSlideIndex].id - ]); - break; + public prevSlide() { + this.settingsService.animationDirection = AnimationDirection.LEFT; + console.log('prev-in', this.slides.length, this.currentSlideIndex); + if (this.currentSlideIndex > this.slides.length) { + this.currentSlideIndex = this.slides.length; + this.router.navigate(['/watchers']); + } else if (this.currentSlideIndex === this.slides.length) { + this.currentSlideIndex--; + this.router.navigate(['/commit-tracker']); + } else if (this.currentSlideIndex < 0) { + this.currentSlideIndex = this.slides.length + 1; + this.reloadSlides(); + this.router.navigate(['/kanban']); + } else { + this.oddEven = !this.oddEven; + this.router.navigate([ + this.oddEven ? '/slideshow-odd' : '/slideshow-even', + this.slides[this.currentSlideIndex].id + ]); + this.currentSlideIndex--; } + console.log('prev-out', this.slides.length, this.currentSlideIndex); + } + + public nextSlide() { + this.settingsService.animationDirection = AnimationDirection.RIGHT; + console.log('next-in', this.slides.length, this.currentSlideIndex); + if (this.currentSlideIndex < 0) { + this.currentSlideIndex++; + this.router.navigate(['/kanban']); + } else if (this.currentSlideIndex === this.slides.length) { + this.currentSlideIndex++; + this.router.navigate(['/commit-tracker']); + } else if (this.currentSlideIndex > this.slides.length) { + this.currentSlideIndex = -1; + this.reloadSlides(); + this.router.navigate(['/watchers']); + } else { + this.oddEven = !this.oddEven; + this.router.navigate([ + this.oddEven ? '/slideshow-odd' : '/slideshow-even', + this.slides[this.currentSlideIndex].id + ]); + this.currentSlideIndex++; + } + console.log('next-out', this.slides.length, this.currentSlideIndex); } private reloadSlides() { diff --git a/src/app/display/slide-show/slide-show.component.ts b/src/app/display/slide-show/slide-show.component.ts index 5ecc406..6f7871f 100755 --- a/src/app/display/slide-show/slide-show.component.ts +++ b/src/app/display/slide-show/slide-show.component.ts @@ -3,8 +3,9 @@ import {ActivatedRoute} from '@angular/router'; import {Title} from '@angular/platform-browser'; import * as marked from 'marked'; -import {slideInOutAnimation} from '../../shared/slide-in-out-animation'; import {Slide, SlideType} from '../../shared/slide'; +import {slideInOutAnimation} from '../../shared/slide-in-out-animation'; +import {AnimationDirection, SettingsService} from '../../shared/service/settings.service'; @Component({ selector: 'app-slide-show', @@ -17,10 +18,15 @@ export class SlideShowComponent implements OnInit { public slide: Slide; @HostBinding('@slideInOutAnimation') - slideIn = true; + public get slideInOutAnimation() { + return this.settings.animationDirection === AnimationDirection.RIGHT + ? {value: 'right', params: {offsetEnter: 100, offsetLeave: -100}} + : {value: 'left', params: {offsetEnter: -100, offsetLeave: 100}}; + } constructor(private route: ActivatedRoute, - private titleService: Title) { + private titleService: Title, + private settings: SettingsService) { this.md = marked.setOptions({}); } diff --git a/src/app/display/watchers/watchers.component.ts b/src/app/display/watchers/watchers.component.ts index 0c5b81f..a61427f 100755 --- a/src/app/display/watchers/watchers.component.ts +++ b/src/app/display/watchers/watchers.component.ts @@ -1,7 +1,7 @@ import {Component, HostBinding, OnInit} from '@angular/core'; -import { Title } from '@angular/platform-browser'; -import { ActivatedRoute } from '@angular/router'; -import { SettingsService } from '../../shared/service/settings.service'; +import {Title} from '@angular/platform-browser'; +import {ActivatedRoute} from '@angular/router'; +import {AnimationDirection, SettingsService} from '../../shared/service/settings.service'; import {slideInOutAnimation} from '../../shared/slide-in-out-animation'; import {WatcherService} from '../shared/watcher.service'; import {WatchedIssue} from '../shared/watched-issue.model'; @@ -18,7 +18,11 @@ const DEFAULT_AVATAR = '/assets/riddler.png'; export class WatchersComponent implements OnInit { @HostBinding('@slideInOutAnimation') - slideIn = true; + public get slideInOutAnimation() { + return this.settingService.animationDirection === AnimationDirection.RIGHT + ? {value: 'right', params: {offsetEnter: 100, offsetLeave: -100}} + : {value: 'left', params: {offsetEnter: -100, offsetLeave: 100}}; + } constructor(private titleService: Title, private route: ActivatedRoute, diff --git a/src/app/shared/service/settings.service.ts b/src/app/shared/service/settings.service.ts index c46c4f8..90ebcf4 100755 --- a/src/app/shared/service/settings.service.ts +++ b/src/app/shared/service/settings.service.ts @@ -13,6 +13,8 @@ export class SettingsService { private teamSubject: Subject = new Subject(); private intervalSubject: Subject = new Subject(); + public animationDirection: AnimationDirection = AnimationDirection.RIGHT; + constructor() {} get team(): Team { @@ -51,3 +53,8 @@ export class SettingsService { return this.teamSubject.asObservable(); } } + +export enum AnimationDirection { + LEFT, + RIGHT, +} diff --git a/src/app/shared/service/timer.service.ts b/src/app/shared/service/timer.service.ts index accd832..f7f4a55 100755 --- a/src/app/shared/service/timer.service.ts +++ b/src/app/shared/service/timer.service.ts @@ -14,6 +14,7 @@ const TIME_SEPARATOR = ':'; @Injectable() export class TimerService implements OnDestroy { + public paused = false; private autoSwitch = false; private slideShowTimer: Subscription; private selfUpdateCheckerTimer: Subscription; @@ -52,19 +53,32 @@ export class TimerService implements OnDestroy { } private changeSlide() { - if (this.autoSwitch && this.isDuringDailyStandup()) { - this.router.navigate(['/kanban']); + if (!this.paused) { + if (this.autoSwitch && this.isDuringDailyStandup()) { + this.router.navigate(['/kanban']); + } + if (this.autoSwitch && !this.isDuringDailyStandup()) { + this.slideShowService.nextSlide(); + } + this.setSlideTimer(this.settings.slideInterval); } - if (this.autoSwitch && !this.isDuringDailyStandup()) { - this.slideShowService.nextSlide(); - } - this.setSlideTimer(this.settings.slideInterval); } public setSlideTimer(delay: number) { this.slideTimerSubject.next(delay); } + public togglePause() { + this.paused = !this.paused; + if (!this.paused) { + this.setSlideTimer(this.settings.slideInterval); + } + } + + public pause() { + this.paused = true; + } + private isDuringDailyStandup(): boolean { if (this.settings.team.dailyLockEnabled) { const now = new Date(); diff --git a/src/app/shared/slide-in-out-animation.ts b/src/app/shared/slide-in-out-animation.ts old mode 100644 new mode 100755 index 2ccc937..319df6d --- a/src/app/shared/slide-in-out-animation.ts +++ b/src/app/shared/slide-in-out-animation.ts @@ -21,7 +21,7 @@ export const slideInOutAnimation = style({ // start with the content positioned off the right of the screen, // -400% is required instead of -100% because the negative position adds to the width of the element - transform: 'translateX(100%)' + transform: 'translateX({{offsetEnter}}%)' }), // animation and styles at end of transition @@ -36,7 +36,7 @@ export const slideInOutAnimation = // animation and styles at end of transition animate('.75s cubic-bezier(0.175, 0.885, 0.32, 1.275)', style({ // transition the right position to -400% which slides the content out of view - transform: 'translateX(-100%)' + transform: 'translateX({{offsetLeave}}%)' })) ]) ]);