42 lines
868 B
JavaScript
42 lines
868 B
JavaScript
|
// Ruby chartkick helper implementation assumes Chartkick is already loaded.
|
||
|
// It has no way to delay execution. So we wrap all the Chartkick classes
|
||
|
// to queue rendering for when Chartkick is loaded.
|
||
|
|
||
|
class AreaChart {
|
||
|
constructor(...args) {
|
||
|
charts.add(['AreaChart', args]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class PieChart {
|
||
|
constructor(...args) {
|
||
|
charts.add(['PieChart', args]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class LineChart {
|
||
|
constructor(...args) {
|
||
|
charts.add(['LineChart', args]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class ColumnChart {
|
||
|
constructor(...args) {
|
||
|
charts.add(['ColumnChart', args]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const charts = new Set();
|
||
|
|
||
|
function initialize() {
|
||
|
for (const [ChartType, args] of charts) {
|
||
|
new window.Chartkick[ChartType](...args);
|
||
|
}
|
||
|
charts.clear();
|
||
|
}
|
||
|
|
||
|
if (!window.Chartkick) {
|
||
|
window.Chartkick = { AreaChart, PieChart, LineChart, ColumnChart };
|
||
|
addEventListener('chartkick:ready', initialize);
|
||
|
}
|