site/schedule/index.php

122 lines
3.8 KiB
PHP
Raw Normal View History

2020-06-18 06:21:52 +00:00
<?php
2021-09-13 00:13:59 +00:00
$additional_head='<link rel="stylesheet" href="/css/calendar.css">
<link rel="alternate" type="text/calendar" href="https://tilderadio.org/schedule/ics.php">';
include __DIR__ . '/../header.php';
2020-07-03 01:53:12 +00:00
include 'schedule.php';
2020-06-18 06:21:52 +00:00
?>
2021-09-13 00:13:59 +00:00
<p>
all times in UTC. current time is <span id="utcdate"><?=formatdate("now")?></span>
<span class="pointer-label-wrapper">(</span><span class="pointer-label">&mdash;</span><span class="pointer-label-wrapper">)</span>.
</p>
<p>
this schedule is also available in <a href="https://icalendar.org/validator.html?url=https://tilderadio.org/schedule/ics.php">iCalendar format</a>.
point your calendar client at <code>https://tilderadio.org/schedule/ics.php</code>.
</p>
2020-06-18 06:21:52 +00:00
<?php
include 'calendar.php';
?>
<table class="table table-striped">
<thead>
<tr>
<th>dj</th>
<th>start</th>
<th>end</th>
</tr>
</thead>
<tbody>
<?php foreach ($schedule as $item): ?>
<tr>
2020-06-23 05:25:49 +00:00
<td><?=$item["title"]?></td>
<td><?=formatdate($item["start"])?></td>
<td><?=formatdate($item["end"])?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
2020-06-18 04:07:03 +00:00
<script>
2021-05-30 04:14:46 +00:00
let halfHour = 1800000;
// Gather schedule table cells by timestamp
const cells = document.querySelectorAll('.calendar tbody td');
let ranges = [];
for (const cell of Array.from(cells)) {
const m = /^show-(\d*)$/.exec(cell.id);
if (!m) continue;
ranges.push({
startTime: m[1]*1000,
cell,
});
}
ranges.sort((a, b) => {
return a.startTime - b.startTime;
});
let currentRangeI = 0;
function getCurrentRange(now) {
for (i = currentRangeI; i < ranges.length; i++) {
const range = ranges[i];
2021-06-08 02:29:04 +00:00
if (!range) continue;
2021-05-30 04:14:46 +00:00
const rangeStart = range.startTime;
if (rangeStart <= now && (rangeStart + halfHour) > now) {
return range;
}
}
}
// Update the timer and pointer as time passes.
// Because PHP gives the time on page load, people who disable Javascript won't be missing out on much.
2021-09-13 00:13:59 +00:00
let months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
let daysOfWeek = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
function update_date() {
var d = new Date();
2021-09-13 00:13:59 +00:00
document.getElementById("utcdate").innerText =
daysOfWeek[d.getUTCDay()] + " " + months[d.getUTCMonth()] + " " +
d.getUTCDate().toString() + " " + d.getUTCHours().toString().padStart(2,'0') +
":" + d.getUTCMinutes().toString().padStart(2,'0');
setTimeout(update_date, 15000);
2021-05-30 04:14:46 +00:00
updatePointer(d);
}
2021-09-13 00:13:59 +00:00
setTimeout(update_date, 15000);
2021-05-30 04:14:46 +00:00
let pointer = document.getElementById("pointer");
// Create pointer in case it wasn't added in the page generation.
if (!pointer) {
pointer = document.createElement('div');
pointer.id = 'pointer';
}
2021-06-08 02:29:04 +00:00
let prevRange = getCurrentRange(new Date().getTime());
2021-05-30 04:14:46 +00:00
function updatePointer(d) {
// Find current cell
const range = getCurrentRange(d.getTime());
if (!range) {
// Done with schedule. Remove pointer. Need to refresh.
if (prevRange) {
prevRange.cell.removeChild(pointer);
2021-06-08 02:29:04 +00:00
prevRange.cell.classList.remove('active');
2021-05-30 04:14:46 +00:00
prevRange = null;
}
2021-06-08 02:29:04 +00:00
return;
2021-05-30 04:14:46 +00:00
}
// Move pointer to different cell if changed cell.
if (range !== prevRange) {
2021-06-08 02:29:04 +00:00
if (prevRange) prevRange.cell.classList.remove('active');
2021-06-08 00:39:30 +00:00
range.cell.classList.add('active');
2021-05-30 04:14:46 +00:00
range.cell.appendChild(pointer);
2021-06-08 02:29:04 +00:00
prevRange = range;
2021-05-30 04:14:46 +00:00
}
// Move pointer based on time in current cell.
const progress = (d.getTime() - range.startTime) / halfHour;
2021-09-13 00:13:59 +00:00
pointer.style.top = (progress * (range.cell.offsetHeight - 1)).toFixed(0) + 'px';
2021-05-30 04:14:46 +00:00
}
// Update pointer immediately
updatePointer(new Date());
</script>
2021-09-13 00:13:59 +00:00
<?php include __DIR__.'/../footer.php'; ?>