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) {