UNPKG

@bothub-chat/ui

Version:

Bothub UI Components

2 lines (1 loc) 2.85 kB
import{getTgMarkdown as e}from"./getTgMarkdown.js";const t=["STRONG","B","EM","I","U","S","STRIKE","DEL","CODE","A","SPAN"],n=(n,r,a)=>{var o;let l=null,s=!1,i=!1;if(n.startContainer){const e=n.startContainer.nodeType===Node.TEXT_NODE?n.startContainer.parentElement:n.startContainer;if(l=(null===(o=null==e?void 0:e.closest)||void 0===o?void 0:o.call(e,"li"))||null,l){const e=n.commonAncestorContainer,t=e.nodeType===Node.TEXT_NODE?e.parentElement:e;s=(null==t?void 0:t.closest("li"))===l;const r=document.createRange();r.selectNodeContents(l),r.setEnd(n.startContainer,n.startOffset),0===r.toString().trim().length&&(i=!0)}}let c=n.commonAncestorContainer;c.nodeType===Node.TEXT_NODE&&c.parentNode&&(c=c.parentNode);const m=document.createElement("div");m.appendChild(n.cloneContents());let d=m.innerHTML,g=c;for(;g&&g.tagName&&"DIV"!==g.tagName&&"P"!==g.tagName;){const e=["UL","OL","LI"].includes(g.tagName)&&!(s&&!i);if(t.includes(g.tagName)||e){const e=document.createElement(g.tagName);if("OL"===g.tagName){let t=parseInt(g.getAttribute("start")||"1",10);if(l&&l.closest("ol")===g){let e=l.previousElementSibling;for(;e;)t++,e=e.previousElementSibling}e.setAttribute("start",t.toString())}e.innerHTML=d,d=e.outerHTML}g=g.parentNode}m.innerHTML=d;const p=m.getElementsByTagName("*");Array.from(p).forEach(e=>{if("style"in e){const t=e;t.removeAttribute("class"),t.removeAttribute("style"),"TABLE"===t.tagName&&(t.style.setProperty("border-collapse","collapse"),t.style.setProperty("border","1px solid black")),"TD"!==t.tagName&&"TH"!==t.tagName||(t.style.setProperty("border","1px solid black"),t.style.setProperty("padding","4px")),"HR"===t.tagName&&(t.style.setProperty("width","100%"),t.style.setProperty("height","1px"),t.style.setProperty("background-color","black")),"LI"===t.tagName&&(t.style.textAlign="start",t.style.textIndent="-24pt",t.style.paddingLeft="24pt")}});const N=m.innerHTML,E=(e,t=!1)=>{e.querySelectorAll("li").forEach(n=>{let r=0,a=n.parentElement;for(;a&&a!==e;)"UL"!==a.tagName&&"OL"!==a.tagName||r++,a=a.parentElement;const o=" ".repeat(Math.max(0,r-1));let l="• ";const s=n.closest("ul, ol");if("OL"===(null==s?void 0:s.tagName)){const e=Array.from(s.querySelectorAll("li")).filter(e=>e.closest("ul, ol")===s).indexOf(n);l=`${parseInt(s.getAttribute("start")||"1",10)+e}${t?"\\.":"."} `}n.insertAdjacentText("afterbegin",o+l)})};let y="";if(r&&!a){const t=m.cloneNode(!0);E(t,!0);[{tags:["STRONG","B"],mark:"**"},{tags:["EM","I"],mark:"*"},{tags:["S","STRIKE","DEL"],mark:"~~"},{tags:["CODE"],mark:"`"}].forEach(({tags:e,mark:n})=>{e.forEach(e=>{const r=t.getElementsByTagName(e);Array.from(r).forEach(e=>{e.insertAdjacentText("afterbegin",n),e.insertAdjacentText("beforeend",n)})})}),y=e(t.innerText)}else{const e=m.cloneNode(!0);E(e,!1),y=e.innerText}return{html:N,plain:y}};export{n as processSelection};