-
-
Notifications
You must be signed in to change notification settings - Fork 9
/
template.html
96 lines (78 loc) · 3.66 KB
/
template.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Mr. OTCS Schedule</title>
</head>
<body>
Times are converted to your local time zone: <div id="timezone"></div>
<br /><br />
<div id="previouslyon"></div>
<h3>Now playing:</h3>
<div id="nowplaying"></div>
<br />
<h3>Coming up next:</h3>
<div id="comingupnext"></div>
<p>Generated by <a href="https://github.com/TheOpponent/mr-otcs" target="_blank">Mr. OTCS</a> version <span id="scriptversion"></span>. Time zone conversion provided by <a href="https://day.js.org" target="_blank">Day.js</a>.</p>
<script src="https://cdn.jsdelivr.net/combine/npm/dayjs@1,npm/dayjs@1/plugin/timezone.min.js,npm/dayjs@1/plugin/utc.min.js,npm/dayjs@1/plugin/localizedFormat.min.js"></script>
<script>
dayjs.extend(window.dayjs_plugin_utc);
dayjs.extend(window.dayjs_plugin_timezone);
dayjs.extend(window.dayjs_plugin_localizedFormat);
var timezone = dayjs.tz.guess();
var offset = dayjs().utcOffset();
document.getElementById("timezone").innerHTML = timezone;
function writeRow(i) {
var time = new dayjs.utc(i.time).tz(timezone).format('LT');
if (i.type == "normal") {
return [
'<div class="grid">', time, ' - <strong>', i.name, '</strong> <i>', i.extra_info, '</i><br />Length: ',secondsToTimeString(i.length),'</div>', '<br />',
].join('');
// Default extra line type handling creates a header row in the table.
} else if (i.type == "extra") {
return [
'<div class="gridname"><hr /><i>', i.extra_info, '</i><hr /></div>',
'<br />',
].join('');
}};
function secondsToTimeString(seconds) {
seconds = Number(seconds)
var hr = Math.floor(seconds / 3600)
var min = Math.floor(seconds % 3600 / 60)
var sec = Math.floor(seconds % 3600 % 60)
return (hr > 0 ? hr.toString() + ":" : "") + (min.toString().padStart(2,"0")) + ":" + (sec.toString().padStart(2,"0"))
}
var request = new XMLHttpRequest();
var json_exported = "";
request.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
json_exported = JSON.parse(request.responseText);
var previous_names = json_exported["previous_files"];
var names = json_exported["coming_up_next"];
// Populate times array with starting times and names of upcoming videos.
var previous_times = [""];
var times = [""];
// Add first entry. If it's not a normal line, append further entries
// until a normal line is added.
var i = "";
do {
i = names[0].type;
times[0] += writeRow(names.shift());
}
while (i != "normal");
times = times.concat(names.map(writeRow));
// Only write "Previously" section if previous_files information was passed in.
if (previous_names.length > 0) {
previous_times = previous_times.concat(previous_names.map(writeRow));
document.getElementById("previouslyon").innerHTML = "Previously: " + previous_times.join("");
};
document.getElementById("nowplaying").innerHTML = times[0];
document.getElementById("comingupnext").innerHTML = times.slice(1).join("");
document.getElementById("scriptversion").innerHTML = json_exported["script_version"];
}
};
request.open("GET", "./schedule.json", true);
request.send();
</script>
</body>
</html>