Skip to content

Commit dd203e2

Browse files
author
Morton Swimmer
committed
aded breaks to the schedule
1 parent b9674ac commit dd203e2

File tree

1 file changed

+90
-35
lines changed

1 file changed

+90
-35
lines changed

docs/intermission.html

Lines changed: 90 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,33 @@
1+
<!-- LTeX: enabled=false -->
12
<!doctype html>
23
<html>
34
<head>
45
<meta charset="utf-8">
56
<title>Reveal.js Auto-Advancing Slideshow</title>
6-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reveal.js/dist/reveal.css">
7-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reveal.js/dist/theme/black.css" id="theme">
7+
<link rel="stylesheet" href="../dist/reveal.css">
8+
<link rel="stylesheet" href="../dist/theme/black.css" id="theme">
89
<style>
9-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reveal.js/dist/reveal.css">
10-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reveal.js/dist/theme/black.css" id="theme">
10+
<link rel="stylesheet" href="../dist/reveal.css">
11+
<link rel="stylesheet" href="../dist/theme/black.css" id="theme">
1112
body {
1213
background-color: #00d298;
14+
15+
}
16+
table.schedule-table {
17+
font-size: 12pt;
18+
width: 100%;
19+
margin: 0 auto;
20+
border-collapse: collapse;
21+
text-decoration: none;
1322
}
23+
1424
</style>
1525
</head>
1626
<body>
17-
<script src="dist/reveal.js"></script>
18-
<script src="plugin/notes/notes.js"></script>
19-
<script src="plugin/markdown/markdown.js"></script>
20-
<script src="plugin/highlight/highlight.js"></script>
27+
<script src="../dist/reveal.js"></script>
28+
<script src="../plugin/notes/notes.js"></script>
29+
<script src="../plugin/markdown/markdown.js"></script>
30+
<script src="../plugin/highlight/highlight.js"></script>
2131
<div class="reveal">
2232
<div class="slides">
2333
<section
@@ -28,35 +38,12 @@
2838
<h2>Slide 1</h2>
2939
<p>This slide auto-advances every 5 seconds.</p>
3040
</section>
31-
<section
41+
<section id="schedule"
3242
data-background-color=#00d298
3343
data-background-image="https://www.elbsides.eu/assets/2025/logos/Elbsides%202025%20strong%20lines%20animated.svg"
3444
data-background-position="top right"
3545
data-background-size="20%"
36-
data-markdown>
37-
<textarea data-template>
38-
| start time | speaker | title |
39-
| ------------ | --------- | ----- |
40-
| 09:00 | | [Conference Opening](#conference-opening) |
41-
| 09:15 | [Mikko Hyppönen](#mikko-hyppönen) | [Opening Keynote: What I've Learned](#opening-keynote-what-ive-learned) |
42-
| 09:45 | [Andrea Ercolino](#andrea-ercolino) | [A tale of nefarious usage: IPv6 based Covert Channels](#a-tale-of-nefarious-usage-ipv6-based-covert-channels) |
43-
| 10:15 | [Lars Fischer](#lars-fischer) | [Internet Message-Protection using Certificates and (not yet) Transformation](#internet-message-protection-using-certificates-and-not-yet-transformation) |
44-
| 10:45 | &nbsp; | morning break |
45-
| 11:15 | [Sewar Khalifeh](#sewar-khalifeh) | [From Unrestricted Uploads to Security Nightmares: Preventing and Mitigating File Upload Vulnerabilities](#from-unrestricted-uploads-to-security-nightmares-preventing-and-mitigating-file-upload-vulnerabilities) |
46-
| 11:45 | [Max Maaß](#max-maaß) | [Why Defensive Software Architecture is Important, or: How to Compromise a Payment Processor using Math](#why-defensive-software-architecture-is-important-or-how-to-compromise-a-payment-processor-using-math) |
47-
| 12:15 | [Igor Stepansky](#igor-stepansky), [Michael Goberman](#michael-goberman) | [Breaking the CI/CD Chain: Security Risks in GitHub Actions](#breaking-the-cicd-chain-security-risks-in-github-actions) |
48-
| 12:45 | &nbsp; | lunch break |
49-
| 13:45 | [Jasmin Mair](#jasmin-mair), [Lukas Mika](#lukas-mika) | [SBOMs – A Tragicomedy in Three Acts](#sboms--a-tragicomedy-in-three-acts) |
50-
| 14:15 | [Andrey Voitenko](#andrey-voitenko) | [The Ongoing Challenge of Phishing: Examining Attack Vectors and Exploring Defense Improvements](#the-ongoing-challenge-of-phishing-examining-attack-vectors-and-exploring-defense-improvements) |
51-
| 14:45 | [Sarah Pauli](#sarah-pauli) | [Effects and dynamics of Cybercrime on cyberprofessionals in the workfield. How can we optimize the workplace for our guards in Cybersecurity?](#effects-and-dynamics-of-cybercrime-on-cyberprofessionals-in-the-workfield-how-can-we-optimize-the-workplace-for-our-guards-in-cybersecurity) |
52-
| 15:15 | &nbsp; | afternoon break |
53-
| 15:45 | [Malte Wessels](#malte-wessels) | [HyTrack: Tracking You Across Apps and the Web Hydra-Style](#hytrack-tracking-you-across-apps-and-the-web-hydra-style) |
54-
| 16:15 | [Chris Traynor](#chris-traynor) | [Pentest Pains](#pentest-pains) |
55-
| 16:45 | [Christian Kollee](#christian-kollee), [Yasin Tas](#yasin-tas) | [From OneDrive Access to System Compromise](#from-onedrive-access-to-system-compromise) |
56-
| 17:15 | [Axelle Apvrille](#axelle-apvrille) | [Closing Keynote: Malware, Meet AI: Friend or Foe?](#closing-keynote-malware-meet-ai-friend-or-foe) |
57-
| 17:45 | | [Conference Closing](#conference-closing) |
58-
| 18:00 | | [Networking Hour](#networking-hour) |
59-
</textarea>
46+
>
6047
</section>
6148
<section
6249
data-background-color=#00d298
@@ -68,8 +55,6 @@ <h2>Slide 3</h2>
6855
</section>
6956
</div>
7057
</div>
71-
72-
<script src="https://cdn.jsdelivr.net/npm/reveal.js/dist/reveal.js"></script>
7358
<script>
7459
Reveal.initialize({
7560
transition: 'fade',
@@ -78,5 +63,75 @@ <h2>Slide 3</h2>
7863
loop: true
7964
});
8065
</script>
66+
<script>
67+
// Function to format time in HH:MM format
68+
function formatTime(dateString) {
69+
const date = new Date(dateString);
70+
return date.toTimeString().substring(0, 5);
71+
}
72+
73+
// Function to create schedule from JSON data
74+
function createSchedule(data) {
75+
const days = data.schedule.conference.days;
76+
let scheduleHTML = '<h2>Schedule Overview</h2>';
77+
78+
// Create a table for each day
79+
days.forEach(day => {
80+
// scheduleHTML += `<h3>${new Date(day.day_start).toLocaleDateString('en-US', { weekday: 'long', month: 'long', day: 'numeric' })}</h3>`;
81+
scheduleHTML += '<table class="schedule-table">';
82+
scheduleHTML += '<tr><th>Time</th><th>Speaker</th><th>Title</th></tr>';
83+
84+
// Process all rooms/tracks for the day
85+
Object.keys(day.rooms).forEach(room => {
86+
// Only process events for Elbkuppel room
87+
if (room !== "Elbkuppel") {
88+
return;
89+
}
90+
const events = day.rooms[room];
91+
let lastTime = null;
92+
events.forEach(event => {
93+
const startTime = event.start;
94+
const start = new Date(event.start);
95+
const duration = new Date(event.duration)
96+
const [startM, startS] = event.start.split(':').map(Number);
97+
const [durM, durS] = event.duration.split(':').map(Number);
98+
const totalSeconds = startM * 60 + startS + durM * 60 + durS;
99+
const endM = Math.floor(totalSeconds / 60);
100+
const endS = totalSeconds % 60;
101+
const endTime = `${endM.toString().padStart(2, '0')}:${endS.toString().padStart(2, '0')}`;
102+
console.log(`Start: ${startTime}, Duration: ${event.duration}, End: ${endTime}`);
103+
const title = event.title;
104+
const persons = event.persons.map(person => person.public_name).join(', ');
105+
if (lastTime && lastTime !== startTime) {
106+
scheduleHTML += `<tr>
107+
<td>${lastTime}</td>
108+
<td>-</td>
109+
<td>break</td>
110+
</tr>`;
111+
}
112+
scheduleHTML += `<tr>
113+
<td>${startTime}</td>
114+
<td>${persons}</td>
115+
<td>${title}</td>
116+
</tr>`;
117+
118+
lastTime = endTime;
119+
});
120+
});
121+
scheduleHTML += '</table>';
122+
});
123+
124+
document.getElementById('schedule').innerHTML = scheduleHTML;
125+
}
126+
127+
// Fetch and process the schedule data
128+
fetch('https://pretalx.com/elbsides-2025/schedule/export/schedule.json')
129+
.then(response => response.json())
130+
.then(data => createSchedule(data))
131+
.catch(error => {
132+
console.error('Error loading schedule:', error);
133+
document.getElementById('schedule-content').innerHTML = 'Unable to load schedule data.';
134+
});
135+
</script>
81136
</body>
82137
</html>

0 commit comments

Comments
 (0)