From 64e4ef042b6e2a6de1e891f5556a3f98a4a6c92f Mon Sep 17 00:00:00 2001 From: Julian Lam <julian@nodebb.org> Date: Fri, 6 Jan 2017 15:31:02 -0500 Subject: [PATCH] allowing plugins to subscribe to action:script.load and pass in function references --- public/src/ajaxify.js | 40 +++++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js index d426d7628c..1dbaa9ddce 100644 --- a/public/src/ajaxify.js +++ b/public/src/ajaxify.js @@ -253,15 +253,45 @@ $(document).ready(function () { $(window).trigger('action:script.load', data); - require(data.scripts, function (script) { - if (script && script.init) { - script.init(); + // Require and parse modules + var outstanding = 0; + var onReady = function () { + if (outstanding) { + return setTimeout(onReady, 100); } - if (callback) { - callback(); + data.scripts = data.scripts.filter(Boolean); + data.scripts.forEach(function (functionRef) { + functionRef(); + }); + }; + + data.scripts.forEach(function (script, idx) { + switch (typeof script) { + case 'string': + ++outstanding; + (function (idx) { + require([script], function (script) { + if (script && script.init) { + data.scripts[idx] = script.init; + } + --outstanding; + }); + }(idx)); + break; + + case 'function': + // No changes needed + break; + + default: + // Neither? No comprende + data.scripts[idx] = undefined; + break; } }); + + onReady(); }; ajaxify.loadData = function (url, callback) {