refactor: rename modules and update migration docs

BREAKING CHANGE
Module paths moved to `github.com/HugoBlox/kit` with new names:
- core `blox-tailwind` → `blox`
- analytics → `analytics`
- netlify → `integrations/netlify`
- slides (reveal) → `slides`
Update go.mod, module.yaml/params, scripts, tests, and v0.11 migration guide accordingly.
This commit is contained in:
George Cushen committed 2026-01-02 20:59:48 +00:00
1 parent e7e0c714d3
commit f4280ddb1c
566 files changed
+134 -151

No files matched your search

+21
View File
@@ -0,0 +1,21 @@
# Slides module (Reveal.js)
A Hugo Blox module for [Reveal.JS](https://revealjs.com/).
Empowers you to easily create, share, and present slide decks using the open, future-proof Markdown standard.
Supports math, syntax highlighting, diagrams, speaker notes, and much more!
## Install
1. Add the module to your `config/_default/config.yaml`:
```yaml
module:
imports:
- path: github.com/HugoBlox/kit/modules/slides
```
## Usage
[View the documentation](https://docs.hugoblox.com/content/slides/)
@@ -0,0 +1,256 @@
/* Background */ .bg {
color: #f8f8f2;
background-color: #282a36;
}
/* PreWrapper */ .chroma {
color: #f8f8f2;
background-color: #282a36;
}
/* Other */ .chroma .x {
}
/* Error */ .chroma .err {
}
/* CodeLine */ .chroma .cl {
}
/* LineTableTD */ .chroma .lntd {
vertical-align: top;
padding: 0;
margin: 0;
border: 0;
}
/* LineTable */ .chroma .lntable {
border-spacing: 0;
padding: 0;
margin: 0;
border: 0;
}
/* LineHighlight */ .chroma .hl {
background-color: #ffc;
}
/* LineNumbersTable */ .chroma .lnt {
white-space: pre;
user-select: none;
margin-right: 0.4em;
padding: 0 0.4em 0 0.4em;
color: #7f7f7f;
}
/* LineNumbers */ .chroma .ln {
white-space: pre;
user-select: none;
margin-right: 0.4em;
padding: 0 0.4em 0 0.4em;
color: #7f7f7f;
}
/* Line */ .chroma .line {
display: flex;
}
/* Keyword */ .chroma .k {
color: #ff79c6;
}
/* KeywordConstant */ .chroma .kc {
color: #ff79c6;
}
/* KeywordDeclaration */ .chroma .kd {
color: #8be9fd;
font-style: italic;
}
/* KeywordNamespace */ .chroma .kn {
color: #ff79c6;
}
/* KeywordPseudo */ .chroma .kp {
color: #ff79c6;
}
/* KeywordReserved */ .chroma .kr {
color: #ff79c6;
}
/* KeywordType */ .chroma .kt {
color: #8be9fd;
}
/* Name */ .chroma .n {
}
/* NameAttribute */ .chroma .na {
color: #50fa7b;
}
/* NameBuiltin */ .chroma .nb {
color: #8be9fd;
font-style: italic;
}
/* NameBuiltinPseudo */ .chroma .bp {
}
/* NameClass */ .chroma .nc {
color: #50fa7b;
}
/* NameConstant */ .chroma .no {
}
/* NameDecorator */ .chroma .nd {
}
/* NameEntity */ .chroma .ni {
}
/* NameException */ .chroma .ne {
}
/* NameFunction */ .chroma .nf {
color: #50fa7b;
}
/* NameFunctionMagic */ .chroma .fm {
}
/* NameLabel */ .chroma .nl {
color: #8be9fd;
font-style: italic;
}
/* NameNamespace */ .chroma .nn {
}
/* NameOther */ .chroma .nx {
}
/* NameProperty */ .chroma .py {
}
/* NameTag */ .chroma .nt {
color: #ff79c6;
}
/* NameVariable */ .chroma .nv {
color: #8be9fd;
font-style: italic;
}
/* NameVariableClass */ .chroma .vc {
color: #8be9fd;
font-style: italic;
}
/* NameVariableGlobal */ .chroma .vg {
color: #8be9fd;
font-style: italic;
}
/* NameVariableInstance */ .chroma .vi {
color: #8be9fd;
font-style: italic;
}
/* NameVariableMagic */ .chroma .vm {
}
/* Literal */ .chroma .l {
}
/* LiteralDate */ .chroma .ld {
}
/* LiteralString */ .chroma .s {
color: #f1fa8c;
}
/* LiteralStringAffix */ .chroma .sa {
color: #f1fa8c;
}
/* LiteralStringBacktick */ .chroma .sb {
color: #f1fa8c;
}
/* LiteralStringChar */ .chroma .sc {
color: #f1fa8c;
}
/* LiteralStringDelimiter */ .chroma .dl {
color: #f1fa8c;
}
/* LiteralStringDoc */ .chroma .sd {
color: #f1fa8c;
}
/* LiteralStringDouble */ .chroma .s2 {
color: #f1fa8c;
}
/* LiteralStringEscape */ .chroma .se {
color: #f1fa8c;
}
/* LiteralStringHeredoc */ .chroma .sh {
color: #f1fa8c;
}
/* LiteralStringInterpol */ .chroma .si {
color: #f1fa8c;
}
/* LiteralStringOther */ .chroma .sx {
color: #f1fa8c;
}
/* LiteralStringRegex */ .chroma .sr {
color: #f1fa8c;
}
/* LiteralStringSingle */ .chroma .s1 {
color: #f1fa8c;
}
/* LiteralStringSymbol */ .chroma .ss {
color: #f1fa8c;
}
/* LiteralNumber */ .chroma .m {
color: #bd93f9;
}
/* LiteralNumberBin */ .chroma .mb {
color: #bd93f9;
}
/* LiteralNumberFloat */ .chroma .mf {
color: #bd93f9;
}
/* LiteralNumberHex */ .chroma .mh {
color: #bd93f9;
}
/* LiteralNumberInteger */ .chroma .mi {
color: #bd93f9;
}
/* LiteralNumberIntegerLong */ .chroma .il {
color: #bd93f9;
}
/* LiteralNumberOct */ .chroma .mo {
color: #bd93f9;
}
/* Operator */ .chroma .o {
color: #ff79c6;
}
/* OperatorWord */ .chroma .ow {
color: #ff79c6;
}
/* Punctuation */ .chroma .p {
}
/* Comment */ .chroma .c {
color: #6272a4;
}
/* CommentHashbang */ .chroma .ch {
color: #6272a4;
}
/* CommentMultiline */ .chroma .cm {
color: #6272a4;
}
/* CommentSingle */ .chroma .c1 {
color: #6272a4;
}
/* CommentSpecial */ .chroma .cs {
color: #6272a4;
}
/* CommentPreproc */ .chroma .cp {
color: #ff79c6;
}
/* CommentPreprocFile */ .chroma .cpf {
color: #ff79c6;
}
/* Generic */ .chroma .g {
}
/* GenericDeleted */ .chroma .gd {
color: #f55;
}
/* GenericEmph */ .chroma .ge {
text-decoration: underline;
}
/* GenericError */ .chroma .gr {
}
/* GenericHeading */ .chroma .gh {
font-weight: bold;
}
/* GenericInserted */ .chroma .gi {
color: #50fa7b;
font-weight: bold;
}
/* GenericOutput */ .chroma .go {
color: #44475a;
}
/* GenericPrompt */ .chroma .gp {
}
/* GenericStrong */ .chroma .gs {
}
/* GenericSubheading */ .chroma .gu {
font-weight: bold;
}
/* GenericTraceback */ .chroma .gt {
}
/* GenericUnderline */ .chroma .gl {
text-decoration: underline;
}
/* TextWhitespace */ .chroma .w {
}
@@ -0,0 +1,271 @@
.chroma {
background-color: #0d1117;
color: #fff;
}
.chroma .nn {
color: #fff;
}
.chroma .err {
color: #f85149;
}
.chroma .p {
color: #c9d1d9;
}
.chroma .lntd {
border: 0;
margin: 0;
padding: 0;
vertical-align: top;
}
.chroma .lntable {
width: auto;
border: 0;
margin: 0;
display: block;
padding: 0;
overflow: auto;
border-spacing: 0;
}
.chroma .hl {
width: 100%;
display: block;
background-color: rgba(110, 118, 129, 0.1);
}
.chroma .lnt {
color: #8b949e;
padding: 0 0.4em 0 0.4em;
font-size: 0.875rem;
margin-right: 0.4em;
}
.chroma .ln {
color: #8b949e;
padding: 0 0.4em 0 0.4em;
margin-right: 0.4em;
}
.chroma .k {
color: #ff7b72;
}
.chroma .kc {
color: #ff7b72;
font-weight: bold;
}
.chroma .kd {
color: #ff7b72;
font-weight: bold;
}
.chroma .kn {
color: #ff7b72;
font-weight: bold;
}
.chroma .kp {
color: #ff7b72;
font-weight: bold;
}
.chroma .kr {
color: #ff7b72;
font-weight: bold;
}
.chroma .kt {
color: #ff7b72;
font-weight: bold;
}
.chroma .na {
color: #c9d1d9;
}
.chroma .nb {
color: #c9d1d9;
}
.chroma .bp {
color: #c9d1d9;
}
.chroma .nc {
color: #7ee787;
font-weight: bold;
}
.chroma .no {
color: #79c0ff;
font-weight: bold;
}
.chroma .nd {
color: #bc8cff;
font-weight: bold;
}
.chroma .ni {
color: #ffa657;
}
.chroma .ne {
color: #ffa657;
font-weight: bold;
}
.chroma .nf {
color: #d2a8ff;
font-weight: bold;
}
.chroma .nl {
color: #79c0ff;
font-weight: bold;
}
.chroma .nm {
color: #ff7b72;
}
.chroma .nx {
color: #79c0ff;
}
.chroma .py {
color: #79c0ff;
}
.chroma .nt {
color: #7ee787;
}
.chroma .nv {
color: #79c0ff;
}
.chroma .vc {
color: #79c0ff;
}
.chroma .vg {
color: #79c0ff;
}
.chroma .vi {
color: #79c0ff;
}
.chroma .l {
color: #79c0ff;
}
.chroma .ld {
color: #79c0ff;
}
.chroma .s {
color: #79c0ff;
}
.chroma .sa {
color: #79c0ff;
}
.chroma .sb {
color: #79c0ff;
}
.chroma .sc {
color: #79c0ff;
}
.chroma .dl {
color: #79c0ff;
}
.chroma .sd {
color: #79c0ff;
}
.chroma .s2 {
color: #79c0ff;
}
.chroma .se {
color: #79c0ff;
}
.chroma .sh {
color: #79c0ff;
}
.chroma .si {
color: #79c0ff;
}
.chroma .sx {
color: #79c0ff;
}
.chroma .sr {
color: #79c0ff;
}
.chroma .s1 {
color: #79c0ff;
}
.chroma .ss {
color: #79c0ff;
}
.chroma .m {
color: #79c0ff;
}
.chroma .mb {
color: #79c0ff;
}
.chroma .mf {
color: #79c0ff;
}
.chroma .mh {
color: #79c0ff;
}
.chroma .mi {
color: #79c0ff;
}
.chroma .il {
color: #79c0ff;
}
.chroma .mo {
color: #79c0ff;
}
.chroma .o {
color: #a5d6ff;
font-weight: bold;
}
.chroma .ow {
color: #a5d6ff;
font-weight: bold;
}
.chroma .c {
color: #8b949e;
font-style: italic;
}
.chroma .ch {
color: #8b949e;
font-style: italic;
}
.chroma .cm {
color: #8b949e;
font-style: italic;
}
.chroma .c1 {
color: #8b949e;
font-style: italic;
}
.chroma .cs {
color: #8b949e;
font-style: italic;
}
.chroma .cpf {
color: #8b949e;
font-style: italic;
}
.chroma .gd {
color: #ffa198;
background-color: #490202;
}
.chroma .ge {
color: #c9d1d9;
font-style: italic;
}
.chroma .gr {
color: #ffa198;
}
.chroma .gh {
color: #79c0ff;
}
.chroma .gi {
color: #7ee787;
background-color: #56d364;
}
.chroma .go {
color: #8b949e;
}
.chroma .gp {
color: #8b949e;
}
.chroma .gs {
font-weight: bold;
}
.chroma .gu {
color: #79c0ff;
}
.chroma .gt {
color: #ffa198;
}
.chroma .gl {
text-decoration: underline;
}
.chroma .w {
color: #484f58;
}
@@ -0,0 +1,286 @@
/* Background */ .bg {
background-color: #fff;
}
/* PreWrapper */ .chroma {
background-color: #fff;
}
/* Other */ .chroma .x {
}
/* Error */ .chroma .err {
color: #a61717;
background-color: #e3d2d2;
}
/* CodeLine */ .chroma .cl {
}
/* LineTableTD */ .chroma .lntd {
vertical-align: top;
padding: 0;
margin: 0;
border: 0;
}
/* LineTable */ .chroma .lntable {
border-spacing: 0;
padding: 0;
margin: 0;
border: 0;
}
/* LineHighlight */ .chroma .hl {
background-color: #ffc;
}
/* LineNumbersTable */ .chroma .lnt {
white-space: pre;
user-select: none;
margin-right: 0.4em;
padding: 0 0.4em;
color: #7f7f7f;
}
/* LineNumbers */ .chroma .ln {
white-space: pre;
user-select: none;
margin-right: 0.4em;
padding: 0 0.4em;
color: #7f7f7f;
}
/* Line */ .chroma .line {
display: flex;
}
/* Keyword */ .chroma .k {
color: #000;
font-weight: bold;
}
/* KeywordConstant */ .chroma .kc {
color: #000;
font-weight: bold;
}
/* KeywordDeclaration */ .chroma .kd {
color: #000;
font-weight: bold;
}
/* KeywordNamespace */ .chroma .kn {
color: #000;
font-weight: bold;
}
/* KeywordPseudo */ .chroma .kp {
color: #000;
font-weight: bold;
}
/* KeywordReserved */ .chroma .kr {
color: #000;
font-weight: bold;
}
/* KeywordType */ .chroma .kt {
color: #458;
font-weight: bold;
}
/* Name */ .chroma .n {
}
/* NameAttribute */ .chroma .na {
color: #008080;
}
/* NameBuiltin */ .chroma .nb {
color: #0086b3;
}
/* NameBuiltinPseudo */ .chroma .bp {
color: #999;
}
/* NameClass */ .chroma .nc {
color: #458;
font-weight: bold;
}
/* NameConstant */ .chroma .no {
color: #008080;
}
/* NameDecorator */ .chroma .nd {
color: #3c5d5d;
font-weight: bold;
}
/* NameEntity */ .chroma .ni {
color: #800080;
}
/* NameException */ .chroma .ne {
color: #900;
font-weight: bold;
}
/* NameFunction */ .chroma .nf {
color: #900;
font-weight: bold;
}
/* NameFunctionMagic */ .chroma .fm {
}
/* NameLabel */ .chroma .nl {
color: #900;
font-weight: bold;
}
/* NameNamespace */ .chroma .nn {
color: #555;
}
/* NameOther */ .chroma .nx {
}
/* NameProperty */ .chroma .py {
}
/* NameTag */ .chroma .nt {
color: #000080;
}
/* NameVariable */ .chroma .nv {
color: #008080;
}
/* NameVariableClass */ .chroma .vc {
color: #008080;
}
/* NameVariableGlobal */ .chroma .vg {
color: #008080;
}
/* NameVariableInstance */ .chroma .vi {
color: #008080;
}
/* NameVariableMagic */ .chroma .vm {
}
/* Literal */ .chroma .l {
}
/* LiteralDate */ .chroma .ld {
}
/* LiteralString */ .chroma .s {
color: #d14;
}
/* LiteralStringAffix */ .chroma .sa {
color: #d14;
}
/* LiteralStringBacktick */ .chroma .sb {
color: #d14;
}
/* LiteralStringChar */ .chroma .sc {
color: #d14;
}
/* LiteralStringDelimiter */ .chroma .dl {
color: #d14;
}
/* LiteralStringDoc */ .chroma .sd {
color: #d14;
}
/* LiteralStringDouble */ .chroma .s2 {
color: #d14;
}
/* LiteralStringEscape */ .chroma .se {
color: #d14;
}
/* LiteralStringHeredoc */ .chroma .sh {
color: #d14;
}
/* LiteralStringInterpol */ .chroma .si {
color: #d14;
}
/* LiteralStringOther */ .chroma .sx {
color: #d14;
}
/* LiteralStringRegex */ .chroma .sr {
color: #009926;
}
/* LiteralStringSingle */ .chroma .s1 {
color: #d14;
}
/* LiteralStringSymbol */ .chroma .ss {
color: #990073;
}
/* LiteralNumber */ .chroma .m {
color: #099;
}
/* LiteralNumberBin */ .chroma .mb {
color: #099;
}
/* LiteralNumberFloat */ .chroma .mf {
color: #099;
}
/* LiteralNumberHex */ .chroma .mh {
color: #099;
}
/* LiteralNumberInteger */ .chroma .mi {
color: #099;
}
/* LiteralNumberIntegerLong */ .chroma .il {
color: #099;
}
/* LiteralNumberOct */ .chroma .mo {
color: #099;
}
/* Operator */ .chroma .o {
color: #000;
font-weight: bold;
}
/* OperatorWord */ .chroma .ow {
color: #000;
font-weight: bold;
}
/* Punctuation */ .chroma .p {
}
/* Comment */ .chroma .c {
color: #998;
font-style: italic;
}
/* CommentHashbang */ .chroma .ch {
color: #998;
font-style: italic;
}
/* CommentMultiline */ .chroma .cm {
color: #998;
font-style: italic;
}
/* CommentSingle */ .chroma .c1 {
color: #998;
font-style: italic;
}
/* CommentSpecial */ .chroma .cs {
color: #999;
font-weight: bold;
font-style: italic;
}
/* CommentPreproc */ .chroma .cp {
color: #999;
font-weight: bold;
font-style: italic;
}
/* CommentPreprocFile */ .chroma .cpf {
color: #999;
font-weight: bold;
font-style: italic;
}
/* Generic */ .chroma .g {
}
/* GenericDeleted */ .chroma .gd {
color: #000;
background-color: #fdd;
}
/* GenericEmph */ .chroma .ge {
color: #000;
font-style: italic;
}
/* GenericError */ .chroma .gr {
color: #a00;
}
/* GenericHeading */ .chroma .gh {
color: #999;
}
/* GenericInserted */ .chroma .gi {
color: #000;
background-color: #dfd;
}
/* GenericOutput */ .chroma .go {
color: #888;
}
/* GenericPrompt */ .chroma .gp {
color: #555;
}
/* GenericStrong */ .chroma .gs {
font-weight: bold;
}
/* GenericSubheading */ .chroma .gu {
color: #aaa;
}
/* GenericTraceback */ .chroma .gt {
color: #a00;
}
/* GenericUnderline */ .chroma .gl {
text-decoration: underline;
}
/* TextWhitespace */ .chroma .w {
color: #bbb;
}
+101
View File
@@ -0,0 +1,101 @@
/*************************************************
* Hugo Blox Builder - https://hugoblox.com/
* License: https://github.com/HugoBlox/kit/blob/main/LICENSE.md
*
* Reveal.JS integration
**************************************************/
/*
global RevealMarkdown, RevealSearch, RevealNotes, RevealMath, RevealZoom, Reveal, mermaid, RevealMenu
*/
import * as params from "@params";
// Enable core slide features.
var enabledPlugins = [RevealMarkdown, RevealSearch, RevealNotes, RevealMath.KaTeX, RevealZoom];
const isObject = (o) => o === Object(o) && !isArray(o) && typeof o !== "function";
const isArray = (a) => Array.isArray(a);
const toCamelCase = (s) => s.replace(/([-_][a-z])/gi, (term) => term.toUpperCase().replace("-", "").replace("_", ""));
const keysToCamelCase = (o) => {
if (isObject(o)) {
const n = {};
Object.keys(o).forEach((k) => {
n[toCamelCase(k)] = keysToCamelCase(o[k]);
});
return n;
} else if (isArray(o)) {
return o.map((i) => keysToCamelCase(i));
}
return o;
};
// reveal configurations can be included in front matter under slides.reveal
var pluginOptions = {};
if (typeof params.slides.reveal_options !== "undefined") {
pluginOptions = params.slides.reveal_options;
}
pluginOptions = keysToCamelCase(pluginOptions);
//enable menu by default if not set
if (typeof pluginOptions.menu_enabled === "undefined") {
pluginOptions.menu_enabled = true;
}
// configure menu if enabled
if (pluginOptions.menu_enabled) {
enabledPlugins.push(RevealMenu);
}
pluginOptions.plugins = enabledPlugins;
Reveal.initialize(pluginOptions);
// Disable Mermaid by default.
if (typeof params.slides.diagram === "undefined") {
params.slides.diagram = false;
}
// Configure Mermaid only if diagrams are enabled.
if (params.slides.diagram) {
//mermaid options
// mermaid: front matter configuration can be used to set mermaid options
// You can also use directives (see mermaid documentation)
let mermaidOptions = {};
if (typeof params.slides.diagram_options !== "undefined") {
mermaidOptions = params.slides.diagram_options;
}
// `startOnLoad` must be false since diagrams are lazily rendered.
mermaidOptions.startOnLoad = false;
mermaid.initialize(mermaidOptions);
// Lazily render Mermaid diagrams within Reveal.JS slides
// See: https://github.com/hakimel/reveal.js/issues/2863#issuecomment-1107444425
const renderMermaidDiagrams = function renderMermaidDiagrams(event) {
const mermaidDivs = event.currentSlide.querySelectorAll(".mermaid:not(.done)");
const indices = Reveal.getIndices();
const pageno = `${indices.h}-${indices.v}`;
mermaidDivs.forEach((mermaidDiv, i) => {
const insertSvg = (svgCode) => {
mermaidDiv.innerHTML = svgCode;
mermaidDiv.classList.add("done");
};
const graphDefinition = mermaidDiv.textContent;
mermaid.mermaidAPI.render(`mermaid${pageno}-${i}`, graphDefinition, insertSvg);
});
Reveal.layout();
};
Reveal.on("ready", (event) => renderMermaidDiagrams(event));
Reveal.on("slidechanged", (event) => renderMermaidDiagrams(event));
}
+6
View File
@@ -0,0 +1,6 @@
module:
mounts:
- source: assets
target: assets
- source: layouts
target: layouts
+3
View File
@@ -0,0 +1,3 @@
module github.com/HugoBlox/kit/modules/slides
go 1.19
@@ -0,0 +1,38 @@
<div class="reveal">
<div class="slides">
{{/* Loop over each page. */}}
{{ range . }}
{{ if ne (len .Content) 0 }}
{{/* Must remove `<hr />` generated by Blackfriday footnotes as conflicts with slide delimiter. */}}
{{/* Commented out workaround as Blackfriday has been superseded by Goldmark in Hugo 0.60. */}}
{{/* TODO: reintroduce a similar workaround if Goldmark requires it. */}}
{{/* $content := replace .Content "<div class=\"footnotes\">\n\n<hr />" "<div class=\"footnotes\">" */}}
{{ $content := .Content }}{{/* For Goldmark. */}}
{{/* Let `---` delimit slides. In Goldmark, that is `<hr>`. Alternatively, for Blackfriday, use `<hr />`. */}}
{{ range (split $content "<hr>") }}
{{/* Check if this slide should be hidden using inline comment */}}
{{ $isHidden := false }}
{{ $slideContent := . }}
{{ if in . "<!-- hide -->" }}
{{ $isHidden = true }}
{{/* Remove the hide comment from the content */}}
{{ $slideContent = replace . "<!-- hide -->" "" }}
{{ end }}
{{/* Each `<section>` defines a new slide. */}}
{{/* Only begin new slide `<section>` if not already added by custom `slide` shortcode. */}}
{{ if not (in . "data-noprocess") }}
<section{{ if $isHidden }} data-visibility="hidden"{{ end }}>
{{ end }}
{{ $slideContent | safeHTML }}
</section>
{{ end }}
{{ end }}
{{ end }}
</div>
</div>
@@ -0,0 +1,3 @@
<span class="fragment {{ .Get "class" }}" {{ with .Get "weight" }}data-fragment-index="{{ . }}"{{ end }}>
{{ .Inner | markdownify | emojify }}
</span>
@@ -0,0 +1,6 @@
{{ $non_data_attributes := slice "id" "class" }}
<section data-noprocess data-shortcode-slide
{{ range $key, $value := $.Params }}
{{ $attribute := cond (in $non_data_attributes $key) $key (delimit (slice "data" $key) "-") }}
{{ $attribute | safeHTMLAttr }}="{{ $value }}"
{{ end }}>
@@ -0,0 +1,3 @@
<aside class="notes">
{{ .Inner | markdownify | emojify }}
</aside>
+78
View File
@@ -0,0 +1,78 @@
<!DOCTYPE html>
<html lang="{{ site.LanguageCode | default "en-us" }}">
<head>
{{/* Asset versions */}}
{{ $cdn_url_reveal := "https://cdn.jsdelivr.net/npm/reveal.js@5.0.4" }}
{{ $mermaid_version := "9.1.3" }}
{{ $mermaid_sri := "sha256-TIYL00Rhw/8WaoUhYTLX9SKIEFdXxg+yMWSLVUbhiLg=" }}
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="generator" content="Hugo Blox Builder {{with site.Data.hugoblox.version}}{{.}}{{end}}">
{{ with site.Home.OutputFormats.Get "WebAppManifest" }}
<link rel="manifest" href="{{ .RelPermalink }}">
{{ end }}
<link rel="icon" type="image/png" href="{{ "media/icon.png" | relURL }}">
<link rel="apple-touch-icon" type="image/png" href="{{ "media/icon.png" | relURL }}">
<link rel="canonical" href="{{ .Permalink }}">
<title>{{ .Title }} | {{ site.Title }}</title>
{{/* Load Reveal CSS */}}
<link rel="stylesheet" href="{{ $cdn_url_reveal }}/dist/reveal.min.css">
{{- $theme := $.Param "slides.theme" | default "black" -}}
<link rel="stylesheet" href="{{ $cdn_url_reveal }}/dist/theme/{{ $theme }}.min.css">
{{/* Hugo Chroma Syntax Highlighter Initialization */}}
{{ $hl_theme := $.Param "slides.highlight_style" | default "dracula" }}
{{ $hl_theme_path := printf "css/libs/chroma/%s.css" $hl_theme }}
{{ if not (fileExists (printf "assets/%s" $hl_theme_path)) }}
{{ errorf "Hugo Chroma themes %s.css not found in `css/libs/chroma/`. See https://gohugo.io/commands/hugo_gen_chromastyles/" $hl_theme }}
{{ else }}
{{ $hl_theme_css := resources.Get $hl_theme_path | minify }}
<link rel="stylesheet" href="{{ $hl_theme_css.RelPermalink }}">
{{ end }}
{{/* Load any Reveal CSS customizations */}}
{{ $custom_reveal_css := printf "css/reveal_custom.css" }}
{{ if (fileExists (printf "assets/%s" $custom_reveal_css)) }}
{{ $css_custom := resources.Get "css/reveal_custom.css" }}
{{ $style := slice $css_custom | resources.Concat "css/reveal_custom.css" | resources.Minify }}
<link rel="stylesheet" href="{{ $style.RelPermalink }}">
{{ end }}
</head>
<body>
{{ block "main" . }}{{ end }}
{{/* Load Reveal and built-in plugins. */}}
<script src="{{ $cdn_url_reveal }}/dist/reveal.min.js" crossorigin="anonymous"></script>
<script src="{{ $cdn_url_reveal }}/plugin/markdown/markdown.min.js" crossorigin="anonymous"></script>
<script src="{{ $cdn_url_reveal }}/plugin/notes/notes.min.js" crossorigin="anonymous"></script>
<script src="{{ $cdn_url_reveal }}/plugin/search/search.min.js" crossorigin="anonymous"></script>
<script src="{{ $cdn_url_reveal }}/plugin/math/math.min.js" crossorigin="anonymous"></script>
<script src="{{ $cdn_url_reveal }}/plugin/zoom/zoom.min.js" crossorigin="anonymous"></script>
{{/* Load third-party Reveal plugins. */}}
{{ if $.Param "slides.reveal_options.menu_enabled" | default true}}
<script src="https://cdn.jsdelivr.net/npm/reveal.js-menu@2.1.0/plugin.js" integrity="sha256-M6JwAjnRAWmi+sbXURR/yAhWZKYhAw7YXnnLvIxrdGs=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/reveal.js-menu@2.1.0/menu.js" integrity="sha256-l14dklFcW5mWar6w/9KaW0fWVerf3mYr7Wt0+rXzFAA=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reveal.js-menu@2.1.0/menu.css" integrity="sha256-0fU8HKLaTjgzfaV9CgSqbsN8ilA3zo6zK1M6rlgULd8=" crossorigin="anonymous">
{{ end }}
{{/* Load Mermaid. */}}
{{ if $.Param "slides.diagram" | default false}}
{{ printf "<script src=\"%s\" integrity=\"%s\" crossorigin=\"anonymous\" title=\"mermaid\"></script>" (printf "https://cdn.jsdelivr.net/npm/mermaid@%s/dist/mermaid.min.js" $mermaid_version) $mermaid_sri | safeHTML }}
{{ end }}
{{/* Initialize slides. */}}
{{ $slidejs := resources.Get "js/hugoblox-slides.js" | js.Build (dict "params" (dict "slides" $.Params.slides )) }}
<script src="{{ $slidejs.RelPermalink }}"></script>
</body>
</html>
Whitespace-only changes.
@@ -0,0 +1,3 @@
{{ define "main" }}
{{ partial "slides" (union (slice .Page) .Pages) }}
{{ end }}