10 lines
30 KiB
JavaScript
10 lines
30 KiB
JavaScript
/*!
|
|
* Tiny Link Checker plugin
|
|
*
|
|
* Copyright (c) 2023 Ephox Corporation DBA Tiny Technologies, Inc.
|
|
* Licensed under the Tiny commercial license. See https://www.tiny.cloud/legal/
|
|
*
|
|
* Version: 8.3.0-112
|
|
*/
|
|
|
|
!function(){"use strict";const e=Object.getPrototypeOf,t=(e,t,r)=>!!r(e,t.prototype)||e.constructor?.name===t.name,r=e=>r=>(e=>{const r=typeof e;return null===e?"null":"object"===r&&Array.isArray(e)?"array":"object"===r&&t(e,String,((e,t)=>t.isPrototypeOf(e)))?"string":r})(r)===e,n=e=>t=>typeof t===e,o=r("string"),s=r("object"),a=r=>((r,n)=>s(r)&&t(r,n,((t,r)=>e(t)===r)))(r,Object),c=r("array"),i=n("boolean"),u=e=>undefined===e;const l=e=>null==e,d=e=>!l(e),p=n("function"),m=()=>{},h=(e,t)=>(...r)=>e(t.apply(null,r)),g=e=>()=>e,f=e=>e,y=e=>e(),v=g(!1),w=g(!0);class k{tag;value;static singletonNone=new k(!1);constructor(e,t){this.tag=e,this.value=t}static some(e){return new k(!0,e)}static none(){return k.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?k.some(e(this.value)):k.none()}bind(e){return this.tag?e(this.value):k.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:k.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 d(e)?k.some(e):k.none()}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()"}}const x=Array.prototype.indexOf,S=Array.prototype.push,b=(e,t)=>{for(let r=0,n=e.length;r<n;r++)if(t(e[r],r))return!0;return!1},C=(e,t)=>{const r=e.length,n=new Array(r);for(let o=0;o<r;o++){const r=e[o];n[o]=t(r,o)}return n},O=(e,t)=>{for(let r=0,n=e.length;r<n;r++)t(e[r],r)},E=(e,t)=>{const r=[];for(let n=0,o=e.length;n<o;n++){const o=e[n];t(o,n)&&r.push(o)}return r},T=(e,t,r)=>(O(e,((e,n)=>{r=t(r,e,n)})),r),R=e=>{const t=[];for(let r=0,n=e.length;r<n;++r){if(!c(e[r]))throw new Error("Arr.flatten item "+r+" was not an array, input: "+e);S.apply(t,e[r])}return t},P=Object.keys,$=Object.hasOwnProperty,L=(e,t)=>{const r=P(e);for(let n=0,o=r.length;n<o;n++){const o=r[n];t(e[o],o)}},A=(e,t)=>M(e,((e,r)=>({k:r,v:t(e,r)}))),M=(e,t)=>{const r={};return L(e,((e,n)=>{const o=t(e,n);r[o.k]=o.v})),r},j=(e,t)=>{const r=[];return L(e,((e,n)=>{r.push(t(e,n))})),r},D=(e,t)=>_(e,t)?k.from(e[t]):k.none(),_=(e,t)=>$.call(e,t),N=e=>{let t=e;return{get:()=>t,set:e=>{t=e}}},I=e=>{let t=k.none(),r=[];const n=e=>{o()?s(e):r.push(e)},o=()=>t.isSome(),s=e=>{t.each((t=>{setTimeout((()=>{e(t)}),0)}))};return e((e=>{o()||(t=k.some(e),O(r,s),r=[])})),{get:n,map:e=>I((t=>{n((r=>{t(e(r))}))})),isReady:o}},U={nu:I,pure:e=>I((t=>{t(e)}))},q=e=>{setTimeout((()=>{throw e}),0)},B=e=>{const t=t=>{e().then(t,q)};return{map:t=>B((()=>e().then(t))),bind:t=>B((()=>e().then((e=>t(e).toPromise())))),anonBind:t=>B((()=>e().then((()=>t.toPromise())))),toLazy:()=>U.nu(t),toCached:()=>{let t=null;return B((()=>(null===t&&(t=e()),t)))},toPromise:e,get:t}},F=e=>B((()=>new Promise(e))),V=e=>B((()=>Promise.resolve(e))),H=e=>{const t=t=>t(e),r=g(e),n=()=>o,o={tag:!0,inner:e,fold:(t,r)=>r(e),isValue:w,isError:v,map:t=>z.value(t(e)),mapError:n,bind:t,exists:t,forall:t,getOr:r,or:n,getOrThunk:r,orThunk:n,getOrDie:r,each:t=>{t(e)},toOptional:()=>k.some(e)};return o},J=e=>{const t=()=>r,r={tag:!1,inner:e,fold:(t,r)=>t(e),isValue:v,isError:w,map:t,mapError:t=>z.error(t(e)),bind:t,exists:v,forall:w,getOr:f,or:f,getOrThunk:y,orThunk:y,getOrDie:(n=String(e),()=>{throw new Error(n)}),each:m,toOptional:k.none};var n;return r},z={value:H,error:J,fromOption:(e,t)=>e.fold((()=>J(t)),H)},K=e=>({...e,toCached:()=>K(e.toCached()),bindFuture:t=>K(e.bind((e=>e.fold((e=>V(z.error(e))),(e=>t(e)))))),bindResult:t=>K(e.map((e=>e.bind(t)))),mapResult:t=>K(e.map((e=>e.map(t)))),mapError:t=>K(e.map((e=>e.mapError(t)))),foldResult:(t,r)=>e.map((e=>e.fold(t,r))),withTimeout:(t,r)=>K(F((n=>{let o=!1;const s=setTimeout((()=>{o=!0,n(z.error(r()))}),t);e.get((e=>{o||(clearTimeout(s),n(e))}))})))}),W=e=>K(F(e)),G=e=>K(V(z.value(e))),Q={nu:W,wrap:K,pure:G,value:G,error:e=>K(V(z.error(e))),fromResult:e=>K(V(e)),fromFuture:e=>K(e.map(z.value)),fromPromise:e=>W((t=>{e.then((e=>{t(z.value(e))}),(e=>{t(z.error(e))}))}))},X=e=>(...t)=>{if(0===t.length)throw new Error("Can't merge zero objects");const r={};for(let n=0;n<t.length;n++){const o=t[n];for(const t in o)_(o,t)&&(r[t]=e(r[t],o[t]))}return r},Y=X(((e,t)=>a(e)&&a(t)?Y(e,t):t)),Z=(X(((e,t)=>t)),(e,t)=>{const{type:r,message:n}=t;e.notificationManager.open({type:r,text:n})}),ee=e=>{(e=>{switch(e){case"error":return console.error;case"info":return console.info;case"warn":return console.warn;default:return console.log}})(e.type)(e.message)},te=(e,t)=>{const{protect:r,allowList:n=[],blockList:o=[]}=null!=e?e:{};let s;return s=d(r)?r:n.length>0||o.length>0||t,{protect:s,allowList:n,blockList:o}},re=e=>{const{protect:t,allowList:r,blockList:n}=null!=e?e:{};return e=>{const o=e.toLowerCase();return r.length>0?!b(r,(e=>e.toLowerCase()===o)):n.length>0?b(n,(e=>e.toLowerCase()===o)):t}},ne=e=>{const t=re(e);return(e,r)=>{const n=((e,t)=>`${e}:${t}`)(r,e.toLowerCase());return t(n)}},oe=(e,t,r,n)=>{const o=Reflect.get(e,"on"),s={protectedEventHandlers:[],cleanupScheduled:!1},a=(e,t)=>{n&&console.log(`[EventsProxy] ${e}`,t||"")},c=t=>{"invalid"===t&&s.protectedEventHandlers.length>0&&(a("Removing event handlers",s.protectedEventHandlers),O(s.protectedEventHandlers,(t=>{e.off(t.name,t.callback)})),s.protectedEventHandlers=[])},i=t.onStatusChange(c);return e.on("remove",i),(n,i,u)=>{a(`Adding event listener: ${n}`,{shouldProtect:r(n)});const l=((e,n)=>{const o=r(e),a=t.getStatus(),c=o&&"invalid"===a?m:n;return o&&s.protectedEventHandlers.push({name:e,callback:c}),c})(n,i);return s.cleanupScheduled||(s.cleanupScheduled=!0,window.setTimeout((()=>{c(t.getStatus()),s.cleanupScheduled=!1}),0)),Reflect.apply(o,e,[n,l,u])}},se=(e,t,r)=>n=>{const o="invalid"!==t.getStatus()&&d(r)?r(n):m,s=((e,t,r)=>{const n=e=>{"invalid"===e&&r.setEnabled(!1)},o=()=>n(t.getStatus());n(t.getStatus()),e.on("NodeChange",o);const s=t.onStatusChange(n);return()=>{e.off("NodeChange",o),s()}})(e,t,n);return e=>{null==o||o(e),s()}},ae=(e,t,r)=>(...n)=>{var o;return"invalid"===e.getStatus()?r:null!==(o=null==t?void 0:t(...n))&&void 0!==o?o:r},ce=(e,t)=>ae(e,t,Promise.resolve([])),ie=(e,t)=>ae(e,t,[]),ue=(e,t)=>ae(e,t,!1),le=(e,t,r,n)=>{const s=t=>{const{command:s,value:a}=t,c=k.from(a).filter(o).map((e=>e.toLowerCase())),i=s.toLowerCase()===n.toLowerCase(),u=c.exists((e=>r.has(e))),l=c.exists((t=>t===e.queryCommandValue(n)));i&&u&&!l&&t.preventDefault()},a=t.onStatusChange((t=>{if("invalid"===t){e.on("BeforeExecCommand",s);const t=()=>{const t=e.queryCommandValue(n);r.has(t.toLowerCase())&&e.execCommand(n,!1,t)};e.initialized?t():e.on("init",t)}}));e.on("remove",(()=>{a(),e.off("BeforeExecCommand",s)}))},de=(e,t,r,n,s,a=!1)=>{const c=new Set,i=new Set,u=(e,t)=>{a&&console.log(`[UiProxy] ${e}`,t||"")};((e,t,r)=>{le(e,t,r,"ToggleView")})(e,r,c),((e,t,r)=>{le(e,t,r,"ToggleSidebar")})(e,r,i);const l=(t,o,a,c)=>{const i=s(t,a);return u(`${c}: ${t}`,{spec:o,context:n,shouldProtect:i}),i?{...o,onSetup:se(e,r,o.onSetup)}:o};return new Proxy(t,{get:(e,t,a)=>{const d=Reflect.get(e,t,a);if(!o(t))return d;switch(t){case"addButton":case"addGroupToolbarButton":case"addToggleButton":case"addMenuButton":case"addSplitButton":return(...r)=>{const[n,o,...s]=r,a=l(n,o,"button",String(t));return Reflect.apply(d,e,[n,a,...s])};case"addMenuItem":case"addToggleMenuItem":case"addNestedMenuItem":return(...r)=>{const[n,o,...s]=r,a=l(n,o,"menuitem",String(t));return Reflect.apply(d,e,[n,a,...s])};case"addAutocompleter":return(...o)=>{const[a,c,...i]=o,l=s(a,"autocompleter");if(u(`${String(t)}: ${a}`,{spec:c,context:n,shouldProtect:l}),l){const t={...c,fetch:ce(r,c.fetch)};return Reflect.apply(d,e,[a,t,...i])}return Reflect.apply(d,e,[a,c,...i])};case"addSidebar":return(...r)=>{const[o,a,...c]=r,l=s(o,"sidebar");if(u(`${String(t)}: ${o}`,{spec:a,context:n,shouldProtect:l}),l){i.add(o.toLowerCase());const t={...a};return Reflect.apply(d,e,[o,t,...c])}return Reflect.apply(d,e,[o,a,...c])};case"addView":return(...r)=>{const[o,a,...i]=r,l=s(o,"view");if(u(`${String(t)}: ${o}`,{spec:a,context:n,shouldProtect:l}),l){c.add(o.toLowerCase());const t={...a};return Reflect.apply(d,e,[o,t,...i])}return Reflect.apply(d,e,[o,a,...i])};case"addContextMenu":return(...o)=>{const[a,c,...i]=o,l=s(a,"contextmenu");if(u(`${String(t)}: ${a}`,{spec:c,context:n,shouldProtect:l}),l){const t={...c,update:ie(r,c.update)};return Reflect.apply(d,e,[a,t,...i])}return Reflect.apply(d,e,[a,c,...i])};case"addContextToolbar":case"addContextForm":return(...o)=>{const[a,c,...i]=o,l=s(a,"contexttoolbar");if(u(`${String(t)}: ${a}`,{spec:c,context:n,shouldProtect:l}),l){const t={...c,predicate:ue(r,c.predicate)};return Reflect.apply(d,e,[a,t,...i])}return Reflect.apply(d,e,[a,c,...i])};case"addIcon":case"getAll":case"addContext":return d}}})},pe=new Set(["addCommand","addCommands","addQueryStateHandler","addQueryValueHandler"]),me=e=>(t,r)=>{e&&console.log(`[EditorProxy] ${t}`,r||"")},he=(e,t)=>{const{statusProvider:r,uiContext:n,protection:o,debug:s=!1}=t,{events:a,commands:c,ui:i}=o;me(s)("Creating enhanced editor with options:",{hasStatusProvider:!!r,uiContext:n,debug:s,protection:o});const{editorUiProxy:u,editorCommandsProxy:l,editorEventListenerProxy:d}=((e,t,r,n,o,s,a)=>{const c=s.protect?{...e.ui,registry:de(e,e.ui.registry,t,r,ne(s),a)}:e.ui,i=n.protect?((e,t,r,n,o)=>{const s={protectedCommands:[],cleanupScheduled:!1},a=(e,t)=>{o&&console.log(`[CommandsProxy] ${e}`,t||"")},c=(e,t)=>{const o=n(e),a=r.getStatus();return o&&s.protectedCommands.push(e),o&&"invalid"===a?m:t},i=t=>{"invalid"===t&&s.protectedCommands.length>0&&(a("Removing commands",s.protectedCommands),O(s.protectedCommands,(t=>{e.editorCommands.removeCommand(t)})),s.protectedCommands=[])},u=()=>{s.cleanupScheduled||(s.cleanupScheduled=!0,window.setTimeout((()=>{i(r.getStatus()),s.cleanupScheduled=!1}),0))},l=r.onStatusChange(i);return e.on("remove",l),new Proxy(t,{get:(e,r,o)=>{if(a(`Accessing property: ${String(r)}`),"addCommand"===r){const s=Reflect.get(e,r,o);return(e,r,...o)=>{a(`Adding command: ${e}`,{shouldProtect:n(e)});const i=c(e,r);return u(),Reflect.apply(s,t,[e,i,...o])}}if("addCommands"===r){const n=Reflect.get(e,r,o);return(e,r="exec")=>{a(`Adding commands (${r})`,{commandCount:Object.keys(e).length,willApplyEnforcement:"exec"===r});const o="exec"!==r?e:A(e,((e,t)=>c(t,e)));return u(),Reflect.apply(n,t,[o,r])}}return Reflect.get(e,r,o)}})})(e,e.editorCommands,t,re(n),a):e.editorCommands;return{editorUiProxy:c,editorCommandsProxy:i,editorEventListenerProxy:o.protect?oe(e,t,re(o),a):e.on.bind(e)}})(e,r,n||"",c,a,i,s),h=((e,t,r,n)=>(o,s,a)=>{const c=String(s);if("on"===s)return me(n)("on intercepted"),r;if(pe.has(c))return me(n)(`${c} intercepted`),t[c].bind(t);if("editorCommands"===s)return me(n)("editorCommands accessed"),t;if("ui"===s)return me(n)("ui accessed"),e;const i=Reflect.get(o,s,a);return p(i)?i.bind(o):i})(u,l,d,s);return new Proxy(e,{get:h,set:(e,t,r,n)=>Reflect.set(e,t,r,n),has:(e,t)=>Reflect.has(e,t),ownKeys:e=>Reflect.ownKeys(e),getOwnPropertyDescriptor:(e,t)=>Reflect.getOwnPropertyDescriptor(e,t),defineProperty:(e,t,r)=>Reflect.defineProperty(e,t,r),deleteProperty:(e,t)=>Reflect.deleteProperty(e,t),isExtensible:e=>Reflect.isExtensible(e),preventExtensions:e=>Reflect.preventExtensions(e),getPrototypeOf:e=>Reflect.getPrototypeOf(e),setPrototypeOf:(e,t)=>Reflect.setPrototypeOf(e,t)})},ge=e=>parseInt(e,10),fe=(e,t)=>{const r=e-t;return 0===r?0:r>0?1:-1},ye=(e,t,r)=>({major:e,minor:t,patch:r}),ve=e=>{const t=/([0-9]+)\.([0-9]+)\.([0-9]+)(?:(\-.+)?)/.exec(e);return t?ye(ge(t[1]),ge(t[2]),ge(t[3])):ye(0,0,0)},we=(e,t)=>!!e&&-1===((e,t)=>{const r=fe(e.major,t.major);if(0!==r)return r;const n=fe(e.minor,t.minor);if(0!==n)return n;const o=fe(e.patch,t.patch);return 0!==o?o:0})((e=>ve((e=>[e.majorVersion,e.minorVersion].join(".").split(".").slice(0,3).join("."))(e)))(e),ve(t)),ke=ve("8.3.0"),xe=`${ke.major}.${ke.minor}.0`,Se=`${ke.major+1}.0.0`,be=(e,t)=>{const{setup:r,protection:n}=t;return(o,s)=>{if(!((e,t)=>we(e,xe)?(console.error(`The "${t}" plugin requires at least version ${xe} of TinyMCE.`),!1):!!we(e,Se)||(console.error(`The "${t}" plugin requires at least version ${xe} of TinyMCE but less than ${Se}.`),!1))(tinymce,e)||((e,t)=>!!(e=>{var t;const r=null===(t=e.options.get("license_key"))||void 0===t?void 0:t.toLowerCase(),n=e.options.get("online_license_key");return l(n)&&"gpl"===r})(e)&&(((e,t)=>{const{console:r,editor:n}=t;d(n)&&(e._skinLoaded?Z(e,n):e.on("SkinLoaded",(()=>{Z(e,n)}))),d(r)&&ee(r)})(e,{console:{type:"error",message:[`The "${t}" plugin requires a valid TinyMCE license key.`,"Read more: https://www.tiny.cloud/docs/tinymce/latest/license-key/"].join(" ")}}),!0))(o,e))return{};const a=(e=>{const{protect:t=!0,events:r,commands:n,ui:o,api:s}=null!=e?e:{};return{protect:t,events:te(r,false),commands:te(n,true),ui:te(o,true),api:te(s,true)}})(n),c=((e="pre-validation")=>{const t=N(e),r=new Set;let n=!1;const{enableLogging:o=!1}={},s=(e,...t)=>{o&&console.log(`[StatusProvider] ${e}`,...t)};return{setStatus:e=>{const n=t.get();if(n===e)return s("Status unchanged:",e),!1;t.set(e),s("Status changed:",n,"->",e);const o={currentStatus:e,previousStatus:n},a=Array.from(r);return O(a,(e=>{e(o.currentStatus,o.previousStatus)})),!0},onStatusChange:e=>(r.add(e),s("Callback registered, total listeners:",r.size),()=>{r.delete(e)&&s("Callback unregistered, remaining listeners:",r.size)}),getStatus:t.get,hasListeners:()=>r.size>0,destroy:()=>{n||(s("Destroying StatusProvider, clearing",r.size,"listeners"),r.clear(),n=!0)}}})(),i=((e,t,r)=>{const n=`commercial-license-${t}`;return e.ui.registry.addContext(n,(()=>"invalid"!==r.getStatus()&&!e.mode.isReadOnly())),e.licenseKeyManager.validate({plugin:t}).then((e=>{r.setStatus(e?"valid":"invalid")}),(e=>{console.error(e),console.error(`An unknown error occurred when trying to validate "${t}" plugin.`),r.setStatus("invalid")})),{ui:{context:n}}})(o,e,c),u=a.protect?he(o,{statusProvider:c,uiContext:i.ui.context,debug:t.debug||!1,protection:a}):o,m=((e,t)=>({pluginCode:e,enforcer:{isInvalid:()=>"invalid"===t.getStatus(),onInvalid:e=>t.onStatusChange(((t,r)=>{"invalid"===t&&e(t,r)}))}}))(e,c);return((e,t,r,n)=>{if(t.protect&&t.api.protect&&d(e)){const s=re(t.api);return(o=e=>"invalid"===r.getStatus()&&s(e),(e,t)=>A(e,((e,r)=>p(e)?(...n)=>{if(o(r.toLowerCase())){const e=`Method "${d(t)?`${t}.`:""}${r}" is not available due to license key restrictions.`,n=new Error(e);throw console.error(e),n}return e(...n)}:e)))(e,n)}var o;return e})(r(u,s,m),a,c,e)}},Ce=e=>t=>t.options.get(e),Oe=Ce("linkchecker_content_css"),Ee=Ce("linkchecker_service_url"),Te=Ce("linkchecker_preprocess"),Re=Ce("contextmenu"),Pe=(e,t)=>{let r;const n=(...n)=>{clearTimeout(r),r=setTimeout((function(){e.apply(this,n)}),t)};return n.stop=()=>{clearTimeout(r)},n};var $e;!function(e){e[e.Error=0]="Error",e[e.Value=1]="Value"}($e||($e={}));const Le=(e,t,r)=>e.stype===$e.Error?t(e.serror):r(e.svalue),Ae=e=>({stype:$e.Value,svalue:e}),Me=e=>({stype:$e.Error,serror:e}),je=Le,De=e=>s(e)&&P(e).length>100?" removed due to size":JSON.stringify(e,null,2),_e=(e,t)=>Me([{path:e,getErrorInfo:t}]),Ne=(Ie=Ae,{extract:(e,t)=>{return r=Ie(t),n=t=>((e,t)=>_e(e,g(t)))(e,t),r.stype===$e.Error?n(r.serror):r;var r,n},toString:g("val")});var Ie;const Ue=g(Ne),qe=(e,t,r)=>{switch(e.tag){case"field":return t(e.key,e.newKey,e.presence,e.prop);case"custom":return r(e.newKey,e.instantiator)}},Be=e=>{const t=(e=>{const t=[],r=[];return O(e,(e=>{Le(e,(e=>r.push(e)),(e=>t.push(e)))})),{values:t,errors:r}})(e);return t.errors.length>0?(r=t.errors,h(Me,R)(r)):Ae(t.values);var r},Fe=(e,t,r,n)=>n(D(e,t).getOrThunk((()=>r(e)))),Ve=(e,t,r,n,o)=>{const s=e=>o.extract(t.concat([n]),e),a=e=>e.fold((()=>Ae(k.none())),(e=>{const r=o.extract(t.concat([n]),e);return s=r,a=k.some,s.stype===$e.Value?{stype:$e.Value,svalue:a(s.svalue)}:s;var s,a}));switch(e.tag){case"required":return((e,t,r,n)=>D(t,r).fold((()=>((e,t,r)=>_e(e,(()=>'Could not find valid *required* value for "'+t+'" in '+De(r))))(e,r,t)),n))(t,r,n,s);case"defaultedThunk":return Fe(r,n,e.process,s);case"option":return((e,t,r)=>r(D(e,t)))(r,n,a);case"defaultedOptionThunk":return((e,t,r,n)=>n(D(e,t).map((t=>!0===t?r(e):t))))(r,n,e.process,a);case"mergeWithThunk":return Fe(r,n,g({}),(t=>{const n=Y(e.process(r),t);return s(n)}))}},He=e=>({extract:(t,r)=>((e,t,r)=>{const n={},o=[];for(const s of r)qe(s,((r,s,a,c)=>{const i=Ve(a,e,t,r,c);je(i,(e=>{o.push(...e)}),(e=>{n[s]=e}))}),((e,r)=>{n[e]=r(t)}));return o.length>0?Me(o):Ae(n)})(t,r,e),toString:()=>{const t=C(e,(e=>qe(e,((e,t,r,n)=>e+" -> "+n.toString()),((e,t)=>"state("+e+")"))));return"obj{\n"+t.join("\n")+"}"}}),Je=h((e=>({extract:(t,r)=>{const n=C(r,((r,n)=>e.extract(t.concat(["["+n+"]"]),r)));return Be(n)},toString:()=>"array("+e.toString()+")"})),He),ze=(e,t,r)=>{return n=((e,t,r)=>((e,t)=>e.stype===$e.Error?{stype:$e.Error,serror:t(e.serror)}:e)(t.extract([e],r),(e=>({input:r,errors:e}))))(e,t,r),Le(n,z.error,z.value);var n},Ke=(e,t,r)=>ze(e,t,r).fold((e=>{throw new Error(We(e))}),f),We=e=>"Errors: \n"+(e=>{const t=e.length>10?e.slice(0,10).concat([{path:[],getErrorInfo:g("... (only showing first ten failures)")}]):e;return C(t,(e=>"Failed path: ("+e.path.join(" > ")+")\n"+e.getErrorInfo()))})(e.errors).join("\n")+"\n\nInput object: "+De(e.input),Ge=(e,t,r,n)=>({tag:"field",key:e,newKey:t,presence:r,prop:n}),Qe=()=>(new Date).getTime();var Xe;!function(e){e.JSON="json",e.Blob="blob",e.Text="text",e.FormData="formdata",e.MultipartFormData="multipart/form-data"}(Xe||(Xe={}));const Ye=e=>F((t=>{const r=new FileReader;r.onload=e=>{const r=e.target?e.target.result:"";t(r)},r.readAsText(e)})),Ze=e=>{try{const t=JSON.parse(e);return z.value(t)}catch{return z.error("Response was not JSON.")}},et=e=>V(e.response),tt=(e,t)=>0===t.status?"Unknown HTTP error (possible cross-domain request)":`Could not load url ${e}: ${(e=>""===e.statusText?404===e.status?"Not Found":`Response code ${e.status}`:e.statusText)(t)}`,rt=e=>Q.nu((t=>{const r=new XMLHttpRequest;var n;r.open(e.method,(n=e.url,k.from(e.query).map((e=>{const t=j(e,((e,t)=>encodeURIComponent(t)+"="+encodeURIComponent(e))),r=((e,t,r=0,n)=>{const o=e.indexOf(t,r);return-1!==o&&(!!u(n)||o+t.length<=n)})(n,"?")?"&":"?";return t.length>0?n+r+t.join("&"):n})).getOr(n)),!0);const o=(e=>{const t=(r=e.body,k.from(r).bind((e=>{switch(e.type){case Xe.JSON:return k.some("application/json");case Xe.FormData:return k.some("application/x-www-form-urlencoded; charset=UTF-8");case Xe.MultipartFormData:return k.none();case Xe.Text:default:return k.some("text/plain")}})));var r;const n=!0===e.credentials?k.some(!0):k.none(),o=(e=>{switch(e){case Xe.Blob:return"application/octet-stream";case Xe.JSON:return"application/json, text/javascript";case Xe.Text:return"text/plain";default:return""}})(e.responseType)+", */*; q=0.01",s=void 0!==e.headers?e.headers:{};return{contentType:t,responseType:(e=>{switch(e){case Xe.JSON:return k.none();case Xe.Blob:return k.some("blob");case Xe.Text:return k.some("text");default:return k.none()}})(e.responseType),credentials:n,accept:o,headers:s,progress:p(e.progress)?k.some(e.progress):k.none()}})(e);((e,t)=>{t.contentType.each((t=>e.setRequestHeader("Content-Type",t))),e.setRequestHeader("Accept",t.accept),t.credentials.each((t=>e.withCredentials=t)),t.responseType.each((t=>e.responseType=t)),t.progress.each((t=>e.upload.addEventListener("progress",(e=>t(e.loaded,e.total))))),L(t.headers,((t,r)=>e.setRequestHeader(r,t)))})(r,o);const s=()=>{((e,t,r)=>((e,t)=>{switch(e){case Xe.JSON:return Ze(t.response).fold((()=>et(t)),V);case Xe.Blob:return(e=>k.from(e.response).map(Ye).getOr(V("no response content")))(t);case Xe.Text:default:return et(t)}})(t,r).map((t=>({message:tt(e,r),status:r.status,responseText:t}))))(e.url,e.responseType,r).get((e=>t(z.error(e))))};var a;r.onerror=s,r.onload=()=>{var n,o;0!==r.status||(n=e.url,o="file:",n.length>=5&&n.substr(0,5)===o)?r.status<100||r.status>=400?s():((e,t)=>{const r=e=>Q.error({message:e,status:t.status,responseText:t.responseText});switch(e){case Xe.JSON:return Ze(t.response).fold(r,Q.pure);case Xe.Blob:case Xe.Text:return Q.pure(t.response);default:return r("unknown data type")}})(e.responseType,r).get(t):s()},(a=e.body,k.from(a).map((e=>e.type===Xe.JSON?JSON.stringify(e.data):e.type===Xe.FormData||e.type===Xe.MultipartFormData?(e=>{const t=new FormData;return L(e,((e,r)=>{t.append(r,e)})),t})(e.data):e.data))).fold((()=>r.send()),(e=>{r.send(e)}))})),nt=(e,t)=>{const r=-1===e.indexOf("?")?"?":"&";return t?e+r+"apiKey="+encodeURIComponent(t):e},ot=e=>D(e,"tiny-api-key").orThunk((()=>D(e,"tinymce-api-key"))).orThunk((()=>D(e,"textbox-api-key"))).getOrUndefined(),st=e=>{const t=e.responseText;return s(t)?t:e.message},at=[Ge("url","url",{tag:"required",process:{}},Ue()),(e=>Ge(e,e,{tag:"defaultedThunk",process:g(!1)},Ue()))("fresh")];const ct=He(at),it=He([Ge("urls","urls",{tag:"required",process:{}},Je(at))]),ut=(e=>{if(!c(e))throw new Error("cases must be an array");if(0===e.length)throw new Error("there must be at least one case");const t=[],r={};return O(e,((n,o)=>{const s=P(n);if(1!==s.length)throw new Error("one and only one name per case");const a=s[0],i=n[a];if(void 0!==r[a])throw new Error("duplicate key detected:"+a);if("cata"===a)throw new Error("cannot have a case named cata (sorry)");if(!c(i))throw new Error("case arguments must be an array");t.push(a),r[a]=(...r)=>{const n=r.length;if(n!==i.length)throw new Error("Wrong number of arguments to case "+a+". Expected "+i.length+" ("+i+"), got "+n);return{fold:(...t)=>{if(t.length!==e.length)throw new Error("Wrong number of arguments to fold. Expected "+e.length+", got "+t.length);return t[o].apply(null,r)},match:e=>{const n=P(e);if(t.length!==n.length)throw new Error("Wrong number of arguments to match. Expected: "+t.join(",")+"\nActual: "+n.join(","));if(!(e=>{for(let r=0,o=e.length;r<o;++r)if(!0!==(t=e[r],((e,t)=>((e,t)=>x.call(e,t))(e,t)>-1)(n,t)))return!1;var t;return!0})(t))throw new Error("Not all branches were specified when using match. Specified: "+n.join(", ")+"\nRequired: "+t.join(", "));return e[a].apply(null,r)},log:e=>{console.log(e,{constructors:t,constructor:a,params:r})}}}})),r})([{invalid:["invalidUrl"]},{unknown:["unknownUrl"]},{valid:["validUrl"]}]),lt=(e,t,r,n)=>e.fold(t,r,n),dt=(e,t,r)=>{const n=((e,t=36e5)=>{const r={},n=(e,t,n)=>{r[e]={result:t,timestamp:n}},o=(e,r)=>e-r<t,a=g(r);return s(e)&&(e=>{const t=Qe();L(e,((e,r)=>{o(t,e.timestamp)&&n(r,e.result,e.timestamp)}))})(e),{set:n,get:(e,t)=>k.from(r[t]).filter((t=>o(e,t.timestamp))).map((e=>e.result)),dump:a}})(r),o=((e,t,r=st)=>{const n=ot(t);return{execute:o=>{const s=A(o,(e=>i(e)?String(e):e)),a=nt((c=s,e.replace(/\$\{([^{}]*)\}/g,((e,t)=>{const r=c[t];return(e=>{const t=typeof e;return"string"===t||"number"===t})(r)?r.toString():e}))),n);var c;const u=(l={url:a,responseType:Xe.JSON,credentials:!0,headers:t},rt({...l,method:"get",body:{type:Xe.Text,data:""}})).mapError(r);var l;return Q.wrap(u)},cancelCurrent:m}})(e+"/1/check?url=${url}&fresh=${fresh}",t),a=((e,t,r=st)=>{const n=ot(t);return{execute:o=>{const s=(a={url:nt(e,n),body:(c=o,{type:Xe.JSON,data:c}),responseType:Xe.JSON,credentials:!0,headers:t},rt({...a,method:"post"})).mapError(r);var a,c;return Q.wrap(s)},cancelCurrent:m}})(e+"/1/check",t),c=e=>{return{url:e.url,result:(t=e.url,r=e.result,"VALID"===r?ut.valid(t):"INVALID"===r?ut.invalid(t):ut.unknown(t))};var t,r};return{checkOne:(e,t=!1)=>{const r=Qe(),s=((t,r,n,s,a)=>(a?k.none():r.get(s,n)).fold((()=>((t,r)=>{const n={url:encodeURIComponent(e),fresh:r},s=Ke("ephox.link.service.one.ajax.service.get",ct,n);return o.execute(s)})(0,a).mapResult((e=>(r.set(n,e,s),e)))),(e=>Q.pure(e))))(0,n,e,r,t);return s.mapResult(c)},checkMany:(e,t=!1)=>{const r=Qe();return((e,t,r,n,o,s)=>{const a=((e,t,r,n,o)=>o?{known:{},unknown:r}:T(r,((r,o)=>{const s=n(o);return e(t,s).fold((()=>({known:r.known,unknown:r.unknown.concat([o])})),(e=>{const t=((e,t)=>((e,t)=>({[e]:t}))(e,t))(s,e);return{known:{...r.known,...t},unknown:r.unknown}}))}),{known:{},unknown:[]}))(t.get,o,r,n,s);return 0===a.unknown.length?Q.value(a.known):((e,t,r,n,o,s)=>e(n,s).mapResult((e=>(L(e,((e,r)=>{t.set(r,e,o)})),{...r,...e}))))(e,t,a.known,a.unknown,o,s)})(((e,t)=>{const r=Ke("ephox.link.service.many.ajax.service.post",it,{urls:e});return a.execute(r).mapResult((e=>T(e.results,((e,t)=>(e[t.url]=t,e)),{})))}),n,e,(e=>e.url),r,t).mapResult((e=>A(e,c)))},dumpCache:n.dump}},pt=e=>/^https?:\/\//.test(e),mt=e=>(e=>0===e.indexOf("mailto:"))(e)||(e=>"#"===e.charAt(0))(e),ht="data-mce-linkchecker-status",gt="data-mce-linkchecker-focus",ft=e=>{const t=tinymce.DOM.select('a[href]:not([href=""])',e).filter((e=>tinymce.DOM.isEditable(e)));return C(t,(e=>tinymce.DOM.getAttrib(e,"href")))},yt=(e,t)=>{tinymce.DOM.setAttrib(e,ht,t),kt(e)&&tinymce.DOM.setAttrib(e,"aria-invalid",!0)},vt=(e,t)=>C(t,(t=>({url:e(tinymce.DOM.getAttrib(t,"href")),elm:t}))),wt=(e,t)=>E(e,(e=>e.url===t)),kt=e=>"invalid"===tinymce.DOM.getAttrib(e,ht),xt=e=>t=>{O(t,(t=>{t.attr(e,null)}))},St=e=>t=>{const r=t.trim(),n=(e=>!pt(e)&&(e=>/^\w+:/.test(e))(e))(r)?r:e.documentBaseURI.toAbsolute(r),o=(e=>e.replace(/ /g,"%20"))(0===n.indexOf("//")?e.documentBaseURI.protocol+":"+n:n);return(e=>{const t=document.createElement("a");return t.href=e,pt(e)?t.href:e})(o)},bt=e=>()=>{e.execCommand("mceLink")},Ct=(e,t)=>()=>{(e=>{const t=document.createElement("a");t.target="_blank",t.href=e,t.rel="noreferrer noopener";const r=document.createEvent("MouseEvents");r.initMouseEvent("click",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),t.dispatchEvent(r)})(St(e)(tinymce.DOM.getAttrib(t,"href")))},Ot=(e,t)=>()=>{e.undoManager.transact((()=>{tinymce.DOM.remove(t,!0)}))},Et=(e,t)=>()=>{e.add(t.href),(e=>{yt(e,"ignored")})(t)},Tt=(e,t,r)=>[{text:"Ignore",onAction:Et(r,t)}],Rt=(e,t)=>E(e,(e=>!t.has(e))),Pt=e=>t=>pt(t)===e,$t=(e,t,r,n,o,s)=>{if(!o.mode.isReadOnly()&&!s.isInvalid()){const s=o.getBody();((e,t,r,n,o)=>{const s=E(C(ft(o),r),Pt(!0));e.checkMany(Rt(s,t)).get((e=>{e.fold(n.logError,(e=>((e,t,r)=>{const n=vt(t,tinymce.DOM.select("a[href]",e));L(r,((e,t)=>{O(wt(n,t),(t=>{lt(e.result,(e=>{yt(t.elm,"invalid")}),(e=>{yt(t.elm,"unknown")}),(e=>{yt(t.elm,"valid")}))}))}))})(o,r,e)))}))})(e,t,r,n,s),((e,t,r,n,o)=>{const s=E(C(ft(o),r),Pt(!1));((e,t,r)=>{const n=vt(t,tinymce.DOM.select("a[href]",e));O(r,(e=>{O(wt(n,e),(e=>{yt(e.elm,"unknown")}))}))})(o,r,Rt(E(s,(e=>!mt(e))),t))})(0,t,r,0,s)}},Lt=(e,t,r,n,o,s)=>{const a=Pe($t,500);var c;(c=e.serializer).addTempAttr(ht),c.addTempAttr(gt),c.addAttributeFilter(ht,xt(ht)),c.addAttributeFilter(gt,xt(ht));const i="linkchecker/content.css";tinymce.Resource.has(i)?e.dom.styleSheetLoader.loadRawCss(i,tinymce.Resource.get(i)):e.dom.loadCSS(Oe(e)),e.on("change setContent undo redo",(()=>{a(n,t,r,o,e,s)})),s.onInvalid((()=>{((e,t)=>{const r=e.dom.select('a[href]:not([href=""])');O(r,(e=>{Et(t,e)()}))})(e,t)})),$t(n,t,r,o,e,s),((e,t)=>{e.ui.registry.addContextMenu("linkchecker",{update:r=>{const n=e.dom.getParent(r,"a[href]");return d(n)&&kt(n)?((e,t,r)=>{const n=E(Re(e),(e=>""!==e));if(0!==n.length&&-1===n.indexOf("link")){const n=[{text:"Remove link",icon:"unlink",onAction:Ot(e,r)},{text:"Open link",icon:"new-tab",onAction:Ct(e,r)},{type:"separator"}];return(e=>e.plugins.link?[{text:"Link...",icon:"link",onAction:bt(e)}]:[])(e).concat(n).concat(Tt(0,r,t))}return Tt(0,r,t)})(e,t,n):[]}})})(e,t)},At=(e,t)=>()=>({status:e,message:t}),Mt=At("invalid","URL does not seem to be valid"),jt=At("none",""),Dt=At("valid","The URL seems to be valid"),_t=e=>{const t=(r=Ee(e),n=(e=>{var t;return null!==(t=e.options.get("api_key"))&&void 0!==t?t:e.options.get("linkchecker_api_key")})(e),dt(r,n?{"tinymce-api-key":n}:{}));var r,n;const o=t=>Te(e)(t);return{checkOne:e=>{const r=o({url:e});return t.checkOne(r.url)},checkMany:e=>((e,t,r)=>{const n=((e,t)=>T(e,((e,r)=>{const n={...t({url:r}),origUrl:r},o=n.url;return{...e,[o]:_(e,o)?e[o].concat([n]):[n]}}),{}))(e,t);return r(C(j(n,f),(e=>e[0]))).mapResult((e=>((e,t)=>{const r={};return L(e,((e,n)=>{const o=t[n];O(o,(t=>{r[t.origUrl]=e}))})),r})(e,n)))})(e,o,(e=>t.checkMany(e)))}};((e,t)=>{const{i18n:r=!0}=t;r&&tinymce.PluginManager.requireLangPack(e,"ar,bg-BG,ca,cs,da,de,el,es,eu,fa,fi,fr-FR,he-IL,hi,hr,hu-HU,id,it,ja,kk,ko-KR,ms,nb-NO,nl,pl,pt-BR,pt-PT,ro,ru,sk,sl-SI,sv-SE,th-TH,tr,uk,vi,zh-CN,zh-TW"),tinymce.PluginManager.add(e,be(e,t))})("linkchecker",{setup:(e,t,r)=>{const n=N(0);((e,t)=>{const r=e.options.register;r("linkchecker_content_css",{processor:"string",default:t+"/content.min.css"}),r("linkchecker_api_key",{processor:"string"}),r("linkchecker_preprocess",{processor:"function",default:f}),r("linkchecker_service_url",{processor:"string",default:""})})(e,t);const o=_t(e),s=(()=>{const e={};return{add:t=>{e[t]=!0},has:t=>t in e}})(),a=St(e),c=((e,t)=>({logError:r=>{const n=(e=>"string"==typeof e?{message:e}:e)(r);((e,t)=>{e.dispatch("LinkCheckerError",t)})(e,n),t.set(t.get()+1),t.get()<5&&!e.removed&&console.error(`Link checker error: ${n.message}`)}}))(e,n);e.on("SkinLoaded",(()=>{Ee(e).length>0?(Lt(e,s,a,o,c,r.enforcer),((e,t,r,n,o)=>{e.options.isSet("file_picker_validator_handler")||e.options.set("file_picker_validator_handler",((e,t,r,n)=>{const o=Pe(((e,t)=>(e,r)=>{t.checkOne(e).get((e=>{e.fold((()=>{r({status:"none",message:""})}),(e=>{lt(e.result,(e=>{r(Mt())}),(e=>{r(jt())}),(e=>{r(Dt())}))}))}))})(0,r),500);return(e,r)=>{const s=t(e.url);n.isInvalid()?r(jt()):0===e.url.length||!pt(s)&&mt(s)?r(Dt()):pt(s)?o(s,r):r(jt())}})(0,r,n,o))})(e,0,a,o,r.enforcer)):c.logError("You need to specify the linkchecker_service_url setting")}))},i18n:!1})}();
|