src/pyams_skin/resources/js/myams.js
changeset 353 03ff45898cdf
parent 351 5724a7c7a217
child 355 d8f16ba6d9b1
--- 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;
 				}