Add station data and parser for the script.

Need to do:
 - Write the StationIfno modal and enable toggling it's display.
This commit is contained in:
2026-03-11 17:26:57 +00:00
parent 904942e078
commit 11ec2574f0
24 changed files with 410 additions and 283 deletions

View File

@@ -0,0 +1 @@
{"name":"Aldermaston","crs":"amt","updated":"2026-03-11T00:00:00.000Z","checked":"2026-03-11T00:00:00.000Z","platforms":[{"platformId":"1Up","platformLength":115,"signal":false,"dispatch":false,"stepFree":null,"doorPattern":[{"kind":"IET5","doors":[2,10]},{"kind":"IET9","doors":[2,9]},{"kind":"IET10","doors":[2,10]},{"kind":"DMU","max-car":5}]},{"platformId":"2Dn","platformLength":115,"signal":false,"dispatch":false,"stepFree":null,"doorPattern":[{"kind":"IET5","doors":[1,7]},{"kind":"IET9","doors":[1,7]},{"kind":"IET10","doors":[1,7]},{"kind":"DMU","max-car":5}]}]}

View File

@@ -0,0 +1 @@
{"name":"Bedwyn","crs":"bdw","updated":"2026-03-11T00:00:00.000Z","checked":"2026-03-11T00:00:00.000Z","platforms":[{"platformId":"1Dn","platformLength":121,"signal":true,"dispatch":false,"doorPattern":[{"kind":"IET5","doors":[1,9]},{"kind":"IET9","doors":[1,9]},{"kind":"IET10","doors":[1,9]},{"kind":"DMU","max-car":5}]},{"platformId":"2Up","platformLength":123,"signal":true,"dispatch":false,"doorPattern":[{"kind":"IET5","doors":[2,10]},{"kind":"IET9","doors":[2,10]},{"kind":"IET10","doors":[2,10]},{"kind":"DMU","max-car":5}]}]}

View File

@@ -0,0 +1 @@
{"name":"Hungerford","crs":"hgd","updated":"2026-03-11T00:00:00.000Z","checked":"2026-03-11T00:00:00.000Z","platforms":[{"platformId":"1Up","platformLength":153,"signal":false,"dispatch":false,"doorPattern":[{"kind":"IET5","doors":[1,10]},{"kind":"IET9","doors":[8,18]},{"kind":"IET10","doors":[9,20]},{"kind":"DMU","max-car":6}]},{"platformId":"2Dn","platformLength":150,"signal":false,"dispatch":false,"doorPattern":[{"kind":"IET5","doors":[1,10]},{"kind":"IET9","doors":[1,11]},{"kind":"IET10","doors":[1,11]},{"kind":"DMU","max-car":6}]}]}

View File

@@ -0,0 +1 @@
{"name":"Kintbury","crs":"kit","updated":"2026-03-11T00:00:00.000Z","checked":"2026-03-11T00:00:00.000Z","platforms":[{"platformId":"1Dn","platformLength":105,"signal":false,"dispatch":false,"stepFree":null,"doorPattern":[{"kind":"IET5","doors":[2,9]},{"kind":"IET9","doors":[2,9]},{"kind":"IET10","doors":[2,9]},{"kind":"DMU","max-car":4}]},{"platformId":"2Up","platformLength":106,"signal":false,"dispatch":false,"stepFree":null,"doorPattern":[{"kind":"IET5","doors":[4,10]},{"kind":"IET9","doors":[12,18]},{"kind":"IET10","doors":[14,20]},{"kind":"DMU","max-car":4}]}]}

View File

@@ -0,0 +1 @@
{"name":"Midgham","crs":"mdg","updated":"2026-03-11T00:00:00.000Z","checked":"2026-03-11T00:00:00.000Z","platforms":[{"platformId":"1Dn","platformLength":120,"signal":false,"dispatch":false,"stepFree":null,"doorPattern":[{"kind":"IET5","doors":[4,10]},{"kind":"IET9","doors":[4,10]},{"kind":"IET10","doors":[4,10]},{"kind":"DMU","max-car":5}]},{"platformId":"2Up","platformLength":117,"signal":true,"dispatch":false,"stepFree":null,"doorPattern":[{"kind":"IET5","doors":[1,7]},{"kind":"IET9","doors":[1,7]},{"kind":"IET10","doors":[1,7]},{"kind":"DMU","max-car":5}]}]}

View File

@@ -0,0 +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}]}]}

View File

