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