From 70b69e318a7856d20a9822f0b34d0944d1608a82 Mon Sep 17 00:00:00 2001 From: Jarek Radosz <jradosz@gmail.com> Date: Fri, 22 Apr 2022 11:53:39 +0200 Subject: [PATCH] DEV: Clean up `loadScript()` (#16537) --- .../discourse/app/lib/load-script.js | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/app/assets/javascripts/discourse/app/lib/load-script.js b/app/assets/javascripts/discourse/app/lib/load-script.js index 8aca0d5f95b..2eb5a52c096 100644 --- a/app/assets/javascripts/discourse/app/lib/load-script.js +++ b/app/assets/javascripts/discourse/app/lib/load-script.js @@ -47,28 +47,24 @@ export function loadCSS(url) { return loadScript(url, { css: true }); } -export default function loadScript(url, opts) { +export default function loadScript(url, opts = {}) { // TODO: Remove this once plugins have been updated not to use it: if (url === "defer/html-sanitizer-bundle") { return Promise.resolve(); } - opts = opts || {}; - if (_loaded[url]) { return Promise.resolve(); } - if (PUBLIC_JS_VERSIONS) { - url = cacheBuster(url); - } + url = cacheBuster(url); // Scripts should always load from CDN // CSS is type text, to accept it from a CDN we would need to handle CORS const fullUrl = opts.css ? getURL(url) : getURLWithCDN(url); - $("script").each((i, tag) => { - const src = tag.getAttribute("src"); + document.querySelectorAll("script").forEach((element) => { + const src = element.getAttribute("src"); if (src && src !== fullUrl && !_loading[src]) { _loaded[src] = true; @@ -80,6 +76,7 @@ export default function loadScript(url, opts) { if (_loaded[fullUrl]) { return resolve(); } + if (_loading[fullUrl]) { return _loading[fullUrl].then(resolve); } @@ -94,9 +91,12 @@ export default function loadScript(url, opts) { }); const cb = function (data) { - if (opts && opts.css) { - $("head").append("<style>" + data + "</style>"); + if (opts?.css) { + const style = document.createElement("style"); + style.innerText = data; + document.querySelector("head").appendChild(style); } + done(); resolve(); _loaded[url] = true;