@@ -0,0 +1 @@
{"name":"Newbury Racecourse","crs":"nrc","updated":"2026-03-11T00:00:00.000Z","checked":"2026-03-11T00:00:00.000Z","platforms":[{"platformId":"1Dn","platformLength":89,"signal":false,"dispatch":false,"stepFree":false,"doorPattern":[{"kind":"IET5","doors":[1,6]},{"kind":"IET9","doors":[1,6]},{"kind":"IET10","doors":[1,6]},{"kind":"DMU","max-car":4}]},{"platformId":"2Up","platformLength":74,"signal":true,"dispatch":false,"stepFree":true,"doorPattern":[{"kind":"IET5","doors":[4,9]},{"kind":"IET9","doors":[4,9]},{"kind":"IET10","doors":[4,9]},{"kind":"DMU","max-car":4}]},{"platformId":"3Up","platformLength":225,"signal":false,"dispatch":false,"stepFree":true,"doorPattern":[{"kind":"IET5","doors":[2,10]},{"kind":"IET9","doors":[2,15]},{"kind":"IET10","doors":[2,16]},{"kind":"DMU","max-car":9}]},{"platformId":"3Dn","platformLength":225,"signal":false,"dispatch":false,"stepFree":true,"doorPattern":[{"kind":"IET5","doors":[2,10]},{"kind":"IET9","doors":[2,15]},{"kind":"IET10","doors":[2,16]},{"kind":"DMU","max-car":9}]}]}

View File

@@ -0,0 +1 @@
{"name":"Pewsey","crs":"pew","updated":"2026-03-11T00:00:00.000Z","checked":"2026-03-11T00:00:00.000Z","platforms":[{"platformId":"1Dn","platformLength":170,"signal":true,"dispatch":false,"doorPattern":[{"kind":"IET5","doors":[1,10]},{"kind":"IET9","doors":[2,15]},{"kind":"IET10","doors":[2,15]},{"kind":"DMU","max-car":7}]},{"platformId":"2Up","platformLength":177,"signal":true,"dispatch":false,"doorPattern":[{"kind":"IET5","doors":[1,10]},{"kind":"IET9","doors":[2,15]},{"kind":"IET10","doors":[2,15]},{"kind":"DMU","max-car":7}]}]}

View File

@@ -0,0 +1 @@
{"name":"Thatcham","crs":"tha","updated":"2026-03-11T00:00:00.000Z","checked":"2026-03-11T00:00:00.000Z","platforms":[{"platformId":"1Dn","platformLength":168,"signal":true,"dispatch":false,"stepFree":null,"doorPattern":[{"kind":"IET5","doors":[1,10]},{"kind":"IET9","doors":[1,12]},{"kind":"IET10","doors":[1,12]},{"kind":"DMU","max-car":7}]},{"platformId":"2Up","platformLength":168,"signal":false,"dispatch":false,"stepFree":null,"doorPattern":[{"kind":"IET5","doors":[1,10]},{"kind":"IET9","doors":[7,18]},{"kind":"IET10","doors":[9,20]},{"kind":"DMU","max-car":7}]}]}

View File

@@ -0,0 +1 @@
{"name":"Theale","crs":"the","updated":"2026-03-11T00:00:00.000Z","checked":"2026-03-11T00:00:00.000Z","platforms":[{"platformId":"1Up","platformLength":168,"signal":true,"dispatch":false,"stepFree":null,"doorPattern":[{"kind":"IET5","doors":[1,10]},{"kind":"IET9","doors":[1,13]},{"kind":"IET10","doors":[1,13]},{"kind":"DMU","max-car":7}]},{"platformId":"2Dn","platformLength":168,"signal":false,"dispatch":false,"stepFree":null,"doorPattern":[{"kind":"IET5","doors":[1,10]},{"kind":"IET9","doors":[1,13]},{"kind":"IET10","doors":[1,13]},{"kind":"DMU","max-car":7}]},{"platformId":3,"platformLength":153,"signal":false,"dispatch":false,"stepFree":true,"doorPattern":[{"kind":"IET5","doors":[1,10]},{"kind":"IET9","doors":[1,11]},{"kind":"IET10","doors":[1,11]}]}]}

View File

@@ -1,7 +1,7 @@
<script lang="ts">
import { components } from '$lib/mapRegistry';
import type { ElecType } from '$lib/railStyles';
import { IconArrowNarrowRight } from '@tabler/icons-svelte';
import { IconArrowNarrowRight, IconInfoCircle } from '@tabler/icons-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
@@ -13,9 +13,14 @@
// Linking Logic
$: isLinkable = !!(feature.goto && feature.entryPoint);
$: href = `/map/${feature.goto}#${feature.entryPoint}`;
$: stationInfo = (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}`)
}
</script>
<div class="row-container" id={slugify(feature.name)}>
@@ -37,6 +42,12 @@
<div class="feature-desc">{feature.description}</div>
{/if}
</div>
{#if stationInfo}
<div class="link-indicator" on:click={stationInfo(feature.crs)}>
<IconInfoCircle />
</div>
{/if}
{#if isLinkable}
<div class="link-indicator">
<IconArrowNarrowRight />

View File

@@ -0,0 +1,16 @@
<script lang="ts">
/*
Loads and displayes a 'Station Info' Modal
*/
let crs = $props();
const allStations = import.meta.glob('$lib/assets/station/*.json', { query: '?json' });
const stationData = $derived(allStations[`../data/stations/${crs}.json`]);
</script>
{#if stationData}
<!-- RENDER STATION DATA DISPLAY HERE -->
{/if}