diff --git a/package-lock.json b/package-lock.json index 11aa003..d2366ae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3444,9 +3444,9 @@ } }, "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.10.1.tgz", + "integrity": "sha512-pwCxEXnj27XG47mu7SXAwhLP3L5CrlvCB91ANUkIz40P27kUcvNfSdvyZJ9CLHiVoKSp+TTChMQMSKQEH/IQxA==" }, "core-js-compat": { "version": "3.6.5", @@ -4289,24 +4289,24 @@ "dev": true }, "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", + "bn.js": "^4.11.9", + "brorand": "^1.1.0", "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" }, "dependencies": { "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } @@ -8588,12 +8588,12 @@ "dev": true }, "sass": { - "version": "1.26.10", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.10.tgz", - "integrity": "sha512-bzN0uvmzfsTvjz0qwccN1sPm2HxxpNI/Xa+7PlUEMS+nQvbyuEK7Y0qFqxlPHhiNHb1Ze8WQJtU31olMObkAMw==", + "version": "1.32.9", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.9.tgz", + "integrity": "sha512-DGXRkoCF5w+WnlcfolMiNsZ/D0UfmOi4CW2ORMgrXg1eMF6Aoq7kj5qlMrkiXhXdRufTYclMsJUtxYozQT65Ig==", "dev": true, "requires": { - "chokidar": ">=2.0.0 <4.0.0" + "chokidar": ">=3.0.0 <4.0.0" } }, "sass-loader": { @@ -9820,9 +9820,9 @@ "dev": true }, "typescript": { - "version": "3.9.7", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", - "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", + "version": "3.9.9", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz", + "integrity": "sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w==", "dev": true }, "uglify-js": { @@ -10142,14 +10142,14 @@ "dev": true }, "vue": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.11.tgz", - "integrity": "sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ==" + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.12.tgz", + "integrity": "sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg==" }, "vue-class-component": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/vue-class-component/-/vue-class-component-7.2.5.tgz", - "integrity": "sha512-0CSftHY0bDTD+4FbYkuFf6+iKDjZ4h2in2YYJDRMk5daZIjrgT9LjFHvP7Rzqy9/s1pij3zDtTSLRUjsPWMwqg==" + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/vue-class-component/-/vue-class-component-7.2.6.tgz", + "integrity": "sha512-+eaQXVrAm/LldalI272PpDe3+i4mPis0ORiMYxF6Ae4hyuCh15W8Idet7wPUEs4N4YptgFHGys4UrgNQOMyO6w==" }, "vue-hot-reload-api": { "version": "2.3.4", @@ -10158,9 +10158,9 @@ "dev": true }, "vue-i18n": { - "version": "8.23.0", - "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.23.0.tgz", - "integrity": "sha512-mXgniaumwca8tKdp55fmvqIcW658vQQXq0zEyRHp8sgZ6t+Md+Whhu6CCPg9/erVNlvpKzsGsucGjt2N8GrFCA==" + "version": "8.24.3", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.24.3.tgz", + "integrity": "sha512-uKAYzGbwGIJndY7JwhQwIGi1uyvErWkBfFwooOtjcNnIfMbAR49ad5dT/MiykrJ9pCcgvnocFjFsNLtTzyW+rg==" }, "vue-loader": { "version": "15.9.3", @@ -10192,9 +10192,9 @@ } }, "vue-router": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.4.3.tgz", - "integrity": "sha512-BADg1mjGWX18Dpmy6bOGzGNnk7B/ZA0RxuA6qedY/YJwirMfKXIDzcccmHbQI0A6k5PzMdMloc0ElHfyOoX35A==" + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.5.1.tgz", + "integrity": "sha512-RRQNLT8Mzr8z7eL4p7BtKvRaTSGdCbTy2+Mm5HTJvLGYSSeG9gDzNasJPP/yOYKLy+/cLG/ftrqq5fvkFwBJEw==" }, "vue-style-loader": { "version": "4.1.2", @@ -10215,9 +10215,9 @@ } }, "vue-template-compiler": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz", - "integrity": "sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA==", + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz", + "integrity": "sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg==", "dev": true, "requires": { "de-indent": "^1.0.2", @@ -10231,9 +10231,9 @@ "dev": true }, "vuex": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.5.1.tgz", - "integrity": "sha512-w7oJzmHQs0FM9LXodfskhw9wgKBiaB+totOdb8sNzbTB2KDCEEwEs29NzBZFh/lmEK1t5tDmM1vtsO7ubG1DFw==" + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.6.2.tgz", + "integrity": "sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw==" }, "vuex-class": { "version": "0.3.2", @@ -10968,9 +10968,9 @@ "dev": true }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yallist": { diff --git a/package.json b/package.json index f01ebc4..8f4cbfe 100644 --- a/package.json +++ b/package.json @@ -8,16 +8,16 @@ "deploy": "npm run build && firebase deploy --only hosting" }, "dependencies": { - "core-js": "^3.6.5", + "core-js": "^3.10.1", "dotenv": "^8.2.0", "firestore": "^1.1.6", "howler": "^2.2.1", - "vue": "^2.6.11", - "vue-class-component": "^7.2.5", - "vue-i18n": "^8.23.0", + "vue": "^2.6.12", + "vue-class-component": "^7.2.6", + "vue-i18n": "^8.24.3", "vue-property-decorator": "^8.4.2", - "vue-router": "^3.4.3", - "vuex": "^3.4.0" + "vue-router": "^3.5.1", + "vuex": "^3.6.2" }, "devDependencies": { "@vue/cli-plugin-babel": "~4.4.0", @@ -26,10 +26,10 @@ "@vue/cli-plugin-vuex": "~4.4.0", "@vue/cli-service": "~4.4.0", "axios": "^0.21.1", - "sass": "^1.26.10", + "sass": "^1.32.9", "sass-loader": "^8.0.2", - "typescript": "^3.9.7", - "vue-template-compiler": "^2.6.11", + "typescript": "^3.9.9", + "vue-template-compiler": "^2.6.12", "vuex-class": "^0.3.2", "vuex-module-decorators": "^0.17.0" }, diff --git a/src/App.vue b/src/App.vue index 5c61fe0..7ddf224 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,342 +1,334 @@ - - - - - + + + + + diff --git a/src/components/Global/UpdateModal.vue b/src/components/Global/UpdateModal.vue index 2e46fc8..0078feb 100644 --- a/src/components/Global/UpdateModal.vue +++ b/src/components/Global/UpdateModal.vue @@ -1,97 +1,97 @@ - - - - - \ No newline at end of file diff --git a/src/components/TrainsView/TrainOptions.vue b/src/components/TrainsView/TrainOptions.vue index 1f0c8c5..a2956ed 100644 --- a/src/components/TrainsView/TrainOptions.vue +++ b/src/components/TrainsView/TrainOptions.vue @@ -1,287 +1,287 @@ - - - - - \ No newline at end of file diff --git a/src/data/stationData.json b/src/data/stationData.json index 8442fe4..816ea05 100644 --- a/src/data/stationData.json +++ b/src/data/stationData.json @@ -1,2147 +1,2147 @@ -[ - [ - "Blaszki", - "https://td2.info.pl/scenerie/blaszki/", - "", - null, - "10", - "NIE", - "współczesna", - "SPK", - "", - "", - 1, - 1, - 2, - 0, - null, - null, - true, - false, - false - ], - [ - "LCS Borowe", - "https://td2.info.pl/scenerie/lcs-borowe/", - "", - null, - "10", - "NIE", - "współczesna", - "SCS", - "Br-Np", - "TAK", - 1, - 0, - 3, - 0, - ["Borowe, podg.", "Wysoka, podg.", "Naprawa, podg.", "Borowe Towarowe"], - ["Borowe, podg.", "Wysoka, podg.", "Naprawa, podg.", "Borowe Towarowe"], - false, - false, - false - ], - [ - "LCS Gdańsk", - "https://td2.info.pl/scenerie/lcs-gdansk/", - "9, 202, 227, 249, 250", - null, - "10", - "NIE", - "współczesna", - "SCS", - "Wr, Wr-SKM, PrG", - "TAK", - 3, - 0, - 3, - 0, - ["Gdańsk Główny", "SKM Śródmieście", "Gdańsk Południowy"], - ["Gdańsk Główny"], - true, - false, - false - ], - [ - "Lębork", - "https://td2.info.pl/scenerie/lebork-5834/", - "202, 229, 237", - null, - "8", - "NIE", - "współczesna", - "mechaniczne+SCS", - "", - "", - 2, - 2, - 0, - 0, - null, - null, - true, - false, - false - ], - [ - "Grabów Miasto", - "https://td2.info.pl/scenerie/grabow-miasto-v2/", - "", - null, - "6", - "NIE", - "współczesna", - "SCS", - "", - "TAK", - 2, - 1, - 1, - 0, - ["Grabów Miasto", "Grabów Wieś"], - null, - true, - false, - false - ], - [ - "Parzęczewo", - "https://td2.info.pl/scenerie/parzeczewo/", - "", - null, - "6", - "NIE", - "mieszana", - "SCS", - "ZWk, SBk", - "TAK", - 1, - 0, - 2, - 0, - ["Parzęczewo", "Parzęczewo Miasto", "Parzęczewo gt"], - null, - true, - false, - false - ], - [ - "Aleksandrów Kujawski", - "https://td2.info.pl/scenerie/aleksandrow-kujawski/", - "18, 245", - null, - "4", - "NIE", - "współczesna", - "SCS-SPK", - "", - "TAK", - 1, - 0, - 2, - 0, - null, - null, - true, - false, - false - ], - [ - "Arkadia Zdrój 2012", - "https://td2.info.pl/scenerie/arkadia-zdroj/", - "", - null, - "4", - "NIE", - "mieszana", - "mechaniczne+SPK", - "", - "", - 1, - 0, - 2, - 0, - null, - null, - true, - false, - false - ], - [ - "Buk 2018", - "https://td2.info.pl/scenerie/buk2/", - "", - null, - "4", - "NIE", - "współczesna", - "SCS-SPK", - "", - "TAK", - 2, - 0, - 1, - 0, - null, - null, - true, - false, - false - ], - [ - "Jordanowo", - "https://td2.info.pl/scenerie/jordanowo/", - "", - null, - "4", - "NIE", - "mieszana", - "mechaniczne", - "", - "", - 3, - 2, - 0, - 0, - null, - null, - true, - false, - false - ], - [ - "LCS Głowno", - "https://td2.info.pl/scenerie/glowno-(linia-nr-15-lka)/", - "15", - "ŁKA", - "4", - "NIE", - "współczesna", - "SCS", - "", - "", - 2, - 0, - 0, - 0, - ["Głowno", "Domaniewice"], - ["Głowno"], - true, - false, - false - ], - [ - "LCS Ozorków", - "https://td2.info.pl/scenerie/lcs-ozorkow/", - "16", - "ŁKA", - "4", - "NIE", - "współczesna", - "SCS", - "", - "", - 2, - 0, - 0, - 0, - ["Ozorków", "Chociszew"], - ["Ozorków"], - true, - false, - false - ], - [ - "LCS Skrzynki", - "https://td2.info.pl/scenerie/lcs-skrzynki/", - "25", - "ŁKA", - "4", - "NIE", - "współczesna", - "SCS-SPK", - "", - "TAK", - 0, - 0, - 2, - 0, - ["Skrzynki", "Wykno"], - ["Skrzynki"], - true, - false, - false - ], - [ - "Łask", - "https://td2.info.pl/scenerie/lask-w-ramach-lka/", - "14", - "ŁKA", - "4", - "NIE", - "współczesna", - "mechaniczne+SCS", - "", - "", - 0, - 0, - 2, - 0, - null, - null, - true, - false, - false - ], - [ - "Naterki", - "https://td2.info.pl/scenerie/naterki/", - "353", - null, - "4", - "NIE", - "kształtowa", - "mechaniczne+SCS", - "", - "", - 0, - 0, - 2, - 0, - null, - null, - true, - false, - false - ], - [ - "Santok Zdrój", - "https://td2.info.pl/scenerie/santok-zdroj/", - "", - null, - "4", - "NIE", - "współczesna", - "SPK", - "", - "", - 2, - 0, - 0, - 0, - null, - null, - true, - false, - false - ], - [ - "Testowo", - "https://td2.info.pl/scenerie/testowo-3581", - "", - null, - "4", - "NIE", - "współczesna", - "SPK", - "Sl", - "TAK", - 1, - 1, - 1, - 0, - null, - null, - true, - false, - false - ], - [ - "Tłoki", - "https://td2.info.pl/scenerie/podg-tloki", - "", - null, - "4", - "NIE", - "współczesna", - "SCS-SPK", - "", - "TAK", - 1, - 0, - 2, - 0, - null, - ["Tłoki, podg."], - true, - false, - false - ], - [ - "Witaszyczki", - "https://td2.info.pl/scenerie/witaszyczki/", - "", - null, - "4", - "NIE", - "współczesna", - "SCS", - "", - "TAK", - 0, - 0, - 2, - 0, - null, - null, - true, - false, - false - ], - [ - "Bydgowo", - "https://td2.info.pl/scenerie/bydgowo/", - "", - null, - "2", - "NIE", - "współczesna", - "SPK", - "SK", - "TAK", - 0, - 0, - 2, - 0, - null, - null, - true, - false, - false - ], - [ - "Głębce", - "https://td2.info.pl/scenerie/glebce", - "", - null, - "2", - "NIE", - "współczesna", - "ręczne+SPK", - "", - "", - 1, - 0, - 0, - 0, - null, - null, - true, - false, - false - ], - ["Hel", "https://td2.info.pl/scenerie/hel/", "213", null, "2", "NIE", "współczesna", "SPK", "", "", 0, 1, 0, 0, null, null, true, false, false], - [ - "Kcynia", - "https://td2.info.pl/scenerie/kcynia", - "281, 356", - null, - "2", - "NIE", - "kształtowa", - "mechaniczne", - "", - "", - 0, - 4, - 0, - 0, - null, - null, - true, - false, - false - ], - [ - "Lewków", - "https://td2.info.pl/scenerie/lewkow/", - "", - null, - "2", - "NIE", - "mieszana", - "mechaniczne+SCS", - "", - "TAK (szlak Ks)", - 0, - 0, - 2, - 0, - null, - null, - true, - false, - false - ], - [ - "Cis 2013", - "https://td2.info.pl/scenerie/cis2", - "", - null, - "0", - "NIE", - "kształtowa", - "mechaniczne", - "", - "", - 2, - 0, - 0, - 0, - null, - null, - true, - false, - false - ], - [ - "Cis 2018", - "https://td2.info.pl/scenerie/cis2", - "", - null, - "0", - "NIE", - "współczesna", - "SCS-SPK", - "", - "", - 2, - 0, - 0, - 0, - null, - null, - true, - false, - false - ], - [ - "Glinnik", - "https://td2.info.pl/scenerie/glinnik-(projekt-lka)/", - "15", - "ŁKA", - "0", - "NIE", - "współczesna", - "SPK", - "", - "", - 2, - 0, - 0, - 0, - null, - null, - true, - false, - false - ], - ["Głogowo", "https://td2.info.pl/scenerie/glogowo", "", null, "0", "NIE", "współczesna", "SCS", "", "", 0, 2, 0, 0, null, null, true, false, false], - [ - "Karszynek", - "https://td2.info.pl/scenerie/karszynek/", - "", - null, - "0", - "NIE", - "historyczna", - "mechaniczne", - "", - "", - 0, - 0, - 2, - 0, - null, - null, - true, - false, - false - ], - [ - "Imielin 2015", - "https://td2.info.pl/scenerie/imielin-2015", - "138", - null, - "0", - "NIE", - "współczesna", - "mechaniczne+SCS", - "", - "TAK", - 0, - 0, - 2, - 0, - null, - null, - true, - false, - false - ], - [ - "Kolsko", - "https://td2.info.pl/scenerie/kolsko/", - "", - null, - "0", - "NIE", - "kształtowa", - "mechaniczne", - "", - "", - 0, - 3, - 0, - 0, - null, - null, - true, - false, - false - ], - [ - "LCS Bucz Wileński", - "https://td2.info.pl/scenerie/bucz-wilenski/", - "", - null, - "0", - "NIE", - "współczesna", - "SCS", - "WW", - "TAK", - 0, - 0, - 1, - 0, - null, - ["Bucz Wileński"], - true, - false, - false - ], - [ - "Lisiczki", - "https://td2.info.pl/scenerie/lisiczki", - "", - null, - "6", - "NIE", - "współczesna", - "SCS-SPK", - "", - "", - 2, - 0, - 0, - 0, - null, - null, - true, - false, - false - ], - [ - "Łęczyca", - "https://td2.info.pl/scenerie/leczyca-projekt-lka/", - "16", - "ŁKA", - "0", - "NIE", - "współczesna", - "SPK", - "", - "", - 2, - 0, - 0, - 0, - null, - null, - true, - false, - false - ], - [ - "Poreńsk", - "https://td2.info.pl/scenerie/porensk/", - "", - null, - "0", - "NIE", - "współczesna", - "SPK", - "", - "", - 2, - 0, - 0, - 0, - null, - null, - true, - false, - false - ], - [ - "Radowice", - "https://td2.info.pl/scenerie/radowice", - "", - null, - "0", - "NIE", - "kształtowa", - "mechaniczne", - "", - "", - 0, - 2, - 0, - 0, - null, - null, - true, - false, - false - ], - [ - "Witonia", - "https://td2.info.pl/scenerie/witonia-(projekt-lka)/", - "16", - "ŁKA", - "0", - "NIE", - "współczesna", - "SCS", - "", - "", - 2, - 0, - 0, - 0, - null, - null, - true, - false, - false - ], - [ - "Wola", - "https://td2.info.pl/scenerie/wola/", - "", - null, - "0", - "NIE", - "mieszana", - "mechaniczne+SCS", - "", - "", - 0, - 0, - 2, - 0, - null, - null, - true, - false, - false - ], - [ - "Zgierz Kontrewers", - "https://td2.info.pl/scenerie/zgierz-kontrewers-6172/", - "16", - "ŁKA", - "0", - "NIE", - "współczesna", - "SPK", - "", - "", - 2, - 0, - 0, - 0, - null, - null, - true, - false, - false - ], - [ - "Bargowice", - "https://td2.info.pl/scenerie/bargowice-4441/", - "", - null, - "10", - "NIE", - "współczesna", - "SCS-SPK", - "", - "TAK", - 1, - 0, - 2, - 0, - ["Bargowice", "Bargowice Zachód"], - null, - false, - false, - false - ], - [ - "Szklana Poręba", - "https://td2.info.pl/scenerie/szklana-poreba-gorna/", - "", - null, - "8", - "TAK", - "współczesna", - "mechaniczne", - "", - "", - 1, - 0, - 0, - 0, - null, - null, - false, - false, - false - ], - [ - "Wschodna", - "https://td2.info.pl/scenerie/wschodna/", - "", - null, - "8", - "NIE", - "kształtowa", - "mechaniczne", - "", - "", - 1, - 0, - 2, - 0, - null, - null, - false, - false, - false - ], - [ - "Zabłocie", - "https://td2.info.pl/scenerie/zablocie-3896", - "", - null, - "8", - "NIE", - "współczesna", - "SCS", - "", - "TAK", - 2, - 0, - 1, - 0, - null, - null, - false, - false, - false - ], - [ - "Zdroje", - "https://td2.info.pl/scenerie/zdroje", - "", - null, - "8", - "NIE", - "kształtowa", - "mechaniczne", - "", - "", - 0, - 1, - 0, - 0, - null, - null, - false, - false, - false - ], - [ - "Grzybowo", - "https://td2.info.pl/scenerie/grzybowo", - "", - null, - "6", - "NIE", - "kształtowa", - "mechaniczne", - "", - "", - 0, - 0, - 2, - 0, - null, - null, - false, - false, - false - ], - [ - "Zwardoń", - "https://td2.info.pl/scenerie/zwardon-4161", - "139", - null, - "6", - "TAK", - "współczesna", - "SCS", - "", - "", - 2, - 0, - 0, - 0, - null, - null, - false, - false, - false - ], - [ - "Piaskowo", - "https://td2.info.pl/scenerie/piaskowo/", - "", - null, - "4", - "NIE", - "współczesna", - "SCS", - "OkL, CzP", - "TAK", - 0, - 0, - 2, - 0, - null, - null, - false, - false, - false - ], - [ - "Rajcza", - "https://td2.info.pl/scenerie/rajcza/", - "139", - null, - "4", - "NIE", - "współczesna", - "SPK", - "", - "", - 2, - 0, - 0, - 0, - null, - null, - false, - false, - false - ], - [ - "Brzezinka", - "https://td2.info.pl/scenerie/brzezinka/", - "", - null, - "3", - "NIE", - "współczesna", - "SCS-SPK", - "", - "TAK (szlak KSG)", - 0, - 0, - 2, - 0, - null, - null, - false, - false, - false - ], - [ - "Torzyn", - "https://td2.info.pl/scenerie/torzyn/", - "", - null, - "3", - "NIE", - "współczesna", - "SCS", - "TAK", - "TAK", - 0, - 0, - 2, - 0, - null, - null, - false, - false, - false - ], - [ - "Wola Nowska", - "https://td2.info.pl/scenerie/wola-nowska//", - "", - null, - "3", - "NIE", - "współczesna", - "SPK", - "", - "TAK", - 1, - 0, - 2, - 0, - null, - null, - false, - false, - false - ], - [ - "Chełmik Wołowski", - "https://td2.info.pl/scenerie/chelmik-wolowski//", - "", - null, - "2", - "NIE", - "współczesna", - "SPK", - "", - "TAK", - 1, - 0, - 2, - 0, - null, - null, - false, - false, - false - ], - [ - "Drzewko", - "https://td2.info.pl/w-trakcie-prac/drzewko/", - "", - null, - "2", - "NIE", - "współczesna", - "SCS", - "", - "TAK", - 0, - 0, - 2, - 0, - null, - null, - false, - false, - false - ], - [ - "Krzemienice", - "https://td2.info.pl/scenerie/krzemienice/", - "", - null, - "2", - "NIE", - "współczesna", - "SCS", - "", - "TAK", - 3, - 0, - 1, - 0, - null, - null, - false, - false, - false - ], - [ - "Milówka", - "https://td2.info.pl/scenerie/milowka/", - "139", - null, - "2", - "NIE", - "współczesna", - "SPK", - "", - "", - 2, - 0, - 0, - 0, - null, - null, - false, - false, - false - ], - [ - "Orniki", - "https://td2.info.pl/scenerie/orniki/", - "", - null, - "2", - "NIE", - "współczesna", - "SPK", - "", - "TAK", - 1, - 1, - 2, - 0, - null, - null, - false, - false, - false - ], - [ - "Otwocko", - "https://td2.info.pl/scenerie/otwocko/", - "", - null, - "2", - "NIE", - "współczesna", - "SCS", - "", - "TAK", - 0, - 0, - 2, - 0, - null, - null, - false, - false, - false - ], - [ - "Skostomłoty", - "https://td2.info.pl/w-trakcie-prac/skostomloty/", - "", - null, - "2", - "NIE", - "współczesna", - "mechaniczne", - "", - "TAK", - 0, - 0, - 2, - 0, - null, - null, - false, - false, - false - ], - [ - "Babimost", - "https://td2.info.pl/scenerie/babimost", - "358", - null, - "0", - "NIE", - "współczesna", - "mechaniczne", - "", - "", - 2, - 0, - 0, - 0, - null, - null, - false, - false, - false - ], - [ - "Czerepy", - "https://td2.info.pl/scenerie/czerepy/", - "", - null, - "0", - "NIE", - "współczesna", - "SPK", - "BO", - "TAK", - 0, - 0, - 2, - 0, - null, - null, - false, - false, - false - ], - [ - "Grabiny", - "https://td2.info.pl/scenerie/grabiny", - "", - null, - "0", - "NIE", - "współczesna", - "mechaniczne", - "", - "", - 2, - 0, - 0, - 0, - null, - null, - false, - false, - false - ], - [ - "Kieły", - "https://td2.info.pl/scenerie/kiely-6224/", - "", - null, - "0", - "NIE", - "kształtowa", - "mechaniczne", - "", - "", - 0, - 1, - 0, - 0, - null, - null, - false, - false, - false - ], - [ - "Lutol Suchy", - "https://td2.info.pl/scenerie/lutol-suchy/", - "367", - null, - "0", - "NIE", - "współczesna", - "mechaniczne", - "", - "", - 0, - 2, - 0, - 0, - null, - null, - false, - false, - false - ], - [ - "Raki", - "https://td2.info.pl/scenerie/raki/", - "", - null, - "0", - "NIE", - "kształtowa", - "mechaniczne", - "", - "", - 0, - 1, - 0, - 0, - null, - null, - false, - false, - false - ], - [ - "Sieniawka", - "https://td2.info.pl/scenerie/sieniawka/", - "", - null, - "0", - "NIE", - "współczesna", - "mechaniczne", - "", - "", - 0, - 1, - 0, - 1, - null, - null, - false, - false, - false - ], - [ - "Stefanowo", - "https://td2.info.pl/scenerie/stefanowo/", - "359", - null, - "0", - "NIE", - "kształtowa", - "mechaniczne", - "", - "", - 0, - 2, - 0, - 0, - null, - null, - false, - false, - false - ], - [ - "Szlichtyngowa", - "https://td2.info.pl/scenerie/szlichtyngowa//", - "", - null, - "0", - "NIE", - "współczesna", - "SPK", - "", - "TAK", - 0, - 0, - 2, - 0, - null, - null, - false, - false, - false - ], - [ - "Tarnowo Górne", - "https://td2.info.pl/scenerie/tarnowo-gorne/", - "", - null, - "0", - "NIE", - "kształtowa", - "mechaniczne", - "", - "", - 0, - 2, - 0, - 0, - null, - null, - false, - false, - false - ], - [ - "Tartakowo 2013", - "https://td2.info.pl/w-trakcie-prac/tartakowo/", - "", - null, - "0", - "NIE", - "mieszana", - "mechaniczne", - "", - "", - 0, - 2, - 0, - 0, - null, - null, - false, - false, - false - ], - [ - "Wielgowo", - "https://td2.info.pl/scenerie/wielgowo/", - "", - null, - "0", - "NIE", - "współczesna", - "SPK", - "", - "", - 0, - 2, - 0, - 0, - null, - null, - false, - false, - false - ], - [ - "Sulechów", - "https://td2.info.pl/scenerie/sulechow/", - "358", - null, - "0", - "NIE", - "mieszana", - "SPK", - "", - "", - 2, - 1, - 0, - 0, - null, - null, - false, - false, - false - ], - [ - "Wilczyca", - "https://td2.info.pl/scenerie/wilczyca/", - "", - null, - "0", - "NIE", - "współczesna", - "SCS", - "", - "", - 0, - 2, - 0, - 0, - null, - null, - false, - false, - false - ], - [ - "Sowi Bór", - "https://td2.info.pl/scenerie/sowi-bor/", - "", - null, - "3", - "NIE", - "współczesna", - "SPK", - "", - "", - 0, - 0, - 2, - 0, - null, - null, - false, - false, - false - ], - ["Sól", "https://td2.info.pl/scenerie/sol/", "139", null, "2", "NIE", "współczesna", "SPK", "", "", 2, 0, 0, 0, null, null, false, false, false], - [ - "Hetmanice", - "https://td2.info.pl/scenerie/hetmanice-stacja-dla-poczatkujacych/", - "", - null, - "0", - "NIE", - "współczesna", - "SCS-SPK", - "", - "", - 0, - 0, - 2, - 0, - null, - null, - false, - false, - false - ], - [ - "Starzynki", - "https://td2.info.pl/w-trakcie-prac/starzynki/", - "", - null, - "3", - "NIE", - "współczesna", - "SPK", - "Ps", - "TAK", - 2, - 0, - 1, - 0, - null, - null, - false, - false, - false - ], - [ - "Głęboszów", - "https://td2.info.pl/scenerie/gleboszow/", - "", - null, - "3", - "NIE", - "współczesna", - "SCS", - "Br, GO", - "TAK", - 1, - 0, - 2, - 0, - null, - null, - false, - false, - false - ], - [ - "Skawce", - "https://td2.info.pl/scenerie/skawce-(projekt-zakopianka)/", - "97", - null, - "4", - "NIE", - "współczesna", - "SPK", - "", - "", - 2, - 0, - 0, - 0, - null, - null, - false, - false, - false - ], - [ - "Sroka", - "https://td2.info.pl/scenerie/sroka-projekt-1001/", - "", - null, - "7", - "NIE", - "współczesna", - "SCS", - "", - "TAK", - 1, - 0, - 3, - 0, - ["Sroka, podg.", "Sroka Południe, podg."], - ["Sroka, podg.", "Sroka Południe, podg."], - false, - false, - false - ], - [ - "Luzino", - "https://td2.info.pl/scenerie/luzino-6501/", - "202", - null, - "3", - "NIE", - "współczesna", - "mechaniczne", - "", - "TAK", - 2, - 0, - 0, - 0, - null, - null, - false, - false, - false - ], - [ - "Zajączkowo", - "https://td2.info.pl/scenerie/zajaczkowo/", - "", - null, - "0", - "NIE", - "kształtowa", - "mechaniczne", - "", - "", - 0, - 2, - 0, - 0, - null, - null, - false, - false, - false - ], - [ - "Kudowa-Zdrój", - "https://td2.info.pl/scenerie/kudowa-zdroj-6616/", - "309", - null, - "4", - "NIE", - "współczesna", - "mechaniczne", - "", - "", - 0, - 1, - 0, - 0, - null, - null, - false, - false, - false - ], - [ - "Ciechany", - "https://td2.info.pl/w-trakcie-prac/ciechany/", - "", - null, - "3", - "NIE", - "współczesna", - "SCS", - "", - "", - 1, - 0, - 0, - 0, - null, - ["Pawonki"], - false, - false, - false - ], - [ - "Czermin", - "https://td2.info.pl/scenerie/czermin/", - "", - null, - "8", - "NIE", - "współczesna", - "SCS", - "Łk, Fw", - "", - 2, - 0, - 2, - 0, - null, - null, - false, - false, - false - ], - [ - "Rebrowo Dolne", - "https://td2.info.pl/scenerie/rebrowo-dolne/", - "", - null, - "2", - "NIE", - "współczesna", - "SPK", - "", - "", - 3, - 0, - 0, - 0, - null, - null, - false, - false, - false - ], - [ - "Lublinek", - "https://td2.info.pl/scenerie/lublinek-projekt-lka/", - "14", - null, - "0", - "NIE", - "współczesna", - "mechaniczne", - "", - "", - 0, - 0, - 2, - 0, - null, - null, - true, - false, - false - ], - [ - "Stryków", - "https://td2.info.pl/scenerie/strykow-projekt-lka/", - "14", - null, - "0", - "NIE", - "współczesna", - "mechaniczne", - "", - "", - 2, - 0, - 0, - 0, - null, - null, - true, - false, - false - ], - [ - "Strączki", - "https://td2.info.pl/scenerie/straczki/", - "", - null, - "4", - "NIE", - "współczesna", - "mechaniczne", - "", - "", - 1, - 0, - 1, - 0, - null, - null, - false, - false, - false - ], - [ - "Niedoradz", - "https://td2.info.pl/scenerie/niedoradz", - "", - null, - "0", - "NIE", - "współczesna", - "SPK", - "", - "", - 0, - 0, - 2, - 0, - null, - null, - false, - false, - false - ], - [ - "Zgierz", - "https://td2.info.pl/scenerie/zgierz/", - "15,16", - null, - "12", - "TAK", - "współczesna", - "mechaniczne", - "", - "", - 3, - 0, - 1, - 0, - null, - null, - false, - false, - false - ], - [ - "Łebnino", - "https://td2.info.pl/scenerie/lebnino-4511/", - "", - null, - "0", - "NIE", - "kształtowa", - "mechaniczne", - "", - "", - 0, - 1, - 0, - 0, - null, - null, - false, - false, - false - ], - [ - "Legno", - "https://td2.info.pl/scenerie/legno/", - "", - null, - "0", - "NIE", - "współczesna", - "SCS", - "Mr", - "TAK", - 0, - 0, - 2, - 0, - null, - null, - false, - false, - false - ], - [ - "Buczek", - "https://td2.info.pl/scenerie/buczek/", - "", - null, - "0", - "NIE", - "współczesna", - "SCS", - "Pa, Op", - "TAK", - 0, - 0, - 2, - 0, - null, - null, - false, - false, - false - ], - [ - "Dziewoszyce", - "https://td2.info.pl/scenerie/dziewoszyce/", - "", - null, - "4", - "NIE", - "współczesna", - "SPK", - "", - "TAK", - 0, - 0, - 2, - 0, - null, - null, - false, - false, - false - ], - [ - "Razemsko 2012", - "https://td2.info.pl/scenerie/razemsko-2012/", - "", - null, - "4", - "NIE", - "mieszana", - "mechaniczne", - "", - "", - 0, - 1, - 0, - 1, - null, - null, - false, - false, - false - ], - [ - "Buskowo Zdrój", - "https://td2.info.pl/scenerie/buskowo-zdroj/", - "", - null, - "4", - "NIE", - "mieszana", - "mechaniczne", - "", - "", - 1, - 0, - 0, - 0, - null, - null, - false, - false, - false - ], - [ - "Bełchów", - "https://td2.info.pl/scenerie/belchow-projekt-lka/", - "11", - "ŁKA", - "2", - "NIE", - "współczesna", - "SPK", - "", - "TAK", - 0, - 0, - 2, - 0, - null, - null, - false, - false, - false - ], - [ - "Modlinków", - "https://td2.info.pl/scenerie/podg-modlinkow/", - "", - null, - "6", - "NIE", - "współczesna", - "SPK", - "", - "TAK", - 3, - 0, - 2, - 0, - null, - null, - false, - false, - false - ], - [ - "Arkadia Zdrój 2019", - "https://td2.info.pl/scenerie/arkadia-zdroj-2016/", - "", - null, - "", - "NIE", - "współczesna", - "SCS", - "TAK (szlak wewn.)", - "TAK", - 1, - 0, - 2, - 0, - null, - null, - false, - false, - false - ], - [ - "Łaskarzew", - "https://td2.info.pl/scenerie/laskarzew-6516/", - "7", - null, - "0", - "NIE", - "współczesna", - "SPK", - "", - "TAK", - 0, - 0, - 2, - 0, - null, - null, - false, - false, - false - ], - [ - "Wielicz Park", - "https://td2.info.pl/scenerie/wielicz-park/", - "", - null, - "2", - "NIE", - "współczesna", - "SCS", - "", - "", - 1, - 0, - 0, - 0, - null, - null, - false, - false, - false - ], - [ - "Mołża", - "https://td2.info.pl/scenerie/wielicz-park/", - "", - null, - "4", - "NIE", - "współczesna", - "mechaniczne", - "", - "", - 1, - 0, - 0, - 0, - null, - null, - false, - false, - false - ], - [ - "Stare Lipowo", - "https://td2.info.pl/scenerie/stare-lipowo/", - "", - null, - "12", - "NIE", - "współczesna", - "SCS", - "Dw, Pk, Pr-SL", - "TAK", - 0, - 0, - 4, - 0, - ["Stare Lipowo", "Przęsy"], - null, - false, - false, - false - ], - [ - "Okoń Główny", - "https://td2.info.pl/scenerie/okon-glowny/8", - "", - null, - "8", - "NIE", - "współczesna", - "SCS", - "", - "TAK", - 0, - 1, - 0, - 3, - null, - null, - false, - false, - false - ], - [ - "Nysowiec", - "https://td2.info.pl/scenerie/nysowiec/", - "", - null, - "0", - "NIE", - "współczesna", - "SPK", - "", - "TAK", - 1, - 0, - 1, - 0, - null, - null, - false, - false, - false - ] -] +[ + [ + "Blaszki", + "https://td2.info.pl/scenerie/blaszki/", + "", + null, + "10", + "NIE", + "współczesna", + "SPK", + "", + "", + 1, + 1, + 2, + 0, + null, + null, + true, + false, + false + ], + [ + "LCS Borowe", + "https://td2.info.pl/scenerie/lcs-borowe/", + "", + null, + "10", + "NIE", + "współczesna", + "SCS", + "Br-Np", + "TAK", + 1, + 0, + 3, + 0, + ["Borowe, podg.", "Wysoka, podg.", "Naprawa, podg.", "Borowe Towarowe"], + ["Borowe, podg.", "Wysoka, podg.", "Naprawa, podg.", "Borowe Towarowe"], + false, + false, + false + ], + [ + "LCS Gdańsk", + "https://td2.info.pl/scenerie/lcs-gdansk/", + "9, 202, 227, 249, 250", + null, + "10", + "NIE", + "współczesna", + "SCS", + "Wr, Wr-SKM, PrG", + "TAK", + 3, + 0, + 3, + 0, + ["Gdańsk Główny", "SKM Śródmieście", "Gdańsk Południowy"], + ["Gdańsk Główny"], + true, + false, + false + ], + [ + "Lębork", + "https://td2.info.pl/scenerie/lebork-5834/", + "202, 229, 237", + null, + "8", + "NIE", + "współczesna", + "mechaniczne+SCS", + "", + "", + 2, + 2, + 0, + 0, + null, + null, + true, + false, + false + ], + [ + "Grabów Miasto", + "https://td2.info.pl/scenerie/grabow-miasto-v2/", + "", + null, + "6", + "NIE", + "współczesna", + "SCS", + "", + "TAK", + 2, + 1, + 1, + 0, + ["Grabów Miasto", "Grabów Wieś"], + null, + true, + false, + false + ], + [ + "Parzęczewo", + "https://td2.info.pl/scenerie/parzeczewo/", + "", + null, + "6", + "NIE", + "mieszana", + "SCS", + "ZWk, SBk", + "TAK", + 1, + 0, + 2, + 0, + ["Parzęczewo", "Parzęczewo Miasto", "Parzęczewo gt"], + null, + true, + false, + false + ], + [ + "Aleksandrów Kujawski", + "https://td2.info.pl/scenerie/aleksandrow-kujawski/", + "18, 245", + null, + "4", + "NIE", + "współczesna", + "SCS-SPK", + "", + "TAK", + 1, + 0, + 2, + 0, + null, + null, + true, + false, + false + ], + [ + "Arkadia Zdrój 2012", + "https://td2.info.pl/scenerie/arkadia-zdroj/", + "", + null, + "4", + "NIE", + "mieszana", + "mechaniczne+SPK", + "", + "", + 1, + 0, + 2, + 0, + null, + null, + true, + false, + false + ], + [ + "Buk 2018", + "https://td2.info.pl/scenerie/buk2/", + "", + null, + "4", + "NIE", + "współczesna", + "SCS-SPK", + "", + "TAK", + 2, + 0, + 1, + 0, + null, + null, + true, + false, + false + ], + [ + "Jordanowo", + "https://td2.info.pl/scenerie/jordanowo/", + "", + null, + "4", + "NIE", + "mieszana", + "mechaniczne", + "", + "", + 3, + 2, + 0, + 0, + null, + null, + true, + false, + false + ], + [ + "LCS Głowno", + "https://td2.info.pl/scenerie/glowno-(linia-nr-15-lka)/", + "15", + "ŁKA", + "4", + "NIE", + "współczesna", + "SCS", + "", + "", + 2, + 0, + 0, + 0, + ["Głowno", "Domaniewice"], + ["Głowno"], + true, + false, + false + ], + [ + "LCS Ozorków", + "https://td2.info.pl/scenerie/lcs-ozorkow/", + "16", + "ŁKA", + "4", + "NIE", + "współczesna", + "SCS", + "", + "", + 2, + 0, + 0, + 0, + ["Ozorków", "Chociszew"], + ["Ozorków"], + true, + false, + false + ], + [ + "LCS Skrzynki", + "https://td2.info.pl/scenerie/lcs-skrzynki/", + "25", + "ŁKA", + "4", + "NIE", + "współczesna", + "SCS-SPK", + "", + "TAK", + 0, + 0, + 2, + 0, + ["Skrzynki", "Wykno"], + ["Skrzynki"], + true, + false, + false + ], + [ + "Łask", + "https://td2.info.pl/scenerie/lask-w-ramach-lka/", + "14", + "ŁKA", + "4", + "NIE", + "współczesna", + "mechaniczne+SCS", + "", + "", + 0, + 0, + 2, + 0, + null, + null, + true, + false, + false + ], + [ + "Naterki", + "https://td2.info.pl/scenerie/naterki/", + "353", + null, + "4", + "NIE", + "kształtowa", + "mechaniczne+SCS", + "", + "", + 0, + 0, + 2, + 0, + null, + null, + true, + false, + false + ], + [ + "Santok Zdrój", + "https://td2.info.pl/scenerie/santok-zdroj/", + "", + null, + "4", + "NIE", + "współczesna", + "SPK", + "", + "", + 2, + 0, + 0, + 0, + null, + null, + true, + false, + false + ], + [ + "Testowo", + "https://td2.info.pl/scenerie/testowo-3581", + "", + null, + "4", + "NIE", + "współczesna", + "SPK", + "Sl", + "TAK", + 1, + 1, + 1, + 0, + null, + null, + true, + false, + false + ], + [ + "Tłoki", + "https://td2.info.pl/scenerie/podg-tloki", + "", + null, + "4", + "NIE", + "współczesna", + "SCS-SPK", + "", + "TAK", + 1, + 0, + 2, + 0, + null, + ["Tłoki, podg."], + true, + false, + false + ], + [ + "Witaszyczki", + "https://td2.info.pl/scenerie/witaszyczki/", + "", + null, + "4", + "NIE", + "współczesna", + "SCS", + "", + "TAK", + 0, + 0, + 2, + 0, + null, + null, + true, + false, + false + ], + [ + "Bydgowo", + "https://td2.info.pl/scenerie/bydgowo/", + "", + null, + "2", + "NIE", + "współczesna", + "SPK", + "SK", + "TAK", + 0, + 0, + 2, + 0, + null, + null, + true, + false, + false + ], + [ + "Głębce", + "https://td2.info.pl/scenerie/glebce", + "", + null, + "2", + "NIE", + "współczesna", + "ręczne+SPK", + "", + "", + 1, + 0, + 0, + 0, + null, + null, + true, + false, + false + ], + ["Hel", "https://td2.info.pl/scenerie/hel/", "213", null, "2", "NIE", "współczesna", "SPK", "", "", 0, 1, 0, 0, null, null, true, false, false], + [ + "Kcynia", + "https://td2.info.pl/scenerie/kcynia", + "281, 356", + null, + "2", + "NIE", + "kształtowa", + "mechaniczne", + "", + "", + 0, + 4, + 0, + 0, + null, + null, + true, + false, + false + ], + [ + "Lewków", + "https://td2.info.pl/scenerie/lewkow/", + "", + null, + "2", + "NIE", + "mieszana", + "mechaniczne+SCS", + "", + "TAK (szlak Ks)", + 0, + 0, + 2, + 0, + null, + null, + true, + false, + false + ], + [ + "Cis 2013", + "https://td2.info.pl/scenerie/cis2", + "", + null, + "0", + "NIE", + "kształtowa", + "mechaniczne", + "", + "", + 2, + 0, + 0, + 0, + null, + null, + true, + false, + false + ], + [ + "Cis 2018", + "https://td2.info.pl/scenerie/cis2", + "", + null, + "0", + "NIE", + "współczesna", + "SCS-SPK", + "", + "", + 2, + 0, + 0, + 0, + null, + null, + true, + false, + false + ], + [ + "Glinnik", + "https://td2.info.pl/scenerie/glinnik-(projekt-lka)/", + "15", + "ŁKA", + "0", + "NIE", + "współczesna", + "SPK", + "", + "", + 2, + 0, + 0, + 0, + null, + null, + true, + false, + false + ], + ["Głogowo", "https://td2.info.pl/scenerie/glogowo", "", null, "0", "NIE", "współczesna", "SCS", "", "", 0, 2, 0, 0, null, null, true, false, false], + [ + "Karszynek", + "https://td2.info.pl/scenerie/karszynek/", + "", + null, + "0", + "NIE", + "historyczna", + "mechaniczne", + "", + "", + 0, + 0, + 2, + 0, + null, + null, + true, + false, + false + ], + [ + "Imielin 2015", + "https://td2.info.pl/scenerie/imielin-2015", + "138", + null, + "0", + "NIE", + "współczesna", + "mechaniczne+SCS", + "", + "TAK", + 0, + 0, + 2, + 0, + null, + null, + true, + false, + false + ], + [ + "Kolsko", + "https://td2.info.pl/scenerie/kolsko/", + "", + null, + "0", + "NIE", + "kształtowa", + "mechaniczne", + "", + "", + 0, + 3, + 0, + 0, + null, + null, + true, + false, + false + ], + [ + "LCS Bucz Wileński", + "https://td2.info.pl/scenerie/bucz-wilenski/", + "", + null, + "0", + "NIE", + "współczesna", + "SCS", + "WW", + "TAK", + 0, + 0, + 1, + 0, + null, + ["Bucz Wileński"], + true, + false, + false + ], + [ + "Lisiczki", + "https://td2.info.pl/scenerie/lisiczki", + "", + null, + "6", + "NIE", + "współczesna", + "SCS-SPK", + "", + "", + 2, + 0, + 0, + 0, + null, + null, + true, + false, + false + ], + [ + "Łęczyca", + "https://td2.info.pl/scenerie/leczyca-projekt-lka/", + "16", + "ŁKA", + "0", + "NIE", + "współczesna", + "SPK", + "", + "", + 2, + 0, + 0, + 0, + null, + null, + true, + false, + false + ], + [ + "Poreńsk", + "https://td2.info.pl/scenerie/porensk/", + "", + null, + "0", + "NIE", + "współczesna", + "SPK", + "", + "", + 2, + 0, + 0, + 0, + null, + null, + true, + false, + false + ], + [ + "Radowice", + "https://td2.info.pl/scenerie/radowice", + "", + null, + "0", + "NIE", + "kształtowa", + "mechaniczne", + "", + "", + 0, + 2, + 0, + 0, + null, + null, + true, + false, + false + ], + [ + "Witonia", + "https://td2.info.pl/scenerie/witonia-(projekt-lka)/", + "16", + "ŁKA", + "0", + "NIE", + "współczesna", + "SCS", + "", + "", + 2, + 0, + 0, + 0, + null, + null, + true, + false, + false + ], + [ + "Wola", + "https://td2.info.pl/scenerie/wola/", + "", + null, + "0", + "NIE", + "mieszana", + "mechaniczne+SCS", + "", + "", + 0, + 0, + 2, + 0, + null, + null, + true, + false, + false + ], + [ + "Zgierz Kontrewers", + "https://td2.info.pl/scenerie/zgierz-kontrewers-6172/", + "16", + "ŁKA", + "0", + "NIE", + "współczesna", + "SPK", + "", + "", + 2, + 0, + 0, + 0, + null, + null, + true, + false, + false + ], + [ + "Bargowice", + "https://td2.info.pl/scenerie/bargowice-4441/", + "", + null, + "10", + "NIE", + "współczesna", + "SCS-SPK", + "", + "TAK", + 1, + 0, + 2, + 0, + ["Bargowice", "Bargowice Zachód"], + null, + false, + false, + false + ], + [ + "Szklana Poręba", + "https://td2.info.pl/scenerie/szklana-poreba-gorna/", + "", + null, + "8", + "TAK", + "współczesna", + "mechaniczne", + "", + "", + 1, + 0, + 0, + 0, + null, + null, + false, + false, + false + ], + [ + "Wschodna", + "https://td2.info.pl/scenerie/wschodna/", + "", + null, + "8", + "NIE", + "kształtowa", + "mechaniczne", + "", + "", + 1, + 0, + 2, + 0, + null, + null, + false, + false, + false + ], + [ + "Zabłocie", + "https://td2.info.pl/scenerie/zablocie-3896", + "", + null, + "8", + "NIE", + "współczesna", + "SCS", + "", + "TAK", + 2, + 0, + 1, + 0, + null, + null, + false, + false, + false + ], + [ + "Zdroje", + "https://td2.info.pl/scenerie/zdroje", + "", + null, + "8", + "NIE", + "kształtowa", + "mechaniczne", + "", + "", + 0, + 1, + 0, + 0, + null, + null, + false, + false, + false + ], + [ + "Grzybowo", + "https://td2.info.pl/scenerie/grzybowo", + "", + null, + "6", + "NIE", + "kształtowa", + "mechaniczne", + "", + "", + 0, + 0, + 2, + 0, + null, + null, + false, + false, + false + ], + [ + "Zwardoń", + "https://td2.info.pl/scenerie/zwardon-4161", + "139", + null, + "6", + "TAK", + "współczesna", + "SCS", + "", + "", + 2, + 0, + 0, + 0, + null, + null, + false, + false, + false + ], + [ + "Piaskowo", + "https://td2.info.pl/scenerie/piaskowo/", + "", + null, + "4", + "NIE", + "współczesna", + "SCS", + "OkL, CzP", + "TAK", + 0, + 0, + 2, + 0, + null, + null, + false, + false, + false + ], + [ + "Rajcza", + "https://td2.info.pl/scenerie/rajcza/", + "139", + null, + "4", + "NIE", + "współczesna", + "SPK", + "", + "", + 2, + 0, + 0, + 0, + null, + null, + false, + false, + false + ], + [ + "Brzezinka", + "https://td2.info.pl/scenerie/brzezinka/", + "", + null, + "3", + "NIE", + "współczesna", + "SCS-SPK", + "", + "TAK (szlak KSG)", + 0, + 0, + 2, + 0, + null, + null, + false, + false, + false + ], + [ + "Torzyn", + "https://td2.info.pl/scenerie/torzyn/", + "", + null, + "3", + "NIE", + "współczesna", + "SCS", + "TAK", + "TAK", + 0, + 0, + 2, + 0, + null, + null, + false, + false, + false + ], + [ + "Wola Nowska", + "https://td2.info.pl/scenerie/wola-nowska//", + "", + null, + "3", + "NIE", + "współczesna", + "SPK", + "", + "TAK", + 1, + 0, + 2, + 0, + null, + null, + false, + false, + false + ], + [ + "Chełmik Wołowski", + "https://td2.info.pl/scenerie/chelmik-wolowski//", + "", + null, + "2", + "NIE", + "współczesna", + "SPK", + "", + "TAK", + 1, + 0, + 2, + 0, + null, + null, + false, + false, + false + ], + [ + "Drzewko", + "https://td2.info.pl/w-trakcie-prac/drzewko/", + "", + null, + "2", + "NIE", + "współczesna", + "SCS", + "", + "TAK", + 0, + 0, + 2, + 0, + null, + null, + false, + false, + false + ], + [ + "Krzemienice", + "https://td2.info.pl/scenerie/krzemienice/", + "", + null, + "2", + "NIE", + "współczesna", + "SCS", + "", + "TAK", + 3, + 0, + 1, + 0, + null, + null, + false, + false, + false + ], + [ + "Milówka", + "https://td2.info.pl/scenerie/milowka/", + "139", + null, + "2", + "NIE", + "współczesna", + "SPK", + "", + "", + 2, + 0, + 0, + 0, + null, + null, + false, + false, + false + ], + [ + "Orniki", + "https://td2.info.pl/scenerie/orniki/", + "", + null, + "2", + "NIE", + "współczesna", + "SPK", + "", + "TAK", + 1, + 1, + 2, + 0, + null, + null, + false, + false, + false + ], + [ + "Otwocko", + "https://td2.info.pl/scenerie/otwocko/", + "", + null, + "2", + "NIE", + "współczesna", + "SCS", + "", + "TAK", + 0, + 0, + 2, + 0, + null, + null, + false, + false, + false + ], + [ + "Skostomłoty", + "https://td2.info.pl/w-trakcie-prac/skostomloty/", + "", + null, + "2", + "NIE", + "współczesna", + "mechaniczne", + "", + "TAK", + 0, + 0, + 2, + 0, + null, + null, + false, + false, + false + ], + [ + "Babimost", + "https://td2.info.pl/scenerie/babimost", + "358", + null, + "0", + "NIE", + "współczesna", + "mechaniczne", + "", + "", + 2, + 0, + 0, + 0, + null, + null, + false, + false, + false + ], + [ + "Czerepy", + "https://td2.info.pl/scenerie/czerepy/", + "", + null, + "0", + "NIE", + "współczesna", + "SPK", + "BO", + "TAK", + 0, + 0, + 2, + 0, + null, + null, + false, + false, + false + ], + [ + "Grabiny", + "https://td2.info.pl/scenerie/grabiny", + "", + null, + "0", + "NIE", + "współczesna", + "mechaniczne", + "", + "", + 2, + 0, + 0, + 0, + null, + null, + false, + false, + false + ], + [ + "Kieły", + "https://td2.info.pl/scenerie/kiely-6224/", + "", + null, + "0", + "NIE", + "kształtowa", + "mechaniczne", + "", + "", + 0, + 1, + 0, + 0, + null, + null, + false, + false, + false + ], + [ + "Lutol Suchy", + "https://td2.info.pl/scenerie/lutol-suchy/", + "367", + null, + "0", + "NIE", + "współczesna", + "mechaniczne", + "", + "", + 0, + 2, + 0, + 0, + null, + null, + false, + false, + false + ], + [ + "Raki", + "https://td2.info.pl/scenerie/raki/", + "", + null, + "0", + "NIE", + "kształtowa", + "mechaniczne", + "", + "", + 0, + 1, + 0, + 0, + null, + null, + false, + false, + false + ], + [ + "Sieniawka", + "https://td2.info.pl/scenerie/sieniawka/", + "", + null, + "0", + "NIE", + "współczesna", + "mechaniczne", + "", + "", + 0, + 1, + 0, + 1, + null, + null, + false, + false, + false + ], + [ + "Stefanowo", + "https://td2.info.pl/scenerie/stefanowo/", + "359", + null, + "0", + "NIE", + "kształtowa", + "mechaniczne", + "", + "", + 0, + 2, + 0, + 0, + null, + null, + false, + false, + false + ], + [ + "Szlichtyngowa", + "https://td2.info.pl/scenerie/szlichtyngowa//", + "", + null, + "0", + "NIE", + "współczesna", + "SPK", + "", + "TAK", + 0, + 0, + 2, + 0, + null, + null, + false, + false, + false + ], + [ + "Tarnowo Górne", + "https://td2.info.pl/scenerie/tarnowo-gorne/", + "", + null, + "0", + "NIE", + "kształtowa", + "mechaniczne", + "", + "", + 0, + 2, + 0, + 0, + null, + null, + false, + false, + false + ], + [ + "Tartakowo 2013", + "https://td2.info.pl/w-trakcie-prac/tartakowo/", + "", + null, + "0", + "NIE", + "mieszana", + "mechaniczne", + "", + "", + 0, + 2, + 0, + 0, + null, + null, + false, + false, + false + ], + [ + "Wielgowo", + "https://td2.info.pl/scenerie/wielgowo/", + "", + null, + "0", + "NIE", + "współczesna", + "SPK", + "", + "", + 0, + 2, + 0, + 0, + null, + null, + false, + false, + false + ], + [ + "Sulechów", + "https://td2.info.pl/scenerie/sulechow/", + "358", + null, + "0", + "NIE", + "mieszana", + "SPK", + "", + "", + 2, + 1, + 0, + 0, + null, + null, + false, + false, + false + ], + [ + "Wilczyca", + "https://td2.info.pl/scenerie/wilczyca/", + "", + null, + "0", + "NIE", + "współczesna", + "SCS", + "", + "", + 0, + 2, + 0, + 0, + null, + null, + false, + false, + false + ], + [ + "Sowi Bór", + "https://td2.info.pl/scenerie/sowi-bor/", + "", + null, + "3", + "NIE", + "współczesna", + "SPK", + "", + "", + 0, + 0, + 2, + 0, + null, + null, + false, + false, + false + ], + ["Sól", "https://td2.info.pl/scenerie/sol/", "139", null, "2", "NIE", "współczesna", "SPK", "", "", 2, 0, 0, 0, null, null, false, false, false], + [ + "Hetmanice", + "https://td2.info.pl/scenerie/hetmanice-stacja-dla-poczatkujacych/", + "", + null, + "0", + "NIE", + "współczesna", + "SCS-SPK", + "", + "", + 0, + 0, + 2, + 0, + null, + null, + false, + false, + false + ], + [ + "Starzynki", + "https://td2.info.pl/w-trakcie-prac/starzynki/", + "", + null, + "3", + "NIE", + "współczesna", + "SPK", + "Ps", + "TAK", + 2, + 0, + 1, + 0, + null, + null, + false, + false, + false + ], + [ + "Głęboszów", + "https://td2.info.pl/scenerie/gleboszow/", + "", + null, + "3", + "NIE", + "współczesna", + "SCS", + "Br, GO", + "TAK", + 1, + 0, + 2, + 0, + null, + null, + false, + false, + false + ], + [ + "Skawce", + "https://td2.info.pl/scenerie/skawce-(projekt-zakopianka)/", + "97", + null, + "4", + "NIE", + "współczesna", + "SPK", + "", + "", + 2, + 0, + 0, + 0, + null, + null, + false, + false, + false + ], + [ + "Sroka", + "https://td2.info.pl/scenerie/sroka-projekt-1001/", + "", + null, + "7", + "NIE", + "współczesna", + "SCS", + "", + "TAK", + 1, + 0, + 3, + 0, + ["Sroka, podg.", "Sroka Południe, podg."], + ["Sroka, podg.", "Sroka Południe, podg."], + false, + false, + false + ], + [ + "Luzino", + "https://td2.info.pl/scenerie/luzino-6501/", + "202", + null, + "3", + "NIE", + "współczesna", + "mechaniczne", + "", + "TAK", + 2, + 0, + 0, + 0, + null, + null, + false, + false, + false + ], + [ + "Zajączkowo", + "https://td2.info.pl/scenerie/zajaczkowo/", + "", + null, + "0", + "NIE", + "kształtowa", + "mechaniczne", + "", + "", + 0, + 2, + 0, + 0, + null, + null, + false, + false, + false + ], + [ + "Kudowa-Zdrój", + "https://td2.info.pl/scenerie/kudowa-zdroj-6616/", + "309", + null, + "4", + "NIE", + "współczesna", + "mechaniczne", + "", + "", + 0, + 1, + 0, + 0, + null, + null, + false, + false, + false + ], + [ + "Ciechany", + "https://td2.info.pl/w-trakcie-prac/ciechany/", + "", + null, + "3", + "NIE", + "współczesna", + "SCS", + "", + "", + 1, + 0, + 0, + 0, + null, + ["Pawonki"], + false, + false, + false + ], + [ + "Czermin", + "https://td2.info.pl/scenerie/czermin/", + "", + null, + "8", + "NIE", + "współczesna", + "SCS", + "Łk, Fw", + "", + 2, + 0, + 2, + 0, + null, + null, + false, + false, + false + ], + [ + "Rebrowo Dolne", + "https://td2.info.pl/scenerie/rebrowo-dolne/", + "", + null, + "2", + "NIE", + "współczesna", + "SPK", + "", + "", + 3, + 0, + 0, + 0, + null, + null, + false, + false, + false + ], + [ + "Lublinek", + "https://td2.info.pl/scenerie/lublinek-projekt-lka/", + "14", + null, + "0", + "NIE", + "współczesna", + "mechaniczne", + "", + "", + 0, + 0, + 2, + 0, + null, + null, + true, + false, + false + ], + [ + "Stryków", + "https://td2.info.pl/scenerie/strykow-projekt-lka/", + "14", + null, + "0", + "NIE", + "współczesna", + "mechaniczne", + "", + "", + 2, + 0, + 0, + 0, + null, + null, + true, + false, + false + ], + [ + "Strączki", + "https://td2.info.pl/scenerie/straczki/", + "", + null, + "4", + "NIE", + "współczesna", + "mechaniczne", + "", + "", + 1, + 0, + 1, + 0, + null, + null, + false, + false, + false + ], + [ + "Niedoradz", + "https://td2.info.pl/scenerie/niedoradz", + "", + null, + "0", + "NIE", + "współczesna", + "SPK", + "", + "", + 0, + 0, + 2, + 0, + null, + null, + false, + false, + false + ], + [ + "Zgierz", + "https://td2.info.pl/scenerie/zgierz/", + "15,16", + null, + "12", + "TAK", + "współczesna", + "mechaniczne", + "", + "", + 3, + 0, + 1, + 0, + null, + null, + false, + false, + false + ], + [ + "Łebnino", + "https://td2.info.pl/scenerie/lebnino-4511/", + "", + null, + "0", + "NIE", + "kształtowa", + "mechaniczne", + "", + "", + 0, + 1, + 0, + 0, + null, + null, + false, + false, + false + ], + [ + "Legno", + "https://td2.info.pl/scenerie/legno/", + "", + null, + "0", + "NIE", + "współczesna", + "SCS", + "Mr", + "TAK", + 0, + 0, + 2, + 0, + null, + null, + false, + false, + false + ], + [ + "Buczek", + "https://td2.info.pl/scenerie/buczek/", + "", + null, + "0", + "NIE", + "współczesna", + "SCS", + "Pa, Op", + "TAK", + 0, + 0, + 2, + 0, + null, + null, + false, + false, + false + ], + [ + "Dziewoszyce", + "https://td2.info.pl/scenerie/dziewoszyce/", + "", + null, + "4", + "NIE", + "współczesna", + "SPK", + "", + "TAK", + 0, + 0, + 2, + 0, + null, + null, + false, + false, + false + ], + [ + "Razemsko 2012", + "https://td2.info.pl/scenerie/razemsko-2012/", + "", + null, + "4", + "NIE", + "mieszana", + "mechaniczne", + "", + "", + 0, + 1, + 0, + 1, + null, + null, + false, + false, + false + ], + [ + "Buskowo Zdrój", + "https://td2.info.pl/scenerie/buskowo-zdroj/", + "", + null, + "4", + "NIE", + "mieszana", + "mechaniczne", + "", + "", + 1, + 0, + 0, + 0, + null, + null, + false, + false, + false + ], + [ + "Bełchów", + "https://td2.info.pl/scenerie/belchow-projekt-lka/", + "11", + "ŁKA", + "2", + "NIE", + "współczesna", + "SPK", + "", + "TAK", + 0, + 0, + 2, + 0, + null, + null, + false, + false, + false + ], + [ + "Modlinków", + "https://td2.info.pl/scenerie/podg-modlinkow/", + "", + null, + "6", + "NIE", + "współczesna", + "SPK", + "", + "TAK", + 3, + 0, + 2, + 0, + null, + null, + false, + false, + false + ], + [ + "Arkadia Zdrój 2019", + "https://td2.info.pl/scenerie/arkadia-zdroj-2016/", + "", + null, + "", + "NIE", + "współczesna", + "SCS", + "TAK (szlak wewn.)", + "TAK", + 1, + 0, + 2, + 0, + null, + null, + false, + false, + false + ], + [ + "Łaskarzew", + "https://td2.info.pl/scenerie/laskarzew-6516/", + "7", + null, + "0", + "NIE", + "współczesna", + "SPK", + "", + "TAK", + 0, + 0, + 2, + 0, + null, + null, + false, + false, + false + ], + [ + "Wielicz Park", + "https://td2.info.pl/scenerie/wielicz-park/", + "", + null, + "2", + "NIE", + "współczesna", + "SCS", + "", + "", + 1, + 0, + 0, + 0, + null, + null, + false, + false, + false + ], + [ + "Mołża", + "https://td2.info.pl/scenerie/wielicz-park/", + "", + null, + "4", + "NIE", + "współczesna", + "mechaniczne", + "", + "", + 1, + 0, + 0, + 0, + null, + null, + false, + false, + false + ], + [ + "Stare Lipowo", + "https://td2.info.pl/scenerie/stare-lipowo/", + "", + null, + "12", + "NIE", + "współczesna", + "SCS", + "Dw, Pk, Pr-SL", + "TAK", + 0, + 0, + 4, + 0, + ["Stare Lipowo", "Przęsy"], + null, + false, + false, + false + ], + [ + "Okoń Główny", + "https://td2.info.pl/scenerie/okon-glowny/8", + "", + null, + "8", + "NIE", + "współczesna", + "SCS", + "", + "TAK", + 0, + 1, + 0, + 3, + null, + null, + false, + false, + false + ], + [ + "Nysowiec", + "https://td2.info.pl/scenerie/nysowiec/", + "", + null, + "0", + "NIE", + "współczesna", + "SPK", + "", + "TAK", + 1, + 0, + 1, + 0, + null, + null, + false, + false, + false + ] +] diff --git a/src/lang/en.json b/src/lang/en.json index 0abae78..4789ee9 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -1,134 +1,134 @@ -{ - "app": { - "sceneries": "SCENERIES", - "trains": "TRAINS", - "journal": "JOURNAL", - "loading": "Loading data...", - "support": "Support the project" - }, - "desc": { - "control-type": "Control type: ", - "signals-type": "Signals type: ", - "SBL": "This scenery has automatic line blockade system on following routes: ", - "default": "This scenery is available by default", - "non-public": "This scenery is not public", - "unavailable": "This scenery is unavailable", - "real": "This scenery is real" - }, - "signals": { - "współczesna": "modern", - "mieszana": "mixed", - "kształtowa": "mechanical", - "historyczna": "historyczna" - }, - "controls": { - "SPK": "SPK", - "SCS": "SCS", - "SCS-SPK": "SCS/SPK", - "ręczne": "manual", - "ręczne+SPK": "manual + SPK", - "ręczne+SCS": "manual + SCS", - "mechaniczne": "levers (mechanical)", - "mechaniczne+SPK": "levers + SPK", - "mechaniczne+SCS": "levers + SCS" - }, - "status": { - "online": "UNTIL ", - "free": "FREE", - "ending": "ENDS SOON", - "not-signed": "NOT SIGNED IN", - "no-limit": "NO LIMIT", - "unavailable": "UNAVAILABLE", - "brb": "AFK", - "no-space": "NO SPACE" - }, - "options": { - "filters": "FILTERS", - "donate": "DONATE" - }, - "filters": { - "title": "STATION FILTER", - "default": "DEFAULT", - "not-default": "OTHER", - "real": "REAL", - "fictional": "FICTIONAL", - "SPK": "SPK", - "SCS": "SCS", - "manual": "MANUAL", - "mechanical": "MECHANICAL", - "modern": "MODERN", - "semaphores": "SEMAPHORES", - "mixed": "MIXED", - "historical": "HISTORICAL", - "free": "FREE", - "occupied": "OCCUPIED", - "sliders": { - "min-lvl": "MINIMUM REQUIRED DISPATCHER LEVEL", - "routes-1t-cat": "MINIMUM CATENARY SINGLE TRACK ROUTES", - "routes-1t-other": "MINIMUM OTHER SINGLE TRACK ROUTES", - "routes-2t-cat": "MINIMUM CATENARY DOUBLE TRACK ROUTES", - "routes-2t-other": "MINIMUM OTHER DOUBLE TRACK ROUTES" - }, - "save": "SAVE FILTERS", - "reset": "RESET FILTERS", - "close": "CLOSE FILTERS" - }, - "sceneries": { - "station": "Station", - "min-lvl": "Min. dispatcher
level", - "status": "Status", - "dispatcher": "Dispatcher", - "dispatcher-lvl": "Dispatcher
level", - "routes": "Routes
double | single", - "general": "General info", - "users": "Drivers online", - "spawns": "Spawns online", - "timetables": "Active timetables", - "no-stations": "No stations to show here!" - }, - "trains": { - "no-trains": "Oops! No trains online!", - "stats": "TRAFFIC STATISTICS", - "stats-speed": "TRAINS SPEED (MIN | AVG | MAX) [km/h]", - "stats-length": "TIMETABLES LENGTH (MIN | AVG | MAX) [km]", - "stats-categories": "TIMETABLE CATEGORIES", - "stats-special-twr": "HIGH RISK", - "stats-special-skr": "EXCEEDED STRUCT. GAUGE", - "stats-locos": "MOST COMMON UNITS", - "option-mass": "mass", - "option-speed": "speed", - "option-length": "length", - "option-distance": "distance", - "option-timetable": "train no.", - "search-no": "Search for train no...", - "search-driver": "Search for driver...", - "detailed-timetable": "Detailed timetable for train no. ", - "via-title": "Via: " - }, - "journal": { - "title": "SCENERY ACTIVITY JOURNAL", - "subtitle": "Shows all recent dispatchers on a selected scenery", - "disclaimer": "This functionality is unfinished!
Information shown here could be false or incorrect!", - "select": "Select a scenery" - }, - "scenery": { - "users": "PLAYERS ONLINE", - "spawns": "OPEN SPAWNS", - "timetables": "ACTIVE TIMETABLES", - "no-timetables": "No active timetables!", - "no-users": "NO ACTIVE PLAYERS", - "no-spawns": "NO OPEN SPAWNS", - "no-scenery": "Oops! This scenery doesn't exist or is offline!", - "return-btn": "Return to main site" - }, - "timetables": { - "online": "At station", - "departed": "Dispatched", - "departed-away": "Departed", - "arriving": "En route", - "stopped": "Stopped", - "terminated": "Terminated", - "begins": "BEGINS HERE", - "terminates": "TERMINATES
HERE" - } -} +{ + "app": { + "sceneries": "SCENERIES", + "trains": "TRAINS", + "journal": "JOURNAL", + "loading": "Loading data...", + "support": "Support the project" + }, + "desc": { + "control-type": "Control type: ", + "signals-type": "Signals type: ", + "SBL": "This scenery has automatic line blockade system on following routes: ", + "default": "This scenery is available by default", + "non-public": "This scenery is not public", + "unavailable": "This scenery is unavailable", + "real": "This scenery is real" + }, + "signals": { + "współczesna": "modern", + "mieszana": "mixed", + "kształtowa": "mechanical", + "historyczna": "historyczna" + }, + "controls": { + "SPK": "SPK", + "SCS": "SCS", + "SCS-SPK": "SCS/SPK", + "ręczne": "manual", + "ręczne+SPK": "manual + SPK", + "ręczne+SCS": "manual + SCS", + "mechaniczne": "levers (mechanical)", + "mechaniczne+SPK": "levers + SPK", + "mechaniczne+SCS": "levers + SCS" + }, + "status": { + "online": "UNTIL ", + "free": "FREE", + "ending": "ENDS SOON", + "not-signed": "NOT SIGNED IN", + "no-limit": "NO LIMIT", + "unavailable": "UNAVAILABLE", + "brb": "AFK", + "no-space": "NO SPACE" + }, + "options": { + "filters": "FILTERS", + "donate": "DONATE" + }, + "filters": { + "title": "STATION FILTER", + "default": "DEFAULT", + "not-default": "OTHER", + "real": "REAL", + "fictional": "FICTIONAL", + "SPK": "SPK", + "SCS": "SCS", + "manual": "MANUAL", + "mechanical": "MECHANICAL", + "modern": "MODERN", + "semaphores": "SEMAPHORES", + "mixed": "MIXED", + "historical": "HISTORICAL", + "free": "FREE", + "occupied": "OCCUPIED", + "sliders": { + "min-lvl": "MINIMUM REQUIRED DISPATCHER LEVEL", + "routes-1t-cat": "MINIMUM CATENARY SINGLE TRACK ROUTES", + "routes-1t-other": "MINIMUM OTHER SINGLE TRACK ROUTES", + "routes-2t-cat": "MINIMUM CATENARY DOUBLE TRACK ROUTES", + "routes-2t-other": "MINIMUM OTHER DOUBLE TRACK ROUTES" + }, + "save": "SAVE FILTERS", + "reset": "RESET FILTERS", + "close": "CLOSE FILTERS" + }, + "sceneries": { + "station": "Station", + "min-lvl": "Min. dispatcher
level", + "status": "Status", + "dispatcher": "Dispatcher", + "dispatcher-lvl": "Dispatcher
level", + "routes": "Routes
double | single", + "general": "General info", + "users": "Drivers online", + "spawns": "Spawns online", + "timetables": "Active timetables", + "no-stations": "No stations to show here!" + }, + "trains": { + "no-trains": "Oops! No trains online!", + "stats": "TRAFFIC STATISTICS", + "stats-speed": "TRAINS SPEED (MIN | AVG | MAX) [km/h]", + "stats-length": "TIMETABLES LENGTH (MIN | AVG | MAX) [km]", + "stats-categories": "TIMETABLE CATEGORIES", + "stats-special-twr": "HIGH RISK", + "stats-special-skr": "EXCEEDED STRUCT. GAUGE", + "stats-locos": "MOST COMMON UNITS", + "option-mass": "mass", + "option-speed": "speed", + "option-length": "length", + "option-distance": "distance", + "option-timetable": "train no.", + "search-no": "Search for train no...", + "search-driver": "Search for driver...", + "detailed-timetable": "Detailed timetable for train no. ", + "via-title": "Via: " + }, + "journal": { + "title": "SCENERY ACTIVITY JOURNAL", + "subtitle": "Shows all recent dispatchers on a selected scenery", + "disclaimer": "This functionality is unfinished!
Information shown here could be false or incorrect!", + "select": "Select a scenery" + }, + "scenery": { + "users": "PLAYERS ONLINE", + "spawns": "OPEN SPAWNS", + "timetables": "ACTIVE TIMETABLES", + "no-timetables": "No active timetables!", + "no-users": "NO ACTIVE PLAYERS", + "no-spawns": "NO OPEN SPAWNS", + "no-scenery": "Oops! This scenery doesn't exist or is offline!", + "return-btn": "Return to main site" + }, + "timetables": { + "online": "At station", + "departed": "Dispatched", + "departed-away": "Departed", + "arriving": "En route", + "stopped": "Stopped", + "terminated": "Terminated", + "begins": "BEGINS HERE", + "terminates": "TERMINATES
HERE" + } +} diff --git a/src/lang/pl.json b/src/lang/pl.json index 79a7d05..b958422 100644 --- a/src/lang/pl.json +++ b/src/lang/pl.json @@ -1,134 +1,134 @@ -{ - "app": { - "sceneries": "SCENERIE", - "trains": "POCIĄGI", - "journal": "DZIENNIK", - "loading": "Pobieranie danych...", - "support": "Wspomóż projekt" - }, - "desc": { - "control-type": "Sterowanie: ", - "signals-type": "Sygnalizacja: ", - "SBL": "Sceneria posiada SBL na szlakach: ", - "default": "Sceneria dostępna domyślnie w paczce z grą", - "non-public": "Sceneria niepubliczna", - "unavailable": "Sceneria niedostępna", - "real": "Sceneria realna" - }, - "signals": { - "współczesna": "współczesna", - "mieszana": "mieszana", - "kształtowa": "kształtowa", - "historyczna": "historyczna" - }, - "controls": { - "SPK": "SPK", - "SCS": "SCS", - "SCS-SPK": "SCS/SPK", - "ręczne": "ręczne", - "ręczne+SPK": "ręczne + SPK", - "ręczne+SCS": "ręczne + SCS", - "mechaniczne": "mechaniczne", - "mechaniczne+SPK": "mechaniczne + SPK", - "mechaniczne+SCS": "mechaniczne + SCS" - }, - "status": { - "online": "DO ", - "free": "WOLNA", - "ending": "KOŃCZY", - "not-signed": "NIEZALOGOWANY", - "no-limit": "BEZ LIMITU", - "unavailable": "NIEDOSTĘPNY", - "brb": "Z/W", - "no-space": "BRAK MIEJSCA" - }, - "options": { - "filters": "FILTRY", - "donate": "WESPRZYJ" - }, - "filters": { - "title": "FILTRUJ STACJE", - "default": "DOMYŚLNA", - "not-default": "POZA PACZKĄ", - "real": "REALNA", - "fictional": "FIKCYJNA", - "SPK": "SPK", - "SCS": "SCS", - "manual": "RĘCZNE", - "mechanical": "MECHANICZNE", - "modern": "WSPÓŁCZESNA", - "semaphores": "KSZTAŁTOWA", - "mixed": "MIESZANA", - "historical": "HISTORYCZNA", - "free": "WOLNA", - "occupied": "ZAJĘTA", - "sliders": { - "min-lvl": "MINIMALNY WYMAGANY POZIOM DYŻURNEGO", - "routes-1t-cat": "SZLAKI JEDNOTOROWE ZELEKTR. (MINIMUM)", - "routes-1t-other": "SZLAKI JEDNOTOROWE NIEZELEKTR. (MINIMUM)", - "routes-2t-cat": "SZLAKI DWUTOROWE ZELEKTR. (MINIMUM)", - "routes-2t-other": "SZLAKI DWUTOROWE NIEZELEKTR. (MINIMUM)" - }, - "save": "ZAPISZ FILTRY", - "reset": "RESETUJ FILTRY", - "close": "ZAMKNIJ FILTRY" - }, - "sceneries": { - "station": "Stacja", - "min-lvl": "Min. poziom
dyżurnego", - "status": "Status", - "dispatcher": "Dyżurny", - "dispatcher-lvl": "Poziom
dyżurnego", - "routes": "Szlaki
2tor | 1tor", - "general": "Informacje
ogólne", - "users": "Maszyniści online", - "spawns": "Otwarte spawny", - "timetables": "Aktywne rozkłady jazdy", - "no-stations": "Brak stacji do wyświetlenia!" - }, - "trains": { - "no-trains": "Brak pociągów online!", - "stats": "STATYSTYKI RUCHU", - "stats-speed": "PRĘDKOŚCI POCIĄGÓW (MIN | ŚR | MAX) [km/h]", - "stats-length": "DŁUGOŚCI ROZKŁADÓW (MIN | ŚR | MAX) [km]", - "stats-categories": "KATEGORIE RJ", - "stats-special-twr": "WYSOKIEGO RYZYKA", - "stats-special-skr": "PRZEKROCZONA SKRAJNIA", - "stats-locos": "NAJCZĘSTSZE JEDNOSTKI", - "option-mass": "masa", - "option-speed": "prędkość", - "option-length": "długość", - "option-distance": "kilometraż", - "option-timetable": "numer pociagu", - "search-no": "Szukaj nr pociągu...", - "search-driver": "Szukaj maszynisty...", - "detailed-timetable": "Szczegółowy rozkład jazdy pociągu ", - "via-title": "Przez: " - }, - "journal": { - "title": "DZIENNIK AKTYWNOŚCI SCENERII", - "subtitle": "Pokazuje dyżurnych, którzy ostatnio byli aktywni na wybranej scenerii", - "disclaimer": "Ta funkcjonalność jest w testach beta!
Informacje pokazywane na ekranie mogą znikać, a ich zawartość może być fałszywa!", - "select": "Wybierz scenerię" - }, - "scenery": { - "users": "GRACZE ONLINE", - "spawns": "OTWARTE SPAWNY", - "timetables": "AKTYWNE ROZKŁADY JAZDY", - "no-timetables": "Brak aktywnych rozkładów!", - "no-users": "BRAK AKTYWNYCH GRACZY", - "no-spawns": "BRAK OTWARTYCH SPAWNÓW", - "no-scenery": "Ups! Nie znaleziono danej stacji bądź jest ona offline!", - "return-btn": "Wróć na stronę główną" - }, - "timetables": { - "online": "Na stacji", - "departed": "Odprawiony", - "departed-away": "Odjechał", - "arriving": "W drodze", - "stopped": "Postój", - "terminated": "Skończył bieg", - "begins": "ROZPOCZYNA
BIEG", - "terminates": "KOŃCZY BIEG" - } -} +{ + "app": { + "sceneries": "SCENERIE", + "trains": "POCIĄGI", + "journal": "DZIENNIK", + "loading": "Pobieranie danych...", + "support": "Wspomóż projekt" + }, + "desc": { + "control-type": "Sterowanie: ", + "signals-type": "Sygnalizacja: ", + "SBL": "Sceneria posiada SBL na szlakach: ", + "default": "Sceneria dostępna domyślnie w paczce z grą", + "non-public": "Sceneria niepubliczna", + "unavailable": "Sceneria niedostępna", + "real": "Sceneria realna" + }, + "signals": { + "współczesna": "współczesna", + "mieszana": "mieszana", + "kształtowa": "kształtowa", + "historyczna": "historyczna" + }, + "controls": { + "SPK": "SPK", + "SCS": "SCS", + "SCS-SPK": "SCS/SPK", + "ręczne": "ręczne", + "ręczne+SPK": "ręczne + SPK", + "ręczne+SCS": "ręczne + SCS", + "mechaniczne": "mechaniczne", + "mechaniczne+SPK": "mechaniczne + SPK", + "mechaniczne+SCS": "mechaniczne + SCS" + }, + "status": { + "online": "DO ", + "free": "WOLNA", + "ending": "KOŃCZY", + "not-signed": "NIEZALOGOWANY", + "no-limit": "BEZ LIMITU", + "unavailable": "NIEDOSTĘPNY", + "brb": "Z/W", + "no-space": "BRAK MIEJSCA" + }, + "options": { + "filters": "FILTRY", + "donate": "WESPRZYJ" + }, + "filters": { + "title": "FILTRUJ STACJE", + "default": "DOMYŚLNA", + "not-default": "POZA PACZKĄ", + "real": "REALNA", + "fictional": "FIKCYJNA", + "SPK": "SPK", + "SCS": "SCS", + "manual": "RĘCZNE", + "mechanical": "MECHANICZNE", + "modern": "WSPÓŁCZESNA", + "semaphores": "KSZTAŁTOWA", + "mixed": "MIESZANA", + "historical": "HISTORYCZNA", + "free": "WOLNA", + "occupied": "ZAJĘTA", + "sliders": { + "min-lvl": "MINIMALNY WYMAGANY POZIOM DYŻURNEGO", + "routes-1t-cat": "SZLAKI JEDNOTOROWE ZELEKTR. (MINIMUM)", + "routes-1t-other": "SZLAKI JEDNOTOROWE NIEZELEKTR. (MINIMUM)", + "routes-2t-cat": "SZLAKI DWUTOROWE ZELEKTR. (MINIMUM)", + "routes-2t-other": "SZLAKI DWUTOROWE NIEZELEKTR. (MINIMUM)" + }, + "save": "ZAPISZ FILTRY", + "reset": "RESETUJ FILTRY", + "close": "ZAMKNIJ FILTRY" + }, + "sceneries": { + "station": "Stacja", + "min-lvl": "Min. poziom
dyżurnego", + "status": "Status", + "dispatcher": "Dyżurny", + "dispatcher-lvl": "Poziom
dyżurnego", + "routes": "Szlaki
2tor | 1tor", + "general": "Informacje
ogólne", + "users": "Maszyniści online", + "spawns": "Otwarte spawny", + "timetables": "Aktywne rozkłady jazdy", + "no-stations": "Brak stacji do wyświetlenia!" + }, + "trains": { + "no-trains": "Brak pociągów online!", + "stats": "STATYSTYKI RUCHU", + "stats-speed": "PRĘDKOŚCI POCIĄGÓW (MIN | ŚR | MAX) [km/h]", + "stats-length": "DŁUGOŚCI ROZKŁADÓW (MIN | ŚR | MAX) [km]", + "stats-categories": "KATEGORIE RJ", + "stats-special-twr": "WYSOKIEGO RYZYKA", + "stats-special-skr": "PRZEKROCZONA SKRAJNIA", + "stats-locos": "NAJCZĘSTSZE JEDNOSTKI", + "option-mass": "masa", + "option-speed": "prędkość", + "option-length": "długość", + "option-distance": "kilometraż", + "option-timetable": "numer pociagu", + "search-no": "Szukaj nr pociągu...", + "search-driver": "Szukaj maszynisty...", + "detailed-timetable": "Szczegółowy rozkład jazdy pociągu ", + "via-title": "Przez: " + }, + "journal": { + "title": "DZIENNIK AKTYWNOŚCI SCENERII", + "subtitle": "Pokazuje dyżurnych, którzy ostatnio byli aktywni na wybranej scenerii", + "disclaimer": "Ta funkcjonalność jest w testach beta!
Informacje pokazywane na ekranie mogą znikać, a ich zawartość może być fałszywa!", + "select": "Wybierz scenerię" + }, + "scenery": { + "users": "GRACZE ONLINE", + "spawns": "OTWARTE SPAWNY", + "timetables": "AKTYWNE ROZKŁADY JAZDY", + "no-timetables": "Brak aktywnych rozkładów!", + "no-users": "BRAK AKTYWNYCH GRACZY", + "no-spawns": "BRAK OTWARTYCH SPAWNÓW", + "no-scenery": "Ups! Nie znaleziono danej stacji bądź jest ona offline!", + "return-btn": "Wróć na stronę główną" + }, + "timetables": { + "online": "Na stacji", + "departed": "Odprawiony", + "departed-away": "Odjechał", + "arriving": "W drodze", + "stopped": "Postój", + "terminated": "Skończył bieg", + "begins": "ROZPOCZYNA
BIEG", + "terminates": "KOŃCZY BIEG" + } +} diff --git a/src/scripts/interfaces/ISceneryInfoData.ts b/src/scripts/interfaces/ISceneryInfoData.ts index 1ee10ec..12fc7c9 100644 --- a/src/scripts/interfaces/ISceneryInfoData.ts +++ b/src/scripts/interfaces/ISceneryInfoData.ts @@ -1,33 +1,33 @@ -interface ISceneryInfoData { - stationName: string; - stationURL: string; - stationLines: string; - stationProject: string; - - reqLevel: string; - supportersOnly: string; - signalType: string; - controlType: string; - SBL: string; - twoWayBlock: string; - - routesOneWayCatenary: number; - routesOneWayOther: number; - routesTwoWayCatenary: number; - routesToWayOther: number; - - default: boolean; - nonPublic: boolean; - unavailable: boolean; - hasData: boolean; - - stops: string[]; - checkpoints: string[]; - - currentDispatcher: string; - currentDispatcherId: number; - currentDispatcherFrom: number; - dispatcherHistory: { dispatcherName: string; dispatcherId: number; dispatcherFrom: number; dispatcherTo: number }[]; -} - -export default ISceneryInfoData; +interface ISceneryInfoData { + stationName: string; + stationURL: string; + stationLines: string; + stationProject: string; + + reqLevel: string; + supportersOnly: string; + signalType: string; + controlType: string; + SBL: string; + twoWayBlock: string; + + routesOneWayCatenary: number; + routesOneWayOther: number; + routesTwoWayCatenary: number; + routesToWayOther: number; + + default: boolean; + nonPublic: boolean; + unavailable: boolean; + hasData: boolean; + + stops: string[]; + checkpoints: string[]; + + currentDispatcher: string; + currentDispatcherId: number; + currentDispatcherFrom: number; + dispatcherHistory: { dispatcherName: string; dispatcherId: number; dispatcherFrom: number; dispatcherTo: number }[]; +} + +export default ISceneryInfoData; diff --git a/src/store/modules/DataModule.ts b/src/store/modules/DataModule.ts deleted file mode 100644 index 3c64758..0000000 --- a/src/store/modules/DataModule.ts +++ /dev/null @@ -1,18 +0,0 @@ -import store from "@/store"; -import { Module, VuexModule, Mutation, Action, MutationAction } from "vuex-module-decorators"; - -@Module({ dynamic: true, store, name: "dataModule" }) -export default class MyModule extends VuexModule { - test: string = "xd"; - - get getTest() { - return this.test; - } - - @MutationAction - async fetchTest() { - const fetched = "aaa"; - - return { test: fetched }; - } -} diff --git a/src/store/store.ts b/src/store/store.ts index 5306987..999f3d4 100644 --- a/src/store/store.ts +++ b/src/store/store.ts @@ -1,20 +1,22 @@ -import { Module, VuexModule, Mutation, Action } from 'vuex-module-decorators'; -import axios from 'axios'; +import { Module, VuexModule, Mutation, Action } from "vuex-module-decorators"; +import axios from "axios"; -import JSONStationData from '@/data/stationData.json'; +import JSONStationData from "@/data/stationData.json"; -import Station from '@/scripts/interfaces/Station'; -import Train from '@/scripts/interfaces/Train'; -import TrainStop from '@/scripts/interfaces/TrainStop'; +import Station from "@/scripts/interfaces/Station"; +import Train from "@/scripts/interfaces/Train"; +import TrainStop from "@/scripts/interfaces/TrainStop"; + +import utils from "@/scripts/utils/storeUtils"; enum Status { Initialized = -1, Loading = 0, Error = 1, - Loaded = 2, + Loaded = 2 } -interface ITimetableData { +interface TimetableData { trainNo: number; driverName: string; driverId: number; @@ -50,87 +52,11 @@ interface IOnlineStationData { } const URLs = { - stations: 'https://api.td2.info.pl:9640/?method=getStationsOnline', - trains: 'https://api.td2.info.pl:9640/?method=getTrainsOnline', - dispatchers: 'https://api.td2.info.pl:9640/?method=readFromSWDR&value=getDispatcherStatusList%3B1', + stations: "https://api.td2.info.pl:9640/?method=getStationsOnline", + trains: "https://api.td2.info.pl:9640/?method=getTrainsOnline", + dispatchers: "https://api.td2.info.pl:9640/?method=readFromSWDR&value=getDispatcherStatusList%3B1" }; -const timetableURL = (trainNo: number) => `https://api.td2.info.pl:9640/?method=readFromSWDR&value=getTimetable%3B${trainNo}%3Beu`; -const getLocoURL = (locoType: string) => `https://rj.td2.info.pl/dist/img/thumbnails/${locoType.includes('EN') ? locoType + 'rb' : locoType}.png`; - -const getStatusID = (stationStatus: any) => { - if (!stationStatus) return 'not-signed'; - - const statusCode = stationStatus[2]; - const statusTimestamp = stationStatus[3]; - - switch (statusCode) { - case 0: - if (statusTimestamp - Date.now() > 21000000) return 'no-limit'; - - return 'online'; - - case 1: - return 'brb'; - - case 2: - if (statusTimestamp == 0) return 'ending'; - break; - - case 3: - return 'no-space'; - - default: - break; - } - - return 'unavailable'; -}; - -const getStatusTimestamp = (stationStatus: any) => { - if (!stationStatus) return -2; - - const statusCode = stationStatus[2]; - const statusTimestamp = stationStatus[3]; - - switch (statusCode) { - case 0: - case 1: - case 3: - return statusTimestamp; - - case 2: - if (statusTimestamp == 0) return 0; - break; - - default: - break; - } - - return -1; -}; - -const parseSpawns = (spawnString: string) => { - if (!spawnString) return []; - if (spawnString === 'NO_SPAWN') return []; - - return spawnString.split(';').map(spawn => { - const spawnArray = spawn.split(','); - const spawnName = spawnArray[6] ? spawnArray[6] : spawnArray[0]; - const spawnLength = parseInt(spawnArray[2]); - - return { spawnName, spawnLength }; - }); -}; - -const getTimestamp = (date: string) => (date ? new Date(date).getTime() : 0); - -const timestampToString = (timestamp: number) => - new Date(timestamp).toLocaleTimeString('pl-PL', { - hour: '2-digit', - minute: '2-digit', - }); - @Module export default class Store extends VuexModule { private trainCount: number = 0; @@ -151,7 +77,7 @@ export default class Store extends VuexModule { trainCount: this.trainCount, stationCount: this.stationCount, dataConnectionStatus: this.dataConnectionStatus, - timetableDataStatus: this.timetableLoaded, + timetableDataStatus: this.timetableLoaded }; } @@ -177,27 +103,27 @@ export default class Store extends VuexModule { //ACTIONS @Action async synchronizeData() { - this.context.commit('setSceneryData'); - this.context.commit('setSceneryDataStatus', Status.Loaded); + this.context.commit("setSceneryData"); + this.context.commit("setSceneryDataStatus", Status.Loaded); - this.context.dispatch('fetchOnlineData'); - setInterval(() => this.context.dispatch('fetchOnlineData'), 20000); + this.context.dispatch("fetchOnlineData"); + setInterval(() => this.context.dispatch("fetchOnlineData"), 20000); } - @Action({ commit: 'updateTimetableData' }) + @Action({ commit: "updateTimetableData" }) async fetchTimetableData() { - return this.trainList.reduce(async (acc: Promise, train) => { - const timetable = await (await axios.get(timetableURL(train.trainNo))).data.message; + return this.trainList.reduce(async (acc: Promise, train) => { + const timetable = await (await axios.get(utils.timetableURL(train.trainNo))).data.message; const trainInfo = timetable.trainInfo; if (!timetable || !trainInfo) return acc; const followingStops: TrainStop[] = timetable.stopPoints.reduce((stopsAcc: TrainStop[], point) => { - const arrivalTimestamp = getTimestamp(point.arrivalTime); - const arrivalRealTimestamp = getTimestamp(point.arrivalRealTime); + const arrivalTimestamp = utils.getTimestamp(point.arrivalTime); + const arrivalRealTimestamp = utils.getTimestamp(point.arrivalRealTime); - const departureTimestamp = getTimestamp(point.departureTime); - const departureRealTimestamp = getTimestamp(point.departureRealTime); + const departureTimestamp = utils.getTimestamp(point.departureTime); + const departureRealTimestamp = utils.getTimestamp(point.departureRealTime); stopsAcc.push({ stopName: point.pointName, @@ -205,19 +131,19 @@ export default class Store extends VuexModule { stopType: point.pointStopType, stopDistance: point.pointDistance, - mainStop: point.pointName.includes('strong'), + mainStop: point.pointName.includes("strong"), arrivalLine: point.arrivalLine, - arrivalTimeString: timestampToString(point.arrivalTime), + arrivalTimeString: utils.timestampToString(point.arrivalTime), arrivalTimestamp: arrivalTimestamp, - arrivalRealTimeString: timestampToString(point.arrivalRealTime), + arrivalRealTimeString: utils.timestampToString(point.arrivalRealTime), arrivalRealTimestamp: arrivalRealTimestamp, arrivalDelay: point.arrivalDelay, departureLine: point.departureLine, - departureTimeString: timestampToString(point.departureTime), + departureTimeString: utils.timestampToString(point.departureTime), departureTimestamp: departureTimestamp, - departureRealTimeString: timestampToString(point.departureRealTime), + departureRealTimeString: utils.timestampToString(point.departureRealTime), departureRealTimestamp: departureRealTimestamp, departureDelay: point.departureDelay, @@ -226,7 +152,7 @@ export default class Store extends VuexModule { confirmed: point.confirmed, stopped: point.isStopped, - stopTime: point.pointStopTime, + stopTime: point.pointStopTime }); return stopsAcc; @@ -245,7 +171,7 @@ export default class Store extends VuexModule { SKR: trainInfo.skr, routeDistance: timetable.stopPoints[timetable.stopPoints.length - 1].pointDistance, followingStops, - followingSceneries: trainInfo.sceneries, + followingSceneries: trainInfo.sceneries }); return acc; @@ -261,15 +187,15 @@ export default class Store extends VuexModule { const onlineDispatchersData = await response[2].data.message; let updatedStationList = onlineStationsData.reduce((acc, station) => { - if (station.region !== 'eu' || !station.isOnline) return acc; + if (station.region !== "eu" || !station.isOnline) return acc; - const stationStatus = onlineDispatchersData.find(status => status[0] == station.stationHash && status[1] == 'eu'); + const stationStatus = onlineDispatchersData.find(status => status[0] == station.stationHash && status[1] == "eu"); - const statusTimestamp = getStatusTimestamp(stationStatus); - const statusID = getStatusID(stationStatus); + const statusTimestamp = utils.getStatusTimestamp(stationStatus); + const statusID = utils.getStatusID(stationStatus); const stationTrains = onlineTrainsData.filter( - train => train.region === 'eu' && train.isOnline && train.station.stationName === station.stationName + train => train.region === "eu" && train.isOnline && train.station.stationName === station.stationName ); acc.push({ @@ -277,7 +203,7 @@ export default class Store extends VuexModule { stationHash: station.stationHash, maxUsers: station.maxUsers, currentUsers: station.currentUsers, - spawns: parseSpawns(station.spawnString), + spawns: utils.parseSpawns(station.spawnString), dispatcherName: station.dispatcherName, dispatcherRate: station.dispatcherRate, dispatcherId: station.dispatcherId, @@ -286,7 +212,7 @@ export default class Store extends VuexModule { stationTrains, statusTimestamp, statusID, - statusTimeString: timestampToString(statusTimestamp), + statusTimeString: utils.timestampToString(statusTimestamp) }); return acc; @@ -294,9 +220,9 @@ export default class Store extends VuexModule { let updatedTrainList = await Promise.all( onlineTrainsData - .filter(train => train.region === 'eu') + .filter(train => train.region === "eu") .map(async train => { - const locoType = train.dataCon.split(';') ? train.dataCon.split(';')[0] : train.dataCon; + const locoType = train.dataCon.split(";") ? train.dataCon.split(";")[0] : train.dataCon; return { trainNo: train.trainNo, @@ -312,18 +238,18 @@ export default class Store extends VuexModule { currentStationHash: train.station.stationHash, connectedTrack: train.dataSceneryConnection, locoType, - locoURL: getLocoURL(locoType), + locoURL: utils.getLocoURL(locoType) }; }) ); - this.context.commit('updateOnlineStations', updatedStationList); - this.context.commit('updateOnlineTrains', updatedTrainList); + this.context.commit("updateOnlineStations", updatedStationList); + this.context.commit("updateOnlineTrains", updatedTrainList); - this.context.dispatch('fetchTimetableData'); + this.context.dispatch("fetchTimetableData"); }) .catch(err => { - this.context.commit('setDataConnectionStatus', Status.Error); + this.context.commit("setDataConnectionStatus", Status.Error); }); } @@ -368,7 +294,7 @@ export default class Store extends VuexModule { stationLines: station[2] as string, stationProject: station[3] as string, reqLevel: station[4] as string, - supportersOnly: station[5] == 'TAK', + supportersOnly: station[5] == "TAK", signalType: station[6] as string, controlType: station[7] as string, SBL: station[8] as string, @@ -376,12 +302,12 @@ export default class Store extends VuexModule { routes: { oneWay: { catenary: station[10] as number, - noCatenary: station[11] as number, + noCatenary: station[11] as number }, twoWay: { catenary: station[12] as number, - noCatenary: station[13] as number, - }, + noCatenary: station[13] as number + } }, checkpoints: station[14] ? (station[14] as string[]).map(sub => ({ checkpointName: sub, scheduledTrains: [] })) : null, stops: station[15] as string[], @@ -390,21 +316,21 @@ export default class Store extends VuexModule { nonPublic: station[17] as boolean, unavailable: station[18] as boolean, - stationHash: '', + stationHash: "", maxUsers: 0, currentUsers: 0, - dispatcherName: '', + dispatcherName: "", dispatcherRate: 0, dispatcherExp: -1, dispatcherId: 0, dispatcherIsSupporter: false, online: false, statusTimestamp: -3, - statusID: 'free', - statusTimeString: '', + statusID: "free", + statusTimeString: "", stationTrains: [], scheduledTrains: [], - spawns: [], + spawns: [] })); } @@ -418,27 +344,27 @@ export default class Store extends VuexModule { acc.push({ ...station, ...onlineStationData, - online: true, + online: true }); else if (registeredStation) acc.push({ ...station, - stationProject: '', - stationHash: '', + stationProject: "", + stationHash: "", maxUsers: 0, currentUsers: 0, - dispatcherName: '', + dispatcherName: "", dispatcherRate: 0, dispatcherExp: -1, dispatcherId: 0, dispatcherIsSupporter: false, online: false, - statusID: 'free', + statusID: "free", statusTimestamp: -3, - statusTimeString: '', + statusTimeString: "", stationTrains: [], scheduledTrains: [], - checkpoints: null, + checkpoints: null }); return acc; @@ -453,8 +379,8 @@ export default class Store extends VuexModule { stationTrains: [], subStations: [], online: true, - reqLevel: '-1', - nonPublic: true, + reqLevel: "-1", + nonPublic: true }); }); @@ -478,153 +404,77 @@ export default class Store extends VuexModule { } @Mutation - private updateTimetableData(timetableList: ITimetableData[]) { + private updateTimetableData(timetableList: TimetableData[]) { this.stationList = this.stationList.map(station => { const stationName = station.stationName.toLowerCase(); - const scheduledTrains: Station['scheduledTrains'] = timetableList.reduce( - (acc: Station['scheduledTrains'], timetableData: ITimetableData, index) => { - if (!timetableData.followingSceneries.includes(station.stationHash)) return acc; - const stopInfoIndex = timetableData.followingStops.findIndex(stop => { - const stopName = stop.stopNameRAW.toLowerCase(); + const scheduledTrains: Station["scheduledTrains"] = timetableList.reduce((acc: Station["scheduledTrains"], timetable: TimetableData, index) => { + if (!timetable.followingSceneries.includes(station.stationHash)) return acc; - if (stationName === stopName) return true; - if (stopName.includes(stationName) && !stop.stopName.includes('po.') && !stop.stopName.includes('podg.')) return true; - if (stationName.includes(stopName) && !stop.stopName.includes('po.') && !stop.stopName.includes('podg.')) return true; - if (stopName.includes('podg.') && stopName.split(', podg.')[0] && stationName.includes(stopName.split(', podg.')[0])) return true; + const stopInfoIndex = timetable.followingStops.findIndex(stop => { + const stopName = stop.stopNameRAW.toLowerCase(); - if (station.stops && station.stops.includes(stop.stopNameRAW)) return true; + if (stationName === stopName) return true; + if (stopName.includes(stationName) && !stop.stopName.includes("po.") && !stop.stopName.includes("podg.")) return true; + if (stationName.includes(stopName) && !stop.stopName.includes("po.") && !stop.stopName.includes("podg.")) return true; + if (stopName.includes("podg.") && stopName.split(", podg.")[0] && stationName.includes(stopName.split(", podg.")[0])) return true; - return false; - }); + if (station.stops && station.stops.includes(stop.stopNameRAW)) return true; - if (stopInfoIndex == -1) return acc; + return false; + }); - const stopInfo = timetableData.followingStops[stopInfoIndex]; + if (stopInfoIndex == -1) return acc; - let stopStatus = ''; - let stopLabel = ''; - let stopStatusID = 0; - let nearestStop = ''; + const trainStop = timetable.followingStops[stopInfoIndex]; + const trainStopStatus = utils.getTrainStopStatus(trainStop, timetable, station); - if (stopInfo.terminatesHere && stopInfo.confirmed) { - stopStatus = 'terminated'; - stopLabel = 'Skończył bieg'; - stopStatusID = 5; - } else if (!stopInfo.terminatesHere && stopInfo.confirmed && timetableData.currentStationName == station.stationName) { - stopStatus = 'departed'; - stopLabel = 'Odprawiony'; - stopStatusID = 2; - } else if (!stopInfo.terminatesHere && stopInfo.confirmed && timetableData.currentStationName != station.stationName) { - stopStatus = 'departed-away'; - stopLabel = 'Odjechał'; - stopStatusID = 4; - } else if (timetableData.currentStationName == station.stationName && !stopInfo.stopped) { - stopStatus = 'online'; - stopLabel = 'Na stacji'; - stopStatusID = 0; - } else if (timetableData.currentStationName == station.stationName && stopInfo.stopped) { - stopStatus = 'stopped'; - stopLabel = 'Postój'; - stopStatusID = 1; - } else if (timetableData.currentStationName != station.stationName) { - stopStatus = 'arriving'; - stopLabel = 'W drodze'; - stopStatusID = 3; - } + acc.push({ + trainNo: timetable.trainNo, + driverName: timetable.driverName, + driverId: timetable.driverId, + currentStationName: timetable.currentStationName, + currentStationHash: timetable.currentStationHash, + category: timetable.category, + beginsAt: timetable.followingStops[0].stopNameRAW, + terminatesAt: timetable.followingStops[timetable.followingStops.length - 1].stopNameRAW, + nearestStop: "", + stopInfo: trainStop, + stopLabel: trainStopStatus.stopLabel, + stopStatus: trainStopStatus.stopStatus, + stopStatusID: trainStopStatus.stopStatusID + }); - if (stopInfoIndex < timetableData.followingStops.length - 2) { - for (let i = stopInfoIndex + 1; i < timetableData.followingStops.length - 1; i++) { - const stop = timetableData.followingStops[i]; - - if (stop.mainStop && stop.stopType.includes('ph')) { - nearestStop = stop.stopNameRAW; - break; - } - } - } - - acc.push({ - trainNo: timetableData.trainNo, - driverName: timetableData.driverName, - driverId: timetableData.driverId, - currentStationName: timetableData.currentStationName, - currentStationHash: timetableData.currentStationHash, - category: timetableData.category, - beginsAt: timetableData.followingStops[0].stopNameRAW, - terminatesAt: timetableData.followingStops[timetableData.followingStops.length - 1].stopNameRAW, - nearestStop, - stopInfo, - stopLabel, - stopStatus, - stopStatusID, - }); - - return acc; - }, - [] - ); + return acc; + }, []); if (station.checkpoints) { station.checkpoints.forEach(cp => (cp.scheduledTrains.length = 0)); for (let checkpoint of station.checkpoints) { - timetableList.reduce((acc, data) => { - data.followingStops - .filter(stop => stop.stopNameRAW.toLowerCase() === checkpoint.checkpointName.toLowerCase()) - .forEach(stopInfo => { - // const stopInfo = data.followingStops[stopInfoIndex]; - - let stopStatus = ''; - let stopLabel = ''; - let nearestStop = ''; - let stopStatusID = 0; - - if (stopInfo.terminatesHere && stopInfo.confirmed) { - stopStatus = 'terminated'; - stopLabel = 'Skończył bieg'; - stopStatusID = 5; - } else if (!stopInfo.terminatesHere && stopInfo.confirmed && data.currentStationName == station.stationName) { - stopStatus = 'departed'; - stopLabel = 'Odprawiony'; - stopStatusID = 2; - } else if (!stopInfo.terminatesHere && stopInfo.confirmed && data.currentStationName != station.stationName) { - stopStatus = 'departed-away'; - stopLabel = 'Odjechał'; - stopStatusID = 4; - } else if (data.currentStationName == station.stationName && !stopInfo.stopped) { - stopStatus = 'online'; - stopLabel = 'Na stacji'; - stopStatusID = 0; - } else if (data.currentStationName == station.stationName && stopInfo.stopped) { - stopStatus = 'stopped'; - stopLabel = 'Postój'; - stopStatusID = 1; - } else if (data.currentStationName != station.stationName) { - stopStatus = 'arriving'; - stopLabel = 'W drodze'; - stopStatusID = 3; - } + timetableList.forEach(timetable => { + timetable.followingStops + .filter(trainStop => trainStop.stopNameRAW.toLowerCase() === checkpoint.checkpointName.toLowerCase()) + .forEach(trainStop => { + const trainStopStatus = utils.getTrainStopStatus(trainStop, timetable, station); checkpoint.scheduledTrains.push({ - trainNo: data.trainNo, - driverName: data.driverName, - driverId: data.driverId, - currentStationName: data.currentStationName, - currentStationHash: data.currentStationHash, - category: data.category, - beginsAt: data.followingStops[0].stopNameRAW, - terminatesAt: data.followingStops[data.followingStops.length - 1].stopNameRAW, - stopInfo, - stopLabel, - stopStatus, - nearestStop, - stopStatusID, + trainNo: timetable.trainNo, + driverName: timetable.driverName, + driverId: timetable.driverId, + currentStationName: timetable.currentStationName, + currentStationHash: timetable.currentStationHash, + category: timetable.category, + beginsAt: timetable.followingStops[0].stopNameRAW, + terminatesAt: timetable.followingStops[timetable.followingStops.length - 1].stopNameRAW, + nearestStop: "", + stopInfo: trainStop, + stopLabel: trainStopStatus.stopLabel, + stopStatus: trainStopStatus.stopStatus, + stopStatusID: trainStopStatus.stopStatusID }); }); - - return acc; - }, []); + }); } } @@ -639,7 +489,7 @@ export default class Store extends VuexModule { .find(station => station.stationName === train.currentStationName) ?.scheduledTrains.find(stationTrain => stationTrain.trainNo === train.trainNo); - acc.push({ ...train, timetableData, stopStatus: trainData?.stopStatus || '', stopLabel: trainData?.stopLabel || '' }); + acc.push({ ...train, timetableData, stopStatus: trainData?.stopStatus || "", stopLabel: trainData?.stopLabel || "" }); } return acc; diff --git a/src/styles/card.scss b/src/styles/card.scss index 77f2100..1d3114d 100644 --- a/src/styles/card.scss +++ b/src/styles/card.scss @@ -1,47 +1,47 @@ -@import './variables.scss'; - -.card { - display: flex; - flex-direction: column; - - position: fixed; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - z-index: 4; - - overflow: auto; - background: $primaryCol; - - box-shadow: 0 0 15px 5px #474747; - - // width: 75%; - width: 650px; - max-height: 95%; - - padding: 0.5em 1em; - - - @include smallScreen { - width: 95%; - } - - // @include midScreen { - // width: 85%; - // } - - - - &-exit { - position: absolute; - top: 0; - right: 0; - margin: 0.3em 0em; - - img { - width: 1.6em; - } - - cursor: pointer; - } +@import './variables.scss'; + +.card { + display: flex; + flex-direction: column; + + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + z-index: 4; + + overflow: auto; + background: $primaryCol; + + box-shadow: 0 0 15px 5px #474747; + + // width: 75%; + width: 650px; + max-height: 95%; + + padding: 0.5em 1em; + + + @include smallScreen { + width: 95%; + } + + // @include midScreen { + // width: 85%; + // } + + + + &-exit { + position: absolute; + top: 0; + right: 0; + margin: 0.3em 0em; + + img { + width: 1.6em; + } + + cursor: pointer; + } } \ No newline at end of file diff --git a/src/views/HistoryView.vue b/src/views/HistoryView.vue index b64f164..61ae252 100644 --- a/src/views/HistoryView.vue +++ b/src/views/HistoryView.vue @@ -1,348 +1,348 @@ - - - - - \ No newline at end of file