| assets/js/popover.js | ●●●●● patch | view | raw | blame | history | |
| assets/js/router.js | ●●●●● patch | view | raw | blame | history | |
| layouts/_default/section.html | ●●●●● patch | view | raw | blame | history | |
| layouts/_default/single.html | ●●●●● patch | view | raw | blame | history | |
| layouts/_default/taxonomy.html | ●●●●● patch | view | raw | blame | history | |
| layouts/_default/term.html | ●●●●● patch | view | raw | blame | history | |
| layouts/index.html | ●●●●● patch | view | raw | blame | history | |
| layouts/partials/head.html | ●●●●● patch | view | raw | blame | history | |
| layouts/partials/popover.html | ●●●●● patch | view | raw | blame | history |
assets/js/popover.js
@@ -1,5 +1,5 @@ function htmlToElement(html) { const template = document.createElement('template') const template = document.createElement("template") html = html.trim() template.innerHTML = html return template.content.firstChild @@ -7,29 +7,27 @@ function initPopover(baseURL) { const basePath = baseURL.replace(window.location.origin, "") document.addEventListener("DOMContentLoaded", () => { fetchData.then(({ content }) => { const links = [...document.getElementsByClassName("internal-link")] links .filter(li => li.dataset.src) .forEach(li => { const linkDest = content[li.dataset.src.replace(/\/$/g, "").replace(basePath, "")] if (linkDest) { const popoverElement = `<div class="popover"> fetchData.then(({ content }) => { const links = [...document.getElementsByClassName("internal-link")] links .filter((li) => li.dataset.src) .forEach((li) => { const linkDest = content[li.dataset.src.replace(/\/$/g, "").replace(basePath, "")] if (linkDest) { const popoverElement = `<div class="popover"> <h3>${linkDest.title}</h3> <p>${removeMarkdown(linkDest.content).split(" ", 20).join(" ")}...</p> <p class="meta">${new Date(linkDest.lastmodified).toLocaleDateString()}</p> </div>` const el = htmlToElement(popoverElement) li.appendChild(el) li.addEventListener("mouseover", () => { el.classList.add("visible") }) li.addEventListener("mouseout", () => { el.classList.remove("visible") }) } }) }) const el = htmlToElement(popoverElement) li.appendChild(el) li.addEventListener("mouseover", () => { el.classList.add("visible") }) li.addEventListener("mouseout", () => { el.classList.remove("visible") }) } }) }) } assets/js/router.js
New file @@ -0,0 +1,25 @@ import { router, navigate } from "https://unpkg.com/million/dist/router.mjs" export const init = (loader) => { // SPA navigation for access later window.navigate = navigate // We only mutate document.title and content within .singlePage element router(".singlePage") // We need on initial load, then subsequent redirs window.addEventListener("million:navigate", () => callback(loader)) window.addEventListener("DOMContentLoaded", () => callback(loader)) } export const callback = (loader) => { // requestAnimationFrame() delays graph draw until SPA routing is finished const draw = () => { const container = document.getElementById("graph-container") // retry if the graph is not ready if (!container) return requestAnimationFrame(draw) // clear the graph in case there is anything within it container.textContent = "" loader() } requestAnimationFrame(draw) } layouts/_default/section.html
@@ -19,7 +19,6 @@ </article> {{partial "contact.html" .}} </div> {{partial "popover.html" .}} </body> </html> layouts/_default/single.html
@@ -22,11 +22,10 @@ <li><a href="{{ .Permalink }}">{{ .LinkTitle | humanize }}</a></li> {{ end }} </ul> {{partial "toc.html" .}} {{partial "toc.html" .}} {{partial "textprocessing.html" . }} </article> {{partial "footer.html" .}} {{partial "popover.html" .}} </div> </body> layouts/_default/taxonomy.html
@@ -28,7 +28,6 @@ </article> {{partial "contact.html" .}} </div> {{partial "popover.html" .}} </body> </html> layouts/_default/term.html
@@ -19,7 +19,6 @@ </article> {{partial "contact.html" .}} </div> {{partial "popover.html" .}} </body> </html> layouts/index.html
@@ -13,12 +13,10 @@ {{partial "darkmode.html" .}} </header> <article> {{partial "toc.html" .}} {{partial "toc.html" .}} {{partial "textprocessing.html" . }} </article> {{partial "footer.html" .}} {{partial "popover.html" .}} </div> </body> </html> layouts/partials/head.html
@@ -35,6 +35,10 @@ <script src="{{$darkMode.Permalink}}"></script> {{partial "katex.html" .}} {{ $popover := resources.Get "js/popover.js" | resources.Fingerprint "md5" | resources.Minify }} <script src="{{$popover.Permalink}}"></script> <!-- Preload page vars --> {{$linkIndex := resources.Get "indices/linkIndex.json" | resources.Fingerprint "md5" | resources.Minify | }} {{$contentIndex := resources.Get @@ -59,36 +63,25 @@ })) </script> {{if $.Site.Data.config.enableSPA}} {{ $router := resources.Get "js/router.js" | resources.Fingerprint "md5" | resources.Minify }} <script type="module"> import { router, navigate } from "https://unpkg.com/million/dist/router.mjs"; // SPA navigation for access later window.navigate = navigate; // We only mutate document.title and content within .singlePage element router(".singlePage"); const callback = () => { // requestAnimationFrame() delays graph draw until SPA routing is finished const draw = () => { const container = document.getElementById("graph-container"); // retry if the graph is not ready if (!container) return requestAnimationFrame(draw); // clear the graph in case there is anything within it container.textContent = ""; import { init } from '{{$router.Permalink}}'; init(() => { drawGraph( {{strings.TrimRight "/" .Page.Permalink}}, {{strings.TrimRight "/" .Site.BaseURL}}, {{$.Site.Data.graphConfig.paths}}, {{$.Site.Data.graphConfig.depth}}, {{$.Site.Data.graphConfig.enableDrag}}, {{$.Site.Data.graphConfig.enableLegend}}, {{$.Site.Data.graphConfig.enableZoom}} ); drawGraph( {{strings.TrimRight "/" .Page.Permalink}}, {{strings.TrimRight "/" .Site.BaseURL}}, {{$.Site.Data.graphConfig.paths}}, {{$.Site.Data.graphConfig.depth}}, {{$.Site.Data.graphConfig.enableDrag}}, {{$.Site.Data.graphConfig.enableLegend}}, {{$.Site.Data.graphConfig.enableZoom}} ); }; requestAnimationFrame(draw); }; // We need on initial load, then subsequent redirs window.addEventListener("million:navigate", callback); window.addEventListener("DOMContentLoaded", callback); {{if $.Site.Data.config.enableLinkPreview}} initPopover({{strings.TrimRight "/" .Site.BaseURL }}) {{end}} }); </script> {{else}} <script>window.navigate = (url) => window.location.href = url</script> layouts/partials/popover.html
File was deleted