From 62dcc5cd02a7c8e72ff1e6b86d73bcabb4ceb524 Mon Sep 17 00:00:00 2001 From: Fred Boniface Date: Tue, 24 Jan 2023 19:41:22 +0000 Subject: [PATCH] Frontend: Reorganise code between simple-board and lib.board Signed-off-by: Fred Boniface --- static/board.html | 4 +- static/js/boards.js | 210 --------------------------------- static/js/lib.board.js | 207 ++++++++++++++++++++++++++++++++ static/js/public-board.js | 240 -------------------------------------- static/js/simple-board.js | 232 ++++++++++++++++++++++++++++++++++++ 5 files changed, 441 insertions(+), 452 deletions(-) delete mode 100644 static/js/boards.js delete mode 100644 static/js/public-board.js diff --git a/static/board.html b/static/board.html index 41cd8a5..09c17c5 100644 --- a/static/board.html +++ b/static/board.html @@ -13,8 +13,8 @@ - - + +
diff --git a/static/js/boards.js b/static/js/boards.js deleted file mode 100644 index b2b9b71..0000000 --- a/static/js/boards.js +++ /dev/null @@ -1,210 +0,0 @@ -// Set page headers -async function setHeaders(title,time) { - var prefix = `OwlBoard - ` - document.title = `${prefix}${title}` - document.getElementById("stn_name").textContent = title - document.getElementById("fetch_time").textContent = time.toLocaleTimeString() -} - -// Determine what should display in 'platform' column -async function parsePlatform(svc){ - if (svc.platform != undefined) { - var platform = svc.platform; - } else { - var platform = "-"; - } - if (svc.platformChanged) { // Not present in public API, ready for staff version. - var changed = "changed"; - } else { - var changed = ""; - } - return {num: platform, change: changed} -} - -// Use different time strings to default to make better on small screens -async function parseTime(string){ - switch (string) { - case "Delayed": - var output = "LATE"; - var change = "changed"; - break; - case "Cancelled": - var output = "CANC"; - var change = "cancelled"; - break; - case "On time": - var output = "RT"; - var change = ""; - break; - case "": - var output = "-"; - var change = ""; - break; - case undefined: - var output = "-"; - var change = ""; - break; - case "No report": - var output = "-"; - var change = ""; - break; - default: - var output = string; - var change = "changed"; - } - return {data: output, changed: change}; -} - -// Convert multiple Origin/Destinations to single string -async function parseName(location) { - if (Array.isArray(location)) { - var name = `${location[0]['locationName']} & ${location[1]['locationName']}` - return name; - } - else { - return location.locationName; - } -} - -// Build calling list: -- This is a string if only one callingPoint is present, needs adapting to work with that -async function buildCallLists(data) { - try { - if (data.previousCallingPoints.callingPointList.callingPoint) { - var preCallPoint = data.previousCallingPoints.callingPointList.callingPoint; - } - } catch (err) { - console.log(`Data not found error, ${err}`) - } - try { - if (data.subsequentCallingPoints.callingPointList.callingPoint) { - var postCallPoint = data.subsequentCallingPoints.callingPointList.callingPoint; - } - } catch (err) { - console.log(`Data not found error, ${err}`) - } - var procPre = ""; - var procPost = ""; - try { - if (preCallPoint) { - for(var i = 0; i < preCallPoint.length; i++) { - var proc = await buildPastCalls(preCallPoint[i]); - procPre = `${procPre}\n${proc}` - } - } - } catch (err) { - console.log(`Error reading previous stops. ${err}`) - } - try { - if (postCallPoint) { - for (var i = 0; i < postCallPoint.length; i++) { - var proc = await buildCalls(postCallPoint[i]); - procPost = `${procPost}\n${proc}` - } - } - } catch (err) { - console.log(`Error reading next stops. ${err}`) - } - var div = ` -
-

X

- - - - - - - - ${procPost} -
Calling at:
LocationScheduleExp.
- - - - - - - - ${procPre} -
Previous stops:
LocationScheduleActual
-
` - document.body.insertAdjacentHTML("beforeend", div) - return; -} - -// Display calling list: - The calling list should be built on demand. -async function showCalls(id) { - document.getElementById(id).style = "display: block;"; - return; -} - -async function hideCalls(id) { - document.getElementById(id).style = "display: none;"; - return; -} - -// Display Alert Messages -async function displayAlerts(array) { - var counter = 0 - var messages = "" - for(var i = 0; i < array.length; i++) { - // Increment counter - counter += 1; - // Reset Vars - messages += `

