UNPKG

@tinymce/tinymce-react

Version:

Official TinyMCE React Component

147 lines (146 loc) 5.08 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ScriptLoader = void 0; var Utils_1 = require("./Utils"); var injectScriptTag = function (doc, item, handler) { var _a, _b; var scriptTag = doc.createElement('script'); scriptTag.referrerPolicy = 'origin'; scriptTag.type = 'application/javascript'; scriptTag.id = item.id; scriptTag.src = item.src; scriptTag.async = (_a = item.async) !== null && _a !== void 0 ? _a : false; scriptTag.defer = (_b = item.defer) !== null && _b !== void 0 ? _b : false; var loadHandler = function () { scriptTag.removeEventListener('load', loadHandler); scriptTag.removeEventListener('error', errorHandler); handler(item.src); }; var errorHandler = function (err) { scriptTag.removeEventListener('load', loadHandler); scriptTag.removeEventListener('error', errorHandler); handler(item.src, err); }; scriptTag.addEventListener('load', loadHandler); scriptTag.addEventListener('error', errorHandler); if (doc.head) { doc.head.appendChild(scriptTag); } }; var createDocumentScriptLoader = function (doc) { var lookup = {}; var scriptLoadOrErrorHandler = function (src, err) { var item = lookup[src]; item.done = true; item.error = err; for (var _i = 0, _a = item.handlers; _i < _a.length; _i++) { var h = _a[_i]; h(src, err); } item.handlers = []; }; var loadScripts = function (items, success, failure) { // eslint-disable-next-line no-console var failureOrLog = function (err) { return failure !== undefined ? failure(err) : console.error(err); }; if (items.length === 0) { failureOrLog(new Error('At least one script must be provided')); return; } var successCount = 0; var failed = false; var loaded = function (_src, err) { if (failed) { return; } if (err) { failed = true; failureOrLog(err); } else if (++successCount === items.length) { success(); } }; for (var _i = 0, items_1 = items; _i < items_1.length; _i++) { var item = items_1[_i]; var existing = lookup[item.src]; if (existing) { if (existing.done) { loaded(item.src, existing.error); } else { existing.handlers.push(loaded); } } else { // create a new entry var id = (0, Utils_1.uuid)('tiny-'); lookup[item.src] = { id: id, src: item.src, done: false, error: null, handlers: [loaded], }; injectScriptTag(doc, __assign({ id: id }, item), scriptLoadOrErrorHandler); } } }; var deleteScripts = function () { var _a; for (var _i = 0, _b = Object.values(lookup); _i < _b.length; _i++) { var item = _b[_i]; var scriptTag = doc.getElementById(item.id); if (scriptTag != null && scriptTag.tagName === 'SCRIPT') { (_a = scriptTag.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(scriptTag); } } lookup = {}; }; var getDocument = function () { return doc; }; return { loadScripts: loadScripts, deleteScripts: deleteScripts, getDocument: getDocument }; }; var createScriptLoader = function () { var cache = []; var getDocumentScriptLoader = function (doc) { var loader = cache.find(function (l) { return l.getDocument() === doc; }); if (loader === undefined) { loader = createDocumentScriptLoader(doc); cache.push(loader); } return loader; }; var loadList = function (doc, items, delay, success, failure) { var doLoad = function () { return getDocumentScriptLoader(doc).loadScripts(items, success, failure); }; if (delay > 0) { setTimeout(doLoad, delay); } else { doLoad(); } }; var reinitialize = function () { for (var loader = cache.pop(); loader != null; loader = cache.pop()) { loader.deleteScripts(); } }; return { loadList: loadList, reinitialize: reinitialize }; }; exports.ScriptLoader = createScriptLoader();