{#if alerts.length} {/if} {#if isLoading} {:else if dataAge}

Updated: {dataAge.toLocaleTimeString()}

{#if services.length} {#each services as service} {/each}
From To Plat. Sch Arr. Exp Arr. Sch Dep. Exp Dep.
{#if Array.isArray(service.origin?.location)} {service.origin.location[0]["locationName"] + " & " + service.origin.location[1]["locationName"]} {:else} {service.origin?.location?.locationName || ""} {/if} {#if Array.isArray(service.destination?.location)} {service.destination.location[0]["locationName"] + " & " + service.destination.location[0]["locationName"]} {:else} {service.destination?.location?.locationName || ""} {/if} {service.platform || "-"} {parseTime(service.sta).data} {parseTime(service.eta).data} {parseTime(service.std).data} {parseTime(service.etd).data}

A {service.operator || "Unknown"} service {#if service["length"]} with {service["length"] || "some"} coaches {/if}

{#if service.delayReason}

{service.delayReason}

{/if} {#if service.cancelReason}

{service.cancelReason}

{/if}
{:else}

No Scheduled Train Services

{/if} {#if busServices.length}
Bus services
Bus Services {#each busServices as service} {/each}
From To Sch Arr. Exp Arr. Sch Dep. Exp Dep.
{service.origin?.location?.locationName || ""} {service.destination?.location?.locationName || ""} {parseTime(service.sta).data} {parseTime(service.eta).data} {parseTime(service.std).data} {parseTime(service.etd).data}

A {service.operator || "Unknown"} service

{#if service.delayReason}

{service.delayReason}

{/if} {#if service.cancelReason}

{service.cancelReason}

{/if}
{/if} {#if ferryServices.length}
Bus services
Ferry Services {#each ferryServices as service} {/each}
From To Sch Arr. Exp Arr. Sch Dep. Exp Dep.
{service.origin?.location?.locationName || ""} {service.destination?.location?.locationName || ""} {parseTime(service.sta).data} {parseTime(service.eta).data} {parseTime(service.std).data} {parseTime(service.etd).data}
{#if service.delayReason}

{service.delayReason}

{/if} {#if service.cancelReason}

{service.cancelReason}

{/if}
{/if} {:else}

Unable to load data

{/if} {#if serviceDetail}
Service Detail
{#if serviceDetail?.previousCallingPoints?.callingPointList?.callingPoint} {#if Array.isArray(serviceDetail?.previousCallingPoints?.callingPointList?.callingPoint)} {#each serviceDetail.previousCallingPoints.callingPointList.callingPoint as prevPoint} {/each} {:else} {/if} {/if} {#if serviceDetail?.subsequentCallingPoints?.callingPointList?.callingPoint} {#if Array.isArray(serviceDetail?.subsequentCallingPoints?.callingPointList?.callingPoint)} {#each serviceDetail.subsequentCallingPoints.callingPointList.callingPoint as nextPoint} {/each} {:else} {/if} {/if}
Location Sch Exp
{prevPoint.locationName} {prevPoint.st} {parseTime(prevPoint.at || prevPoint.et).data}
{serviceDetail.previousCallingPoints.callingPointList.callingPoint.locationName} {serviceDetail.previousCallingPoints.callingPointList.callingPoint.st} {parseTime( serviceDetail.previousCallingPoints.callingPointList.callingPoint.at || serviceDetail.previousCallingPoints.callingPointList.callingPoint.et ).data}
{title} {serviceDetail.std || serviceDetail.sta} {parseTime(serviceDetail.etd || serviceDetail.eta).data}
{nextPoint.locationName} {nextPoint.st} {parseTime(nextPoint.et).data}
{serviceDetail.subsequentCallingPoints.callingPointList.callingPoint.locationName} {serviceDetail.subsequentCallingPoints.callingPointList.callingPoint.st} {parseTime(serviceDetail.subsequentCallingPoints.callingPointList.callingPoint.et).data}
{/if}