OpenXE/www/js/chart-helper.js

105 lines
2.4 KiB
JavaScript
Raw Normal View History

2021-05-21 08:49:41 +02:00
var ChartHelper = (function ($, ChartJs) {
var me = {
elem: {
$chartWrapper: null
},
storage: {
charts: []
},
init: function () {
me.elem.$chartWrapper = $('.chart-wrapper');
// Keine Charts gefunden > Ende
if (me.elem.$chartWrapper.length === 0) {
return;
}
me.initCharts();
},
/**
* Alle Diagramme initialisieren
*/
initCharts: function () {
var interval = 250;
me.elem.$chartWrapper.each(function () {
var $wrapper = $(this);
// Alle 250 ms ein Chart initialisieren
window.setTimeout(function () {
me.initChart($wrapper);
}, interval);
interval += 250;
});
},
/**
* Einzelnes Diagramm initialisieren
*
* @param {jQuery} $wrapper
*
* @return {Chart}
*/
initChart: function ($wrapper) {
var chartCanvas = $wrapper.find('canvas');
var chartJson = $wrapper.find('script');
var chartData = JSON.parse(chartJson.html());
var graphId = chartCanvas.data('graph-id');
var graph = new ChartJs(chartCanvas, chartData);
if (typeof graphId === 'undefined') {
graphId = me.generateRandomId();
chartCanvas.data('graph-id', graphId);
}
me.storage.charts[graphId] = graph;
return graph;
},
/**
* Chart-Instanz abrufen
*
* @param {String} chartId
*
* @return {Chart}
*/
getChart: function (chartId) {
return me.storage.charts[chartId];
},
/**
* Alle Chart-Instanzen abrufen
*
* @return {Array|Chart[]}
*/
getCharts: function () {
return me.storage.charts;
},
/**
* Zufällige ID generieren
*
* @return {string}
*/
generateRandomId: function () {
return 'chart-' + Math.floor(Math.random() * Math.floor(9999999999));
}
};
return {
init: me.init,
initChart: me.initChart,
getChart: me.getChart,
getCharts: me.getCharts
};
})(jQuery, Chart);
$(document).ready(ChartHelper.init);