src/ztfy/myams/resources/js/myams.js
changeset 17 847adb5d49b1
parent 13 1d3b54126eb5
child 19 dc18d0700e39
--- a/src/ztfy/myams/resources/js/myams.js	Mon May 12 00:35:54 2014 +0200
+++ b/src/ztfy/myams/resources/js/myams.js	Mon May 12 16:59:41 2014 +0200
@@ -60,7 +60,7 @@
 	 * JQuery 'econtains' expression
 	 * Case insensitive contains expression
 	 */
-	$.expr[":"].econtains = function(obj, index, meta, stack) {
+	$.expr[":"].econtains = function(obj, index, meta /*, stack*/) {
 		return (obj.textContent || obj.innerText || $(obj).text() || "").toLowerCase() == meta[3].toLowerCase();
 	};
 
@@ -69,7 +69,7 @@
 	 * JQuery 'withtext' expression
 	 * Case sensitive exact search expression
 	 */
-	$.expr[":"].withtext = function(obj, index, meta, stack) {
+	$.expr[":"].withtext = function(obj, index, meta /*, stack*/) {
 		return (obj.textContent || obj.innerText || $(obj).text() || "") == meta[3];
 	};
 
@@ -77,7 +77,7 @@
 	/**
 	 * JQuery filter on parents class
 	 */
-	$.expr[':'].parents = function(obj, index, meta, stack) {
+	$.expr[':'].parents = function(obj, index, meta /*, stack*/) {
 		return $(obj).parents(meta[3]).length > 0;
 	};
 
@@ -283,8 +283,10 @@
 		// public method for url decoding
 		decode : function (utftext) {
 			var string = "";
-			var i = 0;
-			var c = c1 = c2 = 0;
+			var i = 0,
+				c = 0,
+				c2 = 0,
+				c3 = 0;
 
 			while ( i < utftext.length ) {
 
@@ -315,7 +317,7 @@
 	 * MyAMS extensions to JQuery
 	 */
 	if (window.MyAMS === undefined) {
-		MyAMS = {
+		window.MyAMS = {
 			devmode: true,
 			throttle_delay: 350,
 			menu_speed: 235,
@@ -369,6 +371,19 @@
 
 
 	/**
+	 * Generate a random ID
+	 *
+	 * @param length
+	 */
+	MyAMS.generateId = function() {
+		function s4() {
+			return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
+		}
+		return s4() + s4() + s4() + s4();
+	};
+
+
+	/**
 	 * Get and execute a function given by name
 	 * Small piece of code by Jason Bunting
 	 */
@@ -379,7 +394,7 @@
 			return functionName;
 		var namespaces = functionName.split(".");
 		var func = namespaces.pop();
-		var context = (context === undefined || context === null) ? window : context;
+		context = (context === undefined || context === null) ? window : context;
 		for (var i=0; i < namespaces.length; i++) {
 			try {
 				context = context[namespaces[i]];
@@ -409,10 +424,9 @@
 	 * {MyAMS.baseURL}
 	 */
 	MyAMS.getSource = function(url) {
-		var src = url.replace(/{[^{}]*}/g, function(match) {
+		return url.replace(/{[^{}]*}/g, function(match) {
 			return ams.getFunctionByName(match.substr(1, match.length-2));
 		});
-		return src;
 	};
 
 	MyAMS.getScript = function(url, callback, options) {
@@ -448,7 +462,7 @@
 
 		stop: function(event) {
 			if (!event) {
-				var event = window.event;
+				event = window.event;
 			}
 			if (event) {
 				if (event.stopPropagation) {
@@ -513,7 +527,7 @@
 		/**
 		 * Default JQuery AJAX error handler
 		 */
-		ajax: function(event, request, settings) {
+		ajax: function(event, request /*, settings*/) {
 			if (request.statusText == 'OK')
 				return;
 			ams.skin.messageBox('error', {
@@ -565,8 +579,8 @@
 		 */
 		check: function(checker, source, callback, options) {
 			if (typeof(callback) == 'object') {
-				var options = callback;
-				var callback = undefined;
+				options = callback;
+				callback = undefined;
 			}
 			var defaults = {
 				async: typeof(callback) == 'function'
@@ -611,7 +625,7 @@
 				callback = ams.getFunctionByName(callback);
 			delete options.callback;
 
-			var result;
+			var result = undefined;
 			var defaults = {
 				url: addr,
 				type: 'post',
@@ -619,7 +633,7 @@
 				async: typeof(callback) == 'function',
 				data: $.param(data, true),
 				dataType: 'json',
-				success: callback || function(data, status) {
+				success: callback || function(data /*, status*/) {
 					result = data.result;
 				},
 				error: ams.error.show
@@ -633,7 +647,9 @@
 		 * Extract data type and result from response
 		 */
 		getResponse: function(request) {
-			var content_type = request.getResponseHeader('content-type');
+			var content_type = request.getResponseHeader('content-type'),
+				data_type,
+				result;
 			if (content_type.startsWith('application/javascript')) {
 				data_type = 'script';
 				result = request.responseText;
@@ -683,6 +699,7 @@
 		 */
 		handleJSON: function(result, form) {
 			var status = result.status;
+			var url;
 			switch (status) {
 				case 'error':
 					ams.form.showErrors(form, result);
@@ -705,14 +722,14 @@
 				case 'reload':
 					if (result.close_form != false)
 						ams.dialog.close(form);
-					var url = result.location;
+					url = result.location;
 					if (url.startsWith('#'))
 						ams.skin.loadURL(url.substr(1), result.target || '#content');
 					else
 						ams.skin.loadURL(url, result.target || '#content');
 					break;
 				case 'redirect':
-					var url = result.location;
+					url = result.location;
 					if (result.window) {
 						window.open(url, result.window, result.options);
 					} else {
@@ -889,7 +906,7 @@
 		 */
 		submit: function(form, handler, submit_options) {
 			// Check params
-			var form = $(form);
+			form = $(form);
 			if (!form.exists())
 				return false;
 			if (typeof(handler) == 'object') {
@@ -974,11 +991,11 @@
 										cache: false,
 										data: form_data,
 										dataType: data.amsFormDatatype,
-										beforeSerialize: function(form, options) {
+										beforeSerialize: function(/*form, options*/) {
 											if (typeof(tinyMCE) != 'undefined')
 												tinyMCE.triggerSave();
 										},
-										beforeSubmit: function(data, form, options) {
+										beforeSubmit: function(data, form /*, options*/) {
 											form.data('submitted', true);
 										},
 										error: function(request, status, error) {
@@ -1221,10 +1238,11 @@
 			} else {
 				header = errors.widgets && (errors.widgets.length > 1) ? ams.i18n.ERRORS_OCCURED : ams.i18n.ERROR_OCCURED;
 				var message = new Array();
-				for (var index in errors.messages) {
+				var index;
+				for (index in errors.messages) {
 					if (!$.isNumeric(index))
 						continue;
-					message.push(errors.messages[index])
+					message.push(errors.messages[index].message || errors.messages[index]);
 				}
 				for (index in errors.widgets) {
 					if (!$.isNumeric(index))
@@ -1493,13 +1511,14 @@
 			}
 
 			// Load, run and register new plug-ins
+			var name;
 			$('[data-ams-plugins]', element).each(function() {
 				var source = $(this);
 				var plugins = {}
 				if (typeof(source.data('ams-plugins')) === 'string') {
 					var names = source.data('ams-plugins').split(/\s+/);
 					for (var index in names) {
-						var name = names[index];
+						name = names[index];
 						var plugin_options = {
 							src: source.data('ams-plugin-' + name + '-src'),
 							css: source.data('ams-plugin-' + name + '-css'),
@@ -1512,7 +1531,7 @@
 				} else {
 					plugins = source.data('ams-plugins');
 				}
-				for (var name in plugins) {
+				for (name in plugins) {
 					if (ams.plugins.enabled[name] === undefined) {
 						var plugin = plugins[name];
 						ams.getScript(plugin.src, function() {
@@ -1653,19 +1672,26 @@
 						var checker = $('<label class="checkbox"></label>');
 						var input = $('<input type="checkbox">').attr('name', data.amsCheckerFieldname)
 																.attr('id', (data.amsCheckerFieldname ||
-																			 ('checker_'+(+new Date()).toString())).replace(/\./, '_'))
+																			 ('checker_'+ams.generateId())).replace(/\./, '_'))
 																.val(data.amsCheckerState == 'on')
 																.on('change', function(e) {
+																	e.preventDefault();
+																	var veto = {};
+																	legend.trigger('ams.checker.before-switch', [legend, veto]);
+																	if (veto.veto)
+																		return;
 																	if ($(this).is(':checked')) {
 																		if (data.amsCheckerMode == 'disable')
 																			fieldset.removeAttr('disabled')
 																		else
-																			fieldset.removeClass('switched')
+																			fieldset.removeClass('switched');
+																		legend.trigger('ams.checker.opened', [legend]);
 																	} else {
 																		if (data.amsCheckerMode == 'disable')
 																			fieldset.attr('disabled', 'disabled');
 																		else
 																			fieldset.addClass('switched');
+																		legend.trigger('ams.checker.closed', [legend]);
 																	}
 																})
 																.appendTo(checker);
@@ -2064,8 +2090,9 @@
 												}
 											};
 											var settings = $.extend({}, data_options, data.amsDatatableOptions);
+											var index;
 											if (extensions.length > 0) {
-												for (var index in extensions) {
+												for (index in extensions) {
 													switch (extensions[index]) {
 														case 'autofill':
 															ams.ajax.check($.fn.dataTable.AutoFill,
@@ -2125,7 +2152,7 @@
 											var plugin = table.dataTable(settings);
 											ams.executeFunctionByName(data.amsDatatableAfterInitCallback, table, plugin, settings);
 											if (extensions.length > 0) {
-												for (var index in extensions) {
+												for (index in extensions) {
 													switch(extensions[index]) {
 														case 'autofill':
 															var af_settings = $.extend({}, data.amsDatatableAutofillOptions, settings.autofill);
@@ -2492,7 +2519,7 @@
 		alert: function(parent, status, header, message, subtitle, margin) {
 			$('.alert', parent).remove();
 			if (status == 'error')
-				var status = 'danger';
+				status = 'danger';
 			var content = '<div class="' + (margin ? 'margin-10' : '') + ' alert alert-block alert-' + status + ' fade in">' +
 							'<a class="close" data-dismiss="alert"><i class="fa fa-check"></i></a>' +
 							'<h4 class="alert-heading">' +
@@ -2536,9 +2563,9 @@
 		 */
 		messageBox: function(status, options, callback) {
 			if (typeof(status) == 'object') {
-				var callback = options;
-				var options = status || {};
-				var status = 'info';
+				callback = options;
+				options = status || {};
+				status = 'info';
 			}
 			ams.ajax.check(ams.notify,
 						   ams.baseURL + 'myams-notify' + (ams.devmode ? '.js' : '.min.js'),
@@ -2567,9 +2594,9 @@
 		 */
 		smallBox: function(status, options, callback) {
 			if (typeof(status) == 'object') {
-				var callback = options;
-				var options = status || {};
-				var status = 'info';
+				callback = options;
+				options = status || {};
+				status = 'info';
 			}
 			ams.ajax.check(ams.notify,
 						   ams.baseURL + 'myams-notify' + (ams.devmode ? '.js' : '.min.js'),
@@ -2674,7 +2701,7 @@
 				callback = options;
 				options = {};
 			}
-			var container = $(container);
+			container = $(container);
 			var defaults = {
 				type: 'GET',
 				url: url,