hexo-theme-redefine
Version:
Redefine your writing with Hexo Theme Redefine.
2 lines • 1.84 kB
JavaScript
import{initTocToggle as e}from"../tools/tocToggle.js";import{getStyleStatus as t}from"../state/styleStatus.js";let n=null,i=!1;export function initTOC({signal:o}={}){o&&(e=>{!i&&e&&(i=!0,window.addEventListener("scroll",(()=>{n?.updateActiveTOCLink()}),{signal:e}))})(o);const r=document.querySelector(".toc-content-container");if(!r)return n=null,null;const c=r.querySelectorAll(".post-toc li"),s=e();if(0===c.length)return s.hideToggle(),r.remove(),document.querySelectorAll(".toc-marker").forEach((e=>{e.remove()})),n=null,null;const l={navItems:c,navLinks:r.querySelectorAll(".post-toc li a.nav-link"),updateActiveTOCLink(){if(!Array.isArray(l.sections))return;let e=l.sections.findIndex((e=>e&&e.getBoundingClientRect().top-100>0));-1===e?e=l.sections.length-1:e>0&&e--,this.activateTOCLink(e)},registerTOCScroll(){l.sections=[...l.navLinks].map((e=>document.getElementById(decodeURI(e.getAttribute("href")).replace("#",""))))},activateTOCLink(e){const t=l.navLinks[e];if(!t||t.classList.contains("active-current"))return;r.querySelectorAll(".active").forEach((e=>{e.classList.remove("active","active-current")})),t.classList.add("active","active-current");const n=r.getBoundingClientRect().top,i=r.offsetHeight>window.innerHeight?(r.offsetHeight-window.innerHeight)/2:0,o=t.getBoundingClientRect().top-n-Math.max(document.documentElement.clientHeight,window.innerHeight||0)/2+t.offsetHeight/2-i,c=r.scrollTop+o;r.scrollTo({top:c,behavior:"smooth"})},showTOCAside(){const openHandle=()=>{const e=t(),n="isOpenPageAside";e&&e.hasOwnProperty(n)?s.pageAsideHandleOfTOC(e[n]):s.pageAsideHandleOfTOC(!0)},e="init_open";theme.articles.toc.hasOwnProperty(e)?theme.articles.toc[e]?openHandle():s.pageAsideHandleOfTOC(!1):openHandle()}};return l.showTOCAside(),l.registerTOCScroll(),l.updateActiveTOCLink(),n=l,l}
//# sourceMappingURL=toc.js.map