0
Fork 0
mirror of https://github.com/fastmail/Squire.git synced 2024-12-22 15:23:29 -05:00
Squire/dist/squire.mjs

13 lines
50 KiB
JavaScript
Raw Normal View History

2023-10-01 21:46:50 -05:00
var st=()=>!0,E=class{constructor(n,e,t){this.root=n,this.currentNode=n,this.nodeType=e,this.filter=t||st}isAcceptableNode(n){let e=n.nodeType;return!!((e===Node.ELEMENT_NODE?1:e===Node.TEXT_NODE?4:0)&this.nodeType)&&this.filter(n)}nextNode(){let n=this.root,e=this.currentNode,t;for(;;){for(t=e.firstChild;!t&&e&&e!==n;)t=e.nextSibling,t||(e=e.parentNode);if(!t)return null;if(this.isAcceptableNode(t))return this.currentNode=t,t;e=t}}previousNode(){let n=this.root,e=this.currentNode,t;for(;;){if(e===n)return null;if(t=e.previousSibling,t)for(;e=t.lastChild;)t=e;else t=e.parentNode;if(!t)return null;if(this.isAcceptableNode(t))return this.currentNode=t,t;e=t}}previousPONode(){let n=this.root,e=this.currentNode,t;for(;;){for(t=e.lastChild;!t&&e&&e!==n;)t=e.previousSibling,t||(e=e.parentNode);if(!t)return null;if(this.isAcceptableNode(t))return this.currentNode=t,t;e=t}}};var k="\u200B",J=navigator.userAgent,ce=/Mac OS X/.test(J),de=/Windows NT/.test(J),_e=/iP(?:ad|hone|od)/.test(J)||ce&&!!navigator.maxTouchPoints,Fe=/Android/.test(J),He=/Gecko\//.test(J),se=/Edge\//.test(J),rt=!se&&/WebKit\//.test(J),B=ce||_e?"Meta-":"Ctrl-",ee=rt,Pe="onbeforeinput"in document&&"inputType"in new InputEvent("input"),I=/[^ \t\r\n]/;var ct=/^(?:#text|A(?:BBR|CRONYM)?|B(?:R|D[IO])?|C(?:ITE|ODE)|D(?:ATA|EL|FN)|EM|FONT|HR|I(?:FRAME|MG|NPUT|NS)?|KBD|Q|R(?:P|T|UBY)|S(?:AMP|MALL|PAN|TR(?:IKE|ONG)|U[BP])?|TIME|U|VAR|WBR)$/,dt=new Set(["BR","HR","IFRAME","IMG","INPUT"]),ft=0,xe=1,Ue=2,qe=3,fe=new WeakMap,We=()=>{fe=new WeakMap},M=o=>dt.has(o.nodeName),ve=o=>{switch(o.nodeType){case 3:return xe;case 1:case 11:if(fe.has(o))return fe.get(o);break;default:return ft}let n;return Array.from(o.childNodes).every(N)?ct.test(o.nodeName)?n=xe:n=Ue:n=qe,fe.set(o,n),n},N=o=>ve(o)===xe,P=o=>ve(o)===Ue,Q=o=>ve(o)===qe;var p=(o,n,e)=>{let t=document.createElement(o);if(n instanceof Array&&(e=n,n=null),n)for(let i in n){let s=n[i];s!==void 0&&t.setAttribute(i,s)}return e&&e.forEach(i=>t.appendChild(i)),t},Le=(o,n)=>M(o)||o.nodeType!==n.nodeType||o.nodeName!==n.nodeName?!1:o instanceof HTMLElement&&n instanceof HTMLElement?o.nodeName!=="A"&&o.className===n.className&&o.style.cssText===n.style.cssText:!0,ue=(o,n,e)=>{if(o.nodeName!==n)return!1;for(let t in e)if(!("getAttribute"in o)||o.getAttribute(t)!==e[t])return!1;return!0},S=(o,n,e,t)=>{for(;o&&o!==n;){if(ue(o,e,t))return o;o=o.parentNode}return null},he=(o,n)=>{let e=o.childNodes;for(;n&&o instanceof Element;)o=e[n-1],e=o.childNodes,n=e.length;return o},Re=(o,n)=>{let e=o;if(e instanceof Element){let t=e.childNodes;if(n<t.length)e=t[n];else{for(;e&&!e.nextSibling;)e=e.parentNode;e&&(e=e.nextSibling)}}return e},y=o=>o instanceof Element||o instanceof DocumentFragment?o.childNodes.length:o instanceof CharacterData?o.length:0,T=o=>{let n=document.createDocumentFragment(),e=o.firstChild;for(;e;)n.appendChild(e),e=o.firstChild;return n},C=o=>{let n=o.parentNode;return n&&n.removeChild(o),o},R=(o,n)=>{let e=o.parentNode;e&&e.replaceChild(n,o)};var ut=o=>o instanceof Element?o.nodeName==="BR":I.test(o.data),te=(o,n)=>{let e=o.parentNode;for(;N(e);)e=e.parentNode;let t=new E(e,5,ut);return t.currentNode=o,!!t.nextNode()||n&&!t.previousNode()},me=(o,n)=>{let e=new E(o,4),t,i;for(;t=e.nextNode();)for(;(i=t.data.indexOf(k))>-1&&(!n||t.parentNode!==n);)if(t.length===1){let s=t,r=s.parentNode;for(;r&&(r.removeChild(s),e.currentNode=r,!(!N(r)||y(r)));)s=r,r=s.parentNode;break}else t.deleteData(i,1)};var ht=0,mt=1,pt=2,Nt=3,K=(o,n,e)=>{let t=document.createRange();if(t.selectNode(n),e){let i=o.compareBoundaryPoints(Nt,t)>-1,s=o.compareBoundaryPoints(mt,t)<1;return!i&&!s}else{let i=o.compareBoundaryPoints(ht,t)<1,s=o.compareBoundaryPoints(pt,t)>-1;return i&&s}},_=o=>{let{startContainer:n,startOffset:e,endContainer:t,endOffset:i}=o;for(;!(n instanceof Text);){let s=n.childNodes[e];if(!s||M(s)){if(e&&(s=n.childNodes[e-1],s instanceof Text)){let r=s,l;for(;!r.length&&(l=r.previousSibling)&&l instanceof Text;)r.remove(),r=l;n=r,e=r.data.length}break}n=s,e=0}if(i)for(;!(t instanceof Text);){let s=t.childNodes[i-1];if(!s||M(s)){if(s&&s.
`,r=!1),i=t.nextNode();return s=s.replace(/ /g," "),s};var De=Array.prototype.indexOf,Qe=(o,n,e,t,i,s,r)=>{let l=o.clipboardData;if(se||!l)return!1;let a=s?"":ge(n),d=L(n,e),c=G(n,e),f=e;d===c&&d?.contains(n.commonAncestorContainer)&&(f=d);let u;t?u=H(n,e):(n=n.cloneRange(),_(n),q(n,f,f,e),u=n.cloneContents());let m=n.commonAncestorContainer;for(m instanceof Text&&(m=m.parentNode);m&&m!==f;){let g=m.cloneNode(!1);g.appendChild(u),u=g,m=m.parentNode}let h;if(u.childNodes.length===1&&u.childNodes[0]instanceof Text)a=u.childNodes[0].data.replace(/ /g," "),r=!0;else{let g=p("DIV");g.appendChild(u),h=g.innerHTML,i&&(h=i(h))}return r||s&&h!==void 0&&(a=s(h)),de&&(a=a.replace(/\r?\n/g,`\r
`)),!r&&h&&a!==h&&l.setData("text/html",h),l.setData("text/plain",a),o.preventDefault(),!0},Xe=function(o){let n=this.getSelection(),e=this._root;if(n.collapsed){o.preventDefault();return}this.saveUndoState(n),Qe(o,n,e,!0,this._config.willCutCopy,this._config.toPlainText,!1)||setTimeout(()=>{try{this._ensureBottomLine()}catch(i){this._config.didError(i)}},0),this.setSelection(n)},$e=function(o){Qe(o,this.getSelection(),this._root,!1,this._config.willCutCopy,this._config.toPlainText,!1)},Ae=function(o){this._isShiftDown=o.shiftKey},Ve=function(o){let n=o.clipboardData,e=n?.items,t=this._isShiftDown,i=!1,s=!1,r=null,l=null;if(e){let b=e.length;for(;b--;){let O=e[b],A=O.type;A==="text/html"?l=O:A==="text/plain"||A==="text/uri-list"?r=O:A==="text/rtf"?i=!0:/^image\/.*/.test(A)&&(s=!0)}if(s&&!(i&&l)){o.preventDefault(),this.fireEvent("pasteImage",{clipboardData:n});return}if(!se){o.preventDefault(),l&&(!t||!r)?l.getAsString(O=>{this.insertHTML(O,!0)}):r&&r.getAsString(O=>{let A=!1,Ie=this.getSelection();if(!Ie.collapsed&&I.test(Ie.toString())){let Me=this.linkRegExp.exec(O);A=!!Me&&Me[0].length===O.length}A?this.makeLink(O):this.insertPlainText(O,!0)});return}}let a=n?.types;if(!se&&a&&(De.call(a,"text/html")>-1||!He&&De.call(a,"text/plain")>-1&&De.call(a,"text/rtf")<0)){o.preventDefault();let b;!t&&(b=n.getData("text/html"))?this.insertHTML(b,!0):((b=n.getData("text/plain"))||(b=n.getData("text/uri-list")))&&this.insertPlainText(b,!0);return}let d=document.body,c=this.getSelection(),f=c.startContainer,u=c.startOffset,m=c.endContainer,h=c.endOffset,g=p("DIV",{contenteditable:"true",style:"position:fixed; overflow:hidden; top:0; right:100%; width:1px; height:1px;"});d.appendChild(g),c.selectNodeContents(g),this.setSelection(c),setTimeout(()=>{try{let b="",O=g,A;for(;g=O;)O=g.nextSibling,C(g),A=g.firstChild,A&&A===g.lastChild&&A instanceof HTMLDivElement&&(g=A),b+=g.innerHTML;this.setSelection($(f,u,m,h)),b&&this.insertHTML(b,!0)}catch(b){this._config.didError(b)}},0)},Ye=function(o){if(!o.dataTransfer)return;let n=o.dataTransfer.types,e=n.length,t=!1,i=!1;for(;e--;)switch(n[e]){case"text/plain":t=!0;break;case"text/html":i=!0;break;default:return}(i||t&&this.saveUndoState)&&this.saveUndoState()};var we=(o,n,e)=>{n.preventDefault(),o.splitBlock(n.shiftKey,e)};var oe=(o,n)=>{try{n||(n=o.getSelection());let e=n.startContainer;e instanceof Text&&(e=e.parentNode);let t=e;for(;N(t)&&(!t.textContent||t.textContent===k);)e=t,t=e.parentNode;e!==t&&(n.setStart(t,Array.from(t.childNodes).indexOf(e)),n.collapse(!0),t.removeChild(e),P(t)||(t=z(t,o._root)||o._root),x(t),_(n)),e===o._root&&(e=e.firstChild)&&e.nodeName==="BR"&&C(e),o._ensureBottomLine(),o.setSelection(n),o._updatePath(n,!0)}catch(e){o._config.didError(e)}},Ee=(o,n)=>{let e;for(;(e=o.parentNode)&&!(e===n||e.isContentEditable);)o=e;C(o)},Te=(o,n,e)=>{if(S(n,o._root,"A"))return;let t=n.data||"",i=Math.max(t.lastIndexOf(" ",e-1),t.lastIndexOf("\xA0",e-1))+1,s=t.slice(i,e),r=o.linkRegExp.exec(s);if(r){let l=o.getSelection();o._docWasChanged(),o._recordUndoState(l),o._getRangeAndRemoveBookmark(l);let a=i+r.index,d=a+r[0].length,c=l.startContainer===n,f=l.startOffset-d;a&&(n=n.splitText(a));let u=o._config.tagAttributes.a,m=p("A",Object.assign({href:r[1]?/^(?:ht|f)tps?:/i.test(r[1])?r[1]:"http://"+r[1]:"mailto:"+r[0]},u));m.textContent=t.slice(a,d),n.parentNode.insertBefore(m,n),n.data=t.slice(d),c&&(l.setStart(n,f),l.setEnd(n,f)),o.setSelection(l)}};var Je=(o,n,e)=>{let t=o._root;if(o._removeZWS(),o.saveUndoState(e),!e.collapsed)n.preventDefault(),H(e,t),oe(o,e);else if(X(e,t)){n.preventDefault();let i=L(e,t);if(!i)return;let s=i;D(s.parentNode,t);let r=z(s,t);if(r){if(!r.isContentEditable){Ee(r,t);return}for(Y(r,s,e,t),s=r.parentNode;s!==t&&!s.nextSibling;)s=s.parentNode;s!==t&&(s=s.nextSibling)&&F(s,t),o.setSelection(e)}else if(s){if(S(s,t,"UL")||S(s,t,"OL")){o.decreaseListLevel(e);return}else if(S(s,t,"BLOCKQUOTE")){o.removeQuote(e);return}o.setSelection(e),o._updatePath(e,!0)}}else{_(e);let i=e.startContainer,s=e.startOffset,r=i.parentNode;i instanceof Text&&r instanceof HTMLA
`)&&n.preventDefault();break;case"insertLineBreak":n.preventDefault(),this.splitBlock(!0);break;case"insertParagraph":n.preventDefault(),this.splitBlock(!1);break;case"insertOrderedList":n.preventDefault(),this.makeOrderedList();break;case"insertUnoderedList":n.preventDefault(),this.makeUnorderedList();break;case"historyUndo":n.preventDefault(),this.undo();break;case"historyRedo":n.preventDefault(),this.redo();break;case"formatBold":n.preventDefault(),this.bold();break;case"formaItalic":n.preventDefault(),this.italic();break;case"formatUnderline":n.preventDefault(),this.underline();break;case"formatStrikeThrough":n.preventDefault(),this.strikethrough();break;case"formatSuperscript":n.preventDefault(),this.superscript();break;case"formatSubscript":n.preventDefault(),this.subscript();break;case"formatJustifyFull":case"formatJustifyCenter":case"formatJustifyRight":case"formatJustifyLeft":{n.preventDefault();let e=n.inputType.slice(13).toLowerCase();e==="full"&&(e="justify"),this.setTextAlignment(e);break}case"formatRemove":n.preventDefault(),this.removeAllFormatting();break;case"formatSetBlockTextDirection":{n.preventDefault();let e=n.data;e==="null"&&(e=null),this.setTextDirection(e);break}case"formatBackColor":n.preventDefault(),this.setHighlightColor(n.data);break;case"formatFontColor":n.preventDefault(),this.setTextColor(n.data);break;case"formatFontName":n.preventDefault(),this.setFontFace(n.data);break}}handleEvent(n){this.fireEvent(n.type,n)}fireEvent(n,e){let t=this._events.get(n);if(/^(?:focus|blur)/.test(n)){let i=this._root===document.activeElement;if(n==="focus"){if(!i||this._isFocused)return this;this._isFocused=!0}else{if(i||!this._isFocused)return this;this._isFocused=!1}}if(t){let i=e instanceof Event?e:new CustomEvent(n,{detail:e});t=t.slice();for(let s of t)try{"handleEvent"in s?s.handleEvent(i):s.call(this,i)}catch(r){this._config.didError(r)}}return this}addEventListener(n,e){let t=this._events.get(n),i=this._root;return t||(t=[],this._events.set(n,t),this.customEvents.has(n)||(n==="selectionchange"&&(i=document),i.addEventListener(n,this,!0))),t.push(e),this}removeEventListener(n,e){let t=this._events.get(n),i=this._root;if(t){if(e){let s=t.length;for(;s--;)t[s]===e&&t.splice(s,1)}else t.length=0;t.length||(this._events.delete(n),this.customEvents.has(n)||(n==="selectionchange"&&(i=document),i.removeEventListener(n,this,!0)))}return this}focus(){return this._root.focus({preventScroll:!0}),this}blur(){return this._root.blur(),this}_enableRestoreSelection(){this._willRestoreSelection=!0}_disableRestoreSelection(){this._willRestoreSelection=!1}_restoreSelection(){this._willRestoreSelection&&this.setSelection(this._lastSelection)}_removeZWS(){this._mayHaveZWS&&(me(this._root),this._mayHaveZWS=!1)}_saveRangeToBookmark(n){let e=p("INPUT",{id:this.startSelectionId,type:"hidden"}),t=p("INPUT",{id:this.endSelectionId,type:"hidden"}),i;j(n,e),n.collapse(!1),j(n,t),e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_PRECEDING&&(e.id=this.endSelectionId,t.id=this.startSelectionId,i=e,e=t,t=i),n.setStartAfter(e),n.setEndBefore(t)}_getRangeAndRemoveBookmark(n){let e=this._root,t=e.querySelector("#"+this.startSelectionId),i=e.querySelector("#"+this.endSelectionId);if(t&&i){let s=t.parentNode,r=i.parentNode,l=Array.from(s.childNodes).indexOf(t),a=Array.from(r.childNodes).indexOf(i);s===r&&(a-=1),t.remove(),i.remove(),n||(n=document.createRange()),n.setStart(s,l),n.setEnd(r,a),ne(s,n),s!==r&&ne(r,n),n.collapsed&&(s=n.startContainer,s instanceof Text&&(r=s.childNodes[n.startOffset],(!r||!(r instanceof Text))&&(r=s.childNodes[n.startOffset-1]),r&&r instanceof Text&&(n.setStart(r,0),n.collapse(!0))))}return n||null}getSelection(){let n=window.getSelection(),e=this._root,t=null;if(this._isFocused&&n&&n.rangeCount){t=n.getRangeAt(0).cloneRange();let i=t.startContainer,s=t.endContainer;i&&M(i)&&t.setStartBefore(i),s&&M(s)&&t.setEndBefore(s)}return t&&e.contains(t.commonAncestorContainer)?this._lastSelection=t:(t=this._lastSelection,document.contains(t.commonAncestorContainer)||(t=null)),t||(t=$(e.firstElementChild||e,0)),t}s
`),s=this._config,r=s.blockTag,l=s.blockAttributes,a="</"+r+">",d="<"+r;for(let c in l)d+=" "+c+'="'+ke(l[c])+'"';d+=">";for(let c=0,f=i.length;c<f;c+=1){let u=i[c];u=ke(u).replace(/ (?=(?: |$))/g,"&nbsp;"),c&&(u=d+(u||"<BR>")+a),i[c]=u}return this.insertHTML(i.join(""),e)}getSelectedText(n){return ge(n||this.getSelection())}getFontInfo(n){let e={color:void 0,backgroundColor:void 0,fontFamily:void 0,fontSize:void 0};n||(n=this.getSelection());let t=0,i=n.commonAncestorContainer;if(n.collapsed||i instanceof Text)for(i instanceof Text&&(i=i.parentNode);t<4&&i;){let s=i.style;if(s){let r=s.color;!e.color&&r&&(e.color=r,t+=1);let l=s.backgroundColor;!e.backgroundColor&&l&&(e.backgroundColor=l,t+=1);let a=s.fontFamily;!e.fontFamily&&a&&(e.fontFamily=a,t+=1);let d=s.fontSize;!e.fontSize&&d&&(e.fontSize=d,t+=1)}i=i.parentNode}return e}hasFormat(n,e,t){n=n.toUpperCase(),e||(e={}),t||(t=this.getSelection()),!t.collapsed&&t.startContainer instanceof Text&&t.startOffset===t.startContainer.length&&t.startContainer.nextSibling&&t.setStartBefore(t.startContainer.nextSibling),!t.collapsed&&t.endContainer instanceof Text&&t.endOffset===0&&t.endContainer.previousSibling&&t.setEndAfter(t.endContainer.previousSibling);let i=this._root,s=t.commonAncestorContainer;if(S(s,i,n,e))return!0;if(s instanceof Text)return!1;let r=new E(s,4,d=>K(t,d,!0)),l=!1,a;for(;a=r.nextNode();){if(!S(a,i,n,e))return!1;l=!0}return l}changeFormat(n,e,t,i){return t||(t=this.getSelection()),this.saveUndoState(t),e&&(t=this._removeFormat(e.tag.toUpperCase(),e.attributes||{},t,i)),n&&(t=this._addFormat(n.tag.toUpperCase(),n.attributes||{},t)),this.setSelection(t),this._updatePath(t,!0),this.focus()}_addFormat(n,e,t){let i=this._root;if(t.collapsed){let s=x(p(n,e));j(t,s);let r=s.firstChild||s,l=r instanceof Text?r.length:0;t.setStart(r,l),t.collapse(!0);let a=s;for(;N(a);)a=a.parentNode;me(a,s)}else{let s=new E(t.commonAncestorContainer,5,c=>(c instanceof Text||c.nodeName==="BR"||c.nodeName==="IMG")&&K(t,c,!0)),{startContainer:r,startOffset:l,endContainer:a,endOffset:d}=t;if(s.currentNode=r,!(r instanceof Element)&&!(r instanceof Text)||!s.filter(r)){let c=s.nextNode();if(!c)return t;r=c,l=0}do{let c=s.currentNode;if(!S(c,i,n,e)){c===a&&c.length>d&&c.splitText(d),c===r&&l&&(c=c.splitText(l),a===r?(a=c,d-=l):a===r.parentNode&&(d+=1),r=c,l=0);let u=p(n,e);R(c,u),u.appendChild(c)}}while(s.nextNode());t=$(r,l,a,d)}return t}_removeFormat(n,e,t,i){this._saveRangeToBookmark(t);let s;t.collapsed&&(ee?s=document.createTextNode(k):s=document.createTextNode(""),j(t,s));let r=t.commonAncestorContainer;for(;N(r);)r=r.parentNode;let l=t.startContainer,a=t.startOffset,d=t.endContainer,c=t.endOffset,f=[],u=(h,g)=>{if(K(t,h,!1))return;let b,O;if(!K(t,h,!0)){!(h instanceof HTMLInputElement)&&(!(h instanceof Text)||h.data)&&f.push([g,h]);return}if(h instanceof Text)h===d&&c!==h.length&&f.push([g,h.splitText(c)]),h===l&&a&&(h.splitText(a),f.push([g,h]));else for(b=h.firstChild;b;b=O)O=b.nextSibling,u(b,g)},m=Array.from(r.getElementsByTagName(n)).filter(h=>K(t,h,!0)&&ue(h,n,e));return i||m.forEach(h=>{u(h,h)}),f.forEach(([h,g])=>{h=h.cloneNode(!1),R(g,h),h.appendChild(g)}),m.forEach(h=>{R(h,T(h))}),this._getRangeAndRemoveBookmark(t),s&&t.collapse(!1),ne(r,t),t}bold(){return this.changeFormat({tag:"B"})}removeBold(){return this.changeFormat(null,{tag:"B"})}italic(){return this.changeFormat({tag:"I"})}removeItalic(){return this.changeFormat(null,{tag:"I"})}underline(){return this.changeFormat({tag:"U"})}removeUnderline(){return this.changeFormat(null,{tag:"U"})}strikethrough(){return this.changeFormat({tag:"S"})}removeStrikethrough(){return this.changeFormat(null,{tag:"S"})}subscript(){return this.changeFormat({tag:"SUB"},{tag:"SUP"})}removeSubscript(){return this.changeFormat(null,{tag:"SUB"})}superscript(){return this.changeFormat({tag:"SUP"},{tag:"SUB"})}removeSuperscript(){return this.changeFormat(null,{tag:"SUP"})}makeLink(n,e){let t=this.getSelection();if(t.collapsed){let i=n.indexOf(":")+1;if(i)for(;n[i]==="/";)i+=1;j(t,document.createTextNode(n.slice(i)))}return e=Object.assign({hr
`||X(e,t))&&(r.data.charAt(u)===`
`||Z(e,t))?(r.deleteData(u&&u-1,u?2:1),l=w(r,u&&u-1,t,t),r=l.previousSibling,r.textContent||C(r),r=this.createDefaultBlock(),l.parentNode.insertBefore(r,l),l.textContent||C(l),e.setStart(r,0)):(r.insertData(u,`
`),x(s),r.length===u+1?e.setStartAfter(r):e.setStart(r,u+1)),e.collapse(!0),this.setSelection(e),this._updatePath(e,!0),this._docWasChanged(),this}if(!i||n||/^T[HD]$/.test(i.nodeName))return Oe(e,"A",t),j(e,p("BR")),e.collapse(!1),this.setSelection(e),this._updatePath(e,!0),this;if((s=S(i,t,"LI"))&&(i=s),ae(i)){if(S(i,t,"UL")||S(i,t,"OL"))return this.decreaseListLevel(e),this;if(S(i,t,"BLOCKQUOTE"))return this.removeQuote(e),this}r=e.startContainer;let a=e.startOffset,d=this.tagAfterSplit[i.nodeName];l=w(r,a,i.parentNode,this._root);let c=this._config,f=null;for(d||(d=c.blockTag,f=c.blockAttributes),ue(l,d,f)||(i=p(d,f),l.dir&&(i.dir=l.dir),R(l,i),i.appendChild(T(l)),l=i),me(i),Se(i),x(i);l instanceof Element;){let u=l.firstChild,m;if(l.nodeName==="A"&&(!l.textContent||l.textContent===k)){u=document.createTextNode(""),R(l,u),l=u;break}for(;u&&u instanceof Text&&!u.data&&(m=u.nextSibling,!(!m||m.nodeName==="BR"));)C(u),u=m;if(!u||u.nodeName==="BR"||u instanceof Text)break;l=u}return e=$(l,0),this.setSelection(e),this._updatePath(e,!0),this}forEachBlock(n,e,t){t||(t=this.getSelection()),e&&this.saveUndoState(t);let i=this._root,s=L(t,i),r=G(t,i);if(s&&r)do if(n(s)||s===r)break;while(s=W(s,i));return e&&(this.setSelection(t),this._updatePath(t,!0)),this}modifyBlocks(n,e){e||(e=this.getSelection()),this._recordUndoState(e,this._isInUndoState);let t=this._root;ye(e,t),q(e,t,t,t);let i=Be(e,t,t);if(!e.collapsed){let s=e.endContainer;if(s===t)e.collapse(!1);else{for(;s.parentNode!==t;)s=s.parentNode;e.setStartBefore(s),e.collapse(!0)}}return j(e,n.call(this,i)),e.endOffset<e.endContainer.childNodes.length&&F(e.endContainer.childNodes[e.endOffset],t),F(e.startContainer.childNodes[e.startOffset],t),this._getRangeAndRemoveBookmark(e),this.setSelection(e),this._updatePath(e,!0),this}setTextAlignment(n){return this.forEachBlock(e=>{let t=e.className.split(/\s+/).filter(i=>!!i&&!/^align/.test(i)).join(" ");n?(e.className=t+" align-"+n,e.style.textAlign=n):(e.className=t,e.style.textAlign="")},!0),this.focus()}setTextDirection(n){return this.forEachBlock(e=>{n?e.dir=n:e.removeAttribute("dir")},!0),this.focus()}_getListSelection(n,e){let t=n.commonAncestorContainer,i=n.startContainer,s=n.endContainer;for(;t&&t!==e&&!/^[OU]L$/.test(t.nodeName);)t=t.parentNode;if(!t||t===e)return null;for(i===t&&(i=i.childNodes[n.startOffset]),s===t&&(s=s.childNodes[n.endOffset]);i&&i.parentNode!==t;)i=i.parentNode;for(;s&&s.parentNode!==t;)s=s.parentNode;return[t,i,s]}increaseListLevel(n){n||(n=this.getSelection());let e=this._root,t=this._getListSelection(n,e);if(!t)return this.focus();let[i,s,r]=t;if(!s||s===i.firstChild)return this.focus();this._recordUndoState(n,this._isInUndoState);let l=i.nodeName,a=s.previousSibling,d,c;a.nodeName!==l&&(d=this._config.tagAttributes[l.toLowerCase()],a=p(l,d),i.insertBefore(a,s));do c=s===r?null:s.nextSibling,a.appendChild(s);while(s=c);return c=a.nextSibling,c&&F(c,e),this._getRangeAndRemoveBookmark(n),this.setSelection(n),this._updatePath(n,!0),this.focus()}decreaseListLevel(n){n||(n=this.getSelection());let e=this._root,t=this._getListSelection(n,e);if(!t)return this.focus();let[i,s,r]=t;s||(s=i.firstChild),r||(r=i.lastChild),this._recordUndoState(n,this._isInUndoState);let l,a=null;if(s){let d=i.parentNode;if(a=r.nextSibling?w(i,r.nextSibling,d,e):i.nextSibling,d!==e&&d.nodeName==="LI"){for(d=d.parentNode;a;)l=a.nextSibling,r.appendChild(a),a=l;a=i.parentNode.nextSibling}let c=!/^[OU]L$/.test(d.nodeName);do l=s===r?null:s.nextSibling,i.removeChild(s),c&&s.nodeName==="LI"&&(s=this.createDefaultBlock([T(s)])),d.insertBefore(s,a);while(s=l)}return i.firstChild||C(i),a&&F(a,e),this._getRangeAndRemoveBookmark(n),this.setSelection(n),this._updatePath(n,!0),this.focus()}_makeList(n,e){let t=le(n,this._root),i=this._config.tagAttributes,s=i[e.toLowerCase()],r=i.li,l;for(;l=t.nextNode();)if(l.parentNode instanceof HTMLLIElement&&(l=l.parentNode,t.currentNode=l.lastChild),l instanceof HTMLLIElement){l=l.parentNode;let a=l.nodeName;a!==e&&/^[OU]L$/.test(a)&&R(l,p(e,s,[T(l)]))}else{let a=p("LI",r);l.dir&&(a.dir=l.dir);let
`)):C(f)}for(a=r.querySelectorAll("CODE"),c=a.length;c--;)R(a[c],T(a[c]));i.childNodes.length&&i.appendChild(document.createTextNode(`
`)),i.appendChild(T(r))}let l=new E(i,4);for(;r=l.nextNode();)r.data=r.data.replace(/ /g," ");return i.normalize(),x(p("PRE",this._config.tagAttributes.pre,[i]))},n),this.focus()):this.changeFormat({tag:"CODE",attributes:this._config.tagAttributes.code},null,n),this}removeCode(){let n=this.getSelection(),e=n.commonAncestorContainer;return S(e,this._root,"PRE")?(this.modifyBlocks(i=>{let s=this._root,r=i.querySelectorAll("PRE"),l=r.length;for(;l--;){let a=r[l],d=new E(a,4),c;for(;c=d.nextNode();){let f=c.data;f=f.replace(/ (?= )/g,"\xA0");let u=document.createDocumentFragment(),m;for(;(m=f.indexOf(`
`))>-1;)u.appendChild(document.createTextNode(f.slice(0,m))),u.appendChild(p("BR")),f=f.slice(m+1);c.parentNode.insertBefore(u,c),c.data=f}D(a,s),R(a,T(a))}return i},n),this.focus()):this.changeFormat(null,{tag:"CODE"},n),this}toggleCode(){return this.hasFormat("PRE")||this.hasFormat("CODE")?this.removeCode():this.code(),this}_removeFormatting(n,e){for(let t=n.firstChild,i;t;t=i){if(i=t.nextSibling,N(t)){if(t instanceof Text||t.nodeName==="BR"||t.nodeName==="IMG"){e.appendChild(t);continue}}else if(P(t)){e.appendChild(this.createDefaultBlock([this._removeFormatting(t,document.createDocumentFragment())]));continue}this._removeFormatting(t,e)}return e}removeAllFormatting(n){if(n||(n=this.getSelection()),n.collapsed)return this.focus();let e=this._root,t=n.commonAncestorContainer;for(;t&&!P(t);)t=t.parentNode;if(t||(ye(n,e),t=e),t instanceof Text)return this.focus();this.saveUndoState(n),q(n,t,t,e);let i=n.startContainer,s=n.startOffset,r=n.endContainer,l=n.endOffset,a=document.createDocumentFragment(),d=document.createDocumentFragment(),c=w(r,l,t,e),f=w(i,s,t,e),u;for(;f!==c;)u=f.nextSibling,a.appendChild(f),f=u;if(this._removeFormatting(a,d),d.normalize(),f=d.firstChild,u=d.lastChild,f){t.insertBefore(d,c);let m=Array.from(t.childNodes);s=m.indexOf(f),l=u?m.indexOf(u)+1:0}else c&&(s=Array.from(t.childNodes).indexOf(c),l=s);return n.setStart(t,s),n.setEnd(t,l),ne(t,n),_(n),this.setSelection(n),this._updatePath(n,!0),this.focus()}};var Fo=Ce;export{Fo as default};
//# sourceMappingURL=squire.mjs.map