You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
2.8 KiB
110 lines
2.8 KiB
3 years ago
|
var knownTrains = []
|
||
|
|
||
|
function goToTrain(number) {
|
||
|
var url = new URL(window.location.href)
|
||
|
url.pathname = 'view-train.html'
|
||
|
url.searchParams.set('train', number)
|
||
|
url.searchParams.set('date', new Date().toISOString())
|
||
|
window.location.href = url.toString()
|
||
|
}
|
||
|
|
||
|
var _rebuildDebounce = null
|
||
|
var _rebuildRequested = false
|
||
|
function rebuildSuggestions() {
|
||
|
if (_rebuildDebounce !== null) {
|
||
|
_rebuildRequested = true
|
||
|
return
|
||
|
}
|
||
|
|
||
|
_rebuildRequested = false
|
||
|
_rebuildDebounce = 123
|
||
|
|
||
|
var suggestionsArea = document.getElementById('suggestionsArea')
|
||
|
while (suggestionsArea.childNodes.length > 0) {
|
||
|
suggestionsArea.childNodes[0].remove()
|
||
|
}
|
||
|
|
||
|
var trainNumberInput = document.getElementById('trainNumber')
|
||
|
var trainNumber = trainNumberInput.value.trim()
|
||
|
|
||
|
var suggestions = []
|
||
|
for (var i = 0; i < knownTrains.length; i++) {
|
||
|
if (trainNumber) {
|
||
|
if (!knownTrains[i].number.includes(trainNumber)) {
|
||
|
continue
|
||
|
}
|
||
|
}
|
||
|
suggestions.push(knownTrains[i])
|
||
|
}
|
||
|
|
||
|
suggestions.forEach(function (suggestion, index) {
|
||
|
var suggestionLi = document.createElement('li')
|
||
|
suggestionsArea.appendChild(suggestionLi)
|
||
|
|
||
|
setTimeout(function () {
|
||
|
suggestionLi.classList.add('items')
|
||
|
suggestionLi.tabIndex = index + 1
|
||
|
suggestionLi.style.padding = '2px 0'
|
||
|
|
||
|
function onAction(e) {
|
||
|
goToTrain(suggestion.number)
|
||
|
}
|
||
|
suggestionLi.addEventListener('click', onAction)
|
||
|
suggestionLi.addEventListener('keypress', function (e) {
|
||
|
if (e.key == 'Enter') {
|
||
|
onAction(e)
|
||
|
}
|
||
|
})
|
||
|
|
||
|
var trainNameP = document.createElement('p')
|
||
|
suggestionLi.appendChild(trainNameP)
|
||
|
|
||
|
trainNameP.textContent = `${suggestion.rank} ${suggestion.number}`
|
||
|
trainNameP.classList.add('pri', 'trainName')
|
||
|
|
||
|
var trainCompanyP = document.createElement('p')
|
||
|
suggestionLi.appendChild(trainCompanyP)
|
||
|
|
||
|
trainCompanyP.textContent = suggestion.company
|
||
|
trainCompanyP.classList.add('thi')
|
||
|
}, 0)
|
||
|
})
|
||
|
|
||
|
setTimeout(function () {
|
||
|
_rebuildDebounce = null
|
||
|
if (_rebuildRequested) {
|
||
|
rebuildSuggestions()
|
||
|
}
|
||
|
}, 500)
|
||
|
}
|
||
|
|
||
|
window.addEventListener('load', function (e) {
|
||
|
var trainNumber = document.getElementById('trainNumber')
|
||
|
trainNumber.addEventListener('input', function (e) {
|
||
|
rebuildSuggestions()
|
||
|
})
|
||
|
trainNumber.addEventListener('focus', function (e) {
|
||
|
document.getElementsByClassName('csk')[0].textContent = 'Search'
|
||
|
})
|
||
|
trainNumber.addEventListener('blur', function (e) {
|
||
|
document.getElementsByClassName('csk')[0].textContent = 'Select'
|
||
|
})
|
||
|
trainNumber.addEventListener('keypress', function (e) {
|
||
|
if (e.key == 'Enter') {
|
||
|
goToTrain(trainNumber.value.trim())
|
||
|
}
|
||
|
})
|
||
|
|
||
|
fetch('https://scraper.infotren.dcdev.ro/v2/trains')
|
||
|
.then(function (response) {
|
||
|
return response.json()
|
||
|
})
|
||
|
.then(function (response) {
|
||
|
knownTrains = response
|
||
|
knownTrains.sort(function(a, b) { return a.number - b.number })
|
||
|
})
|
||
|
.then(function () {
|
||
|
rebuildSuggestions()
|
||
|
})
|
||
|
})
|