From 8e5687a4afc12887c1c9706269edbf6ec8df78cd Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 27 Jan 2021 12:05:26 -0500 Subject: [PATCH] refactor(hooks): deprecate `action:script.load` client-side hook Use `static:script.init` instead. --- public/src/ajaxify.js | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js index aebb9bacce..1de05c9e49 100644 --- a/public/src/ajaxify.js +++ b/public/src/ajaxify.js @@ -319,9 +319,22 @@ ajaxify = window.ajaxify || {}; if (tpl_url.startsWith('admin')) { location = ''; } + + require(['hooks', location + tpl_url], (hooks, module) => { + if (module && module.init) { + module.init(); + } + + hooks.fire('static:script.init', { tpl_url }).then(ajaxify.loadExtraScripts.bind(null, tpl_url, callback)); + }, function () { + // ignore 404 error + }); + }; + + ajaxify.loadExtraScripts = (tpl_url, callback) => { var data = { tpl_url: tpl_url, - scripts: [location + tpl_url], + scripts: [], }; $(window).trigger('action:script.load', data); @@ -329,6 +342,16 @@ ajaxify = window.ajaxify || {}; // Require and parse modules var outstanding = data.scripts.length; + if (outstanding && !app.flags.actionScriptLoadDeprecation) { + console.group('Deprecation Notice'); + console.warn('The "action:script.load" event has been deprecated and will be removed in NodeBB v1.18.0. Please attach a listener to the "static:script.init" client-side hook instead'); + data.scripts.forEach((script) => { + console.info(`Affected script: ${typeof script === 'function' ? script.name || 'anonymous ' + script.toString() : script}`); + }); + console.groupEnd(); + app.flags.actionScriptLoadDeprecation = 1; + } + data.scripts.map(function (script) { if (typeof script === 'function') { return function (next) {