@mdit/plugin-spoiler
Version:
spoiler plugin for MarkdownIt
3 lines (2 loc) • 1.38 kB
JavaScript
const k=(t,r)=>{const p=t.pos,n=t.src.charCodeAt(p);if(r||n!==33)return!1;const e=t.scanDelims(t.pos,!0);let{length:l}=e;if(l<2)return!1;const c=String.fromCharCode(n);if(l%2){const s=t.push("text","",0);s.content=c,l--}for(let s=0;s<l;s+=2){const o=t.push("text","",0);o.content=c+c,(e.can_open||e.can_close)&&t.delimiters.push({marker:33,length:0,token:t.tokens.length-1,end:-1,open:e.can_open,close:e.can_close})}return t.pos+=e.length,!0},i=(t,r,{tag:p,attrs:n})=>{let e;const l=[],c=r.length;for(let s=0;s<c;s++){const o=r[s];if(o.marker===33&&o.end!==-1){const a=r[o.end];e=t.tokens[o.token],e.type="spoiler_open",e.tag=p,e.nesting=1,e.markup="!!",e.attrs=n,e.content="",e=t.tokens[a.token],e.type="spoiler_close",e.tag=p,e.nesting=-1,e.markup="!!",e.content="",t.tokens[a.token-1].type==="text"&&t.tokens[a.token-1].content==="!"&&l.push(a.token-1)}}for(;l.length;){const s=l.pop();let o=s+1;for(;o<t.tokens.length&&t.tokens[o].type==="spoiler_close";)o++;o--,s!==o&&(e=t.tokens[o],t.tokens[o]=t.tokens[s],t.tokens[s]=e)}},g=(t,{tag:r="span",attrs:p=[["class","spoiler"],["tabindex","-1"]]}={})=>{t.inline.ruler.before("emphasis","spoiler",k),t.inline.ruler2.before("emphasis","spoiler",n=>{i(n,n.delimiters,{tag:r,attrs:p});for(const e of n.tokens_meta)e?.delimiters&&i(n,e.delimiters,{tag:r,attrs:p});return!0})};export{g as spoiler};
//# sourceMappingURL=index.js.map