src/pyams_skin/resources/js/myams.js
changeset 364 01c4609d7e91
parent 355 d8f16ba6d9b1
child 365 62b6e8709f86
--- a/src/pyams_skin/resources/js/myams.js	Mon Jul 02 17:31:17 2018 +0200
+++ b/src/pyams_skin/resources/js/myams.js	Wed Jul 04 16:34:24 2018 +0200
@@ -4738,18 +4738,57 @@
 			$('[data-ams-callback]', element).each(function() {
 				var self = this;
 				var data = $(self).data();
-				var callback = ams.getFunctionByName(data.amsCallback);
-				if (callback === undefined) {
-					if (data.amsCallbackSource) {
-						ams.getScript(data.amsCallbackSource,
-									  function() {
-										ams.executeFunctionByName(data.amsCallback, self, data.amsCallbackOptions);
-									  });
-					} else if (console) {
-						console.warn && console.warn("Undefined callback: " + data.amsCallback);
+				try {
+					var callbacks = JSON.parse(data.amsCallback);
+					if (!Array.isArray(callbacks)) {
+						callbacks = [callbacks];
 					}
-				} else {
-					callback.call(self, data.amsCallbackOptions);
+				} catch (e) {
+					callbacks = data.amsCallback.split(/\s+/);
+				}
+				for (var index=0; index < callbacks.length; index++) {
+					var callback = callbacks[index];
+					if (typeof(callback) === 'string') {
+						var callback_func = ams.getFunctionByName(callback);
+						var callback_options = data.amsCallbackOptions;
+						if (typeof(callback_options) === 'string') {
+							callback_options = callback_options.unserialize();
+						}
+						if (callback_func === undefined) {
+							if (data.amsCallbackSource) {
+								ams.getScript(data.amsCallbackSource,
+									(function (cb) {
+										ams.executeFunctionByName(cb, self, callback_options);
+									})(callback), {
+										async: data.amsCallbackAsync === undefined ? true : data.amsCallbackAsync
+									});
+							} else if (console) {
+								console.warn && console.warn("Undefined callback: " + data.amsCallback);
+							}
+						} else {
+							callback_func.call(self, callback_ptions);
+						}
+					} else {  // JSON object
+						callback_func = ams.getFunctionByName(callback.callback);
+						callback_options = callback.options;
+						if (typeof(callback_options) === 'string') {
+							callback_options = callback_options.unserialize();
+						}
+						if (callback_func === undefined) {
+							if (callback.source) {
+								ams.getScript(callback.source,
+									(function (cb) {
+										ams.executeFunctionByName(cb.callback, self, cb.options);
+									})(callback), {
+										async: callback.async === undefined ? true : callback.async
+									});
+							} else if (console) {
+								console.warn && console.warn("Undefined callback: " + callback.callback);
+							}
+						} else {
+							callback_func.call(self, callback.options);
+						}
+					}
 				}
 			});
 		},