${array[i]}

`; - } - document.getElementById("alerts_msg").insertAdjacentHTML("beforeend", messages); - if (counter == 1) { - document.getElementById("alert_bar_note").textContent = `There is ${counter} active alert` - } else if (counter > 1) { - document.getElementById("alert_bar_note").textContent = `There are ${counter} active alerts` - - } - document.getElementById("alerts").style = "display:block" - document.getElementById("alerts_bar").style = "display:block" - document.getElementById("output").style = "margin-top:95px" // Adjust margin of train table div. -} - -async function inflateAlerts() { - document.getElementById("alerts_msg").style = "display:block;"; - document.getElementById("alert_expand_arrow").style = "transform: rotate(180deg);"; - document.getElementById("alerts_bar").setAttribute("onclick", "deflateAlerts()") -} - -async function deflateAlerts() { - document.getElementById("alerts_msg").style = "display.none;"; - document.getElementById("alert_expand_arrow").style = "transform: rotate(0deg);"; - document.getElementById("alerts_bar").setAttribute("onclick", "inflateAlerts()") -} - -/* -Compress buildCalls() and buildPastCalls() into a single function -that can selectively work with either data.et or data.at. -async function buildCalls(data) { - if (typeof data.et != "undefined") { - var time = await parseTime(data.et) - } else if (typeof data.at != "undefined") { - var time = await parseTime(data.at) - } - return ` - ${data.locationName} - ${data.st} - ${time.data} - ` -} -*/ -async function buildCalls(data) { - var timeEt = await parseTime(data.et) - return ` - ${data.locationName} - ${data.st} - ${timeEt.data} - ` -} - -async function buildPastCalls(data) { - var timeEt = await parseTime(data.at) - return ` - ${data.locationName} - ${data.st} - ${timeEt.data} - ` -} \ No newline at end of file diff --git a/static/js/lib.board.js b/static/js/lib.board.js index e69de29..2f09ead 100644 --- a/static/js/lib.board.js +++ b/static/js/lib.board.js @@ -0,0 +1,207 @@ +/* Fetch Functions */ +async function publicLdb(stn) { + var url = `${window.location.origin}/api/v1/ldb/${stn}`; + var resp = await fetch(url); + return await resp.json(); +} + +/* Set page heading */ +async function setHeaders(title,time) { + var prefix = `OwlBoard - ` + document.title = `${prefix}${title}` + document.getElementById("stn_name").textContent = title + document.getElementById("fetch_time").textContent = time.toLocaleTimeString() +} + +/* Display No Trains Message */ +async function displayNoTrains() { + document.getElementById('no_services').style = "display: block;"; + clearLoading(); +} + +/* Parse the value of `platform` to account for unknown platforms */ +async function parsePlatform(svc){ + if (svc.platform != undefined) { + var platform = svc.platform; + } else { + var platform = "-"; + } + if (svc.platformChanged) { // Not present in public API, ready for staff version. + var changed = "changed"; + } else { + var changed = ""; + } + return {num: platform, change: changed} +} + + +/* Change value of time strings to fit well on small screens */ +async function parseTime(string){ + switch (string) { + case "Delayed": + var output = "LATE"; + var change = "changed"; + break; + case "Cancelled": + var output = "CANC"; + var change = "cancelled"; + break; + case "On time": + var output = "RT"; + var change = ""; + break; + case "": + var output = "-"; + var change = ""; + break; + case undefined: + var output = "-"; + var change = ""; + break; + case "No report": + var output = "-"; + var change = ""; + break; + default: + var output = string; + var change = "changed"; + } + return {data: output, changed: change}; +} + +/* Convert multiple Origin/Destinations to single string */ +async function parseName(location) { + if (Array.isArray(location)) { + var name = `${location[0]['locationName']} & ${location[1]['locationName']}` + return name; + } + else { + return location.locationName; + } +} + +// Build calling list: -- This is a string if only one callingPoint is present, needs adapting to work with that +async function buildCallLists(data) { + try { /* Check if previous calling points exist */ + if (data.previousCallingPoints.callingPointList.callingPoint) { + var preCallPoint = data.previousCallingPoints.callingPointList.callingPoint; + } + } catch (err) { /* Log if ERR */ + log(`Error reading previous calling points: ${err}`, "INFO") + } + try { /* Check if subsequent calling points exist */ + if (data.subsequentCallingPoints.callingPointList.callingPoint) { + var postCallPoint = data.subsequentCallingPoints.callingPointList.callingPoint; + } + } catch (err) { /* Log if ERR */ + log(`Error reading future calling points: ${err}`, "INFO") + } + var procPre = ""; + var procPost = ""; + try { + if (preCallPoint) { + for(var i = 0; i < preCallPoint.length; i++) { + var proc = await buildCalls(preCallPoint[i]); + procPre = `${procPre}\n${proc}` + } + } + } catch (err) { + console.log(`Error reading previous stops. ${err}`) + } + try { + if (postCallPoint) { + for (var i = 0; i < postCallPoint.length; i++) { + var proc = await buildCalls(postCallPoint[i]); + procPost = `${procPost}\n${proc}` + } + } + } catch (err) { + console.log(`Error reading next stops. ${err}`) + } + var div = ` +
+

