mirror of
https://codeberg.org/kbruen/kai.infotren.git
synced 2025-06-19 10:42:30 +03:00
Compare commits
4 commits
04e2019afe
...
7645effd5f
Author | SHA1 | Date | |
---|---|---|---|
7645effd5f | |||
a653e92e03 | |||
06e57e5b8b | |||
c0c5f3e7c4 |
7 changed files with 125 additions and 12 deletions
6
base.css
6
base.css
|
@ -255,6 +255,12 @@ body {
|
|||
font-family: -apple-system, BlinkMacSystemFont, Ubuntu, 'Segoe UI', 'Roboto', Sans-Serif, sans-serif;
|
||||
}
|
||||
|
||||
pre {
|
||||
margin: 0;
|
||||
display: inline;
|
||||
font-family: 'Martian Mono', Menlo, Consolas, Monaco, Liberation Mono, Lucida Console, monospace;
|
||||
}
|
||||
|
||||
.tabs {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
|
||||
<script src="/common/worker.js"></script>
|
||||
<script src="/common/items.js"></script>
|
||||
<script src="/common/trainId.js"></script>
|
||||
<script src="index.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>InfoTren</h1>
|
||||
|
@ -19,8 +21,8 @@
|
|||
<div class="content">
|
||||
<ul>
|
||||
<li><a class="items disabled" href="">Train routes</a></li>
|
||||
<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="my-train-li"><a class="items" href="train.html">My train</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>
|
||||
</ul>
|
||||
</div>
|
||||
|
|
58
index.js
Normal file
58
index.js
Normal file
|
@ -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
4
sw.js
|
@ -1,4 +1,4 @@
|
|||
const VERSION = 'v20'
|
||||
const VERSION = 'v24'
|
||||
const API_ORIGIN = 'https://scraper.infotren.dcdev.ro/'
|
||||
const API_TRAINS = `${API_ORIGIN}v3/trains`
|
||||
const API_STATIONS = `${API_ORIGIN}v3/stations`
|
||||
|
@ -22,8 +22,10 @@ const CACHE_FIRST = [
|
|||
|
||||
// Pages
|
||||
'/index.html',
|
||||
'/index.js',
|
||||
|
||||
'/about.html',
|
||||
'/about.js',
|
||||
|
||||
'/train.html',
|
||||
'/train.js',
|
||||
|
|
|
@ -39,7 +39,9 @@ function onStationData(data) {
|
|||
var timeDiv = document.createElement('p')
|
||||
trainItem.appendChild(timeDiv)
|
||||
timeDiv.classList.add('pri', 'time')
|
||||
timeDiv.textContent = new Date(train.time).toLocaleTimeString([], { 'hour': '2-digit', 'minute': '2-digit' })
|
||||
var timeDivPre = document.createElement('pre')
|
||||
timeDiv.appendChild(timeDivPre)
|
||||
timeDivPre.textContent = new Date(train.time).toLocaleTimeString([], { 'hour': '2-digit', 'minute': '2-digit' })
|
||||
|
||||
if (train.status && train.status.delay != 0) {
|
||||
var delayDiv = document.createElement('p')
|
||||
|
@ -61,20 +63,24 @@ function onStationData(data) {
|
|||
|
||||
var rankDiv = document.createElement('p')
|
||||
trainItem.appendChild(rankDiv)
|
||||
rankDiv.textContent = train.train.rank
|
||||
rankDiv.classList.add('sec', 'rank', train.train.rank)
|
||||
var rankDivPre = document.createElement('pre')
|
||||
rankDiv.appendChild(rankDivPre)
|
||||
rankDivPre.textContent = train.train.rank
|
||||
|
||||
var trainDiv = document.createElement('p')
|
||||
trainItem.appendChild(trainDiv)
|
||||
trainDiv.classList.add('pri', 'train')
|
||||
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 trainDivHrefPre = document.createElement('pre')
|
||||
trainDivHref.appendChild(trainDivHrefPre)
|
||||
trainDivHrefPre.textContent = train.train.number
|
||||
|
||||
var terminusDiv = document.createElement('p')
|
||||
trainItem.appendChild(terminusDiv)
|
||||
|
@ -85,7 +91,9 @@ function onStationData(data) {
|
|||
var platformDiv = document.createElement('div')
|
||||
trainItem.appendChild(platformDiv)
|
||||
platformDiv.classList.add('thi', 'platform')
|
||||
platformDiv.textContent = train.status.platform
|
||||
var platformDivPre = document.createElement('pre')
|
||||
platformDiv.appendChild(platformDivPre)
|
||||
platformDivPre.textContent = train.status.platform
|
||||
}
|
||||
|
||||
if (train.status && train.status.cancelled) {
|
||||
|
@ -201,6 +209,12 @@ window.addEventListener('load', function (e) {
|
|||
})
|
||||
})
|
||||
|
||||
if (navigator.canShare && navigator.canShare({ url: '' })) {
|
||||
document.getElementById('title').addEventListener('click', function () {
|
||||
navigator.share({ url: '' });
|
||||
})
|
||||
}
|
||||
|
||||
refresh()
|
||||
|
||||
setInterval(function () {
|
||||
|
|
|
@ -64,7 +64,7 @@
|
|||
align-items: flex-end;
|
||||
}
|
||||
|
||||
.stationItem .arrival, .station .departure {
|
||||
.stationItem .arrival, .stationItem .departure {
|
||||
align-self: center;
|
||||
|
||||
display: flex;
|
||||
|
|
|
@ -129,6 +129,14 @@ function onTrainData(data, fetchDate) {
|
|||
function onAction(e) {
|
||||
var url = new URL(window.location.toString())
|
||||
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)
|
||||
window.history.pushState({'groupIndex': groupIndex}, '', url.toString( ))
|
||||
onTrainData(data)
|
||||
|
@ -285,7 +293,7 @@ function onTrainData(data, fetchDate) {
|
|||
|
||||
var originalArr = document.createElement('p')
|
||||
stationArrival.appendChild(originalArr)
|
||||
var originalArrSpan = document.createElement('span')
|
||||
var originalArrSpan = document.createElement('pre')
|
||||
originalArr.appendChild(originalArrSpan)
|
||||
var arrDate = new Date(station.arrival.scheduleTime)
|
||||
originalArrSpan.textContent = arrDate.toLocaleTimeString([], { 'hour': '2-digit', 'minute': '2-digit' })
|
||||
|
@ -303,11 +311,13 @@ function onTrainData(data, fetchDate) {
|
|||
var actualArr = document.createElement('p')
|
||||
stationArrival.appendChild(actualArr)
|
||||
arrDate.setMinutes(arrDate.getMinutes() + station.arrival.status.delay)
|
||||
actualArr.textContent = arrDate.toLocaleTimeString([], { 'hour': '2-digit', 'minute': '2-digit' })
|
||||
actualArr.classList.add('pri', station.arrival.status.delay > 0 ? 'late' : 'early')
|
||||
if (!station.arrival.status.real) {
|
||||
actualArr.classList.add('not-real')
|
||||
}
|
||||
var actualArrPre = document.createElement('pre')
|
||||
actualArr.appendChild(actualArrPre)
|
||||
actualArrPre.textContent = arrDate.toLocaleTimeString([], { 'hour': '2-digit', 'minute': '2-digit' })
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -319,7 +329,7 @@ function onTrainData(data, fetchDate) {
|
|||
var originalDep = document.createElement('p')
|
||||
stationDeparture.appendChild(originalDep)
|
||||
var depDate = new Date(station.departure.scheduleTime)
|
||||
var originalDepSpan = document.createElement('span')
|
||||
var originalDepSpan = document.createElement('pre')
|
||||
originalDep.appendChild(originalDepSpan)
|
||||
originalDepSpan.textContent = depDate.toLocaleTimeString([], { 'hour': '2-digit', 'minute': '2-digit' })
|
||||
originalDep.classList.add('pri')
|
||||
|
@ -336,11 +346,13 @@ function onTrainData(data, fetchDate) {
|
|||
var actualDep = document.createElement('p')
|
||||
stationDeparture.appendChild(actualDep)
|
||||
depDate.setMinutes(depDate.getMinutes() + station.departure.status.delay)
|
||||
actualDep.textContent = depDate.toLocaleTimeString([], { 'hour': '2-digit', 'minute': '2-digit' })
|
||||
actualDep.classList.add('pri', station.departure.status.delay > 0 ? 'late' : 'early')
|
||||
if (!station.departure.status.real) {
|
||||
actualDep.classList.add('not-real')
|
||||
}
|
||||
var actualDepPre = document.createElement('pre')
|
||||
actualDep.appendChild(actualDepPre)
|
||||
actualDepPre.textContent = depDate.toLocaleTimeString([], { 'hour': '2-digit', 'minute': '2-digit' })
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -508,12 +520,31 @@ window.addEventListener('load', function (e) {
|
|||
date = sp.has('date') ? new Date(sp.get('date')) : new Date()
|
||||
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) {
|
||||
rskElem.addEventListener('click', function (e) {
|
||||
rsk()
|
||||
})
|
||||
})
|
||||
|
||||
if (navigator.canShare && navigator.canShare({ url: '' })) {
|
||||
document.getElementById('title').addEventListener('click', function () {
|
||||
navigator.share({ url: '' });
|
||||
})
|
||||
}
|
||||
|
||||
var content = document.getElementsByClassName('content')[0]
|
||||
content.focus()
|
||||
content.addEventListener('keydown', function (e) {
|
||||
|
|
Loading…
Add table
Reference in a new issue