diff --git a/public/assets/js/toc.js b/public/assets/js/toc.js new file mode 100644 index 0000000..24ddbb2 --- /dev/null +++ b/public/assets/js/toc.js @@ -0,0 +1,23 @@ +(function () { + var headings = document.querySelectorAll('.post-content h2, .post-content h3'); + var links = document.querySelectorAll('.toc-list a'); + if (!headings.length || !links.length) return; + + var map = {}; + links.forEach(function (a) { + map[decodeURIComponent(a.getAttribute('href').slice(1))] = a; + }); + + var active = null; + var observer = new IntersectionObserver(function (entries) { + entries.forEach(function (entry) { + if (entry.isIntersecting) { + if (active) active.classList.remove('toc-active'); + active = map[entry.target.id] || null; + if (active) active.classList.add('toc-active'); + } + }); + }, { rootMargin: '-8% 0px -82% 0px', threshold: 0 }); + + headings.forEach(function (h) { observer.observe(h); }); +})(); diff --git a/templates/post_view.php b/templates/post_view.php index 8bdcc7f..0aefb68 100644 --- a/templates/post_view.php +++ b/templates/post_view.php @@ -308,31 +308,7 @@ $hasSources = (!empty($externalLinks) || !empty($files)) = 3): ?> - +