Browse Source

Add recently viewed train on homepage

master
Kenneth Bruen 2 years ago
parent
commit
7645effd5f
Signed by: kbruen
GPG Key ID: C1980A470C3EE5B1
  1. 6
      index.html
  2. 58
      index.js
  3. 4
      sw.js
  4. 21
      view-train.js

6
index.html

@ -12,6 +12,8 @@
<script src="/common/worker.js"></script> <script src="/common/worker.js"></script>
<script src="/common/items.js"></script> <script src="/common/items.js"></script>
<script src="/common/trainId.js"></script>
<script src="index.js"></script>
</head> </head>
<body> <body>
<h1>InfoTren</h1> <h1>InfoTren</h1>
@ -19,8 +21,8 @@
<div class="content"> <div class="content">
<ul> <ul>
<li><a class="items disabled" href="">Train routes</a></li> <li><a class="items disabled" href="">Train routes</a></li>
<li><a class="items" href="train.html">My train</a></li> <li id="my-train-li"><a class="items" href="train.html">My train</a></li>
<li><a class="items" href="station.html">Station departures/arrivals</a></li> <li id="station-arr-dep-li"><a class="items" href="station.html">Station departures/arrivals</a></li>
<li><a class="items" href="about.html">About</a></li> <li><a class="items" href="about.html">About</a></li>
</ul> </ul>
</div> </div>

58
index.js

@ -0,0 +1,58 @@
window.addEventListener('load', function (e) {
if (window.localStorage) {
var recentViewTrain = localStorage.getItem('recent/view-train')
if (recentViewTrain) {
/**
* @property {string} trainNumber
* @property {string} date
* @property {string} $addDate
* @property {string | undefined} groupIndex
*/
recentViewTrain = JSON.parse(recentViewTrain)
var addDate = new Date(recentViewTrain.$addDate)
addDate.setHours(addDate.getHours() + 2) // store recents for 2 hours
if (addDate.getTime() > Date.now()) {
var recentViewTrainLi = document.createElement('li')
var recentViewTrainLink = document.createElement('a')
recentViewTrainLi.appendChild(recentViewTrainLink)
var recentViewTrainLinkUrl = new URL('/view-train.html', window.location.origin)
recentViewTrainLinkUrl.searchParams.append('train', recentViewTrain.trainNumber)
recentViewTrainLinkUrl.searchParams.append('date', recentViewTrain.date)
if (recentViewTrain.groupIndex) {
recentViewTrainLinkUrl.searchParams.append('groupIndex', recentViewTrain.groupIndex)
}
recentViewTrainLink.href = recentViewTrainLinkUrl.toString()
recentViewTrainLink.classList.add('items')
recentViewTrainLink.innerText = `Recent train: ${recentViewTrain.trainNumber}`
fetch(`https://scraper.infotren.dcdev.ro/v3/trains/${recentViewTrain.trainNumber}?date=${recentViewTrain.date}`)
.then(function (result) {
if (result.ok) {
return result.json()
}
})
.then(function (result) {
recentViewTrainLink.innerText = 'Recent train: '
trainIdSpan(result.rank, result.number, recentViewTrainLink)
if (recentViewTrain.groupIndex !== undefined || result.groups.length === 1) {
var group = result.groups[recentViewTrain.groupIndex || 0]
if (group.status) {
if (group.status.delay === 0) {
recentViewTrainLink.appendChild(document.createTextNode(" (on time)"))
}
else if (group.status.delay > 0) {
recentViewTrainLink.appendChild(document.createTextNode(` (${group.status.delay} min late)`))
}
else {
recentViewTrainLink.appendChild(document.createTextNode(` (${-group.status.delay} min early)`))
}
}
}
})
var myTrainLi = document.getElementById("my-train-li")
myTrainLi.parentNode.insertBefore(recentViewTrainLi, myTrainLi.nextSibling)
}
}
}
})

4
sw.js

@ -1,4 +1,4 @@
const VERSION = 'v23' const VERSION = 'v24'
const API_ORIGIN = 'https://scraper.infotren.dcdev.ro/' const API_ORIGIN = 'https://scraper.infotren.dcdev.ro/'
const API_TRAINS = `${API_ORIGIN}v3/trains` const API_TRAINS = `${API_ORIGIN}v3/trains`
const API_STATIONS = `${API_ORIGIN}v3/stations` const API_STATIONS = `${API_ORIGIN}v3/stations`
@ -22,8 +22,10 @@ const CACHE_FIRST = [
// Pages // Pages
'/index.html', '/index.html',
'/index.js',
'/about.html', '/about.html',
'/about.js',
'/train.html', '/train.html',
'/train.js', '/train.js',

21
view-train.js

@ -129,6 +129,14 @@ function onTrainData(data, fetchDate) {
function onAction(e) { function onAction(e) {
var url = new URL(window.location.toString()) var url = new URL(window.location.toString())
groupIndex = i groupIndex = i
if (window.localStorage) {
localStorage.setItem('recent/view-train', JSON.stringify({
trainNumber: trainNumber,
date: date.toISOString(),
groupIndex: groupIndex,
$addDate: new Date().toISOString(),
}))
}
url.searchParams.append('groupIndex', groupIndex) url.searchParams.append('groupIndex', groupIndex)
window.history.pushState({'groupIndex': groupIndex}, '', url.toString( )) window.history.pushState({'groupIndex': groupIndex}, '', url.toString( ))
onTrainData(data) onTrainData(data)
@ -512,6 +520,19 @@ window.addEventListener('load', function (e) {
date = sp.has('date') ? new Date(sp.get('date')) : new Date() date = sp.has('date') ? new Date(sp.get('date')) : new Date()
groupIndex = sp.has('groupIndex') ? parseInt(sp.get('groupIndex')) : null groupIndex = sp.has('groupIndex') ? parseInt(sp.get('groupIndex')) : null
if (window.localStorage) {
var oldRecent = localStorage.getItem('recent/view-train')
if (oldRecent) {
oldRecent = JSON.parse(oldRecent)
}
localStorage.setItem('recent/view-train', JSON.stringify({
trainNumber: trainNumber,
date: date.toISOString(),
groupIndex: oldRecent && oldRecent.trainNumber === trainNumber ? oldRecent.groupIndex : undefined,
$addDate: new Date().toISOString(),
}))
}
document.querySelectorAll('.rsk').forEach(function (rskElem) { document.querySelectorAll('.rsk').forEach(function (rskElem) {
rskElem.addEventListener('click', function (e) { rskElem.addEventListener('click', function (e) {
rsk() rsk()

Loading…
Cancel
Save