Add support for IC trains
This commit is contained in:
		
							parent
							
								
									255dae9dec
								
							
						
					
					
						commit
						220f6666a5
					
				
					 12 changed files with 68 additions and 20 deletions
				
			
		
							
								
								
									
										13
									
								
								base.css
									
										
									
									
									
								
							
							
						
						
									
										13
									
								
								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;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										0
									
								
								common/tabs.js
									
										
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										0
									
								
								common/tabs.js
									
										
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
								
								
									
										30
									
								
								common/trainId.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								common/trainId.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
/**
 | 
			
		||||
 * Create <span class="{IR|IC|}">IR|IRN|IC|R|R-E</span> <span>74</span> 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
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										8
									
								
								sw.js
									
										
									
									
									
								
							
							
						
						
									
										8
									
								
								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 {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,6 +13,7 @@
 | 
			
		|||
	<script src="/common/worker.js"></script>
 | 
			
		||||
	<script defer src="/common/back.js"></script>
 | 
			
		||||
	<script defer src="/common/items.js"></script>
 | 
			
		||||
	<script defer src="/common/trainId.js"></script>
 | 
			
		||||
	<script defer src="train.js"></script>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								train.js
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								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')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,3 @@
 | 
			
		|||
.IR, .IRN {
 | 
			
		||||
	color: red !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.early {
 | 
			
		||||
	color: green !important;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,6 +15,7 @@
 | 
			
		|||
	<script defer src="/common/back.js"></script>
 | 
			
		||||
	<script defer src="/common/items.js"></script>
 | 
			
		||||
	<script defer src="/common/tabs.js"></script>
 | 
			
		||||
	<script defer src="/common/trainId.js"></script>
 | 
			
		||||
	<script defer src="view-station.js"></script>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,3 @@
 | 
			
		|||
.IR, .IRN {
 | 
			
		||||
	color: red;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.early {
 | 
			
		||||
	color: green;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,6 +14,7 @@
 | 
			
		|||
	<script src="/common/worker.js"></script>
 | 
			
		||||
	<script defer src="/common/back.js"></script>
 | 
			
		||||
	<script defer src="/common/items.js"></script>
 | 
			
		||||
	<script defer src="/common/trainId.js"></script>
 | 
			
		||||
	<script defer src="view-train.js"></script>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue