summaryrefslogtreecommitdiff
path: root/layouts/_partials/scripts.html
diff options
context:
space:
mode:
authorEltrac <hi@guhub.cn>2025-07-14 19:26:28 +0800
committerEltrac <hi@guhub.cn>2025-07-14 19:26:28 +0800
commit29af8b6c2bd89c1966512b4305af345b8ee1ef82 (patch)
tree07a4801791db7d6a4670d53411f0689ec0090bfe /layouts/_partials/scripts.html
parent44c7def3f6958550ccf965971f1819c1d6c514f1 (diff)
refactor: clearer division of each partial and better folder structure
Diffstat (limited to 'layouts/_partials/scripts.html')
-rw-r--r--layouts/_partials/scripts.html67
1 files changed, 67 insertions, 0 deletions
diff --git a/layouts/_partials/scripts.html b/layouts/_partials/scripts.html
new file mode 100644
index 00000000..12beca10
--- /dev/null
+++ b/layouts/_partials/scripts.html
@@ -0,0 +1,67 @@
+<!-- third-party libraries -->
+{{- range .Site.Params.externalJSFiles }}
+ <script src="{{ $.Site.Params.staticPrefix }}{{ . | relURL }}"></script>
+{{- end }}
+
+{{- if or (in .Section "posts") (in .Section "cards") (in .Section "library") (eq .Type "single") }}
+ <script src="/js/fancybox.umd.js"></script>
+ <script>Fancybox.bind("[data-fancybox]");</script>
+{{- end }}
+
+{{ if .Params.aplayer }}
+<script>
+document.addEventListener("DOMContentLoaded", function () {
+ const lazyPlayers = document.querySelectorAll(".lazy-aplayer");
+ if (!lazyPlayers.length) return;
+
+ const loadAPlayer = () => {
+ if (window.APlayer) return Promise.resolve();
+ return new Promise((resolve, reject) => {
+ const script = document.createElement('script');
+ script.src = "https://unpkg.com/aplayer@1.10.1/dist/APlayer.min.js";
+ script.onload = resolve;
+ script.onerror = reject;
+ document.body.appendChild(script);
+ });
+ };
+
+ const observer = new IntersectionObserver((entries, obs) => {
+ entries.forEach(entry => {
+ if (entry.isIntersecting) {
+ loadAPlayer().then(() => {
+ const el = entry.target;
+ const id = el.dataset.id ? `-` + el.dataset.id : ``;
+ const container = document.createElement('div');
+ container.id = `aplayer${id}`;
+ el.appendChild(container);
+
+ const ap = new APlayer({
+ container: container,
+ audio: [{
+ name: el.dataset.name,
+ artist: el.dataset.artist,
+ url: el.dataset.url,
+ cover: el.dataset.cover
+ }]
+ });
+
+ ap.on('play', () => umami?.track?.('🎵 Play music with aPlayer'));
+ ap.on('ended', () => umami?.track?.('🎵 Played entiresong with aPlayer'));
+
+ obs.unobserve(el);
+ });
+ }
+ });
+ });
+
+ lazyPlayers.forEach(player => observer.observe(player));
+});
+</script>
+{{ end }}
+
+<script>
+ littlefoot.littlefoot({
+ dismissOnUnhover: true,
+ activateOnHover: true
+ });
+</script>