UNPKG

rich-editor-to-markdown-parser

Version:

Rich Editor response convert to markdown.

11 lines (10 loc) 4.53 kB
import Q from"html-dom-parser";var $=({tagName:e,marks:r,markStyle:t})=>{switch(e){case"p":return r;case"h1":return`# ${r}`;case"h2":return`## ${r}`;case"h3":return`### ${r}`;case"h4":return`#### ${r}`;case"h5":return`##### ${r}`;case"strong":return t.strong+r+t.strong;case"em":return t.em+r+t.em;case"s":return`~~${r}~~`;case"u":return`<u>${r}</u>`;case"blockquote":return`> ${r}`;case"br":return` `;default:return""}},N=(e,r)=>e+r.hr,L=({src:e,alt:r})=>`![${r}](${e})`,x=(e,r)=>`[${e}](${r})`,b=({marks:e,markStyle:r,language:t,fileName:a})=>{let s=a?`:${a}`:"";return`${r.pre}${t}${s} ${e} ${r.pre}`},C=e=>`\`${e}\``,O=(e,r)=>`<span class="${r}">${e}</span>`;var S=["p","h1","h2","h3","h4","h5","strong","em","s","br","u","blockquote"],B=["hr"],U=["a"],d=["img","figure","figcaption"],A=["div","pre","code"],j=["table","tbody","tr","th","td"],F=["ul","ol","li"],G=["span"],I=e=>p(S,e.name),_=e=>p(B,e.name),v=e=>p(U,e.name),w=e=>p(d,e.name),z=e=>p(A,e.name),R=e=>p(j,e.name),y=e=>p(F,e.name),q=e=>e.attribs.class&&p(G,e.name),p=(e,r)=>e.some(t=>t===r);var h=({nodes:e,image:r,markStyle:t})=>{let a=[];for(let s of e)s.type==="text"&&a.push(K(s)),s.type==="tag"&&(a.push(X(s,r,t)),s.children.length!==0&&h({nodes:s.children,image:r,markStyle:t}));return a.join(` `)},K=e=>e.data,X=(e,r,t)=>{var a,s,m,u,o,f,g,E,M;if(I(e)){let n=i(e,r,t);return $({tagName:e.name,marks:n,markStyle:t})}if(_(e)){let n=i(e,r,t);return N(n,t)}if(v(e)){let{href:n}=e.attribs,c=i(e,r,t);return x(c,n)}if(w(e)){if(e.name==="figure")return i(e,r,t);let{alt:n}=e.attribs,c=J(e,r);return L({src:c,alt:n})}if(z(e)){if(e.name==="div")return i(e,r,t);if(e.name==="pre"){let n=i(e,r,t),c=Z(e).join("").replace("language-",""),l=((a=e.parentNode)==null?void 0:a.type)==="tag"?e.parentNode.attribs["data-filename"]:void 0;return b({marks:n,markStyle:t,language:c,fileName:l})}if(e.name==="code"){let n=i(e,r,t);return((s=e.parentNode)==null?void 0:s.type)==="tag"&&((m=e.parentNode)==null?void 0:m.name)==="pre"?n:C(n)}}if(y(e)){if(e.name==="ul"||e.name==="ol"){let k=i(e,r,t);return((u=e.parentNode)==null?void 0:u.type)==="tag"&&((o=e.parentNode)==null?void 0:o.name)==="li",k}let n=i(e,r,t),c=((f=e.parent)==null?void 0:f.type)==="tag"&&e.parent.prev&&(e.parent.name==="ul"||e.parent.name==="ol")?" ".repeat(D(e)-1):"",l=((g=e.parent)==null?void 0:g.type)==="tag"&&!e.prev&&e.parent.prev?` `:"",T=e.next?` `:"";if(((E=e.parentNode)==null?void 0:E.type)==="tag"&&((M=e.parentNode)==null?void 0:M.name)==="ol"){let k=Array.from(e.parentNode.children).indexOf(e)+1;return`${l}${c}${k} ${n}${T}`}return`${l}${c}- ${n}${T}`}if(R(e)){if(e.name==="table"||e.name==="tbody")return i(e,r,t);if(e.name==="tr"){let n=i(e,r,t),c=e.prev?"":`${"| --- ".repeat(e.children.length)}| `;return n+c}if(e.name==="th"||e.name==="td"){let n=i(e,r,t),c=e.next?" ":" |",l=e.next?"":` `;return`| ${n}${c}${l}`}}if(q(e)){let n=i(e,r,t),{class:c}=e.attribs;return O(n,c)}return e.children.length!==0&&h({nodes:e.children,image:r,markStyle:t}),""},i=(e,r,t)=>e.childNodes.map(a=>{let s=a.type==="tag"||a.type==="text"?a:null;return s===null?"":h({nodes:[s],image:r,markStyle:t})}).join(""),Z=e=>e.children.map(r=>r.type==="tag"?r.attribs.class:void 0).filter(Boolean),J=(e,r)=>{var u,o;let{src:t,width:a,height:s}=e.attribs,m=new URL(t);return r.size&&(m.searchParams.set("w",(u=a==null?void 0:a.toString())!=null?u:""),m.searchParams.set("h",(o=s==null?void 0:s.toString())!=null?o:"")),r.query&&new URLSearchParams(r.query).forEach((g,E)=>{m.searchParams.set(E,g)}),m.href},D=(e,r=0)=>{var a;let t=r;return((a=e.parent)==null?void 0:a.type)==="tag"&&y(e.parent)?D(e.parent,t+1):t};var H=e=>{var r,t,a,s,m,u,o,f,g,E,M,n,c,l;return{image:{size:(t=(r=e==null?void 0:e.image)==null?void 0:r.size)!=null?t:!0,query:(s=(a=e==null?void 0:e.image)==null?void 0:a.query)!=null?s:""},markStyle:{strong:(u=(m=e==null?void 0:e.markStyle)==null?void 0:m.strong)!=null?u:"**",em:(f=(o=e==null?void 0:e.markStyle)==null?void 0:o.em)!=null?f:"*",li:(E=(g=e==null?void 0:e.markStyle)==null?void 0:g.li)!=null?E:"-",hr:(n=(M=e==null?void 0:e.markStyle)==null?void 0:M.hr)!=null?n:"---",pre:(l=(c=e==null?void 0:e.markStyle)==null?void 0:c.pre)!=null?l:"```"}}};var P=(e,r)=>{let{image:t,markStyle:a}=H(r),s=Q(e);return s?h({nodes:s,image:t,markStyle:a}):(console.error("Failed to parse HTML string."),"")};var me=(e,r)=>{if(typeof e!="string")throw new TypeError("First argument must be a string");return e?P(e,r):""};export{me as parser}; //# sourceMappingURL=rich-editor-to-markdown-parser.js.map