UNPKG

t_html_toc

Version:

toc html_toc word js paragraph

1 lines 4.35 kB
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.HtmlToc=t():e.HtmlToc=t()}(self,(function(){return e={579:e=>{const t=["h1","h2","h3","h5","h6"],i="_html_toc_level",s="_html_toc_node",l="_html_toc_parent",r="_html_toc_node_data",n={titleKey:"title",nodeToTitle:e=>e.innerText,childrenKey:"children",selecters:t,clearEmptyChildren:!0,clearParent:!1},o={scrollbehavior:"smooth",scrollParams:null,isChildrenHiddenKey:"hiddenChildren",isHiddenKey:"hidden",isActiveKey:"active",autoToggleChildren:!1,clickHanle:null};function c(e){try{return e[r][i]}catch(e){return null}}function a(e,t,i){i?e.setAttribute(t,i):e.removeAttribute(t)}e.exports=class{constructor(e,t){t=Object.assign({},n,t);const{titleKey:i,nodeToTitle:s,childrenKey:l,clearEmptyChildren:r,clearParent:o}=t;this.$options=t,this.$root=this.initRoot(e),this.$selectors=this.initSelectors(),this.$titleKey=i,this.$nodeToTitle=s,this.$childrenKey=l,this.$clearEmptyChildren=r,this.$clearParent=o,this.updateData()}initRoot(e){return this.parseSelector(e)}parseSelector(e){return 1===e.nodeType?e:/^\#/.test(e)?document.getElementById(e.slice(1)):/\^\./.test(e)?document.getElementsByClassName(e.slice(1))[0]:document.getElementsByTagName(e)[0]}initSelectors(){return(this.$options.selecters||t).filter(Boolean).map((e=>{const t={id:"",className:"",tag:""};return/^\./.test(e)?t.className=e.slice(1):/^\#/.test(e)?t.id=e.slice(1):t.tag=e.toUpperCase(),t}))}loopChild(e){e&&(this.isTargetNode(e)&&this.$targetList.push(e),[...e.children].forEach((e=>this.loopChild(e))))}isTargetNode(e){let t=!1,s=-1;for(let l=0;l<this.$selectors.length;l++){const{id:r,className:n,tag:o}=this.$selectors[l];if((r&&r===e.id||o&&o===e.tagName||n&&e.className&&e.className.includes(n))&&(t=!0,s=l),t)return e._isHtmlToc=!0,e[i]=s,!0}return!1}getPlatData(){return this.createPlatData()}getTreeData(){return this.createTreeData()}updateData(){this.$root?(this.$targetList=[],this.loopChild(this.$root)):console.log("root不能为空")}addEvent(e={}){this.$targetList.forEach((t=>{Object.keys(e).forEach((i=>{t.addEventListener(i,e[i],!1)}))}))}removeEvent(e={}){this.$targetList.forEach((t=>{Object.keys(e).forEach((i=>{t.removeEventListener(i,e[i],!1)}))}))}createPlatData(){return this.$targetList.map((e=>({[i]:e[i],[s]:e,[this.$titleKey]:this.$nodeToTitle(e)})))}createTreeData(){let e=[],t=[],r=null;return this.$targetList.forEach((n=>{let o=n[i],c={[i]:o,[this.$titleKey]:this.$nodeToTitle(n),[s]:n,[this.$childrenKey]:[]};if(t.push(c),r){if(o===r[i])r[l]?(r[l][this.$childrenKey].push(c),r=r[l],c[l]=r):(e.push(c),r=e[e.length-1]);else if(o>r[i])r[this.$childrenKey].push(c),c[l]=r;else if(o<r[i]){for(;r&&r[i]>=o;)r=r[l];r?r[this.$childrenKey].push(c):(r=c,e.push(r))}}else r=c,e.push(r)})),t.forEach((e=>{(this.$clearEmptyChildren&&!e[this.$childrenKey]||0===e[this.$childrenKey].length)&&delete e[this.$childrenKey],this.$clearParent&&delete e[l]})),e}mountToc(e,t={}){this.containers=this.containers||[];const i=this.parseSelector(e);this.generateToc(i,Object.assign({},o,t)),this.containers.push(i)}destory(){this.containers&&this.containers.forEach((e=>{e.innerHTML=null,e.removeEventListener("click",e._htmlClick,!1),delete e._htmlClick,delete e._html_old_active_toc}))}generateToc(e,t){e.innerHTML=null,this.getPlatData().forEach((t=>{const s=document.createElement("div");s.innerText=t[this.$titleKey],s.className=`html_toc_node html_toc_node_level_${t[i]}`,s[r]=t,e.appendChild(s)}));const{scrollbehavior:l,isChildrenHiddenKey:n,isHiddenKey:o,isActiveKey:h,autoToggleChildren:d,clickHanle:u,scrollParams:m}=t;function p(t){if(t.target[r]&&t.target[r][s])try{const i=t.target,p=t.target[r][s],f=u;if(f?f(i,p):p.scrollIntoView(m||{behavior:l}),d){const e=function(e,t){let i=e.hasAttribute(t);return newVal=!i,a(e,t,newVal),newVal}(i,n);let t=i;const s=c(i);for(;t&&t.nextSibling;){t=t.nextSibling;const i=c(t);if(!i)break;if(i>s)a(t,o,e);else if(i<=s)break}}e._html_old_active_toc&&a(e._html_old_active_toc,h,null),a(i,h,!0),e._html_old_active_toc=i}catch(e){console.log("自动处理节点出错",e)}}e.addEventListener("click",p,!1),e._htmlClick=p}}}},t={},function i(s){if(t[s])return t[s].exports;var l=t[s]={exports:{}};return e[s](l,l.exports,i),l.exports}(579);var e,t}));