tinymce
Version:
Web based JavaScript HTML WYSIWYG editor control.
1 lines • 8.11 kB
JavaScript
!function(){"use strict";const e=e=>"string"===(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(r=n=e,(s=String).prototype.isPrototypeOf(r)||n.constructor?.name===s.name)?"string":t;var r,n,s})(e);const t=e=>undefined===e;const r=e=>"function"==typeof e,n=e=>()=>e,s=e=>e,o=n(!1);class i{tag;value;static singletonNone=new i(!1);constructor(e,t){this.tag=e,this.value=t}static some(e){return new i(!0,e)}static none(){return i.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?i.some(e(this.value)):i.none()}bind(e){return this.tag?e(this.value):i.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:i.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(e??"Called getOrDie on None")}static from(e){return null==e?i.none():i.some(e)}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}Array.prototype.slice;const a=Array.prototype.indexOf,c=(e,t)=>{const r=e.length,n=new Array(r);for(let s=0;s<r;s++){const r=e[s];n[s]=t(r,s)}return n},u=(e,t)=>((e,t,r)=>{for(let n=0,s=e.length;n<s;n++){const s=e[n];if(t(s,n))return i.some(s);if(r(s,n))break}return i.none()})(e,t,o);r(Array.from)&&Array.from;const l=Object.keys,d=(e,t)=>{const r=[];return((e,t)=>{const r=l(e);for(let n=0,s=r.length;n<s;n++){const s=r[n];t(e[s],s)}})(e,(e,n)=>{r.push(t(e,n))}),r},m=(e,r,n=0,s)=>{const o=e.indexOf(r,n);return-1!==o&&(!!t(s)||o+r.length<=s)};var h=tinymce.util.Tools.resolve("tinymce.PluginManager");const g=()=>v(0,0),v=(e,t)=>({major:e,minor:t}),p={nu:v,detect:(e,t)=>{const r=String(t).toLowerCase();return 0===e.length?g():((e,t)=>{const r=((e,t)=>{for(let r=0;r<e.length;r++){const n=e[r];if(n.test(t))return n}})(e,t);if(!r)return{major:0,minor:0};const n=e=>Number(t.replace(r,"$"+e));return v(n(1),n(2))})(e,r)},unknown:g},f=(e,t)=>{const r=String(t).toLowerCase();return u(e,e=>e.search(r))},y=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,w=e=>t=>m(t,e),x=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:e=>m(e,"edge/")&&m(e,"chrome")&&m(e,"safari")&&m(e,"applewebkit")},{name:"Chromium",brand:"Chromium",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,y],search:e=>m(e,"chrome")&&!m(e,"chromeframe")},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:e=>m(e,"msie")||m(e,"trident")},{name:"Opera",versionRegexes:[y,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:w("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:w("firefox")},{name:"Safari",versionRegexes:[y,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:e=>(m(e,"safari")||m(e,"mobile/"))&&m(e,"applewebkit")}],S=[{name:"Windows",search:w("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:e=>m(e,"iphone")||m(e,"ipad"),versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:w("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"macOS",search:w("mac os x"),versionRegexes:[/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:w("linux"),versionRegexes:[]},{name:"Solaris",search:w("sunos"),versionRegexes:[]},{name:"FreeBSD",search:w("freebsd"),versionRegexes:[]},{name:"ChromeOS",search:w("cros"),versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/]}],b={browsers:n(x),oses:n(S)},O="Edge",A="Chromium",R="Opera",C="Firefox",k="Safari",D=e=>{const t=e.current,r=e.version,n=e=>()=>t===e;return{current:t,version:r,isEdge:n(O),isChromium:n(A),isIE:n("IE"),isOpera:n(R),isFirefox:n(C),isSafari:n(k)}},E=()=>D({current:void 0,version:p.unknown()}),I=D,P=(n(O),n(A),n("IE"),n(R),n(C),n(k),"Windows"),T="Android",L="Linux",$="macOS",_="Solaris",B="FreeBSD",N="ChromeOS",j=e=>{const t=e.current,r=e.version,n=e=>()=>t===e;return{current:t,version:r,isWindows:n(P),isiOS:n("iOS"),isAndroid:n(T),isMacOS:n($),isLinux:n(L),isSolaris:n(_),isFreeBSD:n(B),isChromeOS:n(N)}},F=()=>j({current:void 0,version:p.unknown()}),M=j,U=(n(P),n("iOS"),n(T),n(L),n($),n(_),n(B),n(N),(e,t,r)=>{const s=b.browsers(),o=b.oses(),a=t.bind(e=>((e,t)=>((e,t)=>{for(let r=0;r<e.length;r++){const n=t(e[r]);if(n.isSome())return n}return i.none()})(t.brands,t=>{const r=t.brand.toLowerCase();return u(e,e=>r===e.brand?.toLowerCase()).map(e=>({current:e.name,version:p.nu(parseInt(t.version,10),0)}))}))(s,e)).orThunk(()=>((e,t)=>f(e,t).map(e=>{const r=p.detect(e.versionRegexes,t);return{current:e.name,version:r}}))(s,e)).fold(E,I),c=((e,t)=>f(e,t).map(e=>{const r=p.detect(e.versionRegexes,t);return{current:e.name,version:r}}))(o,e).fold(F,M),l=((e,t,r,s)=>{const o=e.isiOS()&&!0===/ipad/i.test(r),i=e.isiOS()&&!o,a=e.isiOS()||e.isAndroid(),c=a||s("(pointer:coarse)"),u=o||!i&&a&&s("(min-device-width:768px)"),l=i||a&&!u,d=t.isSafari()&&e.isiOS()&&!1===/safari/i.test(r),m=!l&&!u&&!d;return{isiPad:n(o),isiPhone:n(i),isTablet:n(u),isPhone:n(l),isTouch:n(c),isAndroid:e.isAndroid,isiOS:e.isiOS,isWebView:n(d),isDesktop:n(m)}})(c,a,e,r);return{browser:a,os:c,deviceType:l}}),W=e=>window.matchMedia(e).matches;let K=(e=>{let t,r=!1;return(...n)=>(r||(r=!0,t=e.apply(null,n)),t)})(()=>U(window.navigator.userAgent,i.from(window.navigator.userAgentData),W));const V=()=>K();var z=tinymce.util.Tools.resolve("tinymce.dom.ScriptLoader"),Y=tinymce.util.Tools.resolve("tinymce.util.Tools");const q=e=>t=>t.options.get(e),G=q("content_style"),H=q("content_css_cors"),J=q("body_class"),Q=q("body_id"),X=e=>{const t=((e,t)=>{const n=[],s=r(t)?e=>((e,t)=>{for(let r=0,n=e.length;r<n;r++)if(t(e[r]))return!0;return!1})(n,r=>t(r,e)):e=>((e,t)=>((e,t)=>a.call(e,t))(e,t)>-1)(n,e);for(let t=0,r=e.length;t<r;t++){const r=e[t];s(r)||n.push(r)}return n})((n=e.schema.getComponentUrls(),d(n,s)));var n;return c(t,t=>{const r=d(z.ScriptLoader.getScriptAttributes(t),(t,r)=>` ${e.dom.encode(r)}="${e.dom.encode(t)}"`);return`<script src="${e.dom.encode(t)}"${r.join("")}><\/script>`}).join("")},Z=(e,t)=>{const r=((e,t)=>{let r="";const n=e.dom.encode,s=G(e)??"";r+=`<base href="${n(e.documentBaseURI.getURI())}">`;const o=H(e)?' crossorigin="anonymous"':"";Y.each(t,e=>{"bundled"===e.type?r+='<style type="text/css">'+e.content+"</style>":r+='<link type="text/css" rel="stylesheet" href="'+n(e.url)+'"'+o+">"}),s&&(r+='<style type="text/css">'+s+"</style>"),r+=X(e);const i=Q(e),a=J(e),c=e.getBody().dir,u=c?' dir="'+n(c)+'"':"";return"<!DOCTYPE html><html><head>"+r+'</head><body id="'+n(i)+'" class="mce-content-body '+n(a)+'"'+u+">"+e.getContent()+(()=>{const e=V().os.isMacOS()||V().os.isiOS();return`<script>(${(e=>{document.addEventListener("click",t=>{for(let r=t.target;r;r=r.parentNode)if("A"===r.nodeName){const n=r.getAttribute("href");if(n&&n.startsWith("#")){t.preventDefault();const e=document.getElementById(n.substring(1));return void(e&&e.scrollIntoView({behavior:"smooth"}))}(e?t.metaKey:t.ctrlKey&&!t.altKey)||t.preventDefault()}},!1)}).toString()})(${e})<\/script>`})()+"</body></html>"})(e,t);e.windowManager.open({title:"Preview",size:"large",body:{type:"panel",items:[{name:"preview",type:"iframe",sandboxed:!0,transparent:!1}]},buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}],initialData:{preview:r}}).focus("close")};h.add("preview",t=>{((e,t)=>{e.addCommand("mcePreview",()=>{Z(e,t())})})(t,()=>c(t.contentCSS,r=>i.from(tinymce.Resource.get(r)).filter(e).map(e=>({type:"bundled",content:e})).getOr({type:"link",url:t.documentBaseURI.toAbsolute(r)}))),(e=>{const t=()=>e.execCommand("mcePreview");e.ui.registry.addButton("preview",{icon:"preview",tooltip:"Preview",onAction:t,context:"any"}),e.ui.registry.addMenuItem("preview",{icon:"preview",text:"Preview",onAction:t,context:"any"})})(t)})}();