13 lines
4.4 KiB
JavaScript
13 lines
4.4 KiB
JavaScript
const y=a=>a.replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,""").replace(/'/gu,"'");function q(a){switch(a){case 9:case 32:return!0}return!1}const w=3,M="@tab",T=M+":active",B=M.length,I=T.length,R=(a,c,t)=>{if(a.src.charCodeAt(c)!==64)return!1;let r=1;for(;r<I&&T.charCodeAt(r)===a.src.charCodeAt(c+r);r++);const b=r===I;if(!b&&r!==B)return!1;const h=c+r,o=a.skipSpaces(h);return o>h&&o<t?{isActive:b,pos:o}:!1},j=(a,c)=>(t,r,b,h)=>{if(c.state!==a)return!1;const o=t.bMarks[r]+t.tShift[r],d=t.eMarks[r],n=t.sCount[r],e=R(t,o,d);if(e===!1)return!1;if(h)return!0;let s=r+1,l=!1;for(;s<b;s++){const S=t.bMarks[s]+t.tShift[s];if(t.sCount[s]===n&&t.src[S]==="@"&&R(t,S,t.eMarks[s])){l=!0;break}}const v=t.parentType,i=t.lineMax,u=t.blkIndent;t.parentType="tab",t.lineMax=s-(l?1:0),t.blkIndent=n;const p=t.push(`${a}_tab_open`,"",1),f=e.pos,m=t.skipSpacesBack(d,f);let k=m,A;for(;k>f;){if(t.src.charCodeAt(k)===35){for(A=k-1;t.src.charCodeAt(A)===92;)A--;if((k-A)%2===1)break}k--}let $,C="";k!==f?(C=t.src.slice(t.skipSpaces(k+1),m),$=t.src.slice(f,t.skipSpacesBack(k,f))):$=t.src.slice(f,m),p.block=!0,p.markup=M,p.info=$,p.meta={active:e.isActive},C&&(p.meta.id=C),p.map=[r,s-(l?1:0)],t.md.block.tokenize(t,r+1,s+(l?0:1));const g=t.push(`${a}_tab_close`,"",-1);return g.block=!0,g.markup="",t.parentType=v,t.lineMax=i,t.blkIndent=u,t.line=s+(l?0:1),!0},z=(a,c)=>(t,r,b,h)=>{const o=t.bMarks[r]+t.tShift[r],d=t.eMarks[r],n=t.sCount[r];if(t.src.charCodeAt(o)!==58)return!1;let e=o+1;for(;e<=d&&t.src.charCodeAt(e)===58;)e++;const s=e-o;if(s<w)return!1;e=t.skipSpaces(e);for(let _=0;_<a.length;_++){if(t.src.charCodeAt(e)!==a.charCodeAt(_))return!1;e++}let l=!1,v;for(;e!==d;){if(v=t.src.charCodeAt(e++),v===35){l=!0;break}if(!q(v))return!1}if(h)return!0;let i=r+1,u=!1,p=e;for(;i<b;i++){const _=t.bMarks[i]+t.tShift[i],x=t.eMarks[i];if(_<x&&t.sCount[i]<n)break;if(t.sCount[i]===n&&t.src.charCodeAt(_)===58){for(e=_+1;e<=x&&t.src.charCodeAt(e)===58;e++);if(e-_>=s&&(e=t.skipSpaces(e),e>=x)){u=!0;break}}}const f=t.parentType,m=t.lineMax,k=t.blkIndent,A=c.state;t.parentType=`${a}_tabs`,t.lineMax=i-(u?1:0),t.blkIndent=n;const $=":".repeat(s);let C="";if(l){p=t.skipSpaces(p);const _=t.skipSpacesBack(d,p);p<_&&(C=t.src.slice(p,_))}const g=t.push(`${a}_tabs_open`,"",1);g.markup=$,g.block=!0,g.info=a,g.meta={id:C},g.map=[r,i-(u?1:0)],c.state=a,t.md.block.tokenize(t,r+1,i-(u?1:0)),c.state=A;const S=t.push(`${a}_tabs_close`,"",-1);return S.markup=$,S.block=!0,t.parentType=f,t.lineMax=m,t.blkIndent=k,t.line=i+(u?1:0),!0},O=a=>(c,t)=>{const r=[];let b=-1,h=!1,o=0;for(let d=t+1;d<c.length;d++){const{block:n,meta:e,type:s,info:l}=c[d];if(n){if(s===`${a}_tabs_open`){o++;continue}if(s===`${a}_tabs_close`){if(o===0)break;o--;continue}if(o>0)continue;if(s===`${a}_tab_open`){h=!0,e.index=r.length,e.active&&(b===-1?b=r.length:e.active=!1),r.push({title:l,index:r.length,id:e.id,isActive:e.active});continue}if(s===`${a}_tab_close`)continue;h||(c[d].type=`${a}_tabs_empty`,c[d].hidden=!0)}}return{active:b,data:r}},D=(a,c)=>{const{info:t,meta:r}=a[c];return{title:t,index:r.index,id:r.id,isActive:r.active}},J={state:null},E=(a,c)=>{const{name:t="tabs",openRender:r=(n,e,s,l,v,i)=>{const{active:u,data:p}=n,f=e[s];f.attrJoin("class",`${t}-tabs-wrapper`),f.meta.id&&f.attrJoin("data-id",f.meta.id);const m=p.map(({title:k,id:A},$)=>`<button type="button" class="${t}-tab-button${u===$?" active":""}" data-tab="${$}"${A?` data-id="${y(A)}"`:""}${u===$?" data-active":""}>${y(a.renderInline(k))}</button>`);return`<div${i.renderAttrs(f)}>
|
|
<div class="${t}-tabs-header">
|
|
${m.join(`
|
|
`)}
|
|
</div>
|
|
<div class="${t}-tabs-container">
|
|
`},closeRender:b=()=>` </div>
|
|
</div>
|
|
`,tabOpenRender:h=(n,e,s,l,v,i)=>{const u=e[s];return u.attrJoin("class",`${t}-tab-content${n.isActive?" active":""}`),u.attrSet("data-index",n.index.toString()),n.id&&u.attrSet("data-id",n.id.toString()),n.isActive&&u.attrJoin("data-active",""),`<div${i.renderAttrs(e[s])}>
|
|
`},tabCloseRender:o=()=>`</div>
|
|
`}=c??{},d=O(t);a.block.ruler.before("fence",`${t}_tabs`,z(t,J),{alt:["paragraph","reference","blockquote","list"]}),a.block.ruler.before("paragraph",`${t}_tab`,j(t,J),{alt:["paragraph","reference","blockquote","list"]}),a.renderer.rules[`${t}_tabs_open`]=(n,e,s,l,v)=>{const i=d(n,e);return r(i,n,e,s,l,v)},a.renderer.rules[`${t}_tabs_close`]=b,a.renderer.rules[`${t}_tab_open`]=(n,e,...s)=>{const l=D(n,e);return h(l,n,e,...s)},a.renderer.rules[`${t}_tab_close`]=o};export{E as tab};
|
|
//# sourceMappingURL=browser.js.map
|