src/pyams_skin/resources/js/myams.js
changeset 164 cd734c4dcad9
parent 155 cd3ab32436f0
child 168 8b5d41852bb6
--- a/src/pyams_skin/resources/js/myams.js	Tue Nov 15 10:36:29 2016 +0100
+++ b/src/pyams_skin/resources/js/myams.js	Tue Nov 15 10:40:00 2016 +0100
@@ -2,7 +2,7 @@
  * MyAMS
  * « My Application Management Skin »
  *
- * $Tag$ (rev. 11)
+ * $Tag$ (rev. 13)
  * A bootstrap based application/administration skin
  *
  * Custom administration and application skin tools
@@ -441,6 +441,16 @@
 
 
 	/**
+	 * Basic logging function which log all arguments to console
+	 */
+	MyAMS.log = function() {
+		if (globals.console) {
+			globals.console.log(this, arguments);
+		}
+	};
+
+
+	/**
 	 * Extract parameter value from given query string
 	 */
 	MyAMS.getQueryVar = function(src, varName) {
@@ -489,7 +499,7 @@
 		var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
 			var r = (d + Math.random() * 16) % 16 | 0;
 			d = Math.floor(d / 16);
-			return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
+			return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);
 		});
 		return uuid;
 	};
@@ -1365,7 +1375,9 @@
 		 * Reset form changed flag
 		 */
 		resetChanged: function(form) {
-			form.removeAttr('data-ams-form-changed');
+			if (form !== undefined) {
+				$(form).removeAttr('data-ams-form-changed');
+			}
 		},
 
 		/**
@@ -1440,7 +1452,7 @@
 														  {progress_id: progress_id},
 														  {error: _clearProgressStatus},
 														  ams.getFunctionByName(progressCallback) || function(result, status) {
-															if (status == 'success') {
+															if (status === 'success') {
 																if (result.status === 'running') {
 																	if (result.message) {
 																		button.text(result.message);
@@ -2172,6 +2184,13 @@
 				}
 			}
 
+			// Check for shown callbacks defined via data API
+			$('[data-ams-shown-callback]', modal).each(function() {
+				var callback = ams.getFunctionByName($(this).data('ams-shown-callback'));
+				if (callback) {
+					callback.call(modal, this);
+				}
+			});
 			// Call shown callbacks registered for this dialog
 			var index;
 			var callbacks = $('.modal-dialog', modal).data('shown-callbacks');
@@ -2215,7 +2234,14 @@
 			var modal = e.target;
 			// Call registered cleaning callbacks
 			ams.skin.cleanContainer(modal);
-			// Call hide callbacks registered for this dialog
+			// Check for hidden callbacks defined via data API
+			$('[data-ams-hidden-callback]', modal).each(function() {
+				var callback = ams.getFunctionByName($(this).data('ams-hidden-callback'));
+				if (callback) {
+					callback.call(modal, this);
+				}
+			});
+			// Call hidden callbacks registered for this dialog
 			var index;
 			var callbacks = $('.modal-dialog', modal).data('hide-callbacks');
 			if (callbacks) {
@@ -2223,7 +2249,7 @@
 					callbacks[index].call(modal);
 				}
 			}
-			// Call globally registered hide callbacks
+			// Call globally registered hidden callbacks
 			callbacks = ams.dialog._hide_callbacks;
 			if (callbacks) {
 				for (index=0; index < callbacks.length; index++) {
@@ -2414,7 +2440,6 @@
 
 			// Scan new element for plug-ins
 			var plugins = {};
-			var plugin;
 			var name;
 
 			// Inner plug-in register function
@@ -2472,37 +2497,42 @@
 				}
 			});
 
+			// Inner plug-in loader function
+			var plugin;
+
+			function _loadPlugin() {
+				var index;
+				var callbacks = plugin.callbacks;
+				if (callbacks && callbacks.length) {
+					for (index=0; index < callbacks.length; index++) {
+						var called = ams.getFunctionByName(callbacks[index]);
+						if (plugin.register !== false) {
+							var enabled = ams.plugins.enabled;
+							if (enabled.hasOwnProperty(name)) {
+								enabled[name].push(called);
+							} else {
+								enabled[name] = [called];
+							}
+						}
+					}
+				} else {
+					if (plugin.register !== false) {
+						ams.plugins.enabled[name] = null;
+					}
+				}
+				// If running in async mode, registered plug-ins are run
+				// before callback is called so we call plug-in manually
+				if (callbacks && callbacks.length && (plugin.async !== false)) {
+					for (index=0; index < callbacks.length; index++) {
+						ams.getFunctionByName(callbacks[index])(element);
+					}
+				}
+			}
+
 			for (name in plugins) {
 				if (ams.plugins.enabled[name] === undefined) {
 					plugin = plugins[name];
-					ams.getScript(plugin.src, function() {
-						var index;
-						var callbacks = plugin.callbacks;
-						if (callbacks && callbacks.length) {
-							for (index=0; index < callbacks.length; index++) {
-								var called = ams.getFunctionByName(callbacks[index]);
-								if (plugin.register !== false) {
-									var enabled = ams.plugins.enabled;
-									if (enabled.hasOwnProperty(name)) {
-										enabled[name].push(called);
-									} else {
-										enabled[name] = [called];
-									}
-								}
-							}
-						} else {
-							if (plugin.register !== false) {
-								ams.plugins.enabled[name] = null;
-							}
-						}
-						// If running in async mode, registered plug-ins are run
-						// before callback is called so we call plug-in manually
-						if (callbacks && callbacks.length && (plugin.async !== false)) {
-							for (index=0; index < callbacks.length; index++) {
-								ams.getFunctionByName(callbacks[index])(element);
-							}
-						}
-					}, {
+					ams.getScript(plugin.src, _loadPlugin, {
 						async: plugin.async === undefined ? true : plugin.async
 					});
 				}