This commit is contained in:
Kai Vogelgesang
2025-09-18 18:33:58 +02:00
commit 489ddd75b9
76 changed files with 46624555 additions and 0 deletions

View File

@@ -0,0 +1,14 @@
.reveal .headerlink,
.reveal .copybtn {
display: none;
}
.reveal .highlight > pre {
width: 100%;
}
.reveal .past[hidden],
.reveal .present[hidden],
.reveal .future[hidden] {
display: block !important;
}

View File

@@ -0,0 +1,145 @@
const getContent = (el) => {
let result = [];
for (const child of el.children) {
if (child.tagName.toLowerCase() === "section") {
result.push(...getContent(child));
} else {
result.push(child);
}
}
return result;
};
const contentToCells = (elements) => {
/*
type Cell = {
slideType: "slide" | "subslide" | "fragment" | "notes" | "skip" | "",
children: HTMLElement[],
}
*/
let cells = [];
let currentCell;
for (const child of elements) {
if (child.tagName.toLowerCase() === "script" && child.dataset.hasOwnProperty("cellMeta")) {
const meta = JSON.parse(child.innerText);
let slideType = (meta.slideshow || {}).slide_type;
currentCell = {
slideType: ((slideType === undefined) || (slideType == '-')) ? '' : slideType,
children: [],
};
cells.push(currentCell);
} else {
if (currentCell === undefined) continue;
currentCell.children.push(child);
}
}
return cells;
};
const startPresentation = () => {
console.log("starting presentation...");
// TODO this feels hacky
const realroot = document.querySelector(".container-xl");
let fakeroot = document.createElement("div");
fakeroot.style.width = "100vw";
fakeroot.style.height = "100vh";
fakeroot.style.position = "absolute";
fakeroot.style.left = 0;
fakeroot.style.top = 0;
// create .reveal > .slides > section structure
let revealDiv = document.createElement("div");
revealDiv.classList.add("reveal");
fakeroot.appendChild(revealDiv);
let revealSlides = document.createElement("div");
revealSlides.classList.add("slides");
revealDiv.appendChild(revealSlides);
// get content
const main = document.getElementById("main-content");
const mainDiv = main.children[0];
let content = getContent(mainDiv);
// see https://github.com/damianavila/RISE/blob/5.7.1/classic/rise/static/main.js#L219
let slide_counter = -1, subslide_counter = -1;
let slide_section, subslide_section;
function new_slide() {
slide_counter += 1;
subslide_counter = -1;
let element = document.createElement("section");
revealSlides.appendChild(element);
return element;
}
function new_subslide() {
subslide_counter += 1;
let element = document.createElement("section");
element.id = `slide-${slide_counter}-${subslide_counter}`;
slide_section.appendChild(element);
return element;
}
let content_on_slide1 = false;
slide_section = new_slide();
subslide_section = new_subslide();
let current_fragment = subslide_section;
let cells = contentToCells(content);
for (let cell of cells) {
// update slide structure
if (content_on_slide1) {
if (cell.slideType === 'slide') {
slide_section = new_slide();
current_fragment = subslide_section = new_subslide();
} else if (cell.slideType === 'subslide') {
current_fragment = subslide_section = new_subslide();
} else if (cell.slideType === 'fragment') {
cell.fragment_div = current_fragment = document.createElement("div");
cell.fragment_div.classList.add("fragment");
subslide_section.appendChild(cell.fragment_div);
}
} else if (cell.slideType !== "notes" && cell.slideType !== "skip") {
content_on_slide1 = true;
}
// add cell content to slides
if (cell.slideType === "notes") {
let aside = document.createElement("aside");
aside.classList.add("notes");
for (let child of cell.children) {
aside.appendChild(child);
}
subslide_section.appendChild(aside);
} else if (cell.slideType !== "skip") {
for (let child of cell.children) {
current_fragment.appendChild(child);
}
}
}
document.body.appendChild(fakeroot);
realroot.style.display = "none";
console.log("fakeroot ready, initializing reveal");
let deck = new Reveal(revealDiv, {
overview: false,
});
deck.initialize();
}

View File

@@ -0,0 +1,30 @@
/* http://meyerweb.com/eric/tools/css/reset/
v4.0 | 20180602
License: none (public domain)
*/
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
main, menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, main, menu, nav, section {
display: block;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,360 @@
/**
* A simple theme for reveal.js presentations, similar
* to the default theme. The accent color is darkblue.
*
* This theme is Copyright (C) 2012 Owen Versteeg, https://github.com/StereotypicalApps. It is MIT licensed.
* reveal.js is Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
*/
@import url(https://fonts.googleapis.com/css?family=News+Cycle:400,700);
@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
section.has-dark-background, section.has-dark-background h1, section.has-dark-background h2, section.has-dark-background h3, section.has-dark-background h4, section.has-dark-background h5, section.has-dark-background h6 {
color: #fff;
}
/*********************************************
* GLOBAL STYLES
*********************************************/
:root {
--r-background-color: #fff;
--r-main-font: Lato, sans-serif;
--r-main-font-size: 40px;
--r-main-color: #000;
--r-block-margin: 20px;
--r-heading-margin: 0 0 20px 0;
--r-heading-font: News Cycle, Impact, sans-serif;
--r-heading-color: #000;
--r-heading-line-height: 1.2;
--r-heading-letter-spacing: normal;
--r-heading-text-transform: none;
--r-heading-text-shadow: none;
--r-heading-font-weight: normal;
--r-heading1-text-shadow: none;
--r-heading1-size: 3.77em;
--r-heading2-size: 2.11em;
--r-heading3-size: 1.55em;
--r-heading4-size: 1em;
--r-code-font: monospace;
--r-link-color: #00008B;
--r-link-color-dark: #00003f;
--r-link-color-hover: #0000f1;
--r-selection-background-color: rgba(0, 0, 0, 0.99);
--r-selection-color: #fff;
}
.reveal-viewport {
background: #fff;
background-color: var(--r-background-color);
}
.reveal {
font-family: var(--r-main-font);
font-size: var(--r-main-font-size);
font-weight: normal;
color: var(--r-main-color);
}
.reveal ::selection {
color: var(--r-selection-color);
background: var(--r-selection-background-color);
text-shadow: none;
}
.reveal ::-moz-selection {
color: var(--r-selection-color);
background: var(--r-selection-background-color);
text-shadow: none;
}
.reveal .slides section,
.reveal .slides section > section {
line-height: 1.3;
font-weight: inherit;
}
/*********************************************
* HEADERS
*********************************************/
.reveal h1,
.reveal h2,
.reveal h3,
.reveal h4,
.reveal h5,
.reveal h6 {
margin: var(--r-heading-margin);
color: var(--r-heading-color);
font-family: var(--r-heading-font);
font-weight: var(--r-heading-font-weight);
line-height: var(--r-heading-line-height);
letter-spacing: var(--r-heading-letter-spacing);
text-transform: var(--r-heading-text-transform);
text-shadow: var(--r-heading-text-shadow);
word-wrap: break-word;
}
.reveal h1 {
font-size: var(--r-heading1-size);
}
.reveal h2 {
font-size: var(--r-heading2-size);
}
.reveal h3 {
font-size: var(--r-heading3-size);
}
.reveal h4 {
font-size: var(--r-heading4-size);
}
.reveal h1 {
text-shadow: var(--r-heading1-text-shadow);
}
/*********************************************
* OTHER
*********************************************/
.reveal p {
margin: var(--r-block-margin) 0;
line-height: 1.3;
}
/* Remove trailing margins after titles */
.reveal h1:last-child,
.reveal h2:last-child,
.reveal h3:last-child,
.reveal h4:last-child,
.reveal h5:last-child,
.reveal h6:last-child {
margin-bottom: 0;
}
/* Ensure certain elements are never larger than the slide itself */
.reveal img,
.reveal video,
.reveal iframe {
max-width: 95%;
max-height: 95%;
}
.reveal strong,
.reveal b {
font-weight: bold;
}
.reveal em {
font-style: italic;
}
.reveal ol,
.reveal dl,
.reveal ul {
display: inline-block;
text-align: left;
margin: 0 0 0 1em;
}
.reveal ol {
list-style-type: decimal;
}
.reveal ul {
list-style-type: disc;
}
.reveal ul ul {
list-style-type: square;
}
.reveal ul ul ul {
list-style-type: circle;
}
.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
display: block;
margin-left: 40px;
}
.reveal dt {
font-weight: bold;
}
.reveal dd {
margin-left: 40px;
}
.reveal blockquote {
display: block;
position: relative;
width: 70%;
margin: var(--r-block-margin) auto;
padding: 5px;
font-style: italic;
background: rgba(255, 255, 255, 0.05);
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);
}
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
display: inline-block;
}
.reveal q {
font-style: italic;
}
.reveal pre {
display: block;
position: relative;
width: 90%;
margin: var(--r-block-margin) auto;
text-align: left;
font-size: 0.55em;
font-family: var(--r-code-font);
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.15);
}
.reveal code {
font-family: var(--r-code-font);
text-transform: none;
tab-size: 2;
}
.reveal pre code {
display: block;
padding: 5px;
overflow: auto;
max-height: 400px;
word-wrap: normal;
}
.reveal .code-wrapper {
white-space: normal;
}
.reveal .code-wrapper code {
white-space: pre;
}
.reveal table {
margin: auto;
border-collapse: collapse;
border-spacing: 0;
}
.reveal table th {
font-weight: bold;
}
.reveal table th,
.reveal table td {
text-align: left;
padding: 0.2em 0.5em 0.2em 0.5em;
border-bottom: 1px solid;
}
.reveal table th[align=center],
.reveal table td[align=center] {
text-align: center;
}
.reveal table th[align=right],
.reveal table td[align=right] {
text-align: right;
}
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none;
}
.reveal sup {
vertical-align: super;
font-size: smaller;
}
.reveal sub {
vertical-align: sub;
font-size: smaller;
}
.reveal small {
display: inline-block;
font-size: 0.6em;
line-height: 1.2em;
vertical-align: top;
}
.reveal small * {
vertical-align: top;
}
.reveal img {
margin: var(--r-block-margin) 0;
}
/*********************************************
* LINKS
*********************************************/
.reveal a {
color: var(--r-link-color);
text-decoration: none;
transition: color 0.15s ease;
}
.reveal a:hover {
color: var(--r-link-color-hover);
text-shadow: none;
border: none;
}
.reveal .roll span:after {
color: #fff;
background: var(--r-link-color-dark);
}
/*********************************************
* Frame helper
*********************************************/
.reveal .r-frame {
border: 4px solid var(--r-main-color);
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
}
.reveal a .r-frame {
transition: all 0.15s linear;
}
.reveal a:hover .r-frame {
border-color: var(--r-link-color);
box-shadow: 0 0 20px rgba(0, 0, 0, 0.55);
}
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls {
color: var(--r-link-color);
}
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2);
color: var(--r-link-color);
}
/*********************************************
* PRINT BACKGROUND
*********************************************/
@media print {
.backgrounds {
background-color: var(--r-background-color);
}
}