src/pyams_skin/resources/js/myams.js
changeset 547 9fe15f541572
parent 542 a6d37768ab8f
child 553 644d0f6f6503
--- a/src/pyams_skin/resources/js/myams.js	Wed Oct 16 13:00:43 2019 +0200
+++ b/src/pyams_skin/resources/js/myams.js	Wed Oct 16 13:01:12 2019 +0200
@@ -1947,16 +1947,16 @@
 
 											   var button,
 												   buttonData,
-												   buttonTarget;
-											   var data = form.data();
-											   var formOptions = data.amsFormOptions;
-											   var formData;
-											   var formDataCallback;
-
-											   var progressHandler;
-											   var progressInterval;
-											   var progressCallback;
-											   var progressEndCallback;
+												   buttonTarget,
+												   data = form.data(),
+												   formOptions = data.amsFormOptions,
+												   formData,
+												   formDataCallback;
+
+											   var progressHandler,
+												   progressInterval,
+												   progressCallback,
+												   progressEndCallback;
 
 											   // Inner progress status handler
 											   function _getProgress(handler, progress_id) {
@@ -2129,8 +2129,8 @@
 														   if (modal.exists()) {
 															   ams.dialog && ams.dialog.close(form);
 														   } else {
-															   var callback;
-															   var button = form.data('ams-submit-button');
+															   var callback,
+																   button = form.data('ams-submit-button');
 															   if (button) {
 																   callback = button.data('ams-form-submit-callback');
 															   }
@@ -2228,8 +2228,8 @@
 		 * @param message: the optional message
 		 */
 		initSubmit: function(target, message) {
-			var form = $(this);
-			var spin = '<i class="fa fa-3x fa-gear fa-spin"></i>';
+			var form = $(this),
+				spin = '<i class="fa fa-3x fa-gear fa-spin"></i>';
 			if (!message) {
 				message = form.data('ams-form-submit-message');
 			}
@@ -2275,8 +2275,8 @@
 		 * @param message: the optional submit message
 		 */
 		initSubmitFooter: function(message) {
-			var form = $(this);
-			var spin = '<i class="fa fa-3x fa-gear fa-spin"></i>';
+			var form = $(this),
+				spin = '<i class="fa fa-3x fa-gear fa-spin"></i>';
 			if (!message) {
 				message = $(this).data('ams-form-submit-message');
 			}
@@ -2295,8 +2295,8 @@
 		 * @param target: the form submit container target
 		 */
 		finalizeSubmitFooter: function(/*target*/) {
-			var form = $(this);
-			var footer = $('footer', form);
+			var form = $(this),
+				footer = $('footer', form);
 			if (footer) {
 				$('.row', footer).remove();
 				$('button', footer).show();
@@ -2331,8 +2331,8 @@
 				}
 			}
 
-			var data = form.data();
-			var dataType;
+			var data = form.data(),
+				dataType;
 			if (data.amsFormDatatype) {
 				dataType = data.amsFormDatatype;
 			} else {
@@ -2416,13 +2416,13 @@
 			if (!validators.length) {
 				return true;
 			}
-			var output = [];
-			var result = true;
+			var output = [],
+				result = true;
 			for (var index=0; index < validators.length; index++) {
-				var validator = validators[index];
-				var source = validator[0];
-				var handler = validator[1];
-				var validatorResult = ams.executeFunctionByName(handler, form, source);
+				var validator = validators[index],
+					source = validator[0],
+					handler = validator[1],
+					validatorResult = ams.executeFunctionByName(handler, form, source);
 				if (validatorResult === false) {
 					result = false;
 				} else if (typeof(validatorResult) === 'string') {
@@ -5061,45 +5061,75 @@
 		chart: function(element) {
 			var charts = $('.chart', element);
 			if (charts.length > 0) {
-				ams.ajax && ams.ajax.check($.fn.plot,
-										   ams.baseURL + 'flot/jquery.flot' + ams.devext + '.js',
-										   function() {
-											   charts.each(function() {
-
-												   function checkPlugin(plugin) {
-													   for (var index in $.plot.plugins) {
-														   if ($.plot.plugins.hasOwnProperty(index)) {
-															   var pluginInfo = $.plot.plugins[index];
-															   if (pluginInfo.name === plugin) {
-																   return pluginInfo;
-															   }
-														   }
-													   }
-													   return null;
-												   }
-
-												   var chart = $(this);
-												   var data = chart.data();
-												   var dataOptions = {};
-												   var plugins = (data.amsChartPlugins || '').split(/\s+/);
-												   if (plugins.length > 0) {
-													   for (var index in plugins) {
-														   if (plugins.hasOwnProperty(index)) {
-															   var pluginName = plugins[index];
-															   if (!checkPlugin(pluginName)) {
-																   ams.getScript(ams.baseURL + 'flot/jquery.flot.' + pluginName + ams.devext + '.js');
-															   }
-														   }
-													   }
-												   }
-												   var settings = $.extend({}, dataOptions, data.amsChartOptions);
-												   settings = ams.executeFunctionByName(data.amsChartInitCallback, chart, settings) || settings;
-												   var chartData = data.amsChartData;
-												   chartData = ams.executeFunctionByName(data.amsChartInitData, chart, chartData) || chartData;
-												   var plugin = chart.plot(chartData, settings);
-												   ams.executeFunctionByName(data.amsChartAfterInitCallback, chart, plugin, settings);
-											   });
-										   });
+				ams.ajax && ams.ajax.check([window.Flot, $.color],
+					[ams.baseURL + 'ext/flot/jquery.canvaswrapper' + ams.devext + '.js',
+					 ams.baseURL + 'ext/flot/jquery.colorhelpers' + ams.devext + '.js'],
+					function () {
+						ams.ajax.check($.fn.plot,
+							ams.baseURL + 'ext/flot/jquery.flot' + ams.devext + '.js',
+							function () {
+								charts.each(function () {
+
+									var chart = $(this),
+										data = chart.data(),
+										dataOptions = {},
+										plugin,
+										flotPlugins = (data.amsChartPlugins || '').split(/\s+/);
+
+									function checkPlugin(plugin) {
+										for (var index in $.plot.plugins) {
+											if ($.plot.plugins.hasOwnProperty(index)) {
+												var pluginInfo = $.plot.plugins[index];
+												if (pluginInfo.name === plugin) {
+													return pluginInfo;
+												}
+											}
+										}
+										return null;
+									}
+
+									function initChart() {
+										var settings = $.extend({}, dataOptions, data.amsChartOptions);
+										settings = ams.executeFunctionByName(data.amsChartInitCallback, chart, settings) || settings;
+										var chartData = data.amsChartData,
+											chartDataLoader = data.amsChartDataLoader;
+										if (chartDataLoader) {
+											$.getJSON(chartDataLoader, chartData).done(function (data) {
+												settings = $.extend({}, settings, data.settings);
+												createChart(data.data, settings);
+											});
+										} else {
+											createChart(data, settings);
+										}
+									}
+
+									function createChart(chartData, settings) {
+										chartData = ams.executeFunctionByName(data.amsChartInitData, chart, chartData) || chartData;
+										plugin = chart.plot(chartData, settings);
+										ams.executeFunctionByName(data.amsChartAfterInitCallback, chart, plugin, settings);
+									}
+
+									var deferred = [];
+									if (flotPlugins.length > 0) {
+										for (var index in flotPlugins) {
+											if (flotPlugins.hasOwnProperty(index)) {
+												var pluginName = flotPlugins[index];
+												if (!checkPlugin(pluginName)) {
+													deferred.push(ams.getScript(ams.baseURL + 'ext/flot/jquery.flot.' + pluginName + ams.devext + '.js'));
+												}
+											}
+										}
+									}
+									if (deferred.length > 0) {
+										$.when.apply($, deferred).then(function () {
+											initChart();
+										})
+									} else {
+										initChart();
+									}
+								});
+							});
+					});
 			}
 		},