src/pyams_skin/resources/js/myams-plugins.js
changeset 547 9fe15f541572
parent 542 a6d37768ab8f
child 560 1ee4e482bfe7
--- a/src/pyams_skin/resources/js/myams-plugins.js	Wed Oct 16 13:00:43 2019 +0200
+++ b/src/pyams_skin/resources/js/myams-plugins.js	Wed Oct 16 13:01:12 2019 +0200
@@ -1695,45 +1695,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() {
+				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 () {
 
-												   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),
+										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;
+									}
 
-												   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);
-											   });
-										   });
+									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();
+									}
+								});
+							});
+					});
 			}
 		},