From d1685600d36d3d24469eaa84475d7b2004869ee9 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 15 Mar 2021 13:55:18 -0400 Subject: [PATCH] refactor: deprecate action:script.load, use filter:script.load instead --- public/src/ajaxify.js | 87 +++++++++++++++++++------------------ public/src/modules/hooks.js | 17 ++++++++ 2 files changed, 62 insertions(+), 42 deletions(-) diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js index 63e324f07a..763e2085f4 100644 --- a/public/src/ajaxify.js +++ b/public/src/ajaxify.js @@ -320,53 +320,56 @@ ajaxify = window.ajaxify || {}; }; ajaxify.loadScript = function (tpl_url, callback) { - var location = !app.inAdmin ? 'forum/' : ''; + require(['hooks'], (hooks) => { + var location = !app.inAdmin ? 'forum/' : ''; - if (tpl_url.startsWith('admin')) { - location = ''; - } - var data = { - tpl_url: tpl_url, - scripts: [location + tpl_url], - }; - - // Hint: useful if you want to load a module on a specific page (append module name to `scripts`) - $(window).trigger('action:script.load', data); + if (tpl_url.startsWith('admin')) { + location = ''; + } + const data = { + tpl_url: tpl_url, + scripts: [location + tpl_url], + }; - // Require and parse modules - var outstanding = data.scripts.length; + // Hint: useful if you want to load a module on a specific page (append module name to `scripts`) + hooks.fire('action:script.load', data); + hooks.fire('filter:script.load', data).then((data) => { + // Require and parse modules + var outstanding = data.scripts.length; - data.scripts.map(function (script) { - if (typeof script === 'function') { - return function (next) { - script(); - next(); - }; - } - if (typeof script === 'string') { - return function (next) { - require(['hooks', script], function (hooks, module) { - // 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(() => { - if (module && module.init) { - module.init(); - } + data.scripts.map(function (script) { + if (typeof script === 'function') { + return function (next) { + script(); next(); - }); - }, function () { - // ignore 404 error - next(); + }; + } + if (typeof script === 'string') { + return function (next) { + require([script], function (module) { + // 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(() => { + if (module && module.init) { + module.init(); + } + next(); + }); + }, function () { + // ignore 404 error + next(); + }); + }; + } + return null; + }).filter(Boolean).forEach(function (fn) { + fn(function () { + outstanding -= 1; + if (outstanding === 0) { + callback(); + } }); - }; - } - return null; - }).filter(Boolean).forEach(function (fn) { - fn(function () { - outstanding -= 1; - if (outstanding === 0) { - callback(); - } + }); }); }); }; diff --git a/public/src/modules/hooks.js b/public/src/modules/hooks.js index f5e4c61744..0fcb3b8677 100644 --- a/public/src/modules/hooks.js +++ b/public/src/modules/hooks.js @@ -4,11 +4,28 @@ define('hooks', [], () => { const Hooks = { loaded: {}, temporary: new Set(), + deprecated: { + 'action:script.load': 'filter:script.load', // 👋 @ 1.18.0 + }, }; Hooks.register = (hookName, method) => { Hooks.loaded[hookName] = Hooks.loaded[hookName] || new Set(); Hooks.loaded[hookName].add(method); + + if (Hooks.deprecated.hasOwnProperty(hookName)) { + const deprecated = Hooks.deprecated[hookName]; + + if (deprecated) { + console.groupCollapsed(`[hooks] Hook "${hookName}" is deprecated, please use "${deprecated}" instead.`); + } else { + console.groupCollapsed(`[hooks] Hook "${hookName}" is deprecated, there is no alternative.`); + } + + console.info(method); + console.groupEnd(); + } + console.debug(`[hooks] Registered ${hookName}`, method); }; Hooks.on = Hooks.register;