From bf7233a2ef62836b9bd75f4ee00f53651feb44ec Mon Sep 17 00:00:00 2001 From: Darren Date: Sat, 18 Oct 2014 02:30:48 +0100 Subject: [PATCH] Updating client-side PluginInterface to its server-side version --- client/src/helpers/plugininterface.js | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/client/src/helpers/plugininterface.js b/client/src/helpers/plugininterface.js index ee025d9..0c2782a 100644 --- a/client/src/helpers/plugininterface.js +++ b/client/src/helpers/plugininterface.js @@ -52,31 +52,46 @@ PluginInterface.prototype.off = PluginInterface.prototype.removeListener = funct PluginInterface.prototype.emit = function emit(type, data) { var that = this; + return new Promise(function (emit_resolve, emit_reject) { var rejected = false, - rejected_reasons = []; + rejected_reasons = [], + listeners_promise; if (!that.listeners[type]) { return emit_resolve(data); } - (that.listeners[type].reduce(function (listener_promise, listener) { + // Add each listener as a promise .then() + listeners_promise = that.listeners[type].reduce(function (listener_promise, listener) { return listener_promise.then(function (data) { return new Promise(function (resolve) { - listener({ + var event_data = { callback: function () { resolve(data); + event_data.callback = null; }, preventDefault: function (reason) { rejected = true; if (reason) { rejected_reasons.push(reason); } - } - }, data); + }, + wait: false + }; + + listener(event_data, data); + + // If the module has not specified that we should wait, callback now + if (!event_data.wait && event_data.callback) { + event_data.callback(); + } }); }); - }, Promise.resolve(data))).then(function (data) { + }, Promise.resolve(data)); + + // After all the listeners have been called, resolve back with any modified data + listeners_promise.then(function (data) { if (rejected) { emit_reject({data: data, reasons: rejected_reasons}); } else { -- 2.25.1