Last active
May 14, 2016 20:01
-
-
Save marks/d08248fe68a0a69adda503012ac6bab0 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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, colKey, colKeys, columns, dataColumns, defaults, 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; | |
defaults = { | |
localeStrings: { | |
vs: "vs", | |
by: "by" | |
}, | |
c3: {} | |
}; | |
opts = $.extend(true, defaults, opts); | |
console.log("base",base) | |
console.log("opts",opts) | |
console.log("chartOpts",chartOpts) | |
console.log("pivotData",chartOpts) | |
console.log("this",this) | |
if ((base = opts.c3).size == null) { | |
base.size = {}; | |
} | |
if ((base1 = opts.c3.size).width == null) { | |
// base1.width = window.innerWidth / 1.4; | |
base1.width = $(".chart").width() | |
} | |
if ((base2 = opts.c3.size).height == null) { | |
// base2.height = window.innerHeight / 1.4 - 50; | |
base2.height = $(".chart").height() | |
} | |
if (chartOpts.type == null) { | |
chartOpts.type = "line"; | |
} | |
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] = []; | |
} | |
if ((base5 = scatterData.t)[series] == null) { | |
base5[series] = []; | |
} | |
scatterData.y[series].push((ref2 = vals[0]) != null ? ref2 : 0); | |
scatterData.x[series].push((ref3 = vals[1]) != null ? ref3 : 0); | |
scatterData.t[series].push(agg.format(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 === "" ? pivotData.aggregatorName : rowHeader]; | |
for (m = 0, len4 = colKeys.length; m < len4; m++) { | |
colKey = colKeys[m]; | |
val = parseFloat(pivotData.getAggregator(rowKey, colKey).value()); | |
if (isFinite(val)) { | |
if (val < 1) { | |
row.push(val.toPrecision(3)); | |
} else { | |
row.push(val.toFixed(3)); | |
} | |
} else { | |
row.push(null); | |
} | |
} | |
columns.push(row); | |
} | |
vAxisTitle = pivotData.aggregatorName + (pivotData.valAttrs.length ? "(" + (pivotData.valAttrs.join(", ")) + ")" : ""); | |
hAxisTitle = pivotData.colAttrs.join("-"); | |
titleText = fullAggName; | |
if (hAxisTitle !== "") { | |
titleText += " " + opts.localeStrings.vs + " " + hAxisTitle; | |
} | |
groupByTitle = pivotData.rowAttrs.join("-"); | |
if (groupByTitle !== "") { | |
titleText += " " + opts.localeStrings.by + " " + groupByTitle; | |
} | |
} | |
title = $("<p>", { | |
style: "text-align: center; font-weight: bold" | |
}); | |
title.text(titleText); | |
params = { | |
axis: { | |
y: { | |
label: vAxisTitle | |
}, | |
x: { | |
label: hAxisTitle, | |
tick: { | |
rotate: rotationAngle, | |
multiline: false | |
} | |
} | |
}, | |
data: { | |
type: chartOpts.type | |
}, | |
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"] | |
} | |
}; | |
$.extend(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) { | |
return scatterData.t[c][d]; | |
} | |
}; | |
} else { | |
params.axis.x.type = 'category'; | |
params.axis.x.categories = headers; | |
params.data.columns = columns; | |
} | |
if (chartOpts.stacked != null) { | |
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 = { | |
"Line Chart": makeC3Chart(), | |
"Bar Chart": makeC3Chart({ | |
type: "bar" | |
}), | |
"Stacked Bar Chart": makeC3Chart({ | |
type: "bar", | |
stacked: true | |
}), | |
"Area Chart": makeC3Chart({ | |
type: "area", | |
stacked: true | |
}), | |
"Scatter Chart": makeC3Chart({ | |
type: "scatter" | |
}) | |
}; | |
}); | |
// --- | |
// generated by coffee-script 1.9.2 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment