diff -r 9f02c09d2393 -r 9fe15f541572 src/pyams_skin/resources/js/myams-plugins.js --- 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(); + } + }); + }); + }); } },