From 6792ac91550faec998d17223c210c38527f612c9 Mon Sep 17 00:00:00 2001 From: Qb Date: Tue, 27 Jul 2021 13:41:51 +0000 Subject: [PATCH] Fix Addon Editor not loading when CustomCSS disabled (#915) * Editor: Fix Addon Editor not loading when CustomCSS disabled * Editor: await loading to prevent issues caused by the AMD loader replacement --- renderer/src/builtins/customcss.js | 27 ------------------------ renderer/src/modules/core.js | 7 +++++-- renderer/src/modules/editor.js | 33 ++++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 29 deletions(-) create mode 100644 renderer/src/modules/editor.js diff --git a/renderer/src/builtins/customcss.js b/renderer/src/builtins/customcss.js index 4f940c39..75a217ab 100644 --- a/renderer/src/builtins/customcss.js +++ b/renderer/src/builtins/customcss.js @@ -26,33 +26,6 @@ export default new class CustomCSS extends Builtin { } async enabled() { - if (!window.monaco && !window.MonacoEnvironment) { - Object.defineProperty(window, "MonacoEnvironment", { - value: { - getWorkerUrl: function() { - return `data:text/javascript;charset=utf-8,${encodeURIComponent(` - self.MonacoEnvironment = { - baseUrl: 'https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.20.0/min' - }; - importScripts('https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.20.0/min/vs/base/worker/workerMain.min.js');` - )}`; - } - } - }); - - const commonjsLoader = window.require; - delete window.module; // Make monaco think this isn't a local node script or else it freaks out - - DOMManager.linkStyle("monaco-style", "https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.20.0/min/vs/editor/editor.main.min.css", {documentHead: true}); - await DOMManager.injectScript("monaco-script", "https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.20.0/min/vs/loader.min.js"); - - const amdLoader = window.require; // Grab Monaco's amd loader - window.require = commonjsLoader; // Revert to commonjs - // this.log(amdLoader, window.require); - amdLoader.config({paths: {vs: "https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.20.0/min/vs"}}); - amdLoader(["vs/editor/editor.main"], () => {}); // exposes the monaco global - } - Settings.registerPanel(this.id, Strings.Panels.customcss, { order: 2, element: () => [, React.createElement(CSSEditor, { diff --git a/renderer/src/modules/core.js b/renderer/src/modules/core.js index ad8f2502..dfd11914 100644 --- a/renderer/src/modules/core.js +++ b/renderer/src/modules/core.js @@ -17,6 +17,7 @@ import Strings from "./strings"; import IPC from "./ipc"; import LoadingIcon from "../loadingicon"; import Styles from "../styles/index.css"; +import Editor from "./editor"; export default new class Core { async startup() { @@ -59,10 +60,12 @@ export default new class Core { Logger.log("Startup", "Initializing ComponentPatcher"); ComponentPatcher.initialize(); + Logger.log("Startup", "Initializing Editor"); + await Editor.initialize(); + Logger.log("Startup", "Initializing Builtins"); for (const module in Builtins) { - if (module === "CustomCSS") await Builtins[module].initialize(); - else Builtins[module].initialize(); + Builtins[module].initialize(); } Logger.log("Startup", "Loading Plugins"); diff --git a/renderer/src/modules/editor.js b/renderer/src/modules/editor.js new file mode 100644 index 00000000..94f8618d --- /dev/null +++ b/renderer/src/modules/editor.js @@ -0,0 +1,33 @@ +import DOMManager from "./dommanager"; + +export default new class Editor { + + async initialize() { + const baseUrl = "https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.20.0/min" + + Object.defineProperty(window, "MonacoEnvironment", { + value: { + getWorkerUrl: function() { + return `data:text/javascript;charset=utf-8,${encodeURIComponent(` + self.MonacoEnvironment = { + baseUrl: '${baseUrl}' + }; + importScripts('${baseUrl}/vs/base/worker/workerMain.min.js');` + )}`; + } + } + }); + + const commonjsLoader = window.require; + delete window.module; // Make monaco think this isn't a local node script or else it freaks out + + DOMManager.linkStyle("monaco-style", `${baseUrl}/vs/editor/editor.main.min.css`, {documentHead: true}); + await DOMManager.injectScript("monaco-script", `${baseUrl}/vs/loader.min.js`); + + const amdLoader = window.require; // Grab Monaco's amd loader + window.require = commonjsLoader; // Revert to commonjs + // this.log(amdLoader, window.require); + amdLoader.config({paths: {vs: `${baseUrl}/vs`}}); + amdLoader(["vs/editor/editor.main"], () => {}); // exposes the monaco global + } +}; \ No newline at end of file