--- 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);
+ }
+ }
}
});
},