Finally also migrate CSV export function
This commit is contained in:
		
							
								
								
									
										69
									
								
								web/view.js
									
									
									
									
									
								
							
							
						
						
									
										69
									
								
								web/view.js
									
									
									
									
									
								
							@ -18,71 +18,34 @@ function exportCSV() {
 | 
			
		||||
 | 
			
		||||
	var startDate = new Date(startInput.value)
 | 
			
		||||
	var endDate   = new Date(endInput.value)
 | 
			
		||||
	var roomRE    = new RegExp(gameInput.value || '.*')
 | 
			
		||||
	var gameRE    = new RegExp(gameInput.value || '.*')
 | 
			
		||||
 | 
			
		||||
	csv = '"ftracker-export",'
 | 
			
		||||
	days = []
 | 
			
		||||
 | 
			
		||||
	var tc = new Date(startDate.getTime())
 | 
			
		||||
	tc.setHours(1,0,0,0)
 | 
			
		||||
	while (tc < endDate) {
 | 
			
		||||
		var isodate = tc.toISOString().split('T')[0]
 | 
			
		||||
		csv += ('"' + isodate + '",')
 | 
			
		||||
		days.push(isodate)
 | 
			
		||||
		tc.setDate(tc.getDate() + 1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	csv = csv.replace(/,$/, '')
 | 
			
		||||
 | 
			
		||||
	csv += '\n'
 | 
			
		||||
	csv = 'timestamp,name,game,checkpoint\n'
 | 
			
		||||
 | 
			
		||||
	for (var [name, list] of Object.entries(data)) {
 | 
			
		||||
 | 
			
		||||
		csv += '"' + name + '"'
 | 
			
		||||
 | 
			
		||||
		for (day of days) {
 | 
			
		||||
		for (entry of list) {
 | 
			
		||||
 | 
			
		||||
			csv += ',"'
 | 
			
		||||
			if (entry.game.match(gameRE) == null)
 | 
			
		||||
				continue
 | 
			
		||||
 | 
			
		||||
			daytexts = []
 | 
			
		||||
			var arrD = new Date(entry.arrival)
 | 
			
		||||
 | 
			
		||||
			for (entry of list) {
 | 
			
		||||
			if (arrD < startDate || arrD > endDate)
 | 
			
		||||
				continue
 | 
			
		||||
 | 
			
		||||
				if (entry.room.match(roomRE) == null)
 | 
			
		||||
					continue
 | 
			
		||||
			var arrTS = localISOTimeSeconds(arrD)
 | 
			
		||||
 | 
			
		||||
				var arrD = new Date(entry.arrival)
 | 
			
		||||
				var depD = entry.departure ? new Date(entry.departure) : new Date()
 | 
			
		||||
 | 
			
		||||
				if (depD < startDate || arrD > endDate)
 | 
			
		||||
					continue
 | 
			
		||||
 | 
			
		||||
				var [arrDay, arrT] = localISOTimeMinutes(arrD).split('T')
 | 
			
		||||
				var [depDay, depT] = localISOTimeMinutes(depD).split('T')
 | 
			
		||||
 | 
			
		||||
				if ((arrDay == day) && (depDay == day)) {
 | 
			
		||||
					daytexts.push(arrT + '-' + depT + ' (' + entry.room + ')')
 | 
			
		||||
				} else if (arrDay == day) {
 | 
			
		||||
					daytexts.push(arrT + '-... (' + entry.room + ')')
 | 
			
		||||
				} else if (depDay == day) {
 | 
			
		||||
					daytexts.push('...-' + depT + ' (' + entry.room + ')')
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			csv += daytexts.join('\n')
 | 
			
		||||
 | 
			
		||||
			csv += '"'
 | 
			
		||||
			csv += `${arrTS},${name},${entry.game},${entry.checkpoint}\n`
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		csv += '\n'
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var element = document.createElement('a');
 | 
			
		||||
	element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(csv));
 | 
			
		||||
	element.setAttribute('download', 'ftracker-export.csv');
 | 
			
		||||
	element.setAttribute('download', 'schnitzeljagd-export.csv');
 | 
			
		||||
	element.style.display = 'none';
 | 
			
		||||
	document.body.appendChild(element);
 | 
			
		||||
	element.click();
 | 
			
		||||
@ -251,12 +214,18 @@ function loadData() {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function localISOTimeMinutes(date) {
 | 
			
		||||
function localISOTimeSeconds(date) {
 | 
			
		||||
 | 
			
		||||
	var tzoffset = date.getTimezoneOffset() * 60000; //offset in milliseconds
 | 
			
		||||
	var localISOTime = (new Date(date - tzoffset)).toISOString().slice(0, -1);
 | 
			
		||||
 | 
			
		||||
	return localISOTime.split(':').slice(0,2).join(':')
 | 
			
		||||
	return localISOTime
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function localISOTimeMinutes(date) {
 | 
			
		||||
 | 
			
		||||
	return localISOTimeSeconds(date).split(':').slice(0,2).join(':')
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user