{"version":3,"sources":["plotly_renderers.coffee","plotly_renderers.min.js"],"names":["callWithJQuery","pivotModule","exports","module","require","define","amd","jQuery","Plotly","$","makePlotlyChart","makePlotlyScatterChart","traceOptions","layoutOptions","transpose","pivotData","opts","colKeys","columns","d","data","datumKeys","defaults","fullAggName","groupByTitle","hAxisTitle","i","layout","result","rowKeys","rows","titleText","traceKeys","localeStrings","vs","by","plotly","plotlyConfig","extend","getRowKeys","getColKeys","length","push","aggregatorName","valAttrs","join","map","traceKey","datumKey","j","labels","len","trace","val","values","parseFloat","getAggregator","value","isFinite","name","type","x","y","rowAttrs","colAttrs","title","hovermode","width","window","innerWidth","height","innerHeight","Math","ceil","sqrt","grid","domain","row","floor","column","showlegend","xaxis","automargin","yaxis","appendTo","newPlot","detach","colKey","k","len1","renderArea","rowKey","v","text","mode","style","remove","pivotUtilities","plotly_renderers","Horizontal Bar Chart","orientation","barmode","Horizontal Stacked Bar Chart","Bar Chart","Stacked Bar Chart","Line Chart","Area Chart","stackgroup","Scatter Chart","Multiple Pie Chart","scalegroup","hoverinfo","textinfo","call","this"],"mappings":"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","file":"plotly_renderers.min.js","sourcesContent":["callWithJQuery = (pivotModule) ->\n if typeof exports is \"object\" and typeof module is \"object\" # CommonJS\n pivotModule require(\"jquery\"), require(\"plotly.js\")\n else if typeof define is \"function\" and define.amd # AMD\n define [\"jquery\", \"plotly.js\"], pivotModule\n # Plain browser env\n else\n pivotModule jQuery, Plotly\n\ncallWithJQuery ($, Plotly) ->\n\n makePlotlyChart = (traceOptions = {}, layoutOptions = {}, transpose = false) ->\n (pivotData, opts) ->\n defaults =\n localeStrings: {vs: \"vs\", by: \"by\"}\n plotly: {}\n plotlyConfig: {}\n\n opts = $.extend(true, {}, defaults, opts)\n\n rowKeys = pivotData.getRowKeys()\n colKeys = pivotData.getColKeys()\n traceKeys = if transpose then colKeys else rowKeys\n traceKeys.push([]) if traceKeys.length == 0\n datumKeys = if transpose then rowKeys else colKeys\n datumKeys.push([]) if datumKeys.length == 0\n\n fullAggName = pivotData.aggregatorName\n if pivotData.valAttrs.length\n fullAggName += \"(#{pivotData.valAttrs.join(\", \")})\"\n\n data = traceKeys.map (traceKey) ->\n values = []\n labels = []\n for datumKey in datumKeys\n val = parseFloat(pivotData.getAggregator(\n if transpose then datumKey else traceKey,\n if transpose then traceKey else datumKey\n ).value())\n values.push(if isFinite(val) then val else null)\n labels.push(datumKey.join('-') || ' ')\n\n trace = {name: traceKey.join('-') || fullAggName}\n if traceOptions.type == \"pie\"\n trace.values = values\n trace.labels = if labels.length > 1 then labels else [fullAggName]\n else\n trace.x = if transpose then values else labels\n trace.y = if transpose then labels else values\n return $.extend(trace, traceOptions)\n\n if transpose\n hAxisTitle = pivotData.rowAttrs.join(\"-\")\n groupByTitle = pivotData.colAttrs.join(\"-\")\n else\n hAxisTitle = pivotData.colAttrs.join(\"-\")\n groupByTitle = pivotData.rowAttrs.join(\"-\")\n titleText = fullAggName\n titleText += \" #{opts.localeStrings.vs} #{hAxisTitle}\" if hAxisTitle != \"\"\n titleText += \" #{opts.localeStrings.by} #{groupByTitle}\" if groupByTitle != \"\"\n\n layout =\n title: titleText\n hovermode: 'closest'\n width: window.innerWidth / 1.4\n height: window.innerHeight / 1.4 - 50\n\n if traceOptions.type == 'pie'\n columns = Math.ceil(Math.sqrt(data.length))\n rows = Math.ceil(data.length / columns)\n layout.grid = {columns, rows}\n for i, d of data\n d.domain = {\n row: Math.floor(i / columns),\n column: i - columns * Math.floor(i / columns),\n }\n if data.length > 1\n d.title = d.name\n layout.showlegend = false if data[0].labels.length == 1\n else\n layout.xaxis =\n title: if transpose then fullAggName else null\n automargin: true\n layout.yaxis =\n title: if transpose then null else fullAggName\n automargin: true\n\n\n result = $(\"
\").appendTo $(\"body\")\n Plotly.newPlot(result[0], data, $.extend(layout, layoutOptions, opts.plotly), opts.plotlyConfig)\n return result.detach()\n\n makePlotlyScatterChart = -> (pivotData, opts) ->\n defaults =\n localeStrings: {vs: \"vs\", by: \"by\"}\n plotly: {}\n plotlyConfig: {}\n\n opts = $.extend(true, {}, defaults, opts)\n\n rowKeys = pivotData.getRowKeys()\n rowKeys.push [] if rowKeys.length == 0\n colKeys = pivotData.getColKeys()\n colKeys.push [] if colKeys.length == 0\n\n data = {x: [], y: [], text: [], type: 'scatter', mode: 'markers'}\n\n for rowKey in rowKeys\n for colKey in colKeys\n v = pivotData.getAggregator(rowKey, colKey).value()\n if v?\n data.x.push(colKey.join('-'))\n data.y.push(rowKey.join('-'))\n data.text.push(v)\n\n layout = {\n title: pivotData.rowAttrs.join(\"-\") + ' vs ' + pivotData.colAttrs.join(\"-\")\n hovermode: 'closest',\n xaxis: {title: pivotData.colAttrs.join('-'), automargin: true},\n yaxis: {title: pivotData.rowAttrs.join('-'), automargin: true},\n width: window.innerWidth / 1.5,\n height: window.innerHeight / 1.4 - 50\n }\n\n renderArea = $(\"
\", style: \"display:none;\").appendTo $(\"body\")\n result = $(\"
\").appendTo renderArea\n Plotly.newPlot(result[0], [data], $.extend(layout, opts.plotly), opts.plotlyConfig)\n result.detach()\n renderArea.remove()\n return result\n\n $.pivotUtilities.plotly_renderers =\n \"Horizontal Bar Chart\": makePlotlyChart({type: 'bar', orientation: 'h'},\n {barmode: 'group'}, true)\n \"Horizontal Stacked Bar Chart\": makePlotlyChart({type: 'bar', orientation: 'h'},\n {barmode: 'relative'}, true)\n \"Bar Chart\": makePlotlyChart({type: 'bar'}, {barmode: 'group'})\n \"Stacked Bar Chart\": makePlotlyChart({type: 'bar'}, {barmode: 'relative'})\n \"Line Chart\": makePlotlyChart()\n \"Area Chart\": makePlotlyChart({stackgroup: 1})\n \"Scatter Chart\": makePlotlyScatterChart()\n 'Multiple Pie Chart': makePlotlyChart(\n {type: 'pie', scalegroup: 1, hoverinfo: 'label+value', textinfo: 'none'},\n {}, true)\n","(function() {\n var callWithJQuery;\n\n callWithJQuery = function(pivotModule) {\n if (typeof exports === \"object\" && typeof module === \"object\") {\n return pivotModule(require(\"jquery\"), require(\"plotly.js\"));\n } else if (typeof define === \"function\" && define.amd) {\n return define([\"jquery\", \"plotly.js\"], pivotModule);\n } else {\n return pivotModule(jQuery, Plotly);\n }\n };\n\n callWithJQuery(function($, Plotly) {\n var makePlotlyChart, makePlotlyScatterChart;\n makePlotlyChart = function(traceOptions, layoutOptions, transpose) {\n if (traceOptions == null) {\n traceOptions = {};\n }\n if (layoutOptions == null) {\n layoutOptions = {};\n }\n if (transpose == null) {\n transpose = false;\n }\n return function(pivotData, opts) {\n var colKeys, columns, d, data, datumKeys, defaults, fullAggName, groupByTitle, hAxisTitle, i, layout, result, rowKeys, rows, titleText, traceKeys;\n defaults = {\n localeStrings: {\n vs: \"vs\",\n by: \"by\"\n },\n plotly: {},\n plotlyConfig: {}\n };\n opts = $.extend(true, {}, defaults, opts);\n rowKeys = pivotData.getRowKeys();\n colKeys = pivotData.getColKeys();\n traceKeys = transpose ? colKeys : rowKeys;\n if (traceKeys.length === 0) {\n traceKeys.push([]);\n }\n datumKeys = transpose ? rowKeys : colKeys;\n if (datumKeys.length === 0) {\n datumKeys.push([]);\n }\n fullAggName = pivotData.aggregatorName;\n if (pivotData.valAttrs.length) {\n fullAggName += \"(\" + (pivotData.valAttrs.join(\", \")) + \")\";\n }\n data = traceKeys.map(function(traceKey) {\n var datumKey, j, labels, len, trace, val, values;\n values = [];\n labels = [];\n for (j = 0, len = datumKeys.length; j < len; j++) {\n datumKey = datumKeys[j];\n val = parseFloat(pivotData.getAggregator(transpose ? datumKey : traceKey, transpose ? traceKey : datumKey).value());\n values.push(isFinite(val) ? val : null);\n labels.push(datumKey.join('-') || ' ');\n }\n trace = {\n name: traceKey.join('-') || fullAggName\n };\n if (traceOptions.type === \"pie\") {\n trace.values = values;\n trace.labels = labels.length > 1 ? labels : [fullAggName];\n } else {\n trace.x = transpose ? values : labels;\n trace.y = transpose ? labels : values;\n }\n return $.extend(trace, traceOptions);\n });\n if (transpose) {\n hAxisTitle = pivotData.rowAttrs.join(\"-\");\n groupByTitle = pivotData.colAttrs.join(\"-\");\n } else {\n hAxisTitle = pivotData.colAttrs.join(\"-\");\n groupByTitle = pivotData.rowAttrs.join(\"-\");\n }\n titleText = fullAggName;\n if (hAxisTitle !== \"\") {\n titleText += \" \" + opts.localeStrings.vs + \" \" + hAxisTitle;\n }\n if (groupByTitle !== \"\") {\n titleText += \" \" + opts.localeStrings.by + \" \" + groupByTitle;\n }\n layout = {\n title: titleText,\n hovermode: 'closest',\n width: window.innerWidth / 1.4,\n height: window.innerHeight / 1.4 - 50\n };\n if (traceOptions.type === 'pie') {\n columns = Math.ceil(Math.sqrt(data.length));\n rows = Math.ceil(data.length / columns);\n layout.grid = {\n columns: columns,\n rows: rows\n };\n for (i in data) {\n d = data[i];\n d.domain = {\n row: Math.floor(i / columns),\n column: i - columns * Math.floor(i / columns)\n };\n if (data.length > 1) {\n d.title = d.name;\n }\n }\n if (data[0].labels.length === 1) {\n layout.showlegend = false;\n }\n } else {\n layout.xaxis = {\n title: transpose ? fullAggName : null,\n automargin: true\n };\n layout.yaxis = {\n title: transpose ? null : fullAggName,\n automargin: true\n };\n }\n result = $(\"
\").appendTo($(\"body\"));\n Plotly.newPlot(result[0], data, $.extend(layout, layoutOptions, opts.plotly), opts.plotlyConfig);\n return result.detach();\n };\n };\n makePlotlyScatterChart = function() {\n return function(pivotData, opts) {\n var colKey, colKeys, data, defaults, j, k, layout, len, len1, renderArea, result, rowKey, rowKeys, v;\n defaults = {\n localeStrings: {\n vs: \"vs\",\n by: \"by\"\n },\n plotly: {},\n plotlyConfig: {}\n };\n opts = $.extend(true, {}, defaults, opts);\n rowKeys = pivotData.getRowKeys();\n if (rowKeys.length === 0) {\n rowKeys.push([]);\n }\n colKeys = pivotData.getColKeys();\n if (colKeys.length === 0) {\n colKeys.push([]);\n }\n data = {\n x: [],\n y: [],\n text: [],\n type: 'scatter',\n mode: 'markers'\n };\n for (j = 0, len = rowKeys.length; j < len; j++) {\n rowKey = rowKeys[j];\n for (k = 0, len1 = colKeys.length; k < len1; k++) {\n colKey = colKeys[k];\n v = pivotData.getAggregator(rowKey, colKey).value();\n if (v != null) {\n data.x.push(colKey.join('-'));\n data.y.push(rowKey.join('-'));\n data.text.push(v);\n }\n }\n }\n layout = {\n title: pivotData.rowAttrs.join(\"-\") + ' vs ' + pivotData.colAttrs.join(\"-\"),\n hovermode: 'closest',\n xaxis: {\n title: pivotData.colAttrs.join('-'),\n automargin: true\n },\n yaxis: {\n title: pivotData.rowAttrs.join('-'),\n automargin: true\n },\n width: window.innerWidth / 1.5,\n height: window.innerHeight / 1.4 - 50\n };\n renderArea = $(\"
\", {\n style: \"display:none;\"\n }).appendTo($(\"body\"));\n result = $(\"
\").appendTo(renderArea);\n Plotly.newPlot(result[0], [data], $.extend(layout, opts.plotly), opts.plotlyConfig);\n result.detach();\n renderArea.remove();\n return result;\n };\n };\n return $.pivotUtilities.plotly_renderers = {\n \"Horizontal Bar Chart\": makePlotlyChart({\n type: 'bar',\n orientation: 'h'\n }, {\n barmode: 'group'\n }, true),\n \"Horizontal Stacked Bar Chart\": makePlotlyChart({\n type: 'bar',\n orientation: 'h'\n }, {\n barmode: 'relative'\n }, true),\n \"Bar Chart\": makePlotlyChart({\n type: 'bar'\n }, {\n barmode: 'group'\n }),\n \"Stacked Bar Chart\": makePlotlyChart({\n type: 'bar'\n }, {\n barmode: 'relative'\n }),\n \"Line Chart\": makePlotlyChart(),\n \"Area Chart\": makePlotlyChart({\n stackgroup: 1\n }),\n \"Scatter Chart\": makePlotlyScatterChart(),\n 'Multiple Pie Chart': makePlotlyChart({\n type: 'pie',\n scalegroup: 1,\n hoverinfo: 'label+value',\n textinfo: 'none'\n }, {}, true)\n };\n });\n\n}).call(this);\n\n//# sourceMappingURL=plotly_renderers.js.map\n"]}