--- a/src/pyams_skin/resources/js/myams.js Mon Jun 25 16:10:49 2018 +0200
+++ b/src/pyams_skin/resources/js/myams.js Wed Jun 27 12:22:33 2018 +0200
@@ -37,6 +37,16 @@
return (this.substr(slen-dlen) === str);
};
+ String.prototype.unserialize = function(str) {
+ var str = decodeURIComponent(this);
+ var chunks = str.split('&'),
+ obj = {};
+ for (var c = 0; c < chunks.length; c++) {
+ var split = chunks[c].split('=', 2);
+ obj[split[0]] = split[1];
+ }
+ return obj;
+ };
/**
* Array prototype extensions
@@ -973,6 +983,19 @@
},
/**
+ * Post data to given URL and handle result as JSON
+ */
+ getJSON: function() {
+ return function(options) {
+ var url = options.url;
+ delete options.url;
+ ams.ajax.post(url, options, function(result, status, request) {
+ ams.ajax.handleJSON(result);
+ });
+ }
+ },
+
+ /**
* Post data to given URL
*/
post: function(url, data, options, callback) {
@@ -6006,13 +6029,25 @@
}
e.preventDefault();
e.stopPropagation();
- var hrefGetter = ams.getFunctionByName(href);
+
+ var url,
+ target,
+ params;
+ if (href.indexOf('?') >= 0) {
+ url = href.split('?');
+ target = url[0];
+ params = url[1].unserialize();
+ } else {
+ target = href;
+ params = undefined;
+ }
+ var hrefGetter = ams.getFunctionByName(target);
if (typeof(hrefGetter) === 'function') {
- href = hrefGetter.call(link);
+ href = hrefGetter.call(link, params);
}
if (typeof(href) === 'function') {
// Javascript function call
- href.call(link);
+ href.call(link, params);
} else {
// Standard AJAX or browser URL call
// Convert %23 chars to #
@@ -6254,7 +6289,7 @@
link = $('a[href]', link);
}
var data = link.data();
- if (data.amsUrl) {
+ if (data && data.amsUrl) {
if (data.amsTabLoaded) {
return;
}