diff --git a/assets/js/clipboard.js b/assets/js/clipboard.js index cd928c1..10e02c6 100644 --- a/assets/js/clipboard.js +++ b/assets/js/clipboard.js @@ -8,33 +8,38 @@ const addCopyButtons = () => { let els = document.getElementsByClassName("highlight"); // for each highlight for (let i = 0; i < els.length; i++) { - if (els[i].getElementsByClassName("clipboard-button").length) continue; + try { + if (els[i].getElementsByClassName("clipboard-button").length) continue; - // find pre > code inside els[i] - let codeBlocks = els[i].getElementsByTagName("code"); + // find pre > code inside els[i] + let codeBlocks = els[i].getElementsByTagName("code"); - // line numbers are inside first code block - let lastCodeBlock = codeBlocks[codeBlocks.length - 1]; - const button = document.createElement("button"); - button.className = "clipboard-button"; - button.type = "button"; - button.innerHTML = svgCopy; - // remove every second newline from lastCodeBlock.innerText - button.addEventListener("click", () => { - navigator.clipboard.writeText(lastCodeBlock.innerText.replace(/\n\n/g, "\n")).then( - () => { - button.blur(); - button.innerHTML = svgCheck; - setTimeout(() => { - button.innerHTML = svgCopy - button.style.borderColor = "" - }, 2000); - }, - (error) => (button.innerHTML = "Error") - ); - }); - // find chroma inside els[i] - let chroma = els[i].getElementsByClassName("chroma")[0]; - els[i].insertBefore(button, chroma); + // line numbers are inside first code block + let lastCodeBlock = codeBlocks[codeBlocks.length - 1]; + const button = document.createElement("button"); + button.className = "clipboard-button"; + button.type = "button"; + button.innerHTML = svgCopy; + button.ariaLabel = "opy the shown code"; + // remove every second newline from lastCodeBlock.innerText + button.addEventListener("click", () => { + navigator.clipboard.writeText(lastCodeBlock.innerText.replace(/\n\n/g, "\n")).then( + () => { + button.blur(); + button.innerHTML = svgCheck; + setTimeout(() => { + button.innerHTML = svgCopy + button.style.borderColor = "" + }, 2000); + }, + (error) => (button.innerHTML = "Error") + ); + }); + // find chroma inside els[i] + let chroma = els[i].getElementsByClassName("chroma")[0]; + els[i].insertBefore(button, chroma); + } catch(error) { + console.debug(error); + } } } diff --git a/assets/js/code-title.js b/assets/js/code-title.js index 698edc9..325e16d 100644 --- a/assets/js/code-title.js +++ b/assets/js/code-title.js @@ -1,13 +1,17 @@ function addTitleToCodeBlocks() { - var els = document.getElementsByClassName("highlight"); - for (var i = 0; i < els.length; i++) { - if (els[i].title.length) { - let div = document.createElement("div"); - if (els[i].getElementsByClassName("code-title").length) continue; - div.textContent=els[i].title; - div.classList.add("code-title") - els[i].insertBefore(div, els[i].firstChild); + const els = document.getElementsByClassName("highlight"); + for (let i = 0; i < els.length; i++) { + try { + if (els[i].title.length) { + let div = document.createElement("div"); + if (els[i].getElementsByClassName("code-title").length) continue; + div.textContent = els[i].title; + div.classList.add("code-title") + els[i].insertBefore(div, els[i].firstChild); + } + } catch (error) { + console.debug(error); } } -}; +} diff --git a/assets/js/full-text-search.js b/assets/js/full-text-search.js index 108db10..709a3b3 100644 --- a/assets/js/full-text-search.js +++ b/assets/js/full-text-search.js @@ -35,7 +35,7 @@ }) registerHandlers((e) => { - term = e.target.value + const term = e.target.value const searchResults = contentIndex.search(term, [ { field: "content", diff --git a/assets/js/graph.js b/assets/js/graph.js index c89877b..2e05b5c 100644 --- a/assets/js/graph.js +++ b/assets/js/graph.js @@ -113,7 +113,7 @@ async function drawGraph(baseUrl, isHome, pathColors, graphConfig) { .append("svg") .attr("width", width) .attr("height", height) - .attr('viewBox', [-width / 2 * 1 / scale, -height / 2 * 1 / scale, width * 1 / scale, height * 1 / scale]) + .attr('viewBox', [-width / 2 / scale, -height / 2 / scale, width / scale, height / scale]) if (enableLegend) { const legend = [{ Current: "var(--g-node-active)" }, { Note: "var(--g-node)" }, ...pathColors] diff --git a/assets/js/popover.js b/assets/js/popover.js index ca13f9a..554291a 100644 --- a/assets/js/popover.js +++ b/assets/js/popover.js @@ -12,7 +12,7 @@ function initPopover(baseURL, useContextualBacklinks) { links .filter(li => li.dataset.src || (li.dataset.idx && useContextualBacklinks)) .forEach(li => { - var el + let el if (li.dataset.ctx) { const linkDest = content[li.dataset.src] const popoverElement = `<div class="popover"> diff --git a/assets/js/util.js b/assets/js/util.js index 3346b7d..dc549be 100644 --- a/assets/js/util.js +++ b/assets/js/util.js @@ -40,8 +40,8 @@ const removeMarkdown = ( .replace(/^\s{0,3}>\s?/g, "") .replace(/(^|\n)\s{0,3}>\s?/g, "\n\n") .replace(/^\s{1,2}\[(.*?)\]: (\S+)( ".*?")?\s*$/g, "") - .replace(/([\*_]{1,3})(\S.*?\S{0,1})\1/g, "$2") - .replace(/([\*_]{1,3})(\S.*?\S{0,1})\1/g, "$2") + .replace(/([\*_]{1,3})(\S.*?\S?)\1/g, "$2") + .replace(/([\*_]{1,3})(\S.*?\S?)\1/g, "$2") .replace(/(`{3,})(.*?)\1/gm, "$2") .replace(/`(.+?)`/g, "$1") .replace(/\n{2,}/g, "\n\n") @@ -65,7 +65,7 @@ const highlight = (content, term) => { .split(" ") .slice(0, h) return ( - (before.length == h ? `...${before.join(" ")}` : before.join(" ")) + + (before.length === h ? `...${before.join(" ")}` : before.join(" ")) + `<span class="search-highlight">${term}</span>` + after.join(" ") ) diff --git a/assets/styles/base.scss b/assets/styles/base.scss index 0696d2f..5863c92 100644 --- a/assets/styles/base.scss +++ b/assets/styles/base.scss @@ -89,7 +89,7 @@ tbody, li, p { #TableOfContents > ol { counter-reset: section; - margin-left: 0em; + margin-left: 0; padding-left: 1.5em; & > li { counter-increment: section; @@ -142,7 +142,7 @@ sup { } blockquote { - margin-left: 0em; + margin-left: 0; border-left: 3px solid var(--secondary); padding-left: 1em; transition: border-color 0.2s ease; @@ -183,7 +183,7 @@ article { margin-top: 2em; font-size: 2em; } - + & > .meta { margin: 0 0 1em 0; opacity: 0.7; @@ -201,11 +201,11 @@ article { &.broken { opacity: 0.5; - background-color: transparent; + background-color: transparent; } } } - + & p { overflow-wrap: anywhere; } @@ -295,7 +295,7 @@ footer { text-align: center; & ul { padding-left: 0; - } + } } hr { @@ -507,7 +507,7 @@ header { & > .section { display: flex; - align-items: center; + align-items: center; @media all and (max-width: 600px) { & .tags { @@ -519,18 +519,18 @@ header { font-weight: 700; margin: 0; } - + & p { margin: 0; padding-right: 1em; - flex-basis: 6em; + flex-basis: 6em; } } & h3 { opacity: 1; font-weight: 700; - margin: 0em; + margin: 0; } & .meta { @@ -568,7 +568,7 @@ header { transition: opacity 0.2s ease, transform 0.2s ease; user-select: none; overflow-wrap: anywhere; - box-shadow: 6px 6px 36px 0px rgba(0,0,0,0.25); + box-shadow: 6px 6px 36px 0 rgba(0,0,0,0.25); @media all and (max-width: 600px) { display: none !important; @@ -596,7 +596,7 @@ header { & > p { margin: 0; padding: 0.5rem 0; - } + } & > p, & > a { font-size: 1rem; diff --git a/layouts/partials/graph.html b/layouts/partials/graph.html index 3e25c65..39ed3cf 100644 --- a/layouts/partials/graph.html +++ b/layouts/partials/graph.html @@ -1,4 +1,5 @@ <script + async src="https://cdn.jsdelivr.net/npm/d3@6.7.0/dist/d3.min.js" integrity="sha256-+7jaYCp29O1JusNWHaYtgUn6EhuP0VaFuswhNV06MyI=" crossorigin="anonymous" diff --git a/layouts/partials/head.html b/layouts/partials/head.html index b9c5438..57dc546 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -52,27 +52,27 @@ {{partial "katex.html" .}} {{partial "mermaid.html" .}} - - <script src="https://unpkg.com/@floating-ui/core@0.7.3"></script> - <script src="https://unpkg.com/@floating-ui/dom@0.5.4"></script> + + <script async src="https://unpkg.com/@floating-ui/core@0.7.3"></script> + <script async src="https://unpkg.com/@floating-ui/dom@0.5.4"></script> {{ $popover := resources.Get "js/popover.js" | resources.Fingerprint "md5" | resources.Minify }} - <script src="{{$popover.Permalink}}"></script> + <script async src="{{$popover.Permalink}}"></script> <!-- Optional scripts --> {{ if $data.enableCodeBlockTitle | default $.Site.Data.config.enableCallouts }} {{ $codeTitle := resources.Get "js/code-title.js" | resources.Fingerprint "md5" | resources.Minify }} - <script src="{{$codeTitle.Permalink}}"></script> + <script defer src="{{$codeTitle.Permalink}}"></script> {{end}} {{ if $data.enableCodeBlockCopy | default $.Site.Data.config.enableCodeBlockCopy }} {{ $clipboard := resources.Get "js/clipboard.js" | resources.Fingerprint "md5" | resources.Minify }} - <script src="{{$clipboard.Permalink}}"></script> + <script defer src="{{$clipboard.Permalink}}"></script> {{ end }} {{ if $data.enableCallouts | default $.Site.Data.config.enableCallouts }} {{ $callouts := resources.Get "js/callouts.js" | resources.Fingerprint "md5" | resources.Minify }} - <script src="{{$callouts.Permalink}}"></script> + <script defer src="{{$callouts.Permalink}}"></script> {{ end }} <!-- Preload page vars --> @@ -120,7 +120,7 @@ {{if $data.enableCallouts | default $.Site.Data.config.enableCallouts -}} addCollapsibleCallouts(); {{ end }} - + {{if $data.enableLinkPreview | default $.Site.Data.config.enableLinkPreview}} initPopover( {{strings.TrimRight "/" .Site.BaseURL }}, diff --git a/layouts/partials/katex.html b/layouts/partials/katex.html index df53045..8a2f40b 100644 --- a/layouts/partials/katex.html +++ b/layouts/partials/katex.html @@ -1,6 +1,14 @@ {{if $.Site.Data.config.enableLatex}} -<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.css" integrity="sha384-R4558gYOUz8mP9YWpZJjofhk+zx0AS11p36HnD2ZKj/6JR5z27gSSULCNHIRReVs" crossorigin="anonymous"> -<script defer src="https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.js" integrity="sha384-z1fJDqw8ZApjGO3/unPWUPsIymfsJmyrDVWC8Tv/a1HeOtGmkwNd/7xUS0Xcnvsx" crossorigin="anonymous"></script> -<script defer src="https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/contrib/auto-render.min.js" integrity="sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR" crossorigin="anonymous"></script> -<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/contrib/copy-tex.min.js" integrity="sha384-ww/583aHhxWkz5DEVn6OKtNiIaLi2iBRNZXfJRiY1Ai7tnJ9UXpEsyvOITVpTl4A" crossorigin="anonymous"></script> -{{end}} +<link rel="preload" href="https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.css" as="style" + onload="this.onload=null;this.rel='stylesheet'" + integrity="sha384-R4558gYOUz8mP9YWpZJjofhk+zx0AS11p36HnD2ZKj/6JR5z27gSSULCNHIRReVs" crossorigin="anonymous"> +<script defer src="https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.js" + integrity="sha384-z1fJDqw8ZApjGO3/unPWUPsIymfsJmyrDVWC8Tv/a1HeOtGmkwNd/7xUS0Xcnvsx" + crossorigin="anonymous"></script> +<script defer src="https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/contrib/auto-render.min.js" + integrity="sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR" + crossorigin="anonymous"></script> +<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/contrib/copy-tex.min.js" + integrity="sha384-ww/583aHhxWkz5DEVn6OKtNiIaLi2iBRNZXfJRiY1Ai7tnJ9UXpEsyvOITVpTl4A" + crossorigin="anonymous"></script> +{{end}} \ No newline at end of file