chore: add PaperMod theme files
This commit is contained in:
1 parent
a3365e53a5
commit
58fda1b0b3
126 files changed
+6260
-1
No files matched your search
@@ -0,0 +1,176 @@
|
||||
{{- if not (.Param "hideFooter") }}
|
||||
<footer class="footer">
|
||||
{{- if not site.Params.footer.hideCopyright }}
|
||||
{{- if site.Copyright }}
|
||||
<span>{{ site.Copyright | markdownify }}</span>
|
||||
{{- else }}
|
||||
<span>© {{ now.Year }} <a href="{{ "" | absLangURL }}">{{ site.Title }}</a></span>
|
||||
{{- end }}
|
||||
{{- print " · "}}
|
||||
{{- end }}
|
||||
|
||||
{{- with site.Params.footer.text }}
|
||||
{{ . | markdownify }}
|
||||
{{- print " · "}}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
- The "Powered by Hugo" text is intentionally left at the end of the footer to give it more prominence.
|
||||
- We kindly encourage you to keep this line. Keeping this credit helps open source projects like PaperMod and Hugo reach more people, supports the open source ecosystem, and shows appreciation for the work that goes into these tools.
|
||||
- If you choose to remove it, please consider adding a link to the PaperMod GitHub repository somewhere on your site to give credit to the project and its contributors.
|
||||
- Support us by sponsoring the project on GitHub Sponsors: https://github.com/sponsors/adityatelange
|
||||
*/}}
|
||||
|
||||
<span>
|
||||
Powered by
|
||||
<a href="https://gohugo.io/?utm_source=papermod" rel="noopener" target="_blank">Hugo</a> &
|
||||
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
|
||||
</span>
|
||||
</footer>
|
||||
{{- end }}
|
||||
|
||||
{{- if (not site.Params.disableScrollToTop) }}
|
||||
<a href="#top" id="top-link" class="top-link hidden" aria-label="go to top" title="Go to Top (Alt + G)" accesskey="g">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
||||
stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevrons-up">
|
||||
<polyline points="17 11 12 6 7 11"></polyline>
|
||||
<polyline points="17 18 12 13 7 18"></polyline>
|
||||
</svg>
|
||||
</a>
|
||||
{{- end }}
|
||||
|
||||
{{- partial "extend_footer.html" . }}
|
||||
|
||||
<script>
|
||||
let menu = document.getElementById('menu');
|
||||
if (menu) {
|
||||
// Set the scroll position
|
||||
const scrollPosition = localStorage.getItem("menu-scroll-position");
|
||||
if (scrollPosition) {
|
||||
menu.scrollLeft = parseInt(scrollPosition, 10);
|
||||
}
|
||||
|
||||
// Save once scrolling settles, not on every event
|
||||
let menuScrollTimeout;
|
||||
menu.addEventListener("scroll", function () {
|
||||
clearTimeout(menuScrollTimeout);
|
||||
menuScrollTimeout = setTimeout(function () {
|
||||
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
|
||||
}, 150);
|
||||
}, { passive: true });
|
||||
}
|
||||
|
||||
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
||||
anchor.addEventListener("click", function (e) {
|
||||
e.preventDefault();
|
||||
var id = this.getAttribute("href").substr(1);
|
||||
const target = document.querySelector(`[id='${decodeURIComponent(id)}']`);
|
||||
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
|
||||
target.scrollIntoView({
|
||||
behavior: "smooth"
|
||||
});
|
||||
} else {
|
||||
target.scrollIntoView();
|
||||
}
|
||||
// Move keyboard focus to the target like native anchor navigation,
|
||||
// so the next Tab continues from there instead of from this link
|
||||
if (target.tabIndex < 0 && !target.hasAttribute("tabindex")) {
|
||||
target.setAttribute("tabindex", "-1");
|
||||
}
|
||||
target.focus({ preventScroll: true });
|
||||
if (id === "top") {
|
||||
history.replaceState(null, null, " ");
|
||||
} else {
|
||||
history.pushState(null, null, `#${id}`);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
{{- if (not site.Params.disableScrollToTop) }}
|
||||
<script>
|
||||
var toplink = document.getElementById("top-link");
|
||||
var scrollTicking = false;
|
||||
// At most one check per frame
|
||||
window.addEventListener("scroll", function () {
|
||||
if (scrollTicking) {
|
||||
return;
|
||||
}
|
||||
scrollTicking = true;
|
||||
requestAnimationFrame(function () {
|
||||
const scrollThreshold = window.innerHeight;
|
||||
const shown = document.body.scrollTop > scrollThreshold || document.documentElement.scrollTop > scrollThreshold;
|
||||
toplink.classList.toggle("hidden", !shown);
|
||||
scrollTicking = false;
|
||||
});
|
||||
}, { passive: true });
|
||||
|
||||
</script>
|
||||
{{- end }}
|
||||
|
||||
{{- if (not site.Params.disableThemeToggle) }}
|
||||
<script>
|
||||
document.getElementById("theme-toggle").addEventListener("click", () => {
|
||||
const html = document.querySelector("html");
|
||||
if (html.dataset.theme === "dark") {
|
||||
html.dataset.theme = 'light';
|
||||
localStorage.setItem("pref-theme", 'light');
|
||||
} else {
|
||||
html.dataset.theme = 'dark';
|
||||
localStorage.setItem("pref-theme", 'dark');
|
||||
}
|
||||
})
|
||||
|
||||
</script>
|
||||
{{- end }}
|
||||
|
||||
{{- if (and (eq .Kind "page") (ne .Layout "archives") (ne .Layout "search") (.Param "ShowCodeCopyButtons")) }}
|
||||
<script>
|
||||
document.querySelectorAll('pre > code').forEach((codeblock) => {
|
||||
const container = codeblock.parentNode.parentNode;
|
||||
|
||||
const copybutton = document.createElement('button');
|
||||
copybutton.classList.add('copy-code');
|
||||
copybutton.innerHTML = '{{- i18n "code_copy" | default "copy" }}';
|
||||
|
||||
function copyingDone() {
|
||||
copybutton.innerHTML = '{{- i18n "code_copied" | default "copied!" }}';
|
||||
setTimeout(() => {
|
||||
copybutton.innerHTML = '{{- i18n "code_copy" | default "copy" }}';
|
||||
}, 2000);
|
||||
}
|
||||
|
||||
copybutton.addEventListener('click', (cb) => {
|
||||
if ('clipboard' in navigator) {
|
||||
navigator.clipboard.writeText(codeblock.textContent);
|
||||
copyingDone();
|
||||
return;
|
||||
}
|
||||
|
||||
const range = document.createRange();
|
||||
range.selectNodeContents(codeblock);
|
||||
const selection = window.getSelection();
|
||||
selection.removeAllRanges();
|
||||
selection.addRange(range);
|
||||
try {
|
||||
document.execCommand('copy');
|
||||
copyingDone();
|
||||
} catch (e) { };
|
||||
selection.removeRange(range);
|
||||
});
|
||||
|
||||
if (container.classList.contains("highlight")) {
|
||||
container.appendChild(copybutton);
|
||||
} else if (container.parentNode.firstChild == container) {
|
||||
// td containing LineNos
|
||||
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
|
||||
// table containing LineNos and code
|
||||
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
|
||||
} else {
|
||||
// code blocks not having highlight as parent class
|
||||
codeblock.parentNode.appendChild(copybutton);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
{{- end }}
|
||||
Reference in new issue
Block a user