diff --git a/.eslintignore b/.eslintignore index c868093dca..84925be565 100644 --- a/.eslintignore +++ b/.eslintignore @@ -15,7 +15,6 @@ logs/ *.iws /coverage /build -/dist .eslintrc test/files *.min.js diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js index 77c3b2b529..3756e21b5c 100644 --- a/public/src/ajaxify.js +++ b/public/src/ajaxify.js @@ -353,7 +353,7 @@ ajaxify.widgets = { render: render }; } if (typeof script === 'string') { return async function (next) { - const module = await app.importScript(script); + const module = await app.require(script); // Hint: useful if you want to override a loaded library (e.g. replace core client-side logic), // or call a method other than .init() hooks.fire('static:script.init', { tpl_url, name: script, module }).then(() => { diff --git a/public/src/app.js b/public/src/app.js index c459e4d7e8..5406a225d8 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -47,22 +47,6 @@ app.flags = {}; } }; - app.importScript = async function (scriptName) { - let pageScript; - try { - if (scriptName.startsWith('admin')) { - pageScript = await import(/* webpackChunkName: "admin/[request]" */ 'admin/' + scriptName.replace(/^admin\//, '')); - } else if (scriptName.startsWith('forum')) { - pageScript = await import(/* webpackChunkName: "forum/[request]" */ 'forum/' + scriptName.replace(/^forum\//, '')); - } else { - pageScript = await import(/* webpackChunkName: "modules/[request]" */ 'modules/' + scriptName); - } - } catch (err) { - console.warn('error loading script' + err.stack); - } - return pageScript && pageScript.default; - } - app.handleEarlyClicks = function () { /** * Occasionally, a button or anchor (not meant to be ajaxified) is clicked before @@ -148,6 +132,30 @@ app.flags = {}; }); }; + app.require = async function (modules) { + const single = !Array.isArray(modules); + if (single) { + modules = [modules]; + } + async function requireModule(moduleName) { + let _module; + try { + if (moduleName.startsWith('admin')) { + _module = await import(/* webpackChunkName: "admin/[request]" */ 'admin/' + moduleName.replace(/^admin\//, '')); + } else if (moduleName.startsWith('forum')) { + _module = await import(/* webpackChunkName: "forum/[request]" */ 'forum/' + moduleName.replace(/^forum\//, '')); + } else { + _module = await import(/* webpackChunkName: "modules/[request]" */ 'modules/' + moduleName); + } + } catch (err) { + console.warn(`error loading ${moduleName}\n${err.stack}`); + } + return _module && _module.default; + } + const result = await Promise.all(modules.map(requireModule)); + return single ? result.pop() : result; + } + app.logout = function (redirect) { console.warn('[deprecated] app.logout is deprecated, please use logout module directly'); require(['logout'], function (logout) { diff --git a/public/src/modules/taskbar.js b/public/src/modules/taskbar.js index ebec82453f..67b36d8156 100644 --- a/public/src/modules/taskbar.js +++ b/public/src/modules/taskbar.js @@ -17,7 +17,7 @@ define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, t const moduleName = $btn.attr('data-module'); const uuid = $btn.attr('data-uuid'); - const module = await app.importScript(moduleName); + const module = await app.require(moduleName); if (!$btn.hasClass('active')) { minimizeAll(); module.load(uuid); @@ -48,7 +48,7 @@ define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, t } if (btnEl.length) { - const module = await app.importScript(moduleName); + const module = await app.require(moduleName); if (module && typeof module[fnName] === 'function') { module[fnName](uuid); }