From 72534805d9843ab44ec7dd441d583b071ca1c21f Mon Sep 17 00:00:00 2001 From: Fred Boniface Date: Tue, 11 Apr 2023 21:36:26 +0100 Subject: [PATCH] Add staff board type --- board-staff.html | 134 ++++++++++++++++++++++++++ js/staff-board.js | 240 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 374 insertions(+) create mode 100644 board-staff.html create mode 100644 js/staff-board.js diff --git a/board-staff.html b/board-staff.html new file mode 100644 index 0000000..111d695 --- /dev/null +++ b/board-staff.html @@ -0,0 +1,134 @@ + + + + + + + + + + OwlBoard - Loading + + + + + + + + + + +
+
+
+

\nLoading

+
+ +
+ + +
+
+ + + + +

+ +
+
+
+
+ +
+ + + + + + + + + + + + +
Train Services
HeadcodeOriginDest.Plat.Sch Arr.Exp Arr.Sch Dep.Exp Dep.
+
+ +
+

There are no scheduled train services from this station

+
+ +
+ + + + + + + + + + + +
Ferry Services
OriginDest.Sch Arr.Exp Arr.Sch Dep.Exp Dep.
+
+ +
+ + + + + + + + + + + + +
Bus Services
HeadcodeOriginDest.Sch Arr.Exp Arr.Sch Dep.Exp Dep.
+
+ +
+

Oops

+

There was an error with your request

+

You are not authorised to view staff versions, you can sign up in settings

+

The station you are searching for cannot be found

+

The station has no data. It may not be in operation yet/anymore.

+

Connection Error, check your data connection. Retrying.

+
+ + +
+ + \ No newline at end of file diff --git a/js/staff-board.js b/js/staff-board.js new file mode 100644 index 0000000..4308e9e --- /dev/null +++ b/js/staff-board.js @@ -0,0 +1,240 @@ +/* Page Init: */ +// Run the init function at page load. +init() + +/* Init function */ +async function init() { // Gets query string and then fetch API response and pass to parsing function + console.time("Time: Init to Complete") + setLoadingDesc(`Loading\nservices`) + var stn = await getQuery("stn"); + setLoadingDesc(`Loading\n${stn.toUpperCase()}`) + log(`init: Looking up: ${stn}`); + var sv = await getQuery("sv"); + log(`init: Staff Version: ${sv}`); + if (sv === 'true') { + log("init: Staff Version not supported yet.") + log("init: Unable to proceed.") + } else { + try { + var data = await publicLdb(stn) + setLoadingDesc(`${stn.toUpperCase()}\nParsing Data`) + log("simple-board.init: Fetched LDB Data", "INFO") + } catch (err) { + var data = "err" + setLoadingDesc(`Waiting\nConnection`) + log(`simple-board.init: Error fetching data: ${err}`, "ERR") + } + parseLdb(data) + } +} + +/* Check for any errors in data returned from the Fetch call + If no errors, if there are none, call buildPage(). */ +async function parseLdb(data) { + if (data.ERROR == "NOT_FOUND") { // Station not found + hideLoading(); + document.getElementById("error_notice").style = "display: block;"; + document.getElementById("err_not_found").style = "display: block;"; + setHeaders("Not Found",new Date()) + } else if (data == false) { // No data for station + hideLoading(); + document.getElementById("error_notice").style = "display: block;"; + document.getElementById("err_no_data").style = "display:block;"; + setHeaders("No Data",new Date()) + } else if (data == "err") { // Connection Error + await delay(2000); + hideLoading(); + document.getElementById("error_notice").style = "display: block;"; + document.getElementById("err_conn").style = "display: block;"; + setHeaders("Connection Error",new Date()) + showLoading(); + await delay(5000); + log(`parseLdb: Passing to error handler`, "ERR") + errorHandler(); + } else { + buildPage(data); + } +} + +// Build and Display Functions +async function buildPage(data) { + setLoadingDesc('Loading\nData') + var stationName = data.GetStationBoardResult.locationName; + log(`buildPage: Data ready for ${stationName}`); + var generateTime = new Date(await data.GetStationBoardResult.generatedAt); + log(`buildPage: Data prepared at ${generateTime.toLocaleString()}`) + setHeaders(stationName, generateTime); + // Check for notices and if true pass to function + if (data.GetStationBoardResult.nrccMessages) { + setLoadingDesc('Loading\nAlerts') + await displayAlerts(await makeArray(data.GetStationBoardResult.nrccMessages.message)); + } + if (data.GetStationBoardResult.trainServices) { + setLoadingDesc('Loading\nTrains') + displayTrains(await makeArray(data.GetStationBoardResult.trainServices.service)) + } else { + displayNoTrains() + } + if (data.GetStationBoardResult.ferryServices) { + setLoadingDesc('Loading\nFerries') + displayFerry(await makeArray(data.GetStationBoardResult.ferryServices.service)) + } + if (data.GetStationBoardResult.busServices) { + setLoadingDesc('Loading\nBusses') + displayBus(await makeArray(data.GetStationBoardResult.busServices.service)) + } + hideLoading(); + console.timeEnd("Time: Init to Complete") +} + + +async function displayTrains(data) { // Iterated through train services and passes API sections to other functions + log(`simple-board.displayTrains: Inserting data in DOM`) + for(var i = 0; i < data.length; i++) { + // Reset Vars + var svc = data[i]; + displayService(svc); + buildCallLists(svc); + } + document.getElementById("output").style = "display:block;"; + log(`simple-board.displayTrains: Insertion complete`) +} + +async function displayFerry(ferrySvc) { // Iterates through each ferry service and passes to another function + for(var i = 0; i < ferrySvc.length; i++) { + displayFerryService(ferrySvc[i]) + } +} + +async function displayBus(busSvc) { // Iterates through each bus service and passes to other functions. + for(var i = 0; i < busSvc.length; i++) { + displayBusService(busSvc[i]) + buildCallLists(busSvc[i]) + } +} + +async function displayService(svc) { // Creates a table row from each train service. + var table = document.getElementById("output"); + + // Determine Time Message + var sta = await parseTime(svc.sta); + var eta = await parseTime(svc.eta); + var std = await parseTime(svc.std); + var etd = await parseTime(svc.etd); + // Determine Platform Message + //if (svc.platform != undefined){var plt = svc.platform} else {var plt = "-"}; + var plt = await parsePlatform(svc); + // Define Table Row + var row = ` + + + + + + + + + + +
${await parseName(svc.origin.location)}${await parseName(svc.destination.location)}${plt.num}${sta.data}${eta.data}${std.data}${etd.data}
` + // Put Table Row + table.insertAdjacentHTML("beforeend", row) + // Display Operator where provided (it always will be, I think) + if (svc.operator) { + var opRow = `

