329 lines
11 KiB
JavaScript
329 lines
11 KiB
JavaScript
(function() {
|
|
var callWithJQuery;
|
|
|
|
callWithJQuery = function(pivotModule) {
|
|
if (typeof exports === "object" && typeof module === "object") {
|
|
return pivotModule(require("jquery"), require("c3"));
|
|
} else if (typeof define === "function" && define.amd) {
|
|
return define(["jquery", "c3"], pivotModule);
|
|
} else {
|
|
return pivotModule(jQuery, c3);
|
|
}
|
|
};
|
|
|
|
callWithJQuery(function($, c3) {
|
|
var makeC3Chart;
|
|
makeC3Chart = function(chartOpts) {
|
|
if (chartOpts == null) {
|
|
chartOpts = {};
|
|
}
|
|
return function(pivotData, opts) {
|
|
var agg, attrs, base, base1, base2, base3, base4, base5, base6, base7, c, categories, colKey, colKeys, columns, dataColumns, defaults, formatter, fullAggName, groupByTitle, h, hAxisTitle, headers, i, j, k, l, len, len1, len2, len3, len4, m, numCharsInHAxis, numSeries, params, ref, ref1, ref2, ref3, renderArea, result, rotationAngle, row, rowHeader, rowKey, rowKeys, s, scatterData, series, title, titleText, vAxisTitle, val, vals, x, xs, y;
|
|
defaults = {
|
|
localeStrings: {
|
|
vs: "vs",
|
|
by: "by"
|
|
},
|
|
c3: {}
|
|
};
|
|
opts = $.extend(true, {}, defaults, opts);
|
|
if ((base = opts.c3).size == null) {
|
|
base.size = {};
|
|
}
|
|
if ((base1 = opts.c3.size).width == null) {
|
|
base1.width = window.innerWidth / 1.4;
|
|
}
|
|
if ((base2 = opts.c3.size).height == null) {
|
|
base2.height = window.innerHeight / 1.4 - 50;
|
|
}
|
|
if (chartOpts.type == null) {
|
|
chartOpts.type = "line";
|
|
}
|
|
if (chartOpts.horizontal == null) {
|
|
chartOpts.horizontal = false;
|
|
}
|
|
if (chartOpts.stacked == null) {
|
|
chartOpts.stacked = false;
|
|
}
|
|
rowKeys = pivotData.getRowKeys();
|
|
if (rowKeys.length === 0) {
|
|
rowKeys.push([]);
|
|
}
|
|
colKeys = pivotData.getColKeys();
|
|
if (colKeys.length === 0) {
|
|
colKeys.push([]);
|
|
}
|
|
headers = (function() {
|
|
var i, len, results;
|
|
results = [];
|
|
for (i = 0, len = colKeys.length; i < len; i++) {
|
|
h = colKeys[i];
|
|
results.push(h.join("-"));
|
|
}
|
|
return results;
|
|
})();
|
|
rotationAngle = 0;
|
|
fullAggName = pivotData.aggregatorName;
|
|
if (pivotData.valAttrs.length) {
|
|
fullAggName += "(" + (pivotData.valAttrs.join(", ")) + ")";
|
|
}
|
|
if (chartOpts.type === "scatter") {
|
|
scatterData = {
|
|
x: {},
|
|
y: {},
|
|
t: {}
|
|
};
|
|
attrs = pivotData.rowAttrs.concat(pivotData.colAttrs);
|
|
vAxisTitle = (ref = attrs[0]) != null ? ref : "";
|
|
hAxisTitle = (ref1 = attrs[1]) != null ? ref1 : "";
|
|
groupByTitle = attrs.slice(2).join("-");
|
|
titleText = vAxisTitle;
|
|
if (hAxisTitle !== "") {
|
|
titleText += " " + opts.localeStrings.vs + " " + hAxisTitle;
|
|
}
|
|
if (groupByTitle !== "") {
|
|
titleText += " " + opts.localeStrings.by + " " + groupByTitle;
|
|
}
|
|
for (i = 0, len = rowKeys.length; i < len; i++) {
|
|
rowKey = rowKeys[i];
|
|
for (j = 0, len1 = colKeys.length; j < len1; j++) {
|
|
colKey = colKeys[j];
|
|
agg = pivotData.getAggregator(rowKey, colKey);
|
|
if (agg.value() != null) {
|
|
vals = rowKey.concat(colKey);
|
|
series = vals.slice(2).join("-");
|
|
if (series === "") {
|
|
series = "series";
|
|
}
|
|
if ((base3 = scatterData.x)[series] == null) {
|
|
base3[series] = [];
|
|
}
|
|
if ((base4 = scatterData.y)[series] == null) {
|
|
base4[series] = [];
|
|
}
|
|
y = (ref2 = vals[0]) != null ? ref2 : 0;
|
|
x = (ref3 = vals[1]) != null ? ref3 : 0;
|
|
scatterData.y[series].push(y);
|
|
scatterData.x[series].push(x);
|
|
if ((base5 = scatterData.t)[series] == null) {
|
|
base5[series] = {};
|
|
}
|
|
if ((base6 = scatterData.t[series])[x] == null) {
|
|
base6[x] = {};
|
|
}
|
|
scatterData.t[series][x][y] = agg.value();
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
numCharsInHAxis = 0;
|
|
for (k = 0, len2 = headers.length; k < len2; k++) {
|
|
x = headers[k];
|
|
numCharsInHAxis += x.length;
|
|
}
|
|
if (numCharsInHAxis > 50) {
|
|
rotationAngle = 45;
|
|
}
|
|
columns = [];
|
|
for (l = 0, len3 = rowKeys.length; l < len3; l++) {
|
|
rowKey = rowKeys[l];
|
|
rowHeader = rowKey.join("-");
|
|
row = [rowHeader === "" ? fullAggName : rowHeader];
|
|
for (m = 0, len4 = colKeys.length; m < len4; m++) {
|
|
colKey = colKeys[m];
|
|
val = parseFloat(pivotData.getAggregator(rowKey, colKey).value());
|
|
if (isFinite(val)) {
|
|
row.push(val);
|
|
} else {
|
|
row.push(null);
|
|
}
|
|
}
|
|
columns.push(row);
|
|
}
|
|
vAxisTitle = fullAggName;
|
|
if (chartOpts.horizontal) {
|
|
hAxisTitle = pivotData.rowAttrs.join("-");
|
|
groupByTitle = pivotData.colAttrs.join("-");
|
|
} else {
|
|
hAxisTitle = pivotData.colAttrs.join("-");
|
|
groupByTitle = pivotData.rowAttrs.join("-");
|
|
}
|
|
titleText = fullAggName;
|
|
if (hAxisTitle !== "") {
|
|
titleText += " " + opts.localeStrings.vs + " " + hAxisTitle;
|
|
}
|
|
if (groupByTitle !== "") {
|
|
titleText += " " + opts.localeStrings.by + " " + groupByTitle;
|
|
}
|
|
}
|
|
title = $("<p>", {
|
|
style: "text-align: center; font-weight: bold"
|
|
});
|
|
title.text(titleText);
|
|
formatter = pivotData.getAggregator([], []).format;
|
|
params = {
|
|
axis: {
|
|
rotated: chartOpts.horizontal,
|
|
y: {
|
|
label: vAxisTitle,
|
|
tick: {}
|
|
},
|
|
x: {
|
|
label: hAxisTitle,
|
|
tick: {
|
|
rotate: rotationAngle,
|
|
multiline: false
|
|
}
|
|
}
|
|
},
|
|
data: {
|
|
type: chartOpts.type,
|
|
order: null
|
|
},
|
|
tooltip: {
|
|
grouped: false
|
|
},
|
|
color: {
|
|
pattern: ["#3366cc", "#dc3912", "#ff9900", "#109618", "#990099", "#0099c6", "#dd4477", "#66aa00", "#b82e2e", "#316395", "#994499", "#22aa99", "#aaaa11", "#6633cc", "#e67300", "#8b0707", "#651067", "#329262", "#5574a6", "#3b3eac"]
|
|
}
|
|
};
|
|
params = $.extend(true, {}, params, opts.c3);
|
|
if (chartOpts.type === "scatter") {
|
|
xs = {};
|
|
numSeries = 0;
|
|
dataColumns = [];
|
|
for (s in scatterData.x) {
|
|
numSeries += 1;
|
|
xs[s] = s + "_x";
|
|
dataColumns.push([s + "_x"].concat(scatterData.x[s]));
|
|
dataColumns.push([s].concat(scatterData.y[s]));
|
|
}
|
|
params.data.xs = xs;
|
|
params.data.columns = dataColumns;
|
|
params.axis.x.tick = {
|
|
fit: false
|
|
};
|
|
if (numSeries === 1) {
|
|
params.legend = {
|
|
show: false
|
|
};
|
|
}
|
|
params.tooltip.format = {
|
|
title: function() {
|
|
return fullAggName;
|
|
},
|
|
name: function() {
|
|
return "";
|
|
},
|
|
value: function(a, b, c, d, e) {
|
|
var ref4;
|
|
ref4 = e[0], series = ref4.name, y = ref4.value, x = ref4.x;
|
|
return formatter(scatterData.t[series][x][y]);
|
|
}
|
|
};
|
|
} else {
|
|
params.axis.x.type = 'category';
|
|
if ((base7 = params.axis.y.tick).format == null) {
|
|
base7.format = function(v) {
|
|
return formatter(v);
|
|
};
|
|
}
|
|
params.tooltip.format = {
|
|
value: function(v) {
|
|
return formatter(v);
|
|
}
|
|
};
|
|
if (chartOpts.horizontal) {
|
|
categories = (function() {
|
|
var len5, n, results;
|
|
results = [];
|
|
for (n = 0, len5 = columns.length; n < len5; n++) {
|
|
c = columns[n];
|
|
results.push(c.shift());
|
|
}
|
|
return results;
|
|
})();
|
|
if (categories.length === 1 && categories[0] === fullAggName) {
|
|
categories = [""];
|
|
}
|
|
params.axis.x.categories = categories;
|
|
if (headers.length === 1 && headers[0] === "") {
|
|
headers = [fullAggName];
|
|
}
|
|
columns.unshift(headers);
|
|
params.data.rows = columns;
|
|
} else {
|
|
params.axis.x.categories = headers;
|
|
params.data.columns = columns;
|
|
}
|
|
}
|
|
if (chartOpts.stacked) {
|
|
if (chartOpts.horizontal) {
|
|
params.data.groups = [
|
|
(function() {
|
|
var len5, n, results;
|
|
results = [];
|
|
for (n = 0, len5 = colKeys.length; n < len5; n++) {
|
|
x = colKeys[n];
|
|
results.push(x.join("-"));
|
|
}
|
|
return results;
|
|
})()
|
|
];
|
|
} else {
|
|
params.data.groups = [
|
|
(function() {
|
|
var len5, n, results;
|
|
results = [];
|
|
for (n = 0, len5 = rowKeys.length; n < len5; n++) {
|
|
x = rowKeys[n];
|
|
results.push(x.join("-"));
|
|
}
|
|
return results;
|
|
})()
|
|
];
|
|
}
|
|
}
|
|
renderArea = $("<div>", {
|
|
style: "display:none;"
|
|
}).appendTo($("body"));
|
|
result = $("<div>").appendTo(renderArea);
|
|
params.bindto = result[0];
|
|
c3.generate(params);
|
|
result.detach();
|
|
renderArea.remove();
|
|
return $("<div>").append(title, result);
|
|
};
|
|
};
|
|
return $.pivotUtilities.c3_renderers = {
|
|
"Horizontal Bar Chart": makeC3Chart({
|
|
type: "bar",
|
|
horizontal: true
|
|
}),
|
|
"Horizontal Stacked Bar Chart": makeC3Chart({
|
|
type: "bar",
|
|
stacked: true,
|
|
horizontal: true
|
|
}),
|
|
"Bar Chart": makeC3Chart({
|
|
type: "bar"
|
|
}),
|
|
"Stacked Bar Chart": makeC3Chart({
|
|
type: "bar",
|
|
stacked: true
|
|
}),
|
|
"Line Chart": makeC3Chart(),
|
|
"Area Chart": makeC3Chart({
|
|
type: "area",
|
|
stacked: true
|
|
}),
|
|
"Scatter Chart": makeC3Chart({
|
|
type: "scatter"
|
|
})
|
|
};
|
|
});
|
|
|
|
}).call(this);
|
|
|
|
//# sourceMappingURL=c3_renderers.js.map
|