UNPKG

jodit

Version:

Jodit is an awesome and useful wysiwyg editor with filebrowser

74 lines (73 loc) 2.42 kB
/*! * Jodit Editor (https://xdsoft.net/jodit/) * Released under MIT see LICENSE.txt in the project root for license information. * Copyright (c) 2013-2025 Valeriy Chupurnov. All rights reserved. https://xdsoft.net */ import { isString } from "../checker/is-string.js"; import { completeUrl } from "./complete-url.js"; export const alreadyLoadedList = new Map(); const cacheLoaders = (loader) => { return (jodit, url) => { if (alreadyLoadedList.has(url)) { return alreadyLoadedList.get(url); } const promise = loader(jodit, url); alreadyLoadedList.set(url, promise); return promise; }; }; /** * Load script and return promise */ export const appendScriptAsync = cacheLoaders((jodit, url) => { return jodit.async.promise((resolve, reject) => { if (jodit.isInDestruct) { return reject(); } const script = jodit.c.element('script', { type: 'text/javascript', crossorigin: 'anonymous', referrerpolicy: 'no-referrer', async: true, src: completeUrl(url) }); jodit.e.one(script, 'error', reject).one(script, 'load', resolve); jodit.od.body.appendChild(script); }); }); /** * Download CSS style script */ export const appendStyleAsync = cacheLoaders((jodit, url) => { return jodit.async.promise((resolve, reject) => { if (jodit.isInDestruct) { return reject(); } const link = jodit.c.element('link'); link.rel = 'stylesheet'; link.media = 'all'; link.crossOrigin = 'anonymous'; const callback = () => resolve(link); !jodit.isInDestruct && jodit.e.on(link, 'load', callback).on(link, 'error', reject); link.href = completeUrl(url); if (jodit.o.shadowRoot) { jodit.o.shadowRoot.appendChild(link); } else { jodit.od.body.appendChild(link); } }); }); export function loadNext(jodit, urls, i = 0) { if (!isString(urls[i])) { return Promise.resolve(); } return appendScriptAsync(jodit, urls[i]).then(() => loadNext(jodit, urls, i + 1)); } export function loadNextStyle(jodit, urls, i = 0) { if (!isString(urls[i])) { return Promise.resolve(); } return appendStyleAsync(jodit, urls[i]).then(() => loadNextStyle(jodit, urls, i + 1)); }