erynwells.me/assets/scripts/railroad-utils.js

68 lines
1.8 KiB
JavaScript
Raw Normal View History

Implement fingerprinting site and page resources This will keep browsers from caching files that have changed. I've also added SRI information to the <script> and <link> elements for browsers to verify resources. Squashed commit of the following: commit f3fcb163881d366bc72f5961f83074566395a6d9 Author: Eryn Wells <eryn@erynwells.me> Date: Tue Nov 8 17:47:42 2022 -0800 Remove static/styles/root.css commit 53a30624a01b8a3349264efa5cf24bdd9fc5e0a2 Author: Eryn Wells <eryn@erynwells.me> Date: Tue Nov 8 17:47:26 2022 -0800 Add back the basic table styles that got ditched when root.css was moved to assets/styles commit 294fa8343b1d03c3955deeae61948232704fb5e7 Author: Eryn Wells <eryn@erynwells.me> Date: Tue Nov 8 17:45:38 2022 -0800 Get all the fingerprinting done! - Add partials in the resources folder for each of the major resources of my site - Consolidate .css and .js files via resources.Concat where possible commit d0b223fa3353d411d7f05fab8de0a1edda66a695 Author: Eryn Wells <eryn@erynwells.me> Date: Mon Nov 7 08:36:39 2022 -0800 All the template updates for fingerprinting commit 1751abadac3d07f891e3298ac23bf9331be7a2a2 Author: Eryn Wells <eryn@erynwells.me> Date: Mon Nov 7 08:36:27 2022 -0800 Add secure_asset.html template commit 94ea8068c91dfc385af000685df7fbd12f11077f Author: Eryn Wells <eryn@erynwells.me> Date: Mon Nov 7 08:35:48 2022 -0800 Move a bunch of scripts and CSS to assets so they can be processed with Hugo Pipes Use Pipes to fingerprint and add SLI information to <script> and <link> tags.
2022-11-08 17:50:11 -08:00
{{ with resources.Get "scripts/lib/railroad.js" | fingerprint "sha512" }}
import rr from "{{ .RelPermalink }}";
{{ else }}
{{ errorf "Unable to get railroad.js resource" }}
{{ end }}
class RailroadDiagramManager {
constructor() {
this.figures = new Map();
this.isCurrentlyNarrow = undefined;
this.diagramBreakpoint = window.matchMedia("(max-width: 450px)");
this.diagramBreakpoint.addEventListener("change", () => {
this.updateVisiblity();
});
}
add(svg) {
const parent = svg.parentElement;
if (!this.figures.has(parent)) {
this.figures.set(parent, []);
}
this.figures.get(parent).push(svg);
parent.removeChild(svg);
}
updateVisiblity() {
const isNarrow = this.diagramBreakpoint.matches;
if (isNarrow === this.isCurrentlyNarrow) {
return;
}
this.isCurrentlyNarrow = isNarrow;
for (let [figure, svgs] of this.figures.entries()) {
for (let svg of svgs) {
const svgHasNarrowClass = svg.classList.contains("narrow");
if (isNarrow && svgHasNarrowClass)
figure.appendChild(svg);
else if (!isNarrow && !svgHasNarrowClass)
figure.appendChild(svg);
else if (svg.parentElement === figure)
figure.removeChild(svg);
}
}
}
}
let railroadDiagramManager = new RailroadDiagramManager();
export function railroadDiagram(builder, elementID, isNarrow) {
const diagram = builder(rr);
const svg = diagram.addTo(document.getElementById(elementID));
if (isNarrow) {
svg.classList.add("narrow");
}
railroadDiagramManager.add(svg);
}
window.addEventListener("DOMContentLoaded", () => {
railroadDiagramManager.updateVisiblity();
});