Use a shim instead of the real katex-expression because it hardcodes too much.

We don't need a second bundle of KaTeX, or all of the fonts a second time, served
from a CDN we don't control.

Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
This commit is contained in:
Danila Fedorin 2023-12-30 19:38:37 -08:00
parent e90fb64946
commit 0b3755c69a
2 changed files with 35 additions and 2 deletions

View File

@ -34,7 +34,7 @@ defaultContentLanguage = 'en'
[params]
bergamotJsUrl = "https://static.danilafe.com/bergamot/bergamot.js"
katexExpressionJsUrl = "https://static.danilafe.com/katex-expression/katex-expression.esm.js"
katexJsUrl = "https://static.danilafe.com/katex/katex.min.js"
plausibleAnalyticsDomain = "danilafe.com"
githubUsername = "DanilaFe"
siteSourceUrl = "https://dev.danilafe.com/Web-Projects/blog-static/src/branch/master"

View File

@ -1 +1,34 @@
<script type="module" src="{{ .Site.Params.katexExpressionJsUrl }}"></script>
<script src="{{ .Site.Params.katexJsUrl }}" crossorigin="anonymous"></script>
<script defer>
class KatexExpressionShim extends HTMLElement {
static observedAttributes = ["expression", "katex-options"];
targetSpan;
constructor() {
super();
}
doRender() {
if (!this.targetSpan) return;
const options = this.hasAttribute("katex-options") ?
this.getAttribute("katex-options") : {};
katex.render(
this.getAttribute("expression"),
this.targetSpan,
JSON.parse(options)
);
}
connectedCallback() {
this.targetSpan = document.createElement('span');
this.appendChild(this.targetSpan);
this.doRender();
}
attributeChangedCallback(name, oldValue, newValue) {
this.doRender();
}
}
customElements.define("katex-expression", KatexExpressionShim);
</script>