@valaxyjs/utils
Version:
A utility library for Valaxy
2 lines (1 loc) • 1.46 kB
JavaScript
var a=[];function d(l,t,e){a.length=0;let s=[],r=[];return l.forEach(n=>{let o={...n,children:[]},i=r[r.length-1];for(;i&&i.level>=o.level;)r.pop(),i=r[r.length-1];if(o.element.classList.contains("ignore-header")||i&&"shouldIgnore"in i){r.push({level:o.level,shouldIgnore:!0});return}o.level>e||o.level<t||(a.push({element:o.element,link:o.link}),i?i.children.push(o):s.push(o),r.push(o))}),s}function f(l,t,e){if(l===0)return!0;let s=t[l];for(let r=l-1;r>=0;r--){let n=t[r];if(n.level<s.level&&n.level>=e[0]&&n.level<=e[1])return n.children==null&&(n.children=[]),n.children.push(s),!1}return!0}function c(l,t=[2,4]){let e=(typeof t=="object"&&!Array.isArray(t)?t.level:t)||2,[s,r]=typeof e=="number"?[e,e]:e==="deep"?[2,6]:e;return d(l,s,r)}function h(l){let t="";for(let e of Array.from(l.childNodes))if(e.nodeType===1){if(e.classList.contains("VABadge")||e.classList.contains("header-anchor"))continue;t+=e.textContent}else e.nodeType===3&&(t+=e.textContent);return t.trim()}function p(l={range:[2,4],selector:".markdown-body"}){let t=l.selector||".markdown-body",e=document.querySelectorAll(t),s=e[e.length-1],r=Array.from(s?.querySelectorAll(`${t} :where(h1,h2,h3,h4,h5,h6)`)||[]).filter(n=>l.filter?l.filter(n):!0).map(n=>{let o=Number(n.tagName[1]);return{element:n,title:h(n),link:`#${n.id}`,level:o,lang:n.lang}});return c(r,l.range)}export{f as addToParent,d as buildTree,p as getHeaders,c as resolveHeaders,a as resolvedHeaders,h as serializeHeader};