UNPKG

jodit-pro

Version:

PRO Version of Jodit Editor

2 lines (1 loc) 5.14 kB
var j=Object.defineProperty;var u=(d,e)=>j(d,"name",{value:e,configurable:!0});var g,_=function(d,e,t,i){var o=arguments.length,a=o<3?e:i===null?i=Object.getOwnPropertyDescriptor(e,t):i,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")a=Reflect.decorate(d,e,t,i);else for(var n=d.length-1;n>=0;n--)(s=d[n])&&(a=(o<3?s(a):o>3?s(e,t,a):s(e,t))||a);return o>3&&a&&Object.defineProperty(e,t,a),a};import"./config.js";import{IS_PROD as v}from"jodit/esm/core/constants.js";import{autobind as E,component as I,debounce as w,watch as p}from"jodit/esm/core/decorators/index.js";import{$$ as S,appendScriptAsync as y,attr as m,loadNext as P,loadNextStyle as D,refs as T,stripTags as x}from"jodit/esm/core/helpers/index.js";import{isBoolean as F}from"jodit/esm/core/helpers/checker/is-boolean.js";import{htmlspecialchars as H}from"jodit/esm/core/helpers/html/htmlspecialchars.js";import{Plugin as J}from"jodit/esm/core/plugin/index.js";import{Button as C,UIForm as O,UISelect as A,UITextArea as N}from"jodit/esm/core/ui/index.js";import{Dialog as $,Dom as l}from"jodit/esm/modules/index.js";import{JoditPro as q}from"../../jodit-pro.js";let r=(g=class extends J{constructor(){super(...arguments),this.buttons=[{name:"pasteCode",group:"clipboard"}],this.__highlightLibJSIsLoaded=!1,this.__loadLanguage=new Map,this.__initHighlightLibLoading=async e=>{const{globalHighlightLib:t,highlightLib:{css:i,js:o,langUrl:a,highlight:s,isLangLoaded:n,beforeLibLoad:c,afterLibLoad:h}}=this.j.o.pasteCode;return!this.__highlightLibJSIsLoaded&&!t&&(this.__highlightLibJSIsLoaded=Promise.resolve(c?.()).then(()=>L(this.async,Promise.allSettled([D(this.jodit,i).catch(()=>null),P(this.jodit,o).catch(()=>null)]))).then(()=>h?.())),F(this.__highlightLibJSIsLoaded)||await this.__highlightLibJSIsLoaded,e&&!n(e)&&!t&&(this.__loadLanguage.has(e)||(v||console.log("Load language",e,"for paste-code"),this.__loadLanguage.set(e,L(this.async,y(this.jodit,a(e)).catch(()=>null)))),await this.__loadLanguage.get(e)),{highlight:s}}}className(){return"pasteCode"}afterInit(e){e.registerCommand("pasteCode",()=>this.__openCodeEditDialog()),e.async.requestIdleCallback(()=>this.__initHighlightLibLoading())}__openCodeEditDialog(e,t,i){const o=this.j,a=this.__createForm(),{code:s,language:n}=T(a.container);e&&(n.value=e),t&&(s.value=t),o.async.requestIdleCallback(()=>{s.focus()}),o.s.save(),this.__createDialog(()=>{if(a.validate()){o.s.restore();const h=o.createInside.fromHTML(o.o.pasteCode.insertTemplate(o,n.value,s.value));if(i)l.replace(i,h,o.createInside,!1,!0);else{const b=o.s.current(),f=l.up(b,l.isBlock,o.editor);f&&!l.isCell(f)?l.after(f,h):o.s.insertNode(h)}this.__imdOnChange();return}return!1},()=>{o.s.restore()}).setContent(a.container).open(!0)}beforeDestruct(e){}__createForm(){const{jodit:e}=this;return new O(e,[new A(e,{name:"language",label:"Language",value:e.o.pasteCode.defaultLanguage,options:e.o.pasteCode.languages,required:!0}),new N(e,{label:"Code view",resizable:!1,name:"code",required:!0,className:"jodit-paste-code__textarea"})],{className:"jodit-paste-code"})}__createDialog(e,t){const i=new $({language:this.j.o.language});return i.setHeader("Insert/Edit Code Sample").setSize(this.j.o.pasteCode.dialog.width,this.j.o.pasteCode.dialog.height).setFooter([C(i,"","Cancel","default").onAction(()=>{i.close(),t()}),C(i,"save","Save","primary").onAction(()=>{i.close(),e()})]),i}__onChange(){this.__imdOnChange()}__imdOnChange(){S("pre",this.j.editor).forEach(e=>{m(e,"contenteditable")||(m(e,"contenteditable",!1),this.__highlightCode(e).catch(()=>null))})}async __highlightCode(e){const t=this.__parseLanguage(e),{highlight:i}=await this.__initHighlightLibLoading(t);let o=e;e.firstElementChild===e.lastElementChild&&l.isTag(e.firstElementChild,"code")&&(o=e.firstElementChild),o.innerHTML=i(o.innerText,t)}onPreEdit(e){const t=l.isNode(e)&&l.isTag(e,"pre")?e:l.closest(e.target,"pre",this.j.editor);if(t){const i=this.__parseLanguage(t);this.__openCodeEditDialog(i,t.innerText,t)}}__parseLanguage(e){let t=null;const i=u(o=>o.classList.forEach(a=>{if(/language-/.test(a)){const s=/language-(.*)/.exec(a);s&&s[1]&&(t=s[1])}}),"getLang");return i(e),t==null&&e.firstElementChild===e.lastElementChild&&l.isTag(e.firstElementChild,"code")&&i(e.firstElementChild),this.jodit.o.pasteCode.canonicalLanguageCode(t||"html")}onAfterGetValueFromEditor(e){const t=u((i,o,a,s,n,c)=>`${o.trim()}${s}${H(x(n,this.j.ed,new Set(["br"])))}${c}`,"strip");e.value=e.value.replace(/(<pre[^>]*)contenteditable\s*=\s*(['"]?)false\2([^>]*>\s*<code[^>]*>)(.*?)(<\/code>\s*<\/pre>)/gis,t).replace(/(<pre[^>]*)contenteditable\s*=\s*(['"]?)false\2([^>]*>)(.*?)(<\/pre>)/gis,t)}},u(g,"pasteCode"),g);r.requires=["license"],_([E],r.prototype,"__openCodeEditDialog",null),_([p(["?:change","?:afterInit"]),w()],r.prototype,"__onChange",null),_([p(["?:dblclick","?:editPreInPasteCode"])],r.prototype,"onPreEdit",null),_([p("?:afterGetValueFromEditor")],r.prototype,"onAfterGetValueFromEditor",null),r=_([I],r);function L(d,e){return d.promise((t,i)=>{e.then(t).catch(i)}).catch(()=>null)}u(L,"waitingPromise"),q.plugins.add("paste-code",r);export{r as pasteCode};