From 220f6666a5e4567733756d43cc1894b003d48084 Mon Sep 17 00:00:00 2001 From: Dan Cojocaru Date: Sat, 10 Dec 2022 23:38:45 +0100 Subject: [PATCH] Add support for IC trains --- base.css | 13 +++++++++++++ common/tabs.js | 0 common/trainId.js | 30 ++++++++++++++++++++++++++++++ sw.js | 8 ++++++-- train.html | 1 + train.js | 2 +- view-station.css | 4 ---- view-station.html | 1 + view-station.js | 9 ++++++++- view-train.css | 4 ---- view-train.html | 1 + view-train.js | 15 +++++++-------- 12 files changed, 68 insertions(+), 20 deletions(-) mode change 100644 => 100755 common/tabs.js create mode 100644 common/trainId.js diff --git a/base.css b/base.css index 7123c97..6993d12 100644 --- a/base.css +++ b/base.css @@ -272,8 +272,21 @@ body { border-bottom-right-radius: 5%; } +.IR, .IRN { + color: #ff0000 !important; +} + +.IC { + color: #00aa00 !important; +} + + @media print { footer, .no-print { display: none !important; } + + header .back { + display: none !important; + } } diff --git a/common/tabs.js b/common/tabs.js old mode 100644 new mode 100755 diff --git a/common/trainId.js b/common/trainId.js new file mode 100644 index 0000000..bfe43a1 --- /dev/null +++ b/common/trainId.js @@ -0,0 +1,30 @@ +/** + * Create IR|IRN|IC|R|R-E 74 inside element + * @param {string} rank + * @param {string} number + * @param {HTMLElement|undefined} element + * @returns {HTMLSpanElement|HTMLElement} + */ +function trainIdSpan(rank, number, element) { + if (!element) { + element = document.createElement('span') + } + + var rankSpan = document.createElement('span') + element.appendChild(rankSpan) + rankSpan.textContent = rank + if (rank.startsWith('IC')) { + rankSpan.classList.add('IC') + } + else if (rank.startsWith('IR')) { + rankSpan.classList.add('IR') + } + + element.appendChild(document.createTextNode(' ')) + + var numberSpan = document.createElement('span') + element.appendChild(numberSpan) + numberSpan.textContent = number + + return element +} diff --git a/sw.js b/sw.js index b43cfaf..b1d16c8 100755 --- a/sw.js +++ b/sw.js @@ -1,4 +1,4 @@ -const VERSION = 'v18' +const VERSION = 'v19' const API_ORIGIN = 'https://scraper.infotren.dcdev.ro/' const API_TRAINS = `${API_ORIGIN}v3/trains` const API_STATIONS = `${API_ORIGIN}v3/stations` @@ -7,11 +7,15 @@ const CACHE_FIRST = [ // Root '/', + // Static assets + '/common/back.svg', + // Utility JS '/common/worker.js', '/common/items.js', '/common/back.js', '/common/tabs.js', + '/common/trainId.js', // Base '/base.css', @@ -119,7 +123,7 @@ const cacheFirst = async ({ request, preloadResponsePromise, refreshAnyway }) => // First try to get the resource from the cache const responseFromCache = await caches.match(request) if (responseFromCache) { - if (refreshAnyway) { + if (refreshAnyway || (responseFromCache.headers.has('SW-Cached-At') && Date.now() - new Date(responseFromCache.headers.get('SW-Cached-At')).valueOf() > 86400000)) { console.log('[cf] using cache response; refreshing anyway but returning cache', responseFromCache); ((async () => { try { diff --git a/train.html b/train.html index 00a7315..3cb0b70 100644 --- a/train.html +++ b/train.html @@ -13,6 +13,7 @@ + diff --git a/train.js b/train.js index 7ff01c3..2de4c5c 100755 --- a/train.js +++ b/train.js @@ -87,7 +87,7 @@ function rebuildSuggestions() { var trainNameP = document.createElement('p') suggestionLi.appendChild(trainNameP) - trainNameP.textContent = `${suggestion.rank} ${suggestion.number}` + trainIdSpan(suggestion.rank, suggestion.number, trainNameP) trainNameP.classList.add('pri', 'trainName') var trainCompanyP = document.createElement('p') diff --git a/view-station.css b/view-station.css index 073b927..ce0b8be 100644 --- a/view-station.css +++ b/view-station.css @@ -1,7 +1,3 @@ -.IR, .IRN { - color: red !important; -} - .early { color: green !important; } diff --git a/view-station.html b/view-station.html index b55fd32..e2855d3 100644 --- a/view-station.html +++ b/view-station.html @@ -15,6 +15,7 @@ + diff --git a/view-station.js b/view-station.js index ff7720b..fbec3ab 100644 --- a/view-station.js +++ b/view-station.js @@ -67,7 +67,14 @@ function onStationData(data) { var trainDiv = document.createElement('p') trainItem.appendChild(trainDiv) trainDiv.classList.add('pri', 'train') - trainDiv.appendChild(document.createTextNode(`${train.train.number}`)) + var trainDivHref = document.createElement('a') + trainDiv.appendChild(trainDivHref) + trainDivHref.textContent = train.train.number + trainDivHref.classList.add('no-a-custom') + var trainUrl = new URL('/view-train.html', window.location.origin) + trainUrl.searchParams.append('train', train.train.number) + trainUrl.searchParams.append('date', train.train.departureDate) + trainDivHref.href = trainUrl.toString() var terminusDiv = document.createElement('p') trainItem.appendChild(terminusDiv) diff --git a/view-train.css b/view-train.css index 1c5e2a5..788f4e5 100644 --- a/view-train.css +++ b/view-train.css @@ -1,7 +1,3 @@ -.IR, .IRN { - color: red; -} - .early { color: green; } diff --git a/view-train.html b/view-train.html index cbf1bf0..a7f06a7 100644 --- a/view-train.html +++ b/view-train.html @@ -14,6 +14,7 @@ + diff --git a/view-train.js b/view-train.js index 2c649bf..73f5ede 100755 --- a/view-train.js +++ b/view-train.js @@ -70,11 +70,7 @@ function onTrainData(data, fetchDate) { var title = document.getElementById('title') title.textContent = '' title.appendChild(document.createTextNode('Train ')) - var rankSpan = document.createElement('span') - rankSpan.textContent = data.rank - rankSpan.classList.add(data.rank) - title.appendChild(rankSpan) - title.appendChild(document.createTextNode(` ${data.number}`)) + trainIdSpan(data.rank, data.number, title) document.getElementsByTagName('title')[0].textContent = `Train ${data.rank} ${data.number}` @@ -110,7 +106,8 @@ function onTrainData(data, fetchDate) { document.getElementsByClassName('rsk')[0].textContent = '' document.getElementsByClassName('csk')[0].textContent = 'Select' - title.textContent = `Select Group for ${data.rank} ${data.number}` + title.textContent = 'Select Group for ' + trainIdSpan(data.rank, data.number, title) var gc = document.getElementById('group-choice') while (gc.childNodes.length > 0) { @@ -374,7 +371,8 @@ function onTrainData(data, fetchDate) { switch (note.kind) { case 'departsAs': { - noteP.textContent = `Train departs as ${note.rank} ${note.number}` + noteP.textContent = 'Train departs as ' + trainIdSpan(note.rank, note.number, noteP) break } case 'detachingWagons': { @@ -386,7 +384,8 @@ function onTrainData(data, fetchDate) { break } case 'trainNumberChange': { - noteP.textContent = `Train changes number to ${note.rank} ${note.number}` + noteP.textContent = 'Train changes number to ' + trainIdSpan(note.rank, note.number, noteP) break } }