UNPKG

pivottable

Version:

Javascript Pivot Table (aka Pivot Grid, Pivot Chart, Cross-Tab) implementation with drag'n'drop

329 lines (324 loc) 11 kB
(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