diff --git a/.vscode/settings.json b/.vscode/settings.json index 4fb2f27..51bf1b7 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,9 +1,9 @@ { - "yaml.schemas": { - "./static/mapFiles/yaml/mapFiles.schema.json": "static/mapFiles/yaml/*.yaml", - "./static/stations/stationFiles.schema.json": "static/stations/*.yaml" - }, - "yaml.format.enable": true, - "yaml.validate": true, - "yaml.schemaStore.enable": false -} \ No newline at end of file + "yaml.schemas": { + "./static/mapFiles/yaml/mapFiles.schema.json": "static/mapFiles/yaml/*.yaml", + "./static/stations/stationFiles.schema.json": "static/stations/*.yaml" + }, + "yaml.format.enable": true, + "yaml.validate": true, + "yaml.schemaStore.enable": false +} diff --git a/package-lock.json b/package-lock.json index e2bf6ad..c05caf2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -514,13 +514,13 @@ } }, "node_modules/@eslint/compat": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-2.0.2.tgz", - "integrity": "sha512-pR1DoD0h3HfF675QZx0xsyrsU8q70Z/plx7880NOhS02NuWLgBCOMDL787nUeQ7EWLkxv3bPQJaarjcPQb2Dwg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-2.0.3.tgz", + "integrity": "sha512-SjIJhGigp8hmd1YGIBwh7Ovri7Kisl42GYFjrOyHhtfYGGoLW6teYi/5p8W50KSsawUPpuLOSmsq1bD0NGQLBw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^1.1.0" + "@eslint/core": "^1.1.1" }, "engines": { "node": "^20.19.0 || ^22.13.0 || >=24" @@ -535,15 +535,15 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", - "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "version": "0.21.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz", + "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", "dev": true, "license": "Apache-2.0", "dependencies": { "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", - "minimatch": "^3.1.2" + "minimatch": "^3.1.5" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -576,9 +576,9 @@ } }, "node_modules/@eslint/core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.1.0.tgz", - "integrity": "sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.1.1.tgz", + "integrity": "sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -589,20 +589,20 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", - "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz", + "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==", "dev": true, "license": "MIT", "dependencies": { - "ajv": "^6.12.4", + "ajv": "^6.14.0", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.1", - "minimatch": "^3.1.2", + "minimatch": "^3.1.5", "strip-json-comments": "^3.1.1" }, "engines": { @@ -626,9 +626,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.39.2", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", - "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", + "version": "9.39.4", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz", + "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==", "dev": true, "license": "MIT", "engines": { @@ -785,9 +785,9 @@ "license": "MIT" }, "node_modules/@rollup/plugin-commonjs": { - "version": "28.0.9", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.9.tgz", - "integrity": "sha512-PIR4/OHZ79romx0BVVll/PkwWpJ7e5lsqFa3gFfcrFPWwLXLV39JVUzQV9RKjWerE7B845Hqjj9VYlQeieZ2dA==", + "version": "29.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-29.0.2.tgz", + "integrity": "sha512-S/ggWH1LU7jTyi9DxZOKyxpVd4hF/OZ0JrEbeLjXk/DFXwRny0tjD2c992zOUYQobLrVkRVMDdmHP16HKP7GRg==", "dev": true, "license": "MIT", "dependencies": { @@ -1238,9 +1238,9 @@ "license": "MIT" }, "node_modules/@sveltejs/acorn-typescript": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.8.tgz", - "integrity": "sha512-esgN+54+q0NjB0Y/4BomT9samII7jGwNy/2a3wNZbT2A2RpmXsXwUt24LvLhx6jUq2gVk4cWEvcRO6MFQbOfNA==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.9.tgz", + "integrity": "sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==", "dev": true, "license": "MIT", "peerDependencies": { @@ -1248,16 +1248,16 @@ } }, "node_modules/@sveltejs/adapter-node": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-node/-/adapter-node-5.5.2.tgz", - "integrity": "sha512-L15Djwpr7HrSAPj/Z8PYfc0pa9A1tllrr18phKI0WJHJeoWw45yinPf0IGgVTmakqx1B3JQ+C/OFl9ZwmxHU1Q==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-node/-/adapter-node-5.5.4.tgz", + "integrity": "sha512-45X92CXW+2J8ZUzPv3eLlKWEzINKiiGeFWTjyER4ZN4sGgNoaoeSkCY/QYNxHpPXy71QPsctwccBo9jJs0ySPQ==", "dev": true, "license": "MIT", "dependencies": { - "@rollup/plugin-commonjs": "^28.0.1", + "@rollup/plugin-commonjs": "^29.0.0", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^16.0.0", - "rollup": "^4.9.5" + "rollup": "^4.59.0" }, "peerDependencies": { "@sveltejs/kit": "^2.4.0" @@ -1345,9 +1345,9 @@ } }, "node_modules/@tabler/icons": { - "version": "3.36.1", - "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-3.36.1.tgz", - "integrity": "sha512-f4Jg3Fof/Vru5ioix/UO4GX+sdDsF9wQo47FbtvG+utIYYVQ/QVAC0QYgcBbAjQGfbdOh2CCf0BgiFOF9Ixtjw==", + "version": "3.40.0", + "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-3.40.0.tgz", + "integrity": "sha512-V/Q4VgNPKubRTiLdmWjV/zscYcj5IIk+euicUtaVVqF6luSC9rDngYWgST5/yh3Mrg/mYUwRv1YVTk71Jp0twQ==", "dev": true, "license": "MIT", "funding": { @@ -1356,13 +1356,13 @@ } }, "node_modules/@tabler/icons-svelte": { - "version": "3.36.1", - "resolved": "https://registry.npmjs.org/@tabler/icons-svelte/-/icons-svelte-3.36.1.tgz", - "integrity": "sha512-f48RDkXJr7dMbbWHho81rR91QiPleHTlOwJUM5uFhTqo7dXH4mNZxJo3tksQNmlIauh7PqoS3i+RY7YlZxg5yg==", + "version": "3.40.0", + "resolved": "https://registry.npmjs.org/@tabler/icons-svelte/-/icons-svelte-3.40.0.tgz", + "integrity": "sha512-7j8y7kPWGEmcTjcAry8JJK9RNnv8lLVN3c4GHRfRj/iu0+ovkaRM1lLplITYVPq/fbzhrK52P8i8JkEQBPj0hw==", "dev": true, "license": "MIT", "dependencies": { - "@tabler/icons": "" + "@tabler/icons": "3.40.0" }, "funding": { "type": "github", @@ -1394,9 +1394,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.19.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.9.tgz", - "integrity": "sha512-PD03/U8g1F9T9MI+1OBisaIARhSzeidsUjQaf51fOxrfjeiKN9bLVO06lHuHYjxdnqLWJijJHfqXPSJri2EM2A==", + "version": "22.19.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.15.tgz", + "integrity": "sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==", "dev": true, "license": "MIT", "dependencies": { @@ -1418,17 +1418,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.54.0.tgz", - "integrity": "sha512-hAAP5io/7csFStuOmR782YmTthKBJ9ND3WVL60hcOjvtGFb+HJxH4O5huAcmcZ9v9G8P+JETiZ/G1B8MALnWZQ==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.57.0.tgz", + "integrity": "sha512-qeu4rTHR3/IaFORbD16gmjq9+rEs9fGKdX0kF6BKSfi+gCuG3RCKLlSBYzn/bGsY9Tj7KE/DAQStbp8AHJGHEQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.54.0", - "@typescript-eslint/type-utils": "8.54.0", - "@typescript-eslint/utils": "8.54.0", - "@typescript-eslint/visitor-keys": "8.54.0", + "@typescript-eslint/scope-manager": "8.57.0", + "@typescript-eslint/type-utils": "8.57.0", + "@typescript-eslint/utils": "8.57.0", + "@typescript-eslint/visitor-keys": "8.57.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.4.0" @@ -1441,8 +1441,8 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.54.0", - "eslint": "^8.57.0 || ^9.0.0", + "@typescript-eslint/parser": "^8.57.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, @@ -1457,16 +1457,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.54.0.tgz", - "integrity": "sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.57.0.tgz", + "integrity": "sha512-XZzOmihLIr8AD1b9hL9ccNMzEMWt/dE2u7NyTY9jJG6YNiNthaD5XtUHVF2uCXZ15ng+z2hT3MVuxnUYhq6k1g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.54.0", - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/typescript-estree": "8.54.0", - "@typescript-eslint/visitor-keys": "8.54.0", + "@typescript-eslint/scope-manager": "8.57.0", + "@typescript-eslint/types": "8.57.0", + "@typescript-eslint/typescript-estree": "8.57.0", + "@typescript-eslint/visitor-keys": "8.57.0", "debug": "^4.4.3" }, "engines": { @@ -1477,19 +1477,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.54.0.tgz", - "integrity": "sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.0.tgz", + "integrity": "sha512-pR+dK0BlxCLxtWfaKQWtYr7MhKmzqZxuii+ZjuFlZlIGRZm22HnXFqa2eY+90MUz8/i80YJmzFGDUsi8dMOV5w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.54.0", - "@typescript-eslint/types": "^8.54.0", + "@typescript-eslint/tsconfig-utils": "^8.57.0", + "@typescript-eslint/types": "^8.57.0", "debug": "^4.4.3" }, "engines": { @@ -1504,14 +1504,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.54.0.tgz", - "integrity": "sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.0.tgz", + "integrity": "sha512-nvExQqAHF01lUM66MskSaZulpPL5pgy5hI5RfrxviLgzZVffB5yYzw27uK/ft8QnKXI2X0LBrHJFr1TaZtAibw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/visitor-keys": "8.54.0" + "@typescript-eslint/types": "8.57.0", + "@typescript-eslint/visitor-keys": "8.57.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1522,9 +1522,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.54.0.tgz", - "integrity": "sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.0.tgz", + "integrity": "sha512-LtXRihc5ytjJIQEH+xqjB0+YgsV4/tW35XKX3GTZHpWtcC8SPkT/d4tqdf1cKtesryHm2bgp6l555NYcT2NLvA==", "dev": true, "license": "MIT", "engines": { @@ -1539,15 +1539,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.54.0.tgz", - "integrity": "sha512-hiLguxJWHjjwL6xMBwD903ciAwd7DmK30Y9Axs/etOkftC3ZNN9K44IuRD/EB08amu+Zw6W37x9RecLkOo3pMA==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.57.0.tgz", + "integrity": "sha512-yjgh7gmDcJ1+TcEg8x3uWQmn8ifvSupnPfjP21twPKrDP/pTHlEQgmKcitzF/rzPSmv7QjJ90vRpN4U+zoUjwQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/typescript-estree": "8.54.0", - "@typescript-eslint/utils": "8.54.0", + "@typescript-eslint/types": "8.57.0", + "@typescript-eslint/typescript-estree": "8.57.0", + "@typescript-eslint/utils": "8.57.0", "debug": "^4.4.3", "ts-api-utils": "^2.4.0" }, @@ -1559,14 +1559,14 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.54.0.tgz", - "integrity": "sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.0.tgz", + "integrity": "sha512-dTLI8PEXhjUC7B9Kre+u0XznO696BhXcTlOn0/6kf1fHaQW8+VjJAVHJ3eTI14ZapTxdkOmc80HblPQLaEeJdg==", "dev": true, "license": "MIT", "engines": { @@ -1578,18 +1578,18 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.54.0.tgz", - "integrity": "sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.0.tgz", + "integrity": "sha512-m7faHcyVg0BT3VdYTlX8GdJEM7COexXxS6KqGopxdtkQRvBanK377QDHr4W/vIPAR+ah9+B/RclSW5ldVniO1Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.54.0", - "@typescript-eslint/tsconfig-utils": "8.54.0", - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/visitor-keys": "8.54.0", + "@typescript-eslint/project-service": "8.57.0", + "@typescript-eslint/tsconfig-utils": "8.57.0", + "@typescript-eslint/types": "8.57.0", + "@typescript-eslint/visitor-keys": "8.57.0", "debug": "^4.4.3", - "minimatch": "^9.0.5", + "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.4.0" @@ -1605,43 +1605,56 @@ "typescript": ">=4.8.4 <6.0.0" } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^2.0.2" + "brace-expansion": "^5.0.2" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@typescript-eslint/utils": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.54.0.tgz", - "integrity": "sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.57.0.tgz", + "integrity": "sha512-5iIHvpD3CZe06riAsbNxxreP+MuYgVUsV0n4bwLH//VJmgtt54sQeY2GszntJ4BjYCpMzrfVh2SBnUQTtys2lQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.54.0", - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/typescript-estree": "8.54.0" + "@typescript-eslint/scope-manager": "8.57.0", + "@typescript-eslint/types": "8.57.0", + "@typescript-eslint/typescript-estree": "8.57.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1651,19 +1664,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.54.0.tgz", - "integrity": "sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.0.tgz", + "integrity": "sha512-zm6xx8UT/Xy2oSr2ZXD0pZo7Jx2XsCoID2IUh9YSTFRu7z+WdwYTRk6LhUftm1crwqbuoF6I8zAFeCMw0YjwDg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.54.0", - "eslint-visitor-keys": "^4.2.1" + "@typescript-eslint/types": "8.57.0", + "eslint-visitor-keys": "^5.0.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1673,10 +1686,23 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", "bin": { @@ -1997,25 +2023,25 @@ } }, "node_modules/eslint": { - "version": "9.39.2", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", - "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", + "version": "9.39.4", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz", + "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.1", + "@eslint/config-array": "^0.21.2", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.39.2", + "@eslint/eslintrc": "^3.3.5", + "@eslint/js": "9.39.4", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", - "ajv": "^6.12.4", + "ajv": "^6.14.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", @@ -2034,7 +2060,7 @@ "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", + "minimatch": "^3.1.5", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, @@ -2073,9 +2099,9 @@ } }, "node_modules/eslint-plugin-svelte": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-3.14.0.tgz", - "integrity": "sha512-Isw0GvaMm0yHxAj71edAdGFh28ufYs+6rk2KlbbZphnqZAzrH3Se3t12IFh2H9+1F/jlDhBBL4oiOJmLqmYX0g==", + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-3.15.2.tgz", + "integrity": "sha512-k4Nsjs3bHujeEnnckoTM4mFYR1e8Mb9l2rTwNdmYiamA+Tjzn8X+2F+fuSP2w4VbXYhn2bmySyACQYdmUDW2Cg==", "dev": true, "license": "MIT", "dependencies": { @@ -2097,7 +2123,7 @@ "url": "https://github.com/sponsors/ota-meshi" }, "peerDependencies": { - "eslint": "^8.57.1 || ^9.0.0", + "eslint": "^8.57.1 || ^9.0.0 || ^10.0.0", "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0" }, "peerDependenciesMeta": { @@ -2201,9 +2227,9 @@ } }, "node_modules/esrap": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.2.tgz", - "integrity": "sha512-zA6497ha+qKvoWIK+WM9NAh5ni17sKZKhbS5B3PoYbBvaYHZWoS33zmFybmyqpn07RLUxSmn+RCls2/XF+d0oQ==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.3.tgz", + "integrity": "sha512-8fOS+GIGCQZl/ZIlhl59htOlms6U8NvX6ZYgYHpRU/b6tVSh3uHkOHZikl3D4cMbYM0JlpBe+p/BkZEi8J9XIQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2334,9 +2360,9 @@ } }, "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.1.tgz", + "integrity": "sha512-IxfVbRFVlV8V/yRaGzk0UVIcsKKHMSfYw66T/u4nTwlWteQePsxe//LjudR1AMX4tZW3WFCh3Zqa/sjlqpbURQ==", "dev": true, "license": "ISC" }, @@ -2379,9 +2405,9 @@ } }, "node_modules/globals": { - "version": "17.3.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-17.3.0.tgz", - "integrity": "sha512-yMqGUQVVCkD4tqjOJf3TnrvaaHDMYp4VlUSObbkIiuCPe/ofdMBFIAcBbCSRFWOnos6qRiTVStDwqPLUclaxIw==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.4.0.tgz", + "integrity": "sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==", "dev": true, "license": "MIT", "engines": { @@ -2827,9 +2853,9 @@ } }, "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", "dev": true, "funding": [ { @@ -2990,9 +3016,9 @@ } }, "node_modules/prettier-plugin-svelte": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.4.1.tgz", - "integrity": "sha512-xL49LCloMoZRvSwa6IEdN2GV6cq2IqpYGstYtMT+5wmml1/dClEoI0MZR78MiVPpu6BdQFfN0/y73yO6+br5Pg==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.5.1.tgz", + "integrity": "sha512-65+fr5+cgIKWKiqM1Doum4uX6bY8iFCdztvvp2RcF+AJoieaw9kJOFMNcJo/bkmKYsxFaM9OsVZK/gWauG/5mg==", "dev": true, "license": "MIT", "peerDependencies": { @@ -3249,9 +3275,9 @@ } }, "node_modules/svelte-check": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.3.6.tgz", - "integrity": "sha512-uBkz96ElE3G4pt9E1Tw0xvBfIUQkeH794kDQZdAUk795UVMr+NJZpuFSS62vcmO/DuSalK83LyOwhgWq8YGU1Q==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.4.5.tgz", + "integrity": "sha512-1bSwIRCvvmSHrlK52fOlZmVtUZgil43jNL/2H18pRpa+eQjzGt6e3zayxhp1S7GajPFKNM/2PMCG+DZFHlG9fw==", "dev": true, "license": "MIT", "dependencies": { @@ -3273,9 +3299,9 @@ } }, "node_modules/svelte-eslint-parser": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-1.4.1.tgz", - "integrity": "sha512-1eqkfQ93goAhjAXxZiu1SaKI9+0/sxp4JIWQwUpsz7ybehRE5L8dNuz7Iry7K22R47p5/+s9EM+38nHV2OlgXA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-1.6.0.tgz", + "integrity": "sha512-qoB1ehychT6OxEtQAqc/guSqLS20SlA53Uijl7x375s8nlUT0lb9ol/gzraEEatQwsyPTJo87s2CmKL9Xab+Uw==", "dev": true, "license": "MIT", "dependencies": { @@ -3284,11 +3310,12 @@ "espree": "^10.0.0", "postcss": "^8.4.49", "postcss-scss": "^4.0.9", - "postcss-selector-parser": "^7.0.0" + "postcss-selector-parser": "^7.0.0", + "semver": "^7.7.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0", - "pnpm": "10.24.0" + "pnpm": "10.30.3" }, "funding": { "url": "https://github.com/sponsors/ota-meshi" @@ -3380,16 +3407,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.54.0.tgz", - "integrity": "sha512-CKsJ+g53QpsNPqbzUsfKVgd3Lny4yKZ1pP4qN3jdMOg/sisIDLGyDMezycquXLE5JsEU0wp3dGNdzig0/fmSVQ==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.57.0.tgz", + "integrity": "sha512-W8GcigEMEeB07xEZol8oJ26rigm3+bfPHxHvwbYUlu1fUDsGuQ7Hiskx5xGW/xM4USc9Ephe3jtv7ZYPQntHeA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.54.0", - "@typescript-eslint/parser": "8.54.0", - "@typescript-eslint/typescript-estree": "8.54.0", - "@typescript-eslint/utils": "8.54.0" + "@typescript-eslint/eslint-plugin": "8.57.0", + "@typescript-eslint/parser": "8.57.0", + "@typescript-eslint/typescript-estree": "8.57.0", + "@typescript-eslint/utils": "8.57.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3399,7 +3426,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, @@ -3503,9 +3530,9 @@ } }, "node_modules/vitefu": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz", - "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.2.tgz", + "integrity": "sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==", "dev": true, "license": "MIT", "workspaces": [ @@ -3514,7 +3541,7 @@ "tests/projects/workspace/packages/*" ], "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0" }, "peerDependenciesMeta": { "vite": { diff --git a/scripts/parse-maps.js b/scripts/parse-maps.js index a35d85a..d1f1bd6 100644 --- a/scripts/parse-maps.js +++ b/scripts/parse-maps.js @@ -21,7 +21,7 @@ fs.readdirSync(stationInputDir).forEach((file) => { const content = yaml.load(fs.readFileSync(fullPath, 'utf8')); if (content.crs) { - stationList.push(content.crs) + stationList.push(content.crs); } const fileName = file.replace('.yaml', '.json'); @@ -40,11 +40,10 @@ fs.readdirSync(inputDir).forEach((file) => { const contentSet = new Set(); - // Use this loop to add a 'link' to each station if its CRS exists in 'stationList' if (Array.isArray(content.routeDetail)) { content.routeDetail.forEach((item) => { - if ((item.type === 'station') && (item.crs)) { + if (item.type === 'station' && item.crs) { // Edit the item if item.crs exists in 'stationList' - maybe a `linkable: true`? if (stationList.includes(item.crs)) { item.stationInfo = true; @@ -83,7 +82,6 @@ fs.readdirSync(inputDir).forEach((file) => { } }); - fs.writeFileSync(indexFile, JSON.stringify(mapList)); console.log(`Generated ${mapList.length} map files and index.`); diff --git a/src/app.html b/src/app.html index 03e5145..8c2149e 100644 --- a/src/app.html +++ b/src/app.html @@ -7,8 +7,14 @@ content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0" /> - - + + diff --git a/src/lib/assets/station/nby.json b/src/lib/assets/station/nby.json index f24f8f2..0ce7593 100644 --- a/src/lib/assets/station/nby.json +++ b/src/lib/assets/station/nby.json @@ -1 +1 @@ -{"name":"Newbury","crs":"nby","updated":"2026-03-11T00:00:00.000Z","checked":"2026-03-11T00:00:00.000Z","platforms":[{"platformId":"1Dn","platformLength":291,"signal":true,"dispatch":true,"dispatchNote":"Staffed until 22:00 Daily","stepFree":true,"stepFreeNote":"Accessible from street & via lifts","doorPattern":[{"kind":"IET5","doors":"all"},{"kind":"IET9","doors":"all"},{"kind":"IET10","doors":"all"},{"kind":"DMU","max-car":12}]},{"platformId":"1Up","platformLength":291,"signal":true,"dispatch":true,"dispatchNote":"Staffed until 22:00 Daily","stepFree":true,"stepFreeNote":"Accessible from street & via lifts","doorPattern":[{"kind":"IET5","doors":"all"},{"kind":"IET9","doors":"all"},{"kind":"IET10","doors":"all"},{"kind":"DMU","max-car":12}]},{"platformId":"2Dn","platformLength":327,"signal":true,"dispatch":true,"dispatchNote":"Staffed until 22:00 Daily","stepFree":true,"stepFreeNote":"Accessible from street & via lifts","doorPattern":[{"kind":"IET5","doors":"all"},{"kind":"IET9","doors":"all"},{"kind":"IET10","doors":"all"},{"kind":"DMU","max-car":14}]},{"platformId":"2Up","platformLength":327,"signal":true,"dispatch":true,"dispatchNote":"Staffed until 22:00 Daily","stepFree":true,"stepFreeNote":"Accessible from street & via lifts","doorPattern":[{"kind":"IET5","doors":"all"},{"kind":"IET9","doors":"all"},{"kind":"IET10","doors":"all"},{"kind":"DMU","max-car":14}]},{"platformId":3,"platformLength":129,"signal":true,"dispatch":true,"dispatchNote":"Staffed until 22:00 Daily","stepFree":true,"stepFreeNote":"Accessible from street & via lifts","doorPattern":[{"kind":"IET5","doors":"all"},{"kind":"IET9","doors":null},{"kind":"IET10","doors":null},{"kind":"DMU","max-car":5}]}]} \ No newline at end of file +{"name":"Newbury","crs":"nby","updated":"2026-03-11T00:00:00.000Z","checked":"2026-03-11T00:00:00.000Z","platforms":[{"platformId":"1Dn","platformLength":291,"signal":true,"dispatch":true,"dispatchNote":"Staffed until 22:00 Daily","stepFree":true,"stepFreeNote":"Accessible from street & via lifts","doorPattern":[{"kind":"IET5","doors":[1,10]},{"kind":"IET9","doors":[1,18]},{"kind":"IET10","doors":[1,20]},{"kind":"DMU","max-car":12}]},{"platformId":"1Up","platformLength":291,"signal":true,"dispatch":true,"dispatchNote":"Staffed until 22:00 Daily","stepFree":true,"stepFreeNote":"Accessible from street & via lifts","doorPattern":[{"kind":"IET5","doors":[1,10]},{"kind":"IET9","doors":[1,18]},{"kind":"IET10","doors":[1,20]},{"kind":"DMU","max-car":12}]},{"platformId":"2Dn","platformLength":327,"signal":true,"dispatch":true,"dispatchNote":"Staffed until 22:00 Daily","stepFree":true,"stepFreeNote":"Accessible from street & via lifts","doorPattern":[{"kind":"IET5","doors":[1,10]},{"kind":"IET9","doors":[1,18]},{"kind":"IET10","doors":[1,20]},{"kind":"DMU","max-car":14}]},{"platformId":"2Up","platformLength":327,"signal":true,"dispatch":true,"dispatchNote":"Staffed until 22:00 Daily","stepFree":true,"stepFreeNote":"Accessible from street & via lifts","doorPattern":[{"kind":"IET5","doors":[1,10]},{"kind":"IET9","doors":[1,18]},{"kind":"IET10","doors":[1,20]},{"kind":"DMU","max-car":14}]},{"platformId":3,"platformLength":129,"signal":true,"dispatch":true,"dispatchNote":"Staffed until 22:00 Daily","stepFree":true,"stepFreeNote":"Accessible from street & via lifts","doorPattern":[{"kind":"IET5","doors":[1,10]},{"kind":"IET9","doors":null},{"kind":"IET10","doors":null},{"kind":"DMU","max-car":5}]}]} \ No newline at end of file diff --git a/src/lib/components/RouteRow.svelte b/src/lib/components/RouteRow.svelte index 2b8a51b..5dc51b3 100644 --- a/src/lib/components/RouteRow.svelte +++ b/src/lib/components/RouteRow.svelte @@ -2,25 +2,55 @@ import { components } from '$lib/mapRegistry'; import type { ElecType } from '$lib/railStyles'; import { IconArrowNarrowRight, IconInfoCircle } from '@tabler/icons-svelte'; + import StationInfo from '$lib/components/StationInfo.svelte'; - type featureType = "station" | "junction" | "crossovers" | "siteof" | "bridge" | "minorBridge" | "crossover" | "crossing" | "loop" | "loops" | "signallerChange" | "electrificationChange" | "default" | "tunnel"; - export let feature: {name: string; type: featureType; goto?: string; entryPoint?: string; miles: number; chains: number; description?: string}; // Raw Object - export let activeElec: ElecType; // Active Electrification Type - export let reversed: boolean = false; + type featureType = + | 'station' + | 'junction' + | 'crossovers' + | 'siteof' + | 'bridge' + | 'minorBridge' + | 'crossover' + | 'crossing' + | 'loop' + | 'loops' + | 'signallerChange' + | 'electrificationChange' + | 'default' + | 'tunnel'; - $: Icon = components[feature.type] || components.default; + let { + feature, + activeElec, + reversed = false, + onShowInfo + }: { + feature: { + name: string; + type: featureType; + goto?: string; + entryPoint?: string; + miles: number; + chains: number; + description?: string; + stationInfo?: boolean; + crs?: string; + }; + activeElec: ElecType; + reversed?: boolean; + onShowInfo: (crs: string) => void; + } = $props(); + + let Icon = $derived(components[feature.type] || components.default); // Linking Logic - $: isLinkable = !!(feature.goto && feature.entryPoint); - $: href = `/map/${feature.goto}#${feature.entryPoint}`; - $: stationInfo = (feature.type === "station" && feature.stationInfo && feature.crs); + let isLinkable = $derived(!!(feature?.goto && feature?.entryPoint)); + let href = $derived(`/map/${feature.goto}#${feature.entryPoint}`); + let stationInfo = $derived(feature.type === 'station' && feature.stationInfo && feature.crs); const slugify = (str?: string) => str?.toLocaleLowerCase().trim().replace(/\s+/g, '-') ?? 'unknown'; - - function stationInfo(crs) { - console.log(`Date requested for CRS: ${crs}`) - }
@@ -30,39 +60,42 @@
- +
- -
- {#if feature.name} -
{feature.name}
- {/if} - {#if feature.description} -
{feature.description}
- {/if} -
+ +
+ {#if feature.name} +
{feature.name}
+ {/if} + {#if feature.description} +
{feature.description}
+ {/if} +
- {#if isLinkable} + {#if isLinkable} {/if} + + {#if stationInfo} +
onShowInfo(feature.crs)}> + +
+ {/if}
- - - diff --git a/src/lib/components/mapIcons/RouteEndLink.svelte b/src/lib/components/mapIcons/RouteEndLink.svelte index a60e143..3060775 100644 --- a/src/lib/components/mapIcons/RouteEndLink.svelte +++ b/src/lib/components/mapIcons/RouteEndLink.svelte @@ -61,14 +61,14 @@ font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; - font-family: "urwgothic"; + font-family: 'urwgothic'; color: #64748b; } .route-id-chip { font-size: 0.6rem; font-weight: 800; - font-family: ui-monospace, SFMono-Regular, Menlo, monospace; + font-family: ui-monospace, SFMono-Regular, Menlo, monospace; background: #f1f5f9; color: #475569; padding: 2px 6px; @@ -77,7 +77,7 @@ } .main-text { - font-family: "urwgothic"; + font-family: 'urwgothic'; font-size: 1rem; font-weight: 800; color: #0f172a; @@ -90,7 +90,7 @@ display: flex; align-items: center; justify-content: center; - + color: #e1ebeb; background-color: #3c6f79; padding: 4px 4px; diff --git a/src/lib/components/mapIcons/Tunnel.svelte b/src/lib/components/mapIcons/Tunnel.svelte index 131565b..a452ea9 100644 --- a/src/lib/components/mapIcons/Tunnel.svelte +++ b/src/lib/components/mapIcons/Tunnel.svelte @@ -13,7 +13,8 @@ const portalColour = '#475569'; // Slate grey $: effectiveType = (() => { - if (!reversed || feature.tunnelType === 'whole' || feature.tunnelType === 'mid') return feature.tunnelType; + if (!reversed || feature.tunnelType === 'whole' || feature.tunnelType === 'mid') + return feature.tunnelType; return feature.tunnelType === 'start' ? 'end' : 'start'; })(); diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index fa4ac7f..e7ffd8e 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -57,7 +57,12 @@
Go to OwlBoard Live Departures & PIS - + {#each filteredMaps as map (map.routeId)} import RouteRow from '$lib/components/RouteRow.svelte'; import RouteEndLink from '$lib/components/mapIcons/RouteEndLink.svelte'; + import StationInfo from '$lib/components/StationInfo.svelte'; import { slide } from 'svelte/transition'; import { resolve } from '$app/paths'; import logo from '$lib/assets/round-logo.svg'; - import { IconArrowsExchange, IconSettings } from '@tabler/icons-svelte'; + import { IconArrowsExchange, IconSettings } from '@tabler/icons-svelte'; // data.route contains: routeStart, routeEnd, routeId, elecStart, elecEnd, routeDetail[] - export let data; + let { data } = $props(); - let reversed = false; // Reverses Array, and passes value down to children + let activeCrs = $state(null); + let isModalOpen = $derived(activeCrs !== null); - let visibleTypes = { + function openStationModal(crs: string) { + activeCrs = crs; + } + + function closeStationModal() { + activeCrs = null; + } + + let reversed = $state(false); // Reverses Array, and passes value down to children + + let visibleTypes = $state({ station: true, minorBridge: false, bridge: true, @@ -23,10 +35,10 @@ siteof: true, junction: true, tunnel: true, - crossing: true, - }; + crossing: true + }); - let showFilters = false; + let showFilters = $state(false); // Toggle feature types const toggleFilter = (type: string) => { @@ -38,31 +50,29 @@ const formatLabel = (str: string) => str.replace(/([A-Z])/g, ' $1').replace(/^./, (s) => s.toUpperCase()); - $: processedFeatures = (() => { + const processedFeatures = $derived.by(() => { const list = reversed ? [...data.route.routeDetail].reverse() : [...data.route.routeDetail]; - // Seed currentElec from the YAML header boundary let currentElec = reversed ? data.route.elecEnd.elec : data.route.elecStart.elec; return list.map((f) => { if (f.type === 'electrificationChange') { - // Transition state: this tile and everything after it - // adopts the new electrification. currentElec = reversed ? f.from.elec : f.to.elec; } - return { ...f, activeElec: currentElec }; }); - })(); - - $: filteredFeatures = processedFeatures.filter((f) => { - return visibleTypes[f.type] ?? true; }); + + const filteredFeatures = $derived(processedFeatures.filter((f) => visibleTypes[f.type] ?? true)); +{#if isModalOpen && activeCrs} + +{/if} +
@@ -87,7 +97,9 @@ - +
@@ -139,7 +151,12 @@ {#if f.type === 'continues'} {:else} - + {/if} {/each}
@@ -212,7 +229,7 @@ .route-stack { display: flex; - font-family: "urwgothic"; + font-family: 'urwgothic'; flex-direction: column; min-width: 0; margin-left: 0; @@ -250,7 +267,7 @@ } @media (min-width: 536px) { -.primary-station { + .primary-station { font-size: 1.5rem; } .secondary-station { diff --git a/src/routes/map/[slug]/+page.ts b/src/routes/map/[slug]/+page.ts index 7fb4048..c033b48 100644 --- a/src/routes/map/[slug]/+page.ts +++ b/src/routes/map/[slug]/+page.ts @@ -20,9 +20,8 @@ export const load: PageLoad = async ({ params }) => { return { route: rawData, - slug: slug, + slug: slug }; - } catch (err) { console.error(`Error loading map ${slug}: `, err); throw error(500, { diff --git a/static/mapFiles/yaml/0001.yaml b/static/mapFiles/yaml/0001.yaml index 3616f42..26e2929 100644 --- a/static/mapFiles/yaml/0001.yaml +++ b/static/mapFiles/yaml/0001.yaml @@ -1,6 +1,6 @@ routeStart: Paddington routeEnd: Reading -routeId: "0001" +routeId: '0001' updated: 2026-02-09 checked: 2026-02-09 signallerStart: TVSC Paddington WS diff --git a/static/mapFiles/yaml/0002.yaml b/static/mapFiles/yaml/0002.yaml index 767274c..471ddae 100644 --- a/static/mapFiles/yaml/0002.yaml +++ b/static/mapFiles/yaml/0002.yaml @@ -1,6 +1,6 @@ routeStart: Reading routeEnd: Bristol TM -routeId: "0002" +routeId: '0002' updated: 2026-02-04 checked: 2026-03-01 signallerStart: TVSC Reading WS @@ -33,8 +33,8 @@ routeDetail: direction: down name: Westbury Line Jn description: to Oxford Road Jn - goto: "0210" - entryPoint: "westbury-line-jn" + goto: '0210' + entryPoint: 'westbury-line-jn' miles: 36 chains: 17 @@ -43,8 +43,8 @@ routeDetail: direction: down name: Caversham Road Jn description: Reading Feeder Main/Relief diverge and pass under Reading Viaduct to Oxford Rd Jn - goto: "0210" - entryPoint: "oxford-road-jn" + goto: '0210' + entryPoint: 'oxford-road-jn' miles: 36 chains: 22 @@ -65,8 +65,8 @@ routeDetail: direction: up name: Reading West Jn description: to Oxford Road Junction (From relief lines only) - goto: "0210" - entryPoint: "oxford-road-jn" + goto: '0210' + entryPoint: 'oxford-road-jn' miles: 37 chains: 17 @@ -251,7 +251,7 @@ routeDetail: to: TVSC Swindon WS (SW) miles: 66 chains: 0 - + - type: crossovers name: Uffington miles: 66 @@ -282,7 +282,7 @@ routeDetail: position: left miles: 75 chains: 0 - + - type: junction name: Highworth Junction diverges: left @@ -316,7 +316,7 @@ routeDetail: diverges: left direction: down description: Up/Dn Kemble towards Gloucester - goto: "0230" + goto: '0230' entryPoint: swindon-jn miles: 77 chains: 36 @@ -351,7 +351,7 @@ routeDetail: diverges: left direction: down description: Up/Dn Badminton to Bristol PW - goto: "0240" + goto: '0240' entryPoint: wootton-bassett-jn miles: 83 chains: 7 @@ -408,7 +408,7 @@ routeDetail: diverges: right direction: down description: to Melksham & Trowbridge - goto: "0250" + goto: '0250' entryPoint: thingley-jn miles: 96 chains: 10 @@ -445,7 +445,7 @@ routeDetail: diverges: right direction: up description: Up/Dn Trowbridge towards Westbury - goto: "0260" + goto: '0260' entryPoint: bathampton-jn miles: 104 chains: 45 @@ -497,7 +497,7 @@ routeDetail: description: River Avon miles: 107 chains: 0 - + - type: crossovers name: Bath West Crossovers miles: 107 @@ -557,12 +557,12 @@ routeDetail: chains: 68 - type: tunnel - tunnelType: whole + tunnelType: whole name: St. Annes Park No.3 Tunnel length: 0mi 1017yd miles: 116 chains: 0 - + - type: tunnel tunnelType: whole name: St. Annes Park No.2 Tunnel @@ -596,11 +596,11 @@ routeDetail: description: Up/Dn Bristol Loops to Dr. Days Jn diverges: left direction: down - goto: "9999" + goto: '9999' entryPoint: dr-days-jn miles: 117 chains: 50 - + - type: junction diverges: right direction: down @@ -622,7 +622,7 @@ routeDetail: description: Filton lines towards Filton on Up-side, Kingsland Road Sisings on right side miles: 118 chains: 2 - goto: "9999" + goto: '9999' entryPoint: bristol-east-jn - type: siteof @@ -633,4 +633,4 @@ routeDetail: - type: station name: Bristol Temple Meads miles: 118 - chains: 31 \ No newline at end of file + chains: 31 diff --git a/static/mapFiles/yaml/0210.yaml b/static/mapFiles/yaml/0210.yaml index c6b37ef..e12a49e 100644 --- a/static/mapFiles/yaml/0210.yaml +++ b/static/mapFiles/yaml/0210.yaml @@ -1,6 +1,6 @@ routeStart: Westbury Line Jn routeEnd: Cogload Jn -routeId: "0210" +routeId: '0210' updated: 2026-03-05 checked: 2026-03-05 signallerStart: TVSC Reading WS @@ -11,662 +11,661 @@ elecStart: elecEnd: elec: none routeDetail: - -- type: continues - routeName: Reading - Bristol TM - routeId: "0002" - entryPoint: westbury-line-jn - -- type: junction - name: Westbury Line Jn - diverges: left - direction: down - description: towards Didcot - goto: "0002" - entryPoint: westbury-line-jn - miles: 36 - chains: 17 - -- type: signallerChange - from: TVSC Reading WS (T) - to: TVSC West Jn WS (T) - miles: 36 - chains: 20 - -- type: junction - name: Oxford Road Jn - diverges: left - direction: up - description: to Caversham Rd Jn & Reading West Jn - goto: "0002" - entryPoint: caversham-road-jn - miles: 36 - chains: 67 - -- type: station - name: Reading West - miles: 36 - chains: 75 - -- type: junction - name: Southcote Jn - diverges: right - direction: down - description: to Basingstoke - miles: 37 - chains: 62 - -- type: signallerChange - from: TVSC West Jn WS (T) - to: TVSC Newbury WS (T) - miles: 38 - chains: 75 - -- type: crossing - name: Drakes No.2 Crossing - kind: uwc - miles: 40 - chains: 63 - -- type: loop - name: Theale Goods Loop (Up & Dn BiDi) - position: left - miles: 41 - chains: 27 - -- type: station - name: Theale - crs: the - description: Temporary Platform 3 on Theale Goods Loop (OOU) - miles: 41 - chains: 22 - -- type: siteof - name: Theale Sidings - description: Stone & Oil terminals - miles: 41 - chains: 62 - -- type: crossing - name: Wigmore Lane Crossing - kind: foot - miles: 41 - chains: 6 - -- type: loop - position: right - name: Down Towney Loop - miles: 43 - chains: 50 - -- type: crossing - name: Towney Level Crossing - kind: uwc - miles: 44 - chains: 11 - -- type: station - name: Aldermaston - crs: amt - miles: 44 - chains: 61 - -- type: crossing - name: Wickham Knights Level Crossing - kind: omsl - miles: 46 - chains: 16 - -- type: crossing - name: Midgham Level Crossing - kind: CCTV - description: CCTV by Colthrop - miles: 46 - chains: 56 - -- type: station - name: Midgham - crs: mdg - miles: 46 - chains: 59 - -- type: crossing - name: Compeday Level Crossing - kind: uwc - miles: 47 - chains: 8 - -- type: crossing - name: Crannel's Level Crossing - kind: uwc - miles: 47 - chains: 47 - -- type: crossing - name: Colthrop Level Crossing - kind: mcb - miles: 48 - chains: 75 - -- type: station - name: Thatcham - crs: tha - miles: 49 - chains: 45 - -- type: crossing - name: Thatcham Level Crossing - miles: 49 - chains: 51 - kind: CCTV - description: CCTV by Colthrop - -- type: crossing - name: Widemeads Crossing - kind: foot - miles: 51 - chains: 1 - -- type: crossovers - name: Newbury Racecource GF - description: Newbury Loop line & Engineers Sidings - miles: 52 - chains: 13 - -- type: station - name: Newbury Racecourse - crs: nrc - miles: 52 - chains: 31 - -- type: station - name: Newbury - crs: nby - miles: 53 - chains: 6 - -- type: electrificationChange - from: - elec: 25kvac - eco: Didcot - to: - elec: none - miles: 53 - chains: 42 - -- type: crossing - name: Hamstead Level Crossing - kind: CCTV - description: CCTV by Kintbury - miles: 56 - chains: 9 - -- type: crossing - name: Wilderness Crossing - kind: foot - miles: 58 - chains: 6 - -- type: station - name: Kintbury - crs: kit - miles: 58 - chains: 38 - -- type: crossing - name: Kintbury Level Crossing - kind: mcb - miles: 58 - chains: 42 - -- type: crossing - name: Brunsdon Lock Crossing - kind: foot - miles: 59 - chains: 39 - -- type: loop - name: Hungerford Up Loop - position: left - miles: 60 - chains: 50 - -- type: station - name: Hungerford - crs: hgd - miles: 61 - chains: 43 - -- type: crossing - name: Hungerford Level Crossing - kind: CCTV - description: CCTV by Kintbury - miles: 61 - chains: 47 - -- type: crossing - name: Stadlers Crossing - kind: foot - miles: 62 - chains: 70 - -- type: crossing - name: Fairfield Crossing - kind: uwc - miles: 64 - chains: 67 - -- type: crossing - name: Wansdyke Crossing - kind: uwc - miles: 66 - chains: 2 - -- type: crossing - kind: foot - name: Bedwyn Crossing - miles: 66 - chains: 2 - -- type: station - name: Bedwyn - crs: bdw - miles: 66 - chains: 22 - -- type: junction - name: Bedwyn Turnback Siding - diverges: left - direction: down - miles: 66 - chains: 40 - -- type: crossing - name: Church Crossing - miles: 66 - chains: 55 - kind: foot - -- type: crossing - name: Beech Drive Crossing - kind: uwc - miles: 67 - chains: 32 - -- type: crossing - name: Crofton Level Crossing - kind: r/g - miles: 68 - chains: 4 - -- type: crossing - name: Ram Alley Crossing - kind: foot - miles: 71 - chains: 25 - -- type: crossing - name: Milton Lilbourne Crossing - kind: foot - miles: 73 - chains: 17 - -- type: crossing - name: Pewsey Crossing - kind: foot - miles: 75 - chains: 0 - -- type: station - name: Pewsey - crs: pew - miles: 75 - chains: 26 - -- type: crossing - name: Sharcott Crossing - kind: foot - miles: 76 - chains: 33 - -- type: crossing - name: Manningford Crossing - kind: foot - miles: 76 - chains: 69 - -- type: crossing - name: Frith Crossing - kind: foot - miles: 77 - chains: 7 - -- type: crossing - name: Chard's Crossing - kind: foot - miles: 77 - chains: 42 - -- type: crossing - name: Bottesford Crossing - miles: 78 - chains: 43 - kind: foot - -- type: loop - position: both - name: Woodborough Goods Loops - description: Up Loop gives access to Sidings - miles: 79 - chains: 0 - -- type: crossing - name: Beechingstoke Crossing - kind: foot - miles: 80 - chains: 5 - -- type: crossing - name: Stoner Bridleway Crossing - kind: foot - miles: 82 - chains: 4 - -- type: crossing - name: Stert Crossing - kind: foot - miles: 83 - chains: 22 - -- type: crossing - name: Urchfont Crossing - kind: foot - miles: 83 - chains: 43 - -- type: crossing - name: Easterton Crossing - kind: foot - miles: 85 - chains: 42 - -- type: crossing - name: Parham Wood Crossing - kind: foot - miles: 85 - chains: 59 - -- type: siteof - name: Lavington - description: Former station - miles: 86 - chains: 50 - -- type: crossing - name: Edington Crossing - kind: foot - miles: 90 - chains: 25 - -- type: signallerChange - from: TVSC Newbury WS (T) - to: Westbury PSB (W) - miles: 90 - chains: 65 - -- type: crossing - name: Bratton Level Crossing - kind: uwc - miles: 92 - chains: 56 - -- type: crossing - name: Bratton Crossing - kind: foot - miles: 93 - chains: 12 - -- type: junction - name: Heywood Road Jn - diverges: left - direction: down - goto: "0260" - entryPoint: hawkeridge-jn - description: to East Loop Jn/Westbury North Jn/Hawkeridge Jn - miles: 94 - chains: 45 - -- type: crossing - name: Penleigh Park - kind: msl - miles: 95 - chains: 49 - -- type: crossing - name: Eden Vale Crossing - kind: foot - miles: 96 - chains: 38 - -- type: junction - name: Fairwood Jn - description: to Westbury South Jn (Mileage Change) - diverges: left - direction: up - goto: "0260" - entryPoint: westbury-south-jn - miles: 97 - chains: 2 - -- type: crossing - name: Masters Crossing - kind: uwc - miles: 111 - chains: 53 - -- type: junction - name: Clink Road Jn - description: Frome Avoiding Lines to Blatchbridge Jn - miles: 114 - chains: 44 - diverges: right - direction: down - -- type: junction - name: Frome North Jn - description: to Whatley Quarry - diverges: left - direction: down - miles: 115 - chains: 19 - -- type: station - name: Frome - miles: 115 - chains: 44 - -- type: crossing - name: River Frome Crossing - kind: foot - miles: 116 - chains: 15 - -- type: junction - name: Blatchbridge Jn - diverges: right - direction: up - description: Frome Avoiding lines to Clink Road Jn - miles: 116 - chains: 52 - -- type: crossing - name: Palmer's Lane Foot Crossing - kind: foot - miles: 118 - chains: 45 - -- type: crossing - name: Singer's Foot Crossing - kind: foot - miles: 119 - chains: 70 - -- type: junction - name: East Somerset Jn - diverges: left - direction: down - description: To Merehead Qurry & East Somerset Rly - miles: 120 - chains: 73 - -- type: crossing - name: Denning's Crossing - kind: uwc - miles: 122 - chains: 1 - -- type: crossing - name: Brewham Foot Crossing - kind: foot - miles: 123 - chains: 60 - -- type: station - name: Bruton - miles: 126 - chains: 9 - -- type: crossing - name: Ansford Foot Crossing - kind: foot - miles: 128 - chains: 62 - -- type: station - name: Castle Cary - miles: 129 - chains: 45 - description: Plaftorm 3 to Yeovil Only - -- type: junction - name: Castle Cary Jn - description: Up/Dn Weymouth to Yeovil - direction: down - diverges: right - goto: "2150" - entryPoint: castle-cary-jn - miles: 129 - chains: 50 - -- type: crossing - name: Parsonage Farm Crossing - kind: uwc - miles: 117 - chains: 10 - -- type: crossing - name: Lovington Foot Crossing - kind: foot - miles: 117 - chains: 67 - -- type: crossing - name: Wheathill Foot Crossing - kind: foot - miles: 119 - chains: 7 - -- type: crossing - name: Lydford-on-Fosse Foot Crossing - kind: foot - miles: 119 - chains: 72 - -- type: junction - name: Somerton GF - diverges: left - direction: down - description: Siding - miles: 126 - chains: 11 - -- type: crossing - name: Somerton No.1 Foot Crossing - kind: foot - miles: 126 - chains: 15 - -- type: tunnel - name: Somerton Tunnel - tunnelType: whole - length: 0mi 1053yd - miles: 127 - chains: 0 - -- type: signallerChange - from: Westbury PSB (W) - to: Exeter PSB (E) - miles: 127 - chains: 27 - -- type: crossing - name: Windmill Lane Foot Crossing - kind: foot - miles: 128 - chains: 50 - -- type: crossing - name: Somerton No.2 Foot Crossing - kind: foot - miles: 129 - chains: 43 - -- type: crossing - name: Aller 1/1 Foot Crossing - kind: foot - miles: 132 - chains: 16 - -- type: crossing - name: Holly Moor Crossing - kind: uwc - miles: 133 - chains: 31 - -- type: crossing - kind: foot - name: Stanmoor Foot Crossing - miles: 133 - chains: 70 - -- type: crossing - name: Athelney Level Crossing - kind: AHB - miles: 134 - chains: 78 - -- type: crossing - name: Cutts Drove Crossing - kind: uwc - miles: 135 - chains: 0 - -- type: crossing - name: Athelney Foot Crossing - kind: foot - miles: 135 - chains: 21 - -- type: junction - name: Cogload Jn - diverges: left - direction: up - miles: 138 - chains: 3 - goto: "0003" - entryPoint: cogload-jn - -- type: continues - routeName: Bristol TM - Exeter SD - routeId: "0003" - entryPoint: cogload-jn \ No newline at end of file + - type: continues + routeName: Reading - Bristol TM + routeId: '0002' + entryPoint: westbury-line-jn + + - type: junction + name: Westbury Line Jn + diverges: left + direction: down + description: towards Didcot + goto: '0002' + entryPoint: westbury-line-jn + miles: 36 + chains: 17 + + - type: signallerChange + from: TVSC Reading WS (T) + to: TVSC West Jn WS (T) + miles: 36 + chains: 20 + + - type: junction + name: Oxford Road Jn + diverges: left + direction: up + description: to Caversham Rd Jn & Reading West Jn + goto: '0002' + entryPoint: caversham-road-jn + miles: 36 + chains: 67 + + - type: station + name: Reading West + miles: 36 + chains: 75 + + - type: junction + name: Southcote Jn + diverges: right + direction: down + description: to Basingstoke + miles: 37 + chains: 62 + + - type: signallerChange + from: TVSC West Jn WS (T) + to: TVSC Newbury WS (T) + miles: 38 + chains: 75 + + - type: crossing + name: Drakes No.2 Crossing + kind: uwc + miles: 40 + chains: 63 + + - type: loop + name: Theale Goods Loop (Up & Dn BiDi) + position: left + miles: 41 + chains: 27 + + - type: station + name: Theale + crs: the + description: Temporary Platform 3 on Theale Goods Loop (OOU) + miles: 41 + chains: 22 + + - type: siteof + name: Theale Sidings + description: Stone & Oil terminals + miles: 41 + chains: 62 + + - type: crossing + name: Wigmore Lane Crossing + kind: foot + miles: 41 + chains: 6 + + - type: loop + position: right + name: Down Towney Loop + miles: 43 + chains: 50 + + - type: crossing + name: Towney Level Crossing + kind: uwc + miles: 44 + chains: 11 + + - type: station + name: Aldermaston + crs: amt + miles: 44 + chains: 61 + + - type: crossing + name: Wickham Knights Level Crossing + kind: omsl + miles: 46 + chains: 16 + + - type: crossing + name: Midgham Level Crossing + kind: CCTV + description: CCTV by Colthrop + miles: 46 + chains: 56 + + - type: station + name: Midgham + crs: mdg + miles: 46 + chains: 59 + + - type: crossing + name: Compeday Level Crossing + kind: uwc + miles: 47 + chains: 8 + + - type: crossing + name: Crannel's Level Crossing + kind: uwc + miles: 47 + chains: 47 + + - type: crossing + name: Colthrop Level Crossing + kind: mcb + miles: 48 + chains: 75 + + - type: station + name: Thatcham + crs: tha + miles: 49 + chains: 45 + + - type: crossing + name: Thatcham Level Crossing + miles: 49 + chains: 51 + kind: CCTV + description: CCTV by Colthrop + + - type: crossing + name: Widemeads Crossing + kind: foot + miles: 51 + chains: 1 + + - type: crossovers + name: Newbury Racecource GF + description: Newbury Loop line & Engineers Sidings + miles: 52 + chains: 13 + + - type: station + name: Newbury Racecourse + crs: nrc + miles: 52 + chains: 31 + + - type: station + name: Newbury + crs: nby + miles: 53 + chains: 6 + + - type: electrificationChange + from: + elec: 25kvac + eco: Didcot + to: + elec: none + miles: 53 + chains: 42 + + - type: crossing + name: Hamstead Level Crossing + kind: CCTV + description: CCTV by Kintbury + miles: 56 + chains: 9 + + - type: crossing + name: Wilderness Crossing + kind: foot + miles: 58 + chains: 6 + + - type: station + name: Kintbury + crs: kit + miles: 58 + chains: 38 + + - type: crossing + name: Kintbury Level Crossing + kind: mcb + miles: 58 + chains: 42 + + - type: crossing + name: Brunsdon Lock Crossing + kind: foot + miles: 59 + chains: 39 + + - type: loop + name: Hungerford Up Loop + position: left + miles: 60 + chains: 50 + + - type: station + name: Hungerford + crs: hgd + miles: 61 + chains: 43 + + - type: crossing + name: Hungerford Level Crossing + kind: CCTV + description: CCTV by Kintbury + miles: 61 + chains: 47 + + - type: crossing + name: Stadlers Crossing + kind: foot + miles: 62 + chains: 70 + + - type: crossing + name: Fairfield Crossing + kind: uwc + miles: 64 + chains: 67 + + - type: crossing + name: Wansdyke Crossing + kind: uwc + miles: 66 + chains: 2 + + - type: crossing + kind: foot + name: Bedwyn Crossing + miles: 66 + chains: 2 + + - type: station + name: Bedwyn + crs: bdw + miles: 66 + chains: 22 + + - type: junction + name: Bedwyn Turnback Siding + diverges: left + direction: down + miles: 66 + chains: 40 + + - type: crossing + name: Church Crossing + miles: 66 + chains: 55 + kind: foot + + - type: crossing + name: Beech Drive Crossing + kind: uwc + miles: 67 + chains: 32 + + - type: crossing + name: Crofton Level Crossing + kind: r/g + miles: 68 + chains: 4 + + - type: crossing + name: Ram Alley Crossing + kind: foot + miles: 71 + chains: 25 + + - type: crossing + name: Milton Lilbourne Crossing + kind: foot + miles: 73 + chains: 17 + + - type: crossing + name: Pewsey Crossing + kind: foot + miles: 75 + chains: 0 + + - type: station + name: Pewsey + crs: pew + miles: 75 + chains: 26 + + - type: crossing + name: Sharcott Crossing + kind: foot + miles: 76 + chains: 33 + + - type: crossing + name: Manningford Crossing + kind: foot + miles: 76 + chains: 69 + + - type: crossing + name: Frith Crossing + kind: foot + miles: 77 + chains: 7 + + - type: crossing + name: Chard's Crossing + kind: foot + miles: 77 + chains: 42 + + - type: crossing + name: Bottesford Crossing + miles: 78 + chains: 43 + kind: foot + + - type: loop + position: both + name: Woodborough Goods Loops + description: Up Loop gives access to Sidings + miles: 79 + chains: 0 + + - type: crossing + name: Beechingstoke Crossing + kind: foot + miles: 80 + chains: 5 + + - type: crossing + name: Stoner Bridleway Crossing + kind: foot + miles: 82 + chains: 4 + + - type: crossing + name: Stert Crossing + kind: foot + miles: 83 + chains: 22 + + - type: crossing + name: Urchfont Crossing + kind: foot + miles: 83 + chains: 43 + + - type: crossing + name: Easterton Crossing + kind: foot + miles: 85 + chains: 42 + + - type: crossing + name: Parham Wood Crossing + kind: foot + miles: 85 + chains: 59 + + - type: siteof + name: Lavington + description: Former station + miles: 86 + chains: 50 + + - type: crossing + name: Edington Crossing + kind: foot + miles: 90 + chains: 25 + + - type: signallerChange + from: TVSC Newbury WS (T) + to: Westbury PSB (W) + miles: 90 + chains: 65 + + - type: crossing + name: Bratton Level Crossing + kind: uwc + miles: 92 + chains: 56 + + - type: crossing + name: Bratton Crossing + kind: foot + miles: 93 + chains: 12 + + - type: junction + name: Heywood Road Jn + diverges: left + direction: down + goto: '0260' + entryPoint: hawkeridge-jn + description: to East Loop Jn/Westbury North Jn/Hawkeridge Jn + miles: 94 + chains: 45 + + - type: crossing + name: Penleigh Park + kind: msl + miles: 95 + chains: 49 + + - type: crossing + name: Eden Vale Crossing + kind: foot + miles: 96 + chains: 38 + + - type: junction + name: Fairwood Jn + description: to Westbury South Jn (Mileage Change) + diverges: left + direction: up + goto: '0260' + entryPoint: westbury-south-jn + miles: 97 + chains: 2 + + - type: crossing + name: Masters Crossing + kind: uwc + miles: 111 + chains: 53 + + - type: junction + name: Clink Road Jn + description: Frome Avoiding Lines to Blatchbridge Jn + miles: 114 + chains: 44 + diverges: right + direction: down + + - type: junction + name: Frome North Jn + description: to Whatley Quarry + diverges: left + direction: down + miles: 115 + chains: 19 + + - type: station + name: Frome + miles: 115 + chains: 44 + + - type: crossing + name: River Frome Crossing + kind: foot + miles: 116 + chains: 15 + + - type: junction + name: Blatchbridge Jn + diverges: right + direction: up + description: Frome Avoiding lines to Clink Road Jn + miles: 116 + chains: 52 + + - type: crossing + name: Palmer's Lane Foot Crossing + kind: foot + miles: 118 + chains: 45 + + - type: crossing + name: Singer's Foot Crossing + kind: foot + miles: 119 + chains: 70 + + - type: junction + name: East Somerset Jn + diverges: left + direction: down + description: To Merehead Qurry & East Somerset Rly + miles: 120 + chains: 73 + + - type: crossing + name: Denning's Crossing + kind: uwc + miles: 122 + chains: 1 + + - type: crossing + name: Brewham Foot Crossing + kind: foot + miles: 123 + chains: 60 + + - type: station + name: Bruton + miles: 126 + chains: 9 + + - type: crossing + name: Ansford Foot Crossing + kind: foot + miles: 128 + chains: 62 + + - type: station + name: Castle Cary + miles: 129 + chains: 45 + description: Plaftorm 3 to Yeovil Only + + - type: junction + name: Castle Cary Jn + description: Up/Dn Weymouth to Yeovil + direction: down + diverges: right + goto: '2150' + entryPoint: castle-cary-jn + miles: 129 + chains: 50 + + - type: crossing + name: Parsonage Farm Crossing + kind: uwc + miles: 117 + chains: 10 + + - type: crossing + name: Lovington Foot Crossing + kind: foot + miles: 117 + chains: 67 + + - type: crossing + name: Wheathill Foot Crossing + kind: foot + miles: 119 + chains: 7 + + - type: crossing + name: Lydford-on-Fosse Foot Crossing + kind: foot + miles: 119 + chains: 72 + + - type: junction + name: Somerton GF + diverges: left + direction: down + description: Siding + miles: 126 + chains: 11 + + - type: crossing + name: Somerton No.1 Foot Crossing + kind: foot + miles: 126 + chains: 15 + + - type: tunnel + name: Somerton Tunnel + tunnelType: whole + length: 0mi 1053yd + miles: 127 + chains: 0 + + - type: signallerChange + from: Westbury PSB (W) + to: Exeter PSB (E) + miles: 127 + chains: 27 + + - type: crossing + name: Windmill Lane Foot Crossing + kind: foot + miles: 128 + chains: 50 + + - type: crossing + name: Somerton No.2 Foot Crossing + kind: foot + miles: 129 + chains: 43 + + - type: crossing + name: Aller 1/1 Foot Crossing + kind: foot + miles: 132 + chains: 16 + + - type: crossing + name: Holly Moor Crossing + kind: uwc + miles: 133 + chains: 31 + + - type: crossing + kind: foot + name: Stanmoor Foot Crossing + miles: 133 + chains: 70 + + - type: crossing + name: Athelney Level Crossing + kind: AHB + miles: 134 + chains: 78 + + - type: crossing + name: Cutts Drove Crossing + kind: uwc + miles: 135 + chains: 0 + + - type: crossing + name: Athelney Foot Crossing + kind: foot + miles: 135 + chains: 21 + + - type: junction + name: Cogload Jn + diverges: left + direction: up + miles: 138 + chains: 3 + goto: '0003' + entryPoint: cogload-jn + + - type: continues + routeName: Bristol TM - Exeter SD + routeId: '0003' + entryPoint: cogload-jn diff --git a/static/mapFiles/yaml/0230.yaml b/static/mapFiles/yaml/0230.yaml index e14fd33..0f51bff 100644 --- a/static/mapFiles/yaml/0230.yaml +++ b/static/mapFiles/yaml/0230.yaml @@ -1,6 +1,6 @@ routeStart: Swindon Junction routeEnd: Standish Junction -routeId: "0230" +routeId: '0230' updated: 2026-02-14 checked: 2026-02-14 signallerStart: TVSC Swindon WS @@ -16,12 +16,12 @@ routeDetail: routeName: Reading - Bristol TM routeId: '0002' entryPoint: swindon - + - type: junction name: Swindon Jn diverges: right direction: down - goto: "0002" + goto: '0002' entryPoint: swindon-jn miles: 77 chains: 36 @@ -761,12 +761,10 @@ routeDetail: description: Up to Gloucester, Dn to Bristol miles: 106 chains: 74 - goto: "2420" + goto: '2420' entryPoint: standish-jn - type: continues - routeName: "Westerleigh Jn - Gloucester" + routeName: 'Westerleigh Jn - Gloucester' entryPoint: standish-jn - routeId: "2420" - - \ No newline at end of file + routeId: '2420' diff --git a/static/mapFiles/yaml/0240.yaml b/static/mapFiles/yaml/0240.yaml index 703a4cc..6b8d4b8 100644 --- a/static/mapFiles/yaml/0240.yaml +++ b/static/mapFiles/yaml/0240.yaml @@ -22,7 +22,7 @@ routeDetail: direction: down name: Wootton Basset Jn description: to Chippenham & Bristol via Bath - goto: "0002" + goto: '0002' entryPoint: wootton-bassett-jn miles: 83 chains: 7 diff --git a/static/mapFiles/yaml/0250.yaml b/static/mapFiles/yaml/0250.yaml index 6b35010..2ea3b2a 100644 --- a/static/mapFiles/yaml/0250.yaml +++ b/static/mapFiles/yaml/0250.yaml @@ -1,6 +1,6 @@ routeStart: Thingley Junction routeEnd: Bradford Junction -routeId: "0250" +routeId: '0250' updated: 2026-03-01 checked: 2026-03-01 signallerStart: TVSC Swindon WS @@ -11,116 +11,115 @@ elecEnd: elec: none routeDetail: + - type: continues + routeName: Reading - Bristol TM + routeId: '0002' + entryPoint: thingley-jn -- type: continues - routeName: Reading - Bristol TM - routeId: "0002" - entryPoint: thingley-jn + - type: junction + name: Thingley Jn + diverges: left + direction: down + description: Down Main towards Bath + goto: '0002' + entryPoint: thingley-jn + miles: 96 + chains: 10 -- type: junction - name: Thingley Jn - diverges: left - direction: down - description: Down Main towards Bath - goto: "0002" - entryPoint: thingley-jn - miles: 96 - chains: 10 + - type: signallerChange + from: TVSC Swindon WS (SW) + to: Westbury PSB (W) + miles: 96 + chains: 30 -- type: signallerChange - from: TVSC Swindon WS (SW) - to: Westbury PSB (W) - miles: 96 - chains: 30 + - type: crossing + name: Laycock 6 Foot Crossing + kind: foot + miles: 97 + chains: 30 -- type: crossing - name: Laycock 6 Foot Crossing - kind: foot - miles: 97 - chains: 30 + - type: crossing + name: Laycock 2 Foot Crossing + kind: foot + miles: 98 + chains: 8 -- type: crossing - name: Laycock 2 Foot Crossing - kind: foot - miles: 98 - chains: 8 + - type: crossing + name: Melksham Without 85 Foot Crossing + kind: foot + miles: 99 + chains: 12 -- type: crossing - name: Melksham Without 85 Foot Crossing - kind: foot - miles: 99 - chains: 12 + - type: crossing + name: Melksham Without 92 Foot Crossing + kind: foot + miles: 99 + chains: 41 -- type: crossing - name: Melksham Without 92 Foot Crossing - kind: foot - miles: 99 - chains: 41 + - type: station + name: Melksham + miles: 100 + chains: 13 -- type: station - name: Melksham - miles: 100 - chains: 13 + - type: crossing + kind: foot + name: Melksham 22 Foot Crossing + miles: 100 + chains: 32 -- type: crossing - kind: foot - name: Melksham 22 Foot Crossing - miles: 100 - chains: 32 + - type: crossing + kind: uwc + miles: 101 + chains: 39 + name: Church Farm No.1 Crossing -- type: crossing - kind: uwc - miles: 101 - chains: 39 - name: Church Farm No.1 Crossing + - type: crossing + kind: foot + name: Broughton Gifford No.26 Foot Crossing + miles: 101 + chains: 77 -- type: crossing - kind: foot - name: Broughton Gifford No.26 Foot Crossing - miles: 101 - chains: 77 + - type: crossing + kind: foot + name: Broughton Gifford No.25 Foot Crossing + miles: 102 + chains: 2 -- type: crossing - kind: foot - name: Broughton Gifford No.25 Foot Crossing - miles: 102 - chains: 2 + - type: crossing + kind: uwc + name: Church Farm No.2 Crossing + miles: 102 + chains: 10 -- type: crossing - kind: uwc - name: Church Farm No.2 Crossing - miles: 102 - chains: 10 + - type: crossing + kind: foot + name: Holt No.1 Foot Crossing + miles: 102 + chains: 23 -- type: crossing - kind: foot - name: Holt No.1 Foot Crossing - miles: 102 - chains: 23 + - type: siteof + name: Holt Junction + description: Former junction + miles: 102 + chains: 58 -- type: siteof - name: Holt Junction - description: Former junction - miles: 102 - chains: 58 + - type: crossing + kind: uwc + name: Avon View Farm Crossing + miles: 103 + chains: 9 -- type: crossing - kind: uwc - name: Avon View Farm Crossing - miles: 103 - chains: 9 + - type: junction + name: Bradford Jn + diverges: left + direction: up + description: Up/Dn Trowbridge towards Bath + goto: '0260' + entryPoint: bradford-jn + miles: 104 + chains: 40 -- type: junction - name: Bradford Jn - diverges: left - direction: up - description: Up/Dn Trowbridge towards Bath - goto: "0260" - entryPoint: bradford-jn - miles: 104 - chains: 40 - -- type: continues - routeName: Bathampton Jn - Westbury - routeId: "0260" - entryPoint: bradford-jn \ No newline at end of file + - type: continues + routeName: Bathampton Jn - Westbury + routeId: '0260' + entryPoint: bradford-jn diff --git a/static/mapFiles/yaml/0260.yaml b/static/mapFiles/yaml/0260.yaml index e88937b..2122c52 100644 --- a/static/mapFiles/yaml/0260.yaml +++ b/static/mapFiles/yaml/0260.yaml @@ -1,6 +1,6 @@ routeStart: Bathampton Jn routeEnd: Westbury South Jn -routeId: "0260" +routeId: '0260' updated: 2026-03-01 checked: 2026-03-01 signallerStart: TVSC Bath WS @@ -11,251 +11,248 @@ elecEnd: elec: none routeDetail: + - type: continues + routeName: Reading - Bristol TM + entryPoint: bathampton-jn + routeId: '0002' -- type: continues - routeName: Reading - Bristol TM - entryPoint: bathampton-jn - routeId: "0002" + - type: junction + name: Bathampton Jn + description: Mileage change (0mi 0ch) + diverges: right + direction: down + goto: '0002' + entryPoint: bathampton-jn + miles: 0 + chains: 0 -- type: junction - name: Bathampton Jn - description: Mileage change (0mi 0ch) - diverges: right - direction: down - goto: "0002" - entryPoint: bathampton-jn - miles: 0 - chains: 0 + - type: crossing + kind: omsl + name: Glass's Crossing + miles: 0 + chains: 20 -- type: crossing - kind: omsl - name: Glass's Crossing - miles: 0 - chains: 20 + - type: crossing + kind: omsl + name: Claverton Crossing + miles: 1 + chains: 73 -- type: crossing - kind: omsl - name: Claverton Crossing - miles: 1 - chains: 73 + - type: bridge + name: Dundas Aqueduct + position: over + category: waterway + description: Kennet & Avon Canal + miles: 3 + chains: 12 -- type: bridge - name: Dundas Aqueduct - position: over - category: waterway - description: Kennet & Avon Canal - miles: 3 - chains: 12 + - type: crossing + name: Young's Crossing + kind: uwc + miles: 3 + chains: 25 -- type: crossing - name: Young's Crossing - kind: uwc - miles: 3 - chains: 25 + - type: crossing + name: Fisher's Crossing + kind: uwc + miles: 3 + chains: 50 -- type: crossing - name: Fisher's Crossing - kind: uwc - miles: 3 - chains: 50 + - type: crossing + name: Limpley Stoke No.1 Foot Crossing + miles: 4 + chains: 10 + kind: foot -- type: crossing - name: Limpley Stoke No.1 Foot Crossing - miles: 4 - chains: 10 - kind: foot + - type: crossing + name: Limpley Stoke No.2 Foot Crossing + kind: foot + miles: 4 + chains: 14 -- type: crossing - name: Limpley Stoke No.2 Foot Crossing - kind: foot - miles: 4 - chains: 14 + - type: crossing + name: Freshford Station Crossing + kind: uwc + miles: 4 + chains: 68 -- type: crossing - name: Freshford Station Crossing - kind: uwc - miles: 4 - chains: 68 + - type: station + name: Freshford + miles: 4 + chains: 70 -- type: station - name: Freshford - miles: 4 - chains: 70 + - type: bridge + name: Freshford Viaduct + category: waterway + description: River Avon + position: under + miles: 5 + chains: 8 + - type: bridge + name: Avoncliff Aqueduct + category: waterway + description: Kennet & Avon Canal + position: over + miles: 5 + chains: 63 -- type: bridge - name: Freshford Viaduct - category: waterway - description: River Avon - position: under - miles: 5 - chains: 8 + - type: station + name: Avoncliff + miles: 5 + chains: 63 + description: Local door operation -- type: bridge - name: Avoncliff Aqueduct - category: waterway - description: Kennet & Avon Canal - position: over - miles: 5 - chains: 63 + - type: crossing + name: Avoncliff Mill Crossing + kind: uwc + miles: 5 + chains: 71 -- type: station - name: Avoncliff - miles: 5 - chains: 63 - description: Local door operation + - type: signallerChange + from: TVSC Bath WS (BL) + to: Westbury PSB (W) + miles: 6 + chains: 55 -- type: crossing - name: Avoncliff Mill Crossing - kind: uwc - miles: 5 - chains: 71 + - type: crossing + kind: foot + name: Belcombe Road Foot Crossing + miles: 6 + chains: 67 -- type: signallerChange - from: TVSC Bath WS (BL) - to: Westbury PSB (W) - miles: 6 - chains: 55 + - type: crossing + kind: foot + name: Barton Orchard Foot Crossing + miles: 6 + chains: 74 -- type: crossing - kind: foot - name: Belcombe Road Foot Crossing - miles: 6 - chains: 67 + - type: station + name: Bradford-on-Avon + miles: 7 + chains: 9 + - type: tunnel + name: Bradford Tunnel + tunnelType: whole + length: 0mi 159yd + miles: 7 + chains: 22 -- type: crossing - kind: foot - name: Barton Orchard Foot Crossing - miles: 6 - chains: 74 + - type: crossing + kind: AHB + name: Greenland Mill Level Crossing + miles: 7 + chains: 27 -- type: station - name: Bradford-on-Avon - miles: 7 - chains: 9 + - type: crossing + kind: uwc + name: Cemetery Lane Crossing + miles: 8 + chains: 1 -- type: tunnel - name: Bradford Tunnel - tunnelType: whole - length: 0mi 159yd - miles: 7 - chains: 22 + - type: crossing + kind: uwc + name: Tuckers Crossing + miles: 8 + chains: 18 -- type: crossing - kind: AHB - name: Greenland Mill Level Crossing - miles: 7 - chains: 27 + - type: junction + name: Bradford Jn + diverges: right + direction: up + description: Melksham Single towards Chippenham, mileage change + goto: '0250' + entryPoint: bradford-jn + miles: 9 + chains: 12 -- type: crossing - kind: uwc - name: Cemetery Lane Crossing - miles: 8 - chains: 1 + - type: bridge + name: Trowbridge Aqueduct + description: Kennet & Avon Canal + position: over + category: waterway + miles: 104 + chains: 54 -- type: crossing - kind: uwc - name: Tuckers Crossing - miles: 8 - chains: 18 + - type: station + name: Trowbridge + miles: 105 + chains: 61 -- type: junction - name: Bradford Jn - diverges: right - direction: up - description: Melksham Single towards Chippenham, mileage change - goto: "0250" - entryPoint: bradford-jn - miles: 9 - chains: 12 + - type: crossing + kind: foot + name: White Horse Foot Crossing + miles: 107 + chains: 8 -- type: bridge - name: Trowbridge Aqueduct - description: Kennet & Avon Canal - position: over - category: waterway - miles: 104 - chains: 54 + - type: crossing + kind: foot + name: Yarnbrook Foot Crossing + miles: 107 + chains: 34 -- type: station - name: Trowbridge - miles: 105 - chains: 61 + - type: bridge + name: Yarnbrook Viaduct + position: under + category: aroad + roadName: A363 + miles: 107 + chains: 56 -- type: crossing - kind: foot - name: White Horse Foot Crossing - miles: 107 - chains: 8 + - type: crossing + kind: foot + name: Heywood 3 Foot Crossing + miles: 108 + chains: 46 -- type: crossing - kind: foot - name: Yarnbrook Foot Crossing - miles: 107 - chains: 34 + - type: crossing + kind: foot + name: Hawkeridge Foot Crossing + miles: 108 + chains: 78 -- type: bridge - name: Yarnbrook Viaduct - position: under - category: aroad - roadName: A363 - miles: 107 - chains: 56 + - type: junction + name: Hawkeridge Jn + diverges: right + direction: down + description: Lines change direction towards Westbury + goto: '0210' + entryPoint: heywood-road-jn + miles: 109 + chains: 14 -- type: crossing - kind: foot - name: Heywood 3 Foot Crossing - miles: 108 - chains: 46 + - type: junction + name: Westbury North Jn + diverges: right + direction: up + goto: '0210' + entryPoint: heywood-road-jn + miles: 109 + chains: 49 -- type: crossing - kind: foot - name: Hawkeridge Foot Crossing - miles: 108 - chains: 78 + - type: station + name: Westbury + miles: 109 + chains: 64 -- type: junction - name: Hawkeridge Jn - diverges: right - direction: down - description: Lines change direction towards Westbury - goto: "0210" - entryPoint: heywood-road-jn - miles: 109 - chains: 14 + - type: junction + name: Westbury South Jn + diverges: right + direction: down + description: Up/Dn Salisbury towards Warminster + goto: '0261' + entryPoint: 'westbury-south-jn' + miles: 110 + chains: 7 -- type: junction - name: Westbury North Jn - diverges: right - direction: up - goto: "0210" - entryPoint: heywood-road-jn - miles: 109 - chains: 49 + - type: crossing + kind: foot + name: Dilton Marsh Crossing + miles: 110 + chains: 50 -- type: station - name: Westbury - miles: 109 - chains: 64 - -- type: junction - name: Westbury South Jn - diverges: right - direction: down - description: Up/Dn Salisbury towards Warminster - goto: "0261" - entryPoint: "westbury-south-jn" - miles: 110 - chains: 7 - -- type: crossing - kind: foot - name: Dilton Marsh Crossing - miles: 110 - chains: 50 - -- type: continues - routeName: to Fairwood Jn (Reading - Taunton) - routeId: "0210" - entryPoint: fairwood-jn + - type: continues + routeName: to Fairwood Jn (Reading - Taunton) + routeId: '0210' + entryPoint: fairwood-jn diff --git a/static/mapFiles/yaml/2420.yaml b/static/mapFiles/yaml/2420.yaml index b9ea474..3c4ea92 100644 --- a/static/mapFiles/yaml/2420.yaml +++ b/static/mapFiles/yaml/2420.yaml @@ -12,7 +12,6 @@ elecEnd: elec: none routeDetail: - - type: junction name: Westerleigh Jn diverges: left @@ -40,7 +39,7 @@ routeDetail: elec: 25kvac eco: Didcot to: - elec: none + elec: none miles: 120 chains: 67 @@ -327,7 +326,7 @@ routeDetail: position: under miles: 107 chains: 23 - + - type: minorBridge name: Tumpy Green position: over @@ -633,7 +632,7 @@ routeDetail: diverges: left direction: down description: to Barnwood Junction - goto: "2422" + goto: '2422' entryPoint: barnwood-jn miles: 93 chains: 8 @@ -665,7 +664,7 @@ routeDetail: direction: up name: Horton Road Jn description: to Barnwood Jn - goto: "2422" + goto: '2422' entryPoint: horton-road-jn miles: 113 chains: 61 @@ -678,4 +677,4 @@ routeDetail: - type: continues routeName: Gloucester - Severn Tunnel Jn entryPoint: gloucester - routeId: '2421' \ No newline at end of file + routeId: '2421' diff --git a/static/mapFiles/yaml/2421.yaml b/static/mapFiles/yaml/2421.yaml index e5de85e..1c69b86 100644 --- a/static/mapFiles/yaml/2421.yaml +++ b/static/mapFiles/yaml/2421.yaml @@ -1,7 +1,7 @@ # yaml-language-server: $schema=./mapFiles.schema.json routeStart: Gloucester routeEnd: Severn Tunnel Jn -routeId: "2421" +routeId: '2421' updated: 2026-02-28 checked: 2026-03-01 signallerStart: Gloucester PSB @@ -13,7 +13,6 @@ elecEnd: eco: Didcot (TVSC) routeDetail: - - type: continues routeName: Gloucester - Westerleigh Jn entryPoint: gloucester @@ -102,7 +101,7 @@ routeDetail: name: Keens Crossing miles: 116 chains: 3 - + - type: crossing kind: foot name: Over Farm Foot Crossing @@ -736,4 +735,4 @@ routeDetail: - type: continues routeName: Bristol Parkway - Cardiff West Shunt routeId: '0000' - entryPoint: severn-tunnel-junction \ No newline at end of file + entryPoint: severn-tunnel-junction diff --git a/static/mapFiles/yaml/mapFiles.schema.json b/static/mapFiles/yaml/mapFiles.schema.json index 20ea875..03fc525 100644 --- a/static/mapFiles/yaml/mapFiles.schema.json +++ b/static/mapFiles/yaml/mapFiles.schema.json @@ -1,576 +1,446 @@ { - "$schema": "https://json-schema.org/draft-07/schema#", - "type": "object", - "required": [ - "routeStart", - "routeEnd", - "routeId", - "updated", - "signallerStart", - "signallerEnd", - "elecStart", - "elecEnd", - "routeDetail" - ], - "additionalProperties": false, - "properties": { - "routeStart": { - "type": "string", - "description": "The route start point" - }, - "routeEnd": { - "type": "string", - "description": "The route end point" - }, - "routeId": { - "type": "string", - "description": "The routes ID Code", - "pattern": "^[0-9]{4}$" - }, - "updated": { - "type": "string", - "format": "date", - "description": "Date the route was last updated" - }, - "checked": { - "type": "string", - "format": "date", - "description": "Date the route was last checked for accuracy" - }, - "signallerStart": { - "type": "string", - "description": "The signaller at the start of the route" - }, - "signallerEnd": { - "type": "string", - "description": "The signalller at the end of the route" - }, - "elecStart": { - "$ref": "#/definitions/elecInfo", - "description": "Electrification details at the route start" - }, - "elecEnd": { - "$ref": "#/definitions/elecInfo", - "description": "Electrification info at the end of the route" - }, - "routeDetail": { - "type": "array", - "additionalItems": false, - "items": { - "anyOf": [ - { - "$ref": "#/definitions/bridge" - }, - { - "$ref": "#/definitions/crossing" - }, - { - "$ref": "#/definitions/crossover" - }, - { - "$ref": "#/definitions/electrificationChange" - }, - { - "$ref": "#/definitions/junction" - }, - { - "$ref": "#/definitions/loop" - }, - { - "$ref": "#/definitions/routeContinuation" - }, - { - "$ref": "#/definitions/siteof" - }, - { - "$ref": "#/definitions/station" - }, - { - "$ref": "#/definitions/tunnel" - }, - { - "$ref": "#/definitions/signallerChange" - } - ] - } - } - }, - "definitions": { - "elecInfo": { - "type": "object", - "properties": { - "elec": { - "type": "string", - "enum": [ - "25kvac", - "750vdc", - "650vdc", - "1500vdc", - "none" - ] - }, - "eco": { - "type": "string" - } - }, - "required": [ - "elec" - ] - }, - "bridge": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "bridge", - "minorBridge" - ] - }, - "roadName": { - "type": "string" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "position": { - "type": "string", - "enum": [ - "over", - "under" - ] - }, - "category": { - "type": "string", - "enum": [ - "road", - "aroad", - "motorway", - "foot", - "waterway", - "stream", - "rail", - "minorRoad", - "pipeline" - ] - }, - "miles": { - "type": "number" - }, - "chains": { - "type": "number" - } - }, - "required": [ - "type", - "position", - "category", - "miles", - "chains" - ], - "additionalProperties": false - }, - "crossing": { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "crossing" - }, - "kind": { - "type": "string", - "enum": [ - "CCTV", - "AHB", - "uwc", - "foot", - "omsl", - "r/g", - "msl", - "mcb", - "mg", - "mcg", - "aocl" - ] - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "miles": { - "type": "number" - }, - "chains": { - "type": "number" - } - }, - "required": [ - "type", - "kind", - "name", - "miles", - "chains" - ], - "additionalProperties": false - }, - "crossover": { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "crossovers" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "miles": { - "type": "number" - }, - "chains": { - "type": "number" - } - }, - "required": [ - "type", - "name", - "miles", - "chains" - ], - "additionalProperties": false - }, - "electrificationChange": { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "electrificationChange" - }, - "miles": { - "type": "number" - }, - "chains": { - "type": "number" - }, - "from": { - "type": "object", - "properties": { - "elec": { - "type": "string", - "enum": [ - "25kvac", - "750vdc", - "650vdc", - "1500vdc", - "none" - ] - }, - "eco": { - "type": "string" - } - }, - "required": [ - "elec" - ], - "additionalProperties": false - }, - "to": { - "type": "object", - "properties": { - "elec": { - "type": "string", - "enum": [ - "25kvac", - "750vdc", - "650vdc", - "1500vdc", - "none" - ] - }, - "eco": { - "type": "string" - } - }, - "required": [ - "elec" - ], - "additionalProperties": false - } - }, - "required": [ - "miles", - "chains" - ], - "additionalProperties": false - }, - "junction": { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "junction" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "diverges": { - "type": "string", - "enum": [ - "left", - "right", - "both" - ] - }, - "direction": { - "type": "string", - "enum": [ - "up", - "down", - "both" - ] - }, - "miles": { - "type": "number" - }, - "chains": { - "type": "number" - }, - "elecBranch": { - "type": "string", - "enum": [ - "25kvac", - "750vdc", - "650vdc", - "1500vdc", - "none" - ] - }, - "goto": { - "type": "string" - }, - "entryPoint": { - "type": "string" - } - }, - "required": [ - "name", - "diverges", - "direction", - "miles", - "chains", - "type" - ], - "additionalProperties": false - }, - "loop": { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "loop" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "position": { - "type": "string", - "enum": [ - "left", - "right", - "both" - ] - }, - "miles": { - "type": "number" - }, - "chains": { - "type": "number" - }, - "elecLoop": { - "type": "string", - "enum": [ - "25kvac", - "750vdc", - "650vdc", - "1500vdc", - "none" - ] - } - }, - "required": [ - "type", - "name", - "position", - "miles", - "chains" - ], - "additionalProperties": false - }, - "routeContinuation": { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "continues" - }, - "routeName": { - "type": "string", - "description": "Name to display" - }, - "routeId": { - "type": "string", - "description": "Id of route" - }, - "entryPoint": { - "type": "string", - "description": "Entrypoint of other route (lowercase, replacing whitespace with -, junction always referred to as jn" - } - }, - "required": [ - "type", - "routeName", - "routeId", - "entryPoint" - ], - "additionalProperties": false - }, - "siteof": { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "siteof" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "miles": { - "type": "number" - }, - "chains": { - "type": "number" - } - }, - "required": [ - "type", - "name", - "miles", - "chains" - ], - "additionalProperties": false - }, - "station": { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "station" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "miles": { - "type": "number" - }, - "chains": { - "type": "number" - } - }, - "required": [ - "type", - "name", - "miles", - "chains" - ] - }, - "tunnel": { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "tunnel" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "tunnelType": { - "type": "string", - "enum": [ - "start", - "end", - "mid", - "whole" - ] - }, - "length": { - "type": "string", - "pattern": "" - }, - "miles": { - "type": "number" - }, - "chains": { - "type": "number" - } - }, - "required": [ - "type", - "name", - "tunnelType", - "miles", - "chains" - ], - "additionalProperties": false - }, - "signallerChange": { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "signallerChange" - }, - "from": { - "type": "string" - }, - "to": { - "type": "string" - }, - "miles": { - "type": "number" - }, - "chains": { - "type": "number" - } - }, - "required": [ - "from", - "to", - "miles", - "chains" - ], - "additionalProperties": false - } - } -} \ No newline at end of file + "$schema": "https://json-schema.org/draft-07/schema#", + "type": "object", + "required": [ + "routeStart", + "routeEnd", + "routeId", + "updated", + "signallerStart", + "signallerEnd", + "elecStart", + "elecEnd", + "routeDetail" + ], + "additionalProperties": false, + "properties": { + "routeStart": { + "type": "string", + "description": "The route start point" + }, + "routeEnd": { + "type": "string", + "description": "The route end point" + }, + "routeId": { + "type": "string", + "description": "The routes ID Code", + "pattern": "^[0-9]{4}$" + }, + "updated": { + "type": "string", + "format": "date", + "description": "Date the route was last updated" + }, + "checked": { + "type": "string", + "format": "date", + "description": "Date the route was last checked for accuracy" + }, + "signallerStart": { + "type": "string", + "description": "The signaller at the start of the route" + }, + "signallerEnd": { + "type": "string", + "description": "The signalller at the end of the route" + }, + "elecStart": { + "$ref": "#/definitions/elecInfo", + "description": "Electrification details at the route start" + }, + "elecEnd": { + "$ref": "#/definitions/elecInfo", + "description": "Electrification info at the end of the route" + }, + "routeDetail": { + "type": "array", + "additionalItems": false, + "items": { + "anyOf": [ + { + "$ref": "#/definitions/bridge" + }, + { + "$ref": "#/definitions/crossing" + }, + { + "$ref": "#/definitions/crossover" + }, + { + "$ref": "#/definitions/electrificationChange" + }, + { + "$ref": "#/definitions/junction" + }, + { + "$ref": "#/definitions/loop" + }, + { + "$ref": "#/definitions/routeContinuation" + }, + { + "$ref": "#/definitions/siteof" + }, + { + "$ref": "#/definitions/station" + }, + { + "$ref": "#/definitions/tunnel" + }, + { + "$ref": "#/definitions/signallerChange" + } + ] + } + } + }, + "definitions": { + "elecInfo": { + "type": "object", + "properties": { + "elec": { + "type": "string", + "enum": ["25kvac", "750vdc", "650vdc", "1500vdc", "none"] + }, + "eco": { + "type": "string" + } + }, + "required": ["elec"] + }, + "bridge": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["bridge", "minorBridge"] + }, + "roadName": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "position": { + "type": "string", + "enum": ["over", "under"] + }, + "category": { + "type": "string", + "enum": [ + "road", + "aroad", + "motorway", + "foot", + "waterway", + "stream", + "rail", + "minorRoad", + "pipeline" + ] + }, + "miles": { + "type": "number" + }, + "chains": { + "type": "number" + } + }, + "required": ["type", "position", "category", "miles", "chains"], + "additionalProperties": false + }, + "crossing": { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "crossing" + }, + "kind": { + "type": "string", + "enum": ["CCTV", "AHB", "uwc", "foot", "omsl", "r/g", "msl", "mcb", "mg", "mcg", "aocl"] + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "miles": { + "type": "number" + }, + "chains": { + "type": "number" + } + }, + "required": ["type", "kind", "name", "miles", "chains"], + "additionalProperties": false + }, + "crossover": { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "crossovers" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "miles": { + "type": "number" + }, + "chains": { + "type": "number" + } + }, + "required": ["type", "name", "miles", "chains"], + "additionalProperties": false + }, + "electrificationChange": { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "electrificationChange" + }, + "miles": { + "type": "number" + }, + "chains": { + "type": "number" + }, + "from": { + "type": "object", + "properties": { + "elec": { + "type": "string", + "enum": ["25kvac", "750vdc", "650vdc", "1500vdc", "none"] + }, + "eco": { + "type": "string" + } + }, + "required": ["elec"], + "additionalProperties": false + }, + "to": { + "type": "object", + "properties": { + "elec": { + "type": "string", + "enum": ["25kvac", "750vdc", "650vdc", "1500vdc", "none"] + }, + "eco": { + "type": "string" + } + }, + "required": ["elec"], + "additionalProperties": false + } + }, + "required": ["miles", "chains"], + "additionalProperties": false + }, + "junction": { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "junction" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "diverges": { + "type": "string", + "enum": ["left", "right", "both"] + }, + "direction": { + "type": "string", + "enum": ["up", "down", "both"] + }, + "miles": { + "type": "number" + }, + "chains": { + "type": "number" + }, + "elecBranch": { + "type": "string", + "enum": ["25kvac", "750vdc", "650vdc", "1500vdc", "none"] + }, + "goto": { + "type": "string" + }, + "entryPoint": { + "type": "string" + } + }, + "required": ["name", "diverges", "direction", "miles", "chains", "type"], + "additionalProperties": false + }, + "loop": { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "loop" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "position": { + "type": "string", + "enum": ["left", "right", "both"] + }, + "miles": { + "type": "number" + }, + "chains": { + "type": "number" + }, + "elecLoop": { + "type": "string", + "enum": ["25kvac", "750vdc", "650vdc", "1500vdc", "none"] + } + }, + "required": ["type", "name", "position", "miles", "chains"], + "additionalProperties": false + }, + "routeContinuation": { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "continues" + }, + "routeName": { + "type": "string", + "description": "Name to display" + }, + "routeId": { + "type": "string", + "description": "Id of route" + }, + "entryPoint": { + "type": "string", + "description": "Entrypoint of other route (lowercase, replacing whitespace with -, junction always referred to as jn" + } + }, + "required": ["type", "routeName", "routeId", "entryPoint"], + "additionalProperties": false + }, + "siteof": { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "siteof" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "miles": { + "type": "number" + }, + "chains": { + "type": "number" + } + }, + "required": ["type", "name", "miles", "chains"], + "additionalProperties": false + }, + "station": { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "station" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "miles": { + "type": "number" + }, + "chains": { + "type": "number" + } + }, + "required": ["type", "name", "miles", "chains"] + }, + "tunnel": { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "tunnel" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "tunnelType": { + "type": "string", + "enum": ["start", "end", "mid", "whole"] + }, + "length": { + "type": "string", + "pattern": "" + }, + "miles": { + "type": "number" + }, + "chains": { + "type": "number" + } + }, + "required": ["type", "name", "tunnelType", "miles", "chains"], + "additionalProperties": false + }, + "signallerChange": { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "signallerChange" + }, + "from": { + "type": "string" + }, + "to": { + "type": "string" + }, + "miles": { + "type": "number" + }, + "chains": { + "type": "number" + } + }, + "required": ["from", "to", "miles", "chains"], + "additionalProperties": false + } + } +} diff --git a/static/stations/amt.yaml b/static/stations/amt.yaml index ecf35fc..d1baf40 100644 --- a/static/stations/amt.yaml +++ b/static/stations/amt.yaml @@ -7,27 +7,27 @@ platforms: platformLength: 115 signal: false dispatch: false - stepFree: + stepFree: true doorPattern: - kind: IET5 - doors: [2,10] + doors: [2, 10] - kind: IET9 - doors: [2,9] + doors: [2, 9] - kind: IET10 - doors: [2,10] + doors: [2, 10] - kind: DMU max-car: 5 - platformId: 2Dn platformLength: 115 signal: false dispatch: false - stepFree: + stepFree: true doorPattern: - kind: IET5 - doors: [1,7] + doors: [1, 7] - kind: IET9 - doors: [1,7] + doors: [1, 7] - kind: IET10 - doors: [1,7] + doors: [1, 7] - kind: DMU - max-car: 5 \ No newline at end of file + max-car: 5 diff --git a/static/stations/bdw.yaml b/static/stations/bdw.yaml index 66abada..995cb9e 100644 --- a/static/stations/bdw.yaml +++ b/static/stations/bdw.yaml @@ -6,26 +6,28 @@ platforms: - platformId: 1Dn platformLength: 121 signal: true + stepFree: true dispatch: false doorPattern: - kind: IET5 - doors: [1,9] + doors: [1, 9] - kind: IET9 - doors: [1,9] + doors: [1, 9] - kind: IET10 - doors: [1,9] + doors: [1, 9] - kind: DMU max-car: 5 - platformId: 2Up platformLength: 123 signal: true + stepFree: true dispatch: false doorPattern: - kind: IET5 - doors: [2,10] + doors: [2, 10] - kind: IET9 - doors: [2,10] + doors: [2, 10] - kind: IET10 - doors: [2,10] + doors: [2, 10] - kind: DMU - max-car: 5 \ No newline at end of file + max-car: 5 diff --git a/static/stations/hgd.yaml b/static/stations/hgd.yaml index 4e84579..367c58b 100644 --- a/static/stations/hgd.yaml +++ b/static/stations/hgd.yaml @@ -6,26 +6,28 @@ platforms: - platformId: 1Up platformLength: 153 signal: false + stepFree: true dispatch: false doorPattern: - kind: IET5 - doors: [1,10] + doors: [1, 10] - kind: IET9 - doors: [8,18] + doors: [8, 18] - kind: IET10 - doors: [9,20] + doors: [9, 20] - kind: DMU max-car: 6 - platformId: 2Dn platformLength: 150 signal: false + stepFree: true dispatch: false doorPattern: - kind: IET5 - doors: [1,10] + doors: [1, 10] - kind: IET9 - doors: [1,11] + doors: [1, 11] - kind: IET10 - doors: [1,11] + doors: [1, 11] - kind: DMU - max-car: 6 \ No newline at end of file + max-car: 6 diff --git a/static/stations/kit.yaml b/static/stations/kit.yaml index bcc13b1..1d038f9 100644 --- a/static/stations/kit.yaml +++ b/static/stations/kit.yaml @@ -7,27 +7,27 @@ platforms: platformLength: 105 signal: false dispatch: false - stepFree: + stepFree: true doorPattern: - kind: IET5 - doors: [2,9] + doors: [2, 9] - kind: IET9 - doors: [2,9] + doors: [2, 9] - kind: IET10 - doors: [2,9] + doors: [2, 9] - kind: DMU max-car: 4 - platformId: 2Up platformLength: 106 signal: false dispatch: false - stepFree: + stepFree: true doorPattern: - kind: IET5 - doors: [4,10] + doors: [4, 10] - kind: IET9 - doors: [12,18] + doors: [12, 18] - kind: IET10 - doors: [14,20] + doors: [14, 20] - kind: DMU - max-car: 4 \ No newline at end of file + max-car: 4 diff --git a/static/stations/mdg.yaml b/static/stations/mdg.yaml index 48dbec4..e97cc3e 100644 --- a/static/stations/mdg.yaml +++ b/static/stations/mdg.yaml @@ -7,27 +7,27 @@ platforms: platformLength: 120 signal: false dispatch: false - stepFree: + stepFree: true doorPattern: - kind: IET5 - doors: [4,10] + doors: [4, 10] - kind: IET9 - doors: [4,10] + doors: [4, 10] - kind: IET10 - doors: [4,10] + doors: [4, 10] - kind: DMU max-car: 5 - platformId: 2Up platformLength: 117 signal: true dispatch: false - stepFree: + stepFree: true doorPattern: - kind: IET5 - doors: [1,7] + doors: [1, 7] - kind: IET9 - doors: [1,7] + doors: [1, 7] - kind: IET10 - doors: [1,7] + doors: [1, 7] - kind: DMU - max-car: 5 \ No newline at end of file + max-car: 5 diff --git a/static/stations/nby.yaml b/static/stations/nby.yaml index c6e1197..fa778a1 100644 --- a/static/stations/nby.yaml +++ b/static/stations/nby.yaml @@ -7,79 +7,74 @@ platforms: platformLength: 291 signal: true dispatch: true - dispatchNote: Staffed until 22:00 Daily + dispatchNote: Staffed 06:00-21:00 stepFree: true - stepFreeNote: Accessible from street & via lifts doorPattern: - kind: IET5 - doors: all + doors: [1,10] - kind: IET9 - doors: all + doors: [1,18] - kind: IET10 - doors: all + doors: [1,20] - kind: DMU max-car: 12 - platformId: 1Up platformLength: 291 signal: true dispatch: true - dispatchNote: Staffed until 22:00 Daily + dispatchNote: Staffed 06:00-21:00 stepFree: true - stepFreeNote: Accessible from street & via lifts doorPattern: - kind: IET5 - doors: all + doors: [1,10] - kind: IET9 - doors: all + doors: [1,18] - kind: IET10 - doors: all + doors: [1,20] - kind: DMU max-car: 12 - platformId: 2Dn platformLength: 327 signal: true dispatch: true - dispatchNote: Staffed until 22:00 Daily + dispatchNote: Staffed 06:00-21:00 stepFree: true - stepFreeNote: Accessible from street & via lifts doorPattern: - kind: IET5 - doors: all + doors: [1,10] - kind: IET9 - doors: all + doors: [1,18] - kind: IET10 - doors: all + doors: [1,20] - kind: DMU max-car: 14 - platformId: 2Up platformLength: 327 signal: true dispatch: true - dispatchNote: Staffed until 22:00 Daily + dispatchNote: Staffed 06:00-21:00 stepFree: true - stepFreeNote: Accessible from street & via lifts doorPattern: - kind: IET5 - doors: all + doors: [1,10] - kind: IET9 - doors: all + doors: [1,18] - kind: IET10 - doors: all + doors: [1,20] - kind: DMU max-car: 14 - platformId: 3 platformLength: 129 signal: true dispatch: true - dispatchNote: Staffed until 22:00 Daily + dispatchNote: Staffed 06:00-21:00 stepFree: true - stepFreeNote: Accessible from street & via lifts doorPattern: - kind: IET5 - doors: all + doors: [1,10] - kind: IET9 - doors: null + doors: [0,0] - kind: IET10 - doors: null + doors: [0,0] - kind: DMU - max-car: 5 \ No newline at end of file + max-car: 5 diff --git a/static/stations/nrc.yaml b/static/stations/nrc.yaml index 5b8bf2a..de706b0 100644 --- a/static/stations/nrc.yaml +++ b/static/stations/nrc.yaml @@ -10,11 +10,11 @@ platforms: stepFree: false doorPattern: - kind: IET5 - doors: [1,6] + doors: [1, 6] - kind: IET9 - doors: [1,6] + doors: [1, 6] - kind: IET10 - doors: [1,6] + doors: [1, 6] - kind: DMU max-car: 4 - platformId: 2Up @@ -24,25 +24,25 @@ platforms: stepFree: true doorPattern: - kind: IET5 - doors: [4,9] + doors: [4, 9] - kind: IET9 - doors: [4,9] + doors: [4, 9] - kind: IET10 - doors: [4,9] + doors: [4, 9] - kind: DMU max-car: 4 - platformId: 3Up platformLength: 225 - signal: false + signal: true dispatch: false stepFree: true doorPattern: - kind: IET5 - doors: [2,10] + doors: [2, 10] - kind: IET9 - doors: [2,15] + doors: [2, 15] - kind: IET10 - doors: [2,16] + doors: [2, 16] - kind: DMU max-car: 9 - platformId: 3Dn @@ -52,10 +52,10 @@ platforms: stepFree: true doorPattern: - kind: IET5 - doors: [2,10] + doors: [2, 10] - kind: IET9 - doors: [2,15] + doors: [2, 15] - kind: IET10 - doors: [2,16] + doors: [2, 16] - kind: DMU - max-car: 9 \ No newline at end of file + max-car: 9 diff --git a/static/stations/pew.yaml b/static/stations/pew.yaml index 95a94de..01dc26b 100644 --- a/static/stations/pew.yaml +++ b/static/stations/pew.yaml @@ -5,27 +5,29 @@ checked: 2026-03-11 platforms: - platformId: 1Dn platformLength: 170 - signal: true + signal: false + stepFree: true dispatch: false doorPattern: - kind: IET5 - doors: [1,10] + doors: [1, 10] - kind: IET9 - doors: [2,15] + doors: [2, 15] - kind: IET10 - doors: [2,15] + doors: [2, 15] - kind: DMU max-car: 7 - platformId: 2Up platformLength: 177 signal: true + stepFree: true dispatch: false doorPattern: - kind: IET5 - doors: [1,10] + doors: [1, 10] - kind: IET9 - doors: [2,15] + doors: [2, 15] - kind: IET10 - doors: [2,15] + doors: [2, 15] - kind: DMU - max-car: 7 \ No newline at end of file + max-car: 7 diff --git a/static/stations/stationFiles.schema.json b/static/stations/stationFiles.schema.json index bebc1ae..18317cc 100644 --- a/static/stations/stationFiles.schema.json +++ b/static/stations/stationFiles.schema.json @@ -1,101 +1,101 @@ { - "$schema": "https://json-schema.org/draft-07/schema#", - "type": "object", - "required": [], - "additionalProperties": false, - "properties": { - "name": { - "type": "string", - "description": "The full name of the station" - }, - "crs": { - "type": "string", - "description": "The CRS code of the station" - }, - "updated": { - "type": "string", - "format": "date", - "description": "Date the data was last updated" - }, - "checked": { - "type": "string", - "format": "date", - "description": "Date the data was last checked for accuracy" - }, - "platforms": { - "type": "array", - "items": { - "platformInfo": { - "type": "object", - "properties": { - "platformId": { - "type": "string", - "description": "The number or letter of the platform" - }, - "platformDescription": { - "type": "string", - "description": "Describe platforms location - Up/Dn line for example" - }, - "platformStepFree": { - "type": "boolean", - "description": "Is step free access available to this platform" - }, - "platformStepFreeNote": { - "type": "string", - "description": "Notes about step free access to this platform" - }, - "platformLength": { - "type": "number", - "description": "Length of the platform in metres" - }, - "carStop": { - "type": "array", - "items": { - "carStopDetail": { - "type": "string", - "trainType": { - "type": "string", - "description": "The type of train described in this entry" - }, - "platformedCoaches": { - "type": "number", - "description": "The number of coaches fully platformed at the platform" - }, - "platformedNotes": { - "type": "string", - "description": "Notes regarding platformed coaches, additional doors, front/rear etc." - } - } - } - }, - "departUp": { - "type": "boolean", - "description": "Can a train depart in the Up direction" - }, - "departDown": { - "type": "boolean", - "description": "Can a train depart in the down direction" - }, - "signalUp": { - "type": "boolean", - "description": "Is there a starting signal in the Up direction" - }, - "signalDown": { - "type": "boolean", - "description": "Is there a starting signal in the Down direction" - }, - "dispatch": { - "type": "boolean", - "description": "Are dispatch staff present on this platform" - }, - "dispatchNote": { - "type": "string", - "description": "Notes about dispatch arrangements" - } - } - } - } - }, - "definitions": {} - } -} \ No newline at end of file + "$schema": "https://json-schema.org/draft-07/schema#", + "type": "object", + "required": [], + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "description": "The full name of the station" + }, + "crs": { + "type": "string", + "description": "The CRS code of the station" + }, + "updated": { + "type": "string", + "format": "date", + "description": "Date the data was last updated" + }, + "checked": { + "type": "string", + "format": "date", + "description": "Date the data was last checked for accuracy" + }, + "platforms": { + "type": "array", + "items": { + "platformInfo": { + "type": "object", + "properties": { + "platformId": { + "type": "string", + "description": "The number or letter of the platform" + }, + "platformDescription": { + "type": "string", + "description": "Describe platforms location - Up/Dn line for example" + }, + "platformStepFree": { + "type": "boolean", + "description": "Is step free access available to this platform" + }, + "platformStepFreeNote": { + "type": "string", + "description": "Notes about step free access to this platform" + }, + "platformLength": { + "type": "number", + "description": "Length of the platform in metres" + }, + "carStop": { + "type": "array", + "items": { + "carStopDetail": { + "type": "string", + "trainType": { + "type": "string", + "description": "The type of train described in this entry" + }, + "platformedCoaches": { + "type": "number", + "description": "The number of coaches fully platformed at the platform" + }, + "platformedNotes": { + "type": "string", + "description": "Notes regarding platformed coaches, additional doors, front/rear etc." + } + } + } + }, + "departUp": { + "type": "boolean", + "description": "Can a train depart in the Up direction" + }, + "departDown": { + "type": "boolean", + "description": "Can a train depart in the down direction" + }, + "signalUp": { + "type": "boolean", + "description": "Is there a starting signal in the Up direction" + }, + "signalDown": { + "type": "boolean", + "description": "Is there a starting signal in the Down direction" + }, + "dispatch": { + "type": "boolean", + "description": "Are dispatch staff present on this platform" + }, + "dispatchNote": { + "type": "string", + "description": "Notes about dispatch arrangements" + } + } + } + } + }, + "definitions": {} + } +} diff --git a/static/stations/tha.yaml b/static/stations/tha.yaml index ce7f6ea..2af76c4 100644 --- a/static/stations/tha.yaml +++ b/static/stations/tha.yaml @@ -7,27 +7,27 @@ platforms: platformLength: 168 signal: true dispatch: false - stepFree: + stepFree: true doorPattern: - kind: IET5 - doors: [1,10] + doors: [1, 10] - kind: IET9 - doors: [1,12] + doors: [1, 12] - kind: IET10 - doors: [1,12] + doors: [1, 12] - kind: DMU max-car: 7 - platformId: 2Up platformLength: 168 signal: false dispatch: false - stepFree: + stepFree: true doorPattern: - kind: IET5 - doors: [1,10] + doors: [1, 10] - kind: IET9 - doors: [7,18] + doors: [7, 18] - kind: IET10 - doors: [9,20] + doors: [9, 20] - kind: DMU - max-car: 7 \ No newline at end of file + max-car: 7 diff --git a/static/stations/the.yaml b/static/stations/the.yaml index f63ab00..122c780 100644 --- a/static/stations/the.yaml +++ b/static/stations/the.yaml @@ -5,41 +5,42 @@ checked: 2026-03-11 platforms: - platformId: 1Up platformLength: 168 - signal: true + signal: false dispatch: false - stepFree: + stepFree: true doorPattern: - kind: IET5 - doors: [1,10] + doors: [1, 10] - kind: IET9 - doors: [1,13] + doors: [1, 13] - kind: IET10 - doors: [1,13] + doors: [1, 13] - kind: DMU max-car: 7 - platformId: 2Dn platformLength: 168 signal: false dispatch: false - stepFree: + stepFree: true doorPattern: - kind: IET5 - doors: [1,10] + doors: [1, 10] - kind: IET9 - doors: [1,13] + doors: [1, 13] - kind: IET10 - doors: [1,13] + doors: [1, 13] - kind: DMU max-car: 7 - platformId: 3 platformLength: 153 - signal: false + signal: true dispatch: false + dispatchNote: Use must be specially authorised stepFree: true doorPattern: - kind: IET5 - doors: [1,10] + doors: [1, 10] - kind: IET9 - doors: [1,11] + doors: [1, 11] - kind: IET10 - doors: [1,11] \ No newline at end of file + doors: [1, 11]