131 lines
5.2 KiB
HTML
131 lines
5.2 KiB
HTML
|
|
{% extends "base.html" %} {% block scripts %} {{ super() }}
|
||
|
|
<script>
|
||
|
|
// Changelog headings use [ver] link-reference syntax, which renders a nested <a> inside
|
||
|
|
// the outer .md-nav__link anchor. Browsers break nested anchors apart (HTML5 adoption
|
||
|
|
// agency algorithm), leaving the TOC anchor empty and the version text as orphaned nodes.
|
||
|
|
// This repairs those empty anchors by reading the text from the sibling nav's aria-label.
|
||
|
|
document$.subscribe(function () {
|
||
|
|
document.querySelectorAll("li.md-nav__item").forEach(function (item) {
|
||
|
|
var link = item.querySelector(":scope > a.md-nav__link");
|
||
|
|
var subNav = item.querySelector(":scope > nav.md-nav[aria-label]");
|
||
|
|
var label = subNav && subNav.getAttribute("aria-label");
|
||
|
|
if (link && label && !link.textContent.trim()) {
|
||
|
|
link.textContent = label;
|
||
|
|
var toRemove = [];
|
||
|
|
for (var node = link.nextSibling; node && node !== subNav; node = node.nextSibling) {
|
||
|
|
toRemove.push(node);
|
||
|
|
}
|
||
|
|
toRemove.forEach(function (n) {
|
||
|
|
n.parentNode && n.parentNode.removeChild(n);
|
||
|
|
});
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
// Workaround: zensical's repo source observable re-emits on each instant
|
||
|
|
// navigation, appending another <ul class="md-source__facts"> without
|
||
|
|
// removing the previous one. Keep only the most recent list. The GitHub
|
||
|
|
// stars fetch is async, so an immediate sweep isn't enough — also attach
|
||
|
|
// a MutationObserver so late appends get collapsed too.
|
||
|
|
document.querySelectorAll(".md-source__repository").forEach(function (repo) {
|
||
|
|
var dedupe = function () {
|
||
|
|
var lists = repo.querySelectorAll(":scope > ul.md-source__facts");
|
||
|
|
for (var i = 0; i < lists.length - 1; i++) {
|
||
|
|
lists[i].remove();
|
||
|
|
}
|
||
|
|
};
|
||
|
|
dedupe();
|
||
|
|
if (!repo.__factsObserver) {
|
||
|
|
repo.__factsObserver = new MutationObserver(dedupe);
|
||
|
|
repo.__factsObserver.observe(repo, { childList: true });
|
||
|
|
}
|
||
|
|
});
|
||
|
|
});
|
||
|
|
</script>
|
||
|
|
{% endblock %} {% block extrahead %}
|
||
|
|
<script async src="https://www.googletagmanager.com/gtag/js?id=G-8G4NQW55PF"></script>
|
||
|
|
<script>
|
||
|
|
window.dataLayer = window.dataLayer || [];
|
||
|
|
function gtag() {
|
||
|
|
dataLayer.push(arguments);
|
||
|
|
}
|
||
|
|
gtag("js", new Date());
|
||
|
|
|
||
|
|
gtag("config", "G-8G4NQW55PF");
|
||
|
|
gtag("config", "AW-17853694443");
|
||
|
|
</script>
|
||
|
|
|
||
|
|
<meta property="og:type" content="website" />
|
||
|
|
<meta
|
||
|
|
property="og:title"
|
||
|
|
content="{{ config.site_name }}{% if page and page.title and not page.is_homepage %} - {{ page.title | striptags }}{% endif %}"
|
||
|
|
/>
|
||
|
|
<meta
|
||
|
|
property="og:description"
|
||
|
|
content="{% if page and page.meta and page.meta.description %}{{ page.meta.description }}{% else %}{{ config.site_description }}{% endif %}"
|
||
|
|
/>
|
||
|
|
<meta property="og:url" content="{{ page.canonical_url }}" />
|
||
|
|
<meta property="og:site_name" content="{{ config.site_name }}" />
|
||
|
|
<meta property="og:image" content="{{ config.site_url }}assets/og-image.png" />
|
||
|
|
<meta property="og:image:width" content="1200" />
|
||
|
|
<meta property="og:image:height" content="630" />
|
||
|
|
|
||
|
|
<meta name="twitter:card" content="summary_large_image" />
|
||
|
|
<meta
|
||
|
|
name="twitter:title"
|
||
|
|
content="{{ config.site_name }}{% if page and page.title and not page.is_homepage %} - {{ page.title | striptags }}{% endif %}"
|
||
|
|
/>
|
||
|
|
<meta
|
||
|
|
name="twitter:description"
|
||
|
|
content="{% if page and page.meta and page.meta.description %}{{ page.meta.description }}{% else %}{{ config.site_description }}{% endif %}"
|
||
|
|
/>
|
||
|
|
<meta name="twitter:image" content="{{ config.site_url }}assets/og-image.png" />
|
||
|
|
{% endblock %} {# Match Material: `.md-content` wraps article; `data-md-component="content"` stays
|
||
|
|
on the wrapper for theme JS. #} {% block container %}
|
||
|
|
<div class="md-content" data-md-component="content">
|
||
|
|
<article class="md-content__inner md-typeset">
|
||
|
|
{% if page and ( page.is_homepage | default(false) or (page.url | default("")) == ""
|
||
|
|
or (page.url | default("")) == "/" or (page.url | default("")) == "." ) %}
|
||
|
|
<div class="hero-banner">
|
||
|
|
<a href="https://kreuzberg.dev/" title="Kreuzberg.dev">
|
||
|
|
<img
|
||
|
|
src="{{ 'assets/docs_top_banner.svg' | url }}"
|
||
|
|
alt="Kreuzberg.dev"
|
||
|
|
width="800"
|
||
|
|
height="200"
|
||
|
|
decoding="async"
|
||
|
|
/>
|
||
|
|
</a>
|
||
|
|
</div>
|
||
|
|
{% endif %}
|
||
|
|
{% if "navigation.path" in features %} {% include "partials/path.html" %} {% endif %} {% include
|
||
|
|
"partials/content.html" %} {% if page and page.edit_url %}
|
||
|
|
<p style="margin-top: 2rem; margin-bottom: 0; font-size: 0.75rem; line-height: 1.5">
|
||
|
|
<a
|
||
|
|
href="{{ page.edit_url }}"
|
||
|
|
style="
|
||
|
|
color: var(--md-default-fg-color--lighter, #737373);
|
||
|
|
text-decoration: underline;
|
||
|
|
text-underline-offset: 0.15em;
|
||
|
|
"
|
||
|
|
>Edit this page on GitHub</a
|
||
|
|
>
|
||
|
|
</p>
|
||
|
|
{% endif %} {% if page and ( page.is_homepage | default(false) or (page.url | default("")) == ""
|
||
|
|
or (page.url | default("")) == "/" or (page.url | default("")) == "." ) %}
|
||
|
|
<div class="cloud-banner">
|
||
|
|
<a href="https://kreuzberg.dev/" title="Kreuzberg.dev">
|
||
|
|
<img
|
||
|
|
src="{{ 'assets/docs_bottom_banner.svg' | url }}"
|
||
|
|
alt="Kreuzberg.dev"
|
||
|
|
width="800"
|
||
|
|
height="200"
|
||
|
|
loading="lazy"
|
||
|
|
decoding="async"
|
||
|
|
/>
|
||
|
|
</a>
|
||
|
|
</div>
|
||
|
|
{% endif %}
|
||
|
|
</article>
|
||
|
|
</div>
|
||
|
|
{% endblock %}
|