X

+ + + + + + + + ${procPost} +
Calling at:
LocationScheduleExp.
+ + + + + + + + ${procPre} +
Previous stops:
LocationScheduleActual
+
` + document.body.insertAdjacentHTML("beforeend", div) + return; +} + +// Display calling list: - The calling list should be built on demand. +async function showCalls(id) { + document.getElementById(id).style = "display: block;"; + return; +} + +async function hideCalls(id) { + document.getElementById(id).style = "display: none;"; + return; +} + +// Display Alert Messages +async function displayAlerts(array) { + var counter = 0 + var messages = "" + for(var i = 0; i < array.length; i++) { + // Increment counter + counter += 1; + // Reset Vars + messages += `

${array[i]}

`; + } + document.getElementById("alerts_msg").insertAdjacentHTML("beforeend", messages); + if (counter == 1) { + document.getElementById("alert_bar_note").textContent = `There is ${counter} active alert` + } else if (counter > 1) { + document.getElementById("alert_bar_note").textContent = `There are ${counter} active alerts` + + } + document.getElementById("alerts").style = "display:block" + document.getElementById("alerts_bar").style = "display:block" + document.getElementById("output").style = "margin-top:95px" /* The margin for the train table needs to be adjusted if the alert box exists. */ +} + + +/* Show/Hide alerts box */ +async function inflateAlerts() { + document.getElementById("alerts_msg").style = "display:block;"; + document.getElementById("alert_expand_arrow").style = "transform: rotate(180deg);"; + document.getElementById("alerts_bar").setAttribute("onclick", "deflateAlerts()") +} + +async function deflateAlerts() { + document.getElementById("alerts_msg").style = "display.none;"; + document.getElementById("alert_expand_arrow").style = "transform: rotate(0deg);"; + document.getElementById("alerts_bar").setAttribute("onclick", "inflateAlerts()") +} + + +/* Builds the train data information in to a table row */ +async function buildCalls(data) { + if (typeof data.et != "undefined") { + var time = await parseTime(data.et) + } else if (typeof data.at != "undefined") { + var time = await parseTime(data.at) + } + return ` + ${data.locationName} + ${data.st} + ${time.data} + ` +} \ No newline at end of file diff --git a/static/js/public-board.js b/static/js/public-board.js deleted file mode 100644 index 6178079..0000000 --- a/static/js/public-board.js +++ /dev/null @@ -1,240 +0,0 @@ -/* Page Init: */ -init() - -/* Supporting Functions */ -async function init() { - 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("init: Fetched LDB Data") - parseLdb(data) - } catch (err) { - var data = null - setLoadingDesc(`Handling\nError`) - log("init: Unable to fetch LDB data") - } - } -} - -async function publicLdb(stn) { - var url = `${window.location.origin}/api/v1/ldb/${stn}`; - var resp = await fetch(url); - return await resp.json(); -} - -async function parseLdb(data) { - if (data.ERROR == "NOT_FOUND") { // Station not found - clearLoading(); - 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 - clearLoading(); - 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 - clearLoading(); - document.getElementById("error_notice").style = "display: block;"; - document.getElementById("err_conn").style = "display: block;"; - setHeaders("Connection Error",new Date()) - await delay(5000); - log(`parseLdb: Waited five seconds, reloading`) - location.reload() - } else { - buildPage(data); - } -} - -// Build and Display Functions -async function buildPage(data) { - setLoadingDesc('Loading\nTrains') - 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') - displayAlerts(data.GetStationBoardResult.nrccMessages.message); - } - if (typeof data.GetStationBoardResult.trainServices == 'undefined') { - displayNoTrains() - } else { - displayTrains(data) - } - if (data.GetStationBoardResult.ferryServices) { - setLoadingDesc('Loading\nFerries') - displayFerry(data.GetStationBoardResult.ferryServices) - } - if (data.GetStationBoardResult.busServices) { - setLoadingDesc('Loading\nBusses') - displayBus(data.GetStationBoardResult.busServices) - } -} - -async function displayNoTrains() { - document.getElementById('no_services').style = "display: block;"; - clearLoading(); -} - -async function displayTrains(data) { - log(`Inserting data in DOM`) - for(var i = 0; i < data.GetStationBoardResult.trainServices.service.length; i++) { - // Reset Vars - var svc = data.GetStationBoardResult.trainServices.service[i]; - displayService(svc); - buildCallLists(svc); - } - - clearLoading(); - document.getElementById("output").style = "display:block;"; - log(`Insertion complete`) -} - -async function displayFerry(ferrySvc) { - log(JSON.stringify(ferrySvc)) - for(var i = 0; i < ferrySvc.service.length; i++) { - displayFerryService(ferrySvc.service[i]) - } -} - -async function displayBus(busSvc) { - log(JSON.stringify(busSvc)) - for(var i = 0; i < busSvc.service.length; i++) { - displayBusService(busSvc.service[i]) - buildCallLists(busSvc.service[i]) - } -} - -async function displayService(svc) { - 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 - 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); - } -} - -async function displayFerryService(svc) { - 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) { - 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 diff --git a/static/js/simple-board.js b/static/js/simple-board.js index e69de29..a996f7d 100644 --- a/static/js/simple-board.js +++ b/static/js/simple-board.js @@ -0,0 +1,232 @@ +/* Page Init: */ +init() + +/* Init function */ +async function init() { + 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("init: Fetched LDB Data") + parseLdb(data) + } catch (err) { + var data = null + setLoadingDesc(`Handling\nError`) + log("init: Unable to fetch LDB 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 + clearLoading(); + 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 + clearLoading(); + 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 + clearLoading(); + document.getElementById("error_notice").style = "display: block;"; + document.getElementById("err_conn").style = "display: block;"; + setHeaders("Connection Error",new Date()) + await delay(5000); + log(`parseLdb: Waited five seconds, reloading`) + location.reload() + } else { + buildPage(data); + } +} + +// Build and Display Functions +async function buildPage(data) { + setLoadingDesc('Loading\nTrains') + 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') + displayAlerts(data.GetStationBoardResult.nrccMessages.message); + } + if (typeof data.GetStationBoardResult.trainServices == 'undefined') { + displayNoTrains() + } else { + displayTrains(data) + } + if (data.GetStationBoardResult.ferryServices) { + setLoadingDesc('Loading\nFerries') + displayFerry(data.GetStationBoardResult.ferryServices) + } + if (data.GetStationBoardResult.busServices) { + setLoadingDesc('Loading\nBusses') + displayBus(data.GetStationBoardResult.busServices) + } +} + + +async function displayTrains(data) { + log(`Inserting data in DOM`) + for(var i = 0; i < data.GetStationBoardResult.trainServices.service.length; i++) { + // Reset Vars + var svc = data.GetStationBoardResult.trainServices.service[i]; + displayService(svc); + buildCallLists(svc); + } + + clearLoading(); + document.getElementById("output").style = "display:block;"; + log(`Insertion complete`) +} + +async function displayFerry(ferrySvc) { + log(JSON.stringify(ferrySvc)) + for(var i = 0; i < ferrySvc.service.length; i++) { + displayFerryService(ferrySvc.service[i]) + } +} + +async function displayBus(busSvc) { + log(JSON.stringify(busSvc)) + for(var i = 0; i < busSvc.service.length; i++) { + displayBusService(busSvc.service[i]) + buildCallLists(busSvc.service[i]) + } +} + +async function displayService(svc) { + 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 + 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); + } +} + +async function displayFerryService(svc) { + 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) { + 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