A ${svc.operator} service` + if (svc.length) { // Displays number of carriages where provided + opRow += ` with ${svc.length} carriages

`; + } else { + opRow += `

` + } + table.insertAdjacentHTML("beforeend", opRow); + } + // Parse cancelReason and then delayReason + if (svc.cancelReason) { + var cancelRow = `

${svc.cancelReason}

` + table.insertAdjacentHTML("beforeend", cancelRow); + } + if (svc.delayReason) { + var delayRow = `

${svc.delayReason}

` + table.insertAdjacentHTML("beforeend", delayRow); + } +} + +async function displayFerryService(svc) { // Creates a table for for each ferry service + var table = document.getElementById("ferry"); + log(JSON.stringify(svc)) + // Determine Time Message + var sta = await parseTime(svc.sta); + var eta = await parseTime(svc.eta); + var std = await parseTime(svc.std); + var etd = await parseTime(svc.etd); + // Determine Platform Message + var plt = ""; + // Define Table Row + var row = ` + + + + + + + + + + +
${await parseName(svc.origin.location)}${await parseName(svc.destination.location)}${plt}${sta.data}${eta.data}${std.data}${etd.data}
` + // Put Table Row + table.insertAdjacentHTML("beforeend", row) + // Parse cancelReason & delayReason + if (svc.cancelReason) { + var cancelRow = `

${svc.cancelReason}

` + table.insertAdjacentHTML("beforeend", cancelRow); + } + if (svc.delayReason) { + var delayRow = `

${svc.delayReason}

` + table.insertAdjacentHTML("beforeend", delayRow); + } + document.getElementById("ferry").style = "display:block" +} + +async function displayBusService(svc) { // Creates a table row for each bus service. + var table = document.getElementById("bus"); + log(JSON.stringify(svc)) + // Determine Time Message + var sta = await parseTime(svc.sta); + var eta = await parseTime(svc.eta); + var std = await parseTime(svc.std); + var etd = await parseTime(svc.etd); + // Determine Platform Message + var plt = ""; + // Define Table Row + var row = ` + + + + + + + + + + +
${svc.origin.location.locationName}${svc.destination.location.locationName}${plt}${sta.data}${eta.data}${std.data}${etd.data}
` + // Put Table Row + table.insertAdjacentHTML("beforeend", row) + // Display operator + if (svc.operator) { + var opRow = `

A ${svc.operator} service

` + table.insertAdjacentHTML("beforeend", opRow); + } + // Parse cancelReason & delayReason + if (svc.cancelReason) { + var cancelRow = `

${svc.cancelReason}

` + table.insertAdjacentHTML("beforeend", cancelRow); + } + if (svc.delayReason) { + var delayRow = `

${svc.delayReason}

` + table.insertAdjacentHTML("beforeend", delayRow); + } + document.getElementById("bus").style = "display:block" +} \ No newline at end of file