src/pyams_skin/resources/js/myams.js
changeset 80 181b3a0ee15a
parent 78 4cc2e7381e28
child 83 e7386933c184
--- a/src/pyams_skin/resources/js/myams.js	Tue Sep 08 17:19:46 2015 +0200
+++ b/src/pyams_skin/resources/js/myams.js	Tue Sep 08 17:21:34 2015 +0200
@@ -1035,7 +1035,6 @@
 			ams.ajax.check($.jsonRPC,
 						   ams.baseURL + 'ext/jquery-jsonrpc' + ams.devext + '.js',
 						   function() {
-								var result;
 								if (typeof(options) == 'function') {
 									callback = options;
 									options = {};
@@ -1676,6 +1675,28 @@
 	MyAMS.dialog = {
 
 		/**
+		 * List of registered 'shown' callbacks
+		 */
+		_shown_callbacks: [],
+
+		/**
+		 * Register a callback which should be called when a dialog is shown
+		 */
+		registerShownCallback: function(callback, dialog) {
+			if (dialog) {
+				var callbacks = dialog.data('shown-callbacks');
+				if (callbacks === undefined) {
+					callbacks = [];
+					dialog.data('shown-callbacks', callbacks);
+				}
+			} else {
+				callbacks = ams.dialog._shown_callbacks;
+			}
+			if (callbacks.indexOf(callback) < 0)
+				callbacks.push(callback);
+		},
+
+		/**
 		 * List of registered 'hide' callbacks
 		 */
 		_hide_callbacks: [],
@@ -1683,8 +1704,16 @@
 		/**
 		 * Register a callback which should be called when a dialog is closed
 		 */
-		registerHideCallback: function(callback) {
-			var callbacks = ams.dialog._hide_callbacks;
+		registerHideCallback: function(callback, dialog) {
+			if (dialog) {
+				var callbacks = dialog.data('hide-callbacks');
+				if (callbacks === undefined) {
+					callbacks = [];
+					dialog.data('hide-callbacks', callbacks);
+				}
+			} else {
+				callbacks = ams.dialog._hide_callbacks;
+			}
 			if (callbacks.indexOf(callback) < 0)
 				callbacks.push(callback);
 		},
@@ -1821,6 +1850,19 @@
 			} else {
 				$('.scrollmarker', viewport).remove();
 			}
+
+			// Call shown callbacks registered for this dialog
+			var callbacks = $('.modal-dialog', modal).data('shown-callbacks');
+			if (callbacks) {
+				for (var index in callbacks) {
+					callbacks[index].call(modal);
+				}
+			}
+			// Call globally registered shown callbacks
+			callbacks = ams.dialog._shown_callbacks;
+			for (index in callbacks) {
+				callbacks[index].call(modal);
+			}
 		},
 
 		/**
@@ -1843,9 +1885,16 @@
 			var modal = e.target;
 			// Call registered cleaning callbacks
 			ams.skin.cleanContainer(modal);
-			// Call registered hide callbacks
-			var callbacks = ams.dialog._hide_callbacks;
-			for (var index in callbacks) {
+			// Call hide callbacks registered for this dialog
+			var callbacks = $('.modal-dialog', modal).data('hide-callbacks');
+			if (callbacks) {
+				for (var index in callbacks) {
+					callbacks[index].call(modal);
+				}
+			}
+			// Call globally registered hide callbacks
+			callbacks = ams.dialog._hide_callbacks;
+			for (index in callbacks) {
 				callbacks[index].call(modal);
 			}
 		}