kibana-123
Version:
Kibana is an open source (Apache Licensed), browser based analytics and search dashboard for Elasticsearch. Kibana is a snap to setup and start using. Kibana strives to be easy to get started with, while also being flexible and powerful, just like Elastic
64 lines (60 loc) • 1.79 kB
JavaScript
import d3 from 'd3';
define(function () {
return function ChartSplitFactory() {
/*
* Adds div DOM elements to the `.chart-wrapper` element based on the data layout.
* For example, if the data has rows, it returns the same number of
* `.chart` elements as row objects.
*/
return function split(selection, parent) {
selection.each(function (data) {
const div = d3.select(this)
.attr('class', function () {
if (data.rows) {
return 'chart-wrapper-row';
} else if (data.columns) {
return 'chart-wrapper-column';
} else {
if (parent) {
return 'chart-first chart-last chart-wrapper';
}
return this.className + ' chart-wrapper';
}
});
let divClass = '';
let chartsNumber;
const charts = div.selectAll('charts')
.append('div')
.data(function (d) {
if (d.rows) {
chartsNumber = d.rows.length;
return d.rows;
} else if (d.columns) {
chartsNumber = d.columns.length;
return d.columns;
} else {
divClass = 'chart';
chartsNumber = 1;
return [d];
}
})
.enter()
.append('div')
.attr('class', function (d, i) {
let fullDivClass = divClass;
if (chartsNumber > 1) {
if (i === 0) {
fullDivClass += ' chart-first';
} else if (i === chartsNumber - 1) {
fullDivClass += ' chart-last';
}
}
return fullDivClass;
});
if (!data.series) {
charts.call(split);
}
});
};
};
});