{“ast”:null,“code”:“function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }nn/*n * Chartkick.jsn * Create beautiful charts with one line of JavaScriptn * github.com/ankane/chartkick.jsn * v3.1.1n * MIT Licensen */n(function (global, factory) {n (typeof exports === "undefined" ? "undefined" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.Chartkick = factory());n})(this, function () {n 'use strict';nn function isArray(variable) {n return Object.prototype.toString.call(variable) === "[object Array]";n }nn function isFunction(variable) {n return variable instanceof Function
;n }nn function isPlainObject(variable) {n return Object.prototype.toString.call(variable) === "[object Object]";n } // github.com/madrobby/zepto/blob/master/src/zepto.jsnnn function extend(target, source) {n var key;nn for (key in source) {n if (isPlainObject(source) || isArray(source)) {n if (isPlainObject(source) && !isPlainObject(target)) {n target = {};n }nn if (isArray(source) && !isArray(target)) {n target = [];n }nn extend(target, source);n } else if (source !== undefined) {n target = source;n }n }n }nn function merge(obj1, obj2) {n var target = {};n extend(target, obj1);n extend(target, obj2);n return target;n }nn var DATE_PATTERN = /^(\d\d\d\d)(-)?(\d\d)(-)?(\d\d)$/i; // github.com/Do/iso8601.jsnn var ISO8601_PATTERN = /(\d\d\d\d)(-)?(\d\d)(-)?(\d\d)(T)?(\d\d)(:)?(\d\d)?(:)?(\d\d)?([.,]\d+)?($|Z|()(\d\d)(:)?(\d\d)?)/i;n var DECIMAL_SEPARATOR = String(1.5).charAt(1);nn function parseISO8601(input) {n var day, hour, matches, milliseconds, minutes, month, offset, result, seconds, type, year;n type = Object.prototype.toString.call(input);nn if (type === "[object Date]") {n return input;n }nn if (type !== "[object String]") {n return;n }nn matches = input.match(ISO8601_PATTERN);nn if (matches) {n year = parseInt(matches, 10);n month = parseInt(matches, 10) - 1;n day = parseInt(matches, 10);n hour = parseInt(matches, 10);n minutes = matches ? parseInt(matches, 10) : 0;n seconds = matches ? parseInt(matches, 10) : 0;n milliseconds = matches ? parseFloat(DECIMAL_SEPARATOR + matches.slice(1)) * 1000 : 0;n result = Date.UTC(year, month, day, hour, minutes, seconds, milliseconds);nn if (matches && matches) {n offset = matches * 60;nn if (matches) {n offset += parseInt(matches, 10);n }nn offset *= matches === "-" ? -1 : 1;n result -= offset * 60 * 1000;n }nn return new Date(result);n }n } // end iso8601.jsnnn function negativeValues(series) {n var i, j, data;nn for (i = 0; i < series.length; i++) {n data = series.data;nn for (j = 0; j < data.length; j++) {n if (data[1] < 0) {n return true;n }n }n }nn return false;n }nn function toStr(n) {n return "" + n;n }nn function toFloat(n) {n return parseFloat(n);n }nn function toDate(n) {n var matches, year, month, day;nn if (_typeof(n) !== "object") {n if (typeof n === "number") {n n = new Date(n * 1000); // msn } else {n n = toStr(n);nn if (matches = n.match(DATE_PATTERN)) {n year = parseInt(matches, 10);n month = parseInt(matches, 10) - 1;n day = parseInt(matches, 10);n return new Date(year, month, day);n } else {n // strn // try our best to get the str into iso8601n // TODO be smarter about thisn var str = n.replace(/ /, "T").replace(" ", "").replace("UTC", "Z");n n = parseISO8601(str) || new Date(n);n }n }n }nn return n;n }nn function toArr(n) {n if (!isArray(n)) {n var arr = [],n i;nn for (i in n) {n if (n.hasOwnProperty(i)) {n arr.push([i, n]);n }n }nn n = arr;n }nn return n;n }nn function jsOptionsFunc(defaultOptions, hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle) {n return function (chart, opts, chartOptions) {n var series = chart.data;n var options = merge({}, defaultOptions);n options = merge(options, chartOptions || {});nn if (chart.hideLegend || "legend" in opts) {n hideLegend(options, opts.legend, chart.hideLegend);n }nn if (opts.title) {n setTitle(options, opts.title);n } // minnnn if ("min" in opts) {n setMin(options, opts.min);n } else if (!negativeValues(series)) {n setMin(options, 0);n } // maxnnn if (opts.max) {n setMax(options, opts.max);n }nn if ("stacked" in opts) {n setStacked(options, opts.stacked);n }nn if (opts.colors) {n options.colors = opts.colors;n }nn if (opts.xtitle) {n setXtitle(options, opts.xtitle);n }nn if (opts.ytitle) {n setYtitle(options, opts.ytitle);n } // merge library lastnnn options = merge(options, opts.library || {});n return options;n };n }nn function sortByTime(a, b) {n return a.getTime() - b.getTime();n }nn function sortByNumberSeries(a, b) {n return a - b;n }nn function sortByNumber(a, b) {n return a - b;n }nn function isMinute(d) {n return d.getMilliseconds() === 0 && d.getSeconds() === 0;n }nn function isHour(d) {n return isMinute(d) && d.getMinutes() === 0;n }nn function isDay(d) {n return isHour(d) && d.getHours() === 0;n }nn function isWeek(d, dayOfWeek) {n return isDay(d) && d.getDay() === dayOfWeek;n }nn function isMonth(d) {n return isDay(d) && d.getDate() === 1;n }nn function isYear(d) {n return isMonth(d) && d.getMonth() === 0;n }nn function isDate(obj) {n return !isNaN(toDate(obj)) && toStr(obj).length >= 6;n }nn function isNumber(obj) {n return typeof obj === "number";n }nn function formatValue(pre, value, options) {n pre = pre || "";nn if (options.prefix) {n if (value < 0) {n value = value * -1;n pre += "-";n }nn pre += options.prefix;n }nn if (options.thousands || options.decimal) {n value = toStr(value);n var parts = value.split(".");n value = parts;nn if (options.thousands) {n value = value.replace(/\B(?=(\d{3})+(?!\d))/g, options.thousands);n }nn if (parts.length > 1) {n value += (options.decimal || ".") + parts;n }n }nn return pre + value + (options.suffix || "");n }nn function seriesOption(chart, series, option) {n if (option in series) {n return series;n } else if (option in chart.options) {n return chart.options;n }nn return null;n }nn function allZeros(data) {n var i, j, d;nn for (i = 0; i < data.length; i++) {n d = data.data;nn for (j = 0; j < d.length; j++) {n if (d[1] != 0) {n return false;n }n }n }nn return true;n }nn var baseOptions = {n maintainAspectRatio: false,n animation: false,n tooltips: {n displayColors: false,n callbacks: {}n },n legend: {},n title: {n fontSize: 20,n fontColor: "#333"n }n };n var defaultOptions = {n scales: {n yAxes: [{n ticks: {n maxTicksLimit: 4n },n scaleLabel: {n fontSize: 16,n // fontStyle: "bold",n fontColor: "#333"n }n }],n xAxes: [{n gridLines: {n drawOnChartArea: falsen },n scaleLabel: {n fontSize: 16,n // fontStyle: "bold",n fontColor: "#333"n },n time: {},n ticks: {}n }]n }n }; // there4.io/2012/05/02/google-chart-color-list/nn var defaultColors = ["#3366CC", "#DC3912", "#FF9900", "#109618", "#990099", "#3B3EAC", "#0099C6", "#DD4477", "#66AA00", "#B82E2E", "#316395", "#994499", "#22AA99", "#AAAA11", "#6633CC", "#E67300", "#8B0707", "#329262", "#5574A6", "#651067"];nn var hideLegend = function hideLegend(options, legend, _hideLegend) {n if (legend !== undefined) {n options.legend.display = !!legend;nn if (legend && legend !== true) {n options.legend.position = legend;n }n } else if (_hideLegend) {n options.legend.display = false;n }n };nn var setTitle = function setTitle(options, title) {n options.title.display = true;n options.title.text = title;n };nn var setMin = function setMin(options, min) {n if (min !== null) {n options.scales.yAxes.ticks.min = toFloat(min);n }n };nn var setMax = function setMax(options, max) {n options.scales.yAxes.ticks.max = toFloat(max);n };nn var setBarMin = function setBarMin(options, min) {n if (min !== null) {n options.scales.xAxes.ticks.min = toFloat(min);n }n };nn var setBarMax = function setBarMax(options, max) {n options.scales.xAxes.ticks.max = toFloat(max);n };nn var setStacked = function setStacked(options, stacked) {n options.scales.xAxes.stacked = !!stacked;n options.scales.yAxes.stacked = !!stacked;n };nn var setXtitle = function setXtitle(options, title) {n options.scales.xAxes.scaleLabel.display = true;n options.scales.xAxes.scaleLabel.labelString = title;n };nn var setYtitle = function setYtitle(options, title) {n options.scales.yAxes.scaleLabel.display = true;n options.scales.yAxes.scaleLabel.labelString = title;n }; // stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgbnnn var addOpacity = function addOpacity(hex, opacity) {n var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);n return result ? "rgba(" + parseInt(result, 16) + ", " + parseInt(result, 16) + ", " + parseInt(result, 16) + ", " + opacity + ")" : hex;n }; // check if not null or undefinedn // stackoverflow.com/a/27757708/1177228nnn var notnull = function notnull(x) {n return x != null;n };nn var setLabelSize = function setLabelSize(chart, data, options) {n var maxLabelSize = Math.ceil(chart.element.offsetWidth / 4.0 / data.labels.length);nn if (maxLabelSize > 25) {n maxLabelSize = 25;n } else if (maxLabelSize < 10) {n maxLabelSize = 10;n }nn if (!options.scales.xAxes.ticks.callback) {n options.scales.xAxes.ticks.callback = function (value) {n value = toStr(value);nn if (value.length > maxLabelSize) {n return value.substring(0, maxLabelSize - 2) + "…";n } else {n return value;n }n };n }n };nn var setFormatOptions = function setFormatOptions(chart, options, chartType) {n var formatOptions = {n prefix: chart.options.prefix,n suffix: chart.options.suffix,n thousands: chart.options.thousands,n decimal: chart.options.decimaln };nn if (chartType !== "pie") {n var myAxes = options.scales.yAxes;nn if (chartType === "bar") {n myAxes = options.scales.xAxes;n }nn if (!myAxes.ticks.callback) {n myAxes.ticks.callback = function (value) {n return formatValue("", value, formatOptions);n };n }n }nn if (!options.tooltips.callbacks.label) {n if (chartType === "scatter") {n options.tooltips.callbacks.label = function (item, data) {n var label = data.datasets.label || '';nn if (label) {n label += ': ';n }nn return label + '(' + item.xLabel + ', ' + item.yLabel + ')';n };n } else if (chartType === "bubble") {n options.tooltips.callbacks.label = function (item, data) {n var label = data.datasets.label || '';nn if (label) {n label += ': ';n }nn var dataPoint = data.datasets.data;n return label + '(' + item.xLabel + ', ' + item.yLabel + ', ' + dataPoint.v + ')';n };n } else if (chartType === "pie") {n // need to use separate label for pie chartsn options.tooltips.callbacks.label = function (tooltipItem, data) {n var dataLabel = data.labels;n var value = ': ';nn if (isArray(dataLabel)) {n // show value on first line of multiline labeln // need to clone because we are changing the valuen dataLabel = dataLabel.slice();n dataLabel += value;n } else {n dataLabel += value;n }nn return formatValue(dataLabel, data.datasets.data, formatOptions);n };n } else {n var valueLabel = chartType === "bar" ? "xLabel" : "yLabel";nn options.tooltips.callbacks.label = function (tooltipItem, data) {n var label = data.datasets.label || '';nn if (label) {n label += ': ';n }nn return formatValue(label, tooltipItem, formatOptions);n };n }n }n };nn var jsOptions = jsOptionsFunc(merge(baseOptions, defaultOptions), hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle);nn var createDataTable = function createDataTable(chart, options, chartType) {n var datasets = [];n var labels = [];n var colors = chart.options.colors || defaultColors;n var day = true;n var week = true;n var dayOfWeek;n var month = true;n var year = true;n var hour = true;n var minute = true;n var series = chart.data;n var max = 0;nn if (chartType === "bubble") {n for (var i$1 = 0; i$1 < series.length; i$1++) {n var s$1 = series;nn for (var j$1 = 0; j$1 < s$1.data.length; j$1++) {n if (s$1.data[2] > max) {n max = s$1.data[2];n }n }n }n }nn var i,n j,n s,n d,n key,n rows = [],n rows2 = [];nn if (chartType === "bar" || chartType === "column" || chart.xtype !== "number" && chart.xtype !== "bubble") {n var sortedLabels = [];nn for (i = 0; i < series.length; i++) {n s = series;nn for (j = 0; j < s.data.length; j++) {n d = s.data;n key = chart.xtype == "datetime" ? d.getTime() : d;nn if (!rows) {n rows = new Array(series.length);n }nn rows[i] = toFloat(d);nn if (sortedLabels.indexOf(key) === -1) {n sortedLabels.push(key);n }n }n }nn if (chart.xtype === "datetime" || chart.xtype === "number") {n sortedLabels.sort(sortByNumber);n }nn for (j = 0; j < series.length; j++) {n rows2.push([]);n }nn var value;n var k;nn for (k = 0; k < sortedLabels.length; k++) {n i = sortedLabels;nn if (chart.xtype === "datetime") {n value = new Date(toFloat(i)); // TODO make this efficientnn day = day && isDay(value);nn if (!dayOfWeek) {n dayOfWeek = value.getDay();n }nn week = week && isWeek(value, dayOfWeek);n month = month && isMonth(value);n year = year && isYear(value);n hour = hour && isHour(value);n minute = minute && isMinute(value);n } else {n value = i;n }nn labels.push(value);nn for (j = 0; j < series.length; j++) {n // Chart.js doesn't like undefinedn rows2.push(rows[j] === undefined ? null : rows[j]);n }n }n } else {n for (var i$2 = 0; i$2 < series.length; i$2++) {n var s$2 = series;n var d$1 = [];nn for (var j$2 = 0; j$2 < s$2.data.length; j$2++) {n var point = {n x: toFloat(s$2.data[0]),n y: toFloat(s$2.data[1])n };nn if (chartType === "bubble") {n point.r = toFloat(s$2.data[2]) * 20 / max; // custom attribute, for tooltipnn point.v = s$2.data[2];n }nn d$1.push(point);n }nn rows2.push(d$1);n }n }nn for (i = 0; i < series.length; i++) {n s = series;n var color = s.color || colors;n var backgroundColor = chartType !== "line" ? addOpacity(color, 0.5) : color;n var dataset = {n label: s.name || "",n data: rows2,n fill: chartType === "area",n borderColor: color,n backgroundColor: backgroundColor,n pointBackgroundColor: color,n borderWidth: 2,n pointHoverBackgroundColor: colorn };nn if (s.stack) {n dataset.stack = s.stack;n }nn var curve = seriesOption(chart, s, "curve");nn if (curve === false) {n dataset.lineTension = 0;n }nn var points = seriesOption(chart, s, "points");nn if (points === false) {n dataset.pointRadius = 0;n dataset.pointHitRadius = 5;n }nn dataset = merge(dataset, chart.options.dataset || {});n dataset = merge(dataset, s.library || {});n dataset = merge(dataset, s.dataset || {});n datasets.push(dataset);n }nn var xmin = chart.options.xmin;n var xmax = chart.options.xmax;nn if (chart.xtype === "datetime") {n if (notnull(xmin)) {n options.scales.xAxes.time.min = toDate(xmin).getTime();n }nn if (notnull(xmax)) {n options.scales.xAxes.time.max = toDate(xmax).getTime();n }n } else if (chart.xtype === "number") {n if (notnull(xmin)) {n options.scales.xAxes.ticks.min = xmin;n }nn if (notnull(xmax)) {n options.scales.xAxes.ticks.max = xmax;n }n }nn if (chart.xtype === "datetime" && labels.length > 0) {n var minTime = (notnull(xmin) ? toDate(xmin) : labels).getTime();n var maxTime = (notnull(xmax) ? toDate(xmax) : labels).getTime();nn for (i = 1; i < labels.length; i++) {n var value$1 = labels.getTime();nn if (value$1 < minTime) {n minTime = value$1;n }nn if (value$1 > maxTime) {n maxTime = value$1;n }n }nn var timeDiff = (maxTime - minTime) / (86400 * 1000.0);nn if (!options.scales.xAxes.time.unit) {n var step;nn if (year || timeDiff > 365 * 10) {n options.scales.xAxes.time.unit = "year";n step = 365;n } else if (month || timeDiff > 30 * 10) {n options.scales.xAxes.time.unit = "month";n step = 30;n } else if (day || timeDiff > 10) {n options.scales.xAxes.time.unit = "day";n step = 1;n } else if (hour || timeDiff > 0.5) {n options.scales.xAxes.time.displayFormats = {n hour: "MMM D, h a"n };n options.scales.xAxes.time.unit = "hour";n step = 1 / 24.0;n } else if (minute) {n options.scales.xAxes.time.displayFormats = {n minute: "h:mm a"n };n options.scales.xAxes.time.unit = "minute";n step = 1 / 24.0 / 60.0;n }nn if (step && timeDiff > 0) {n var unitStepSize = Math.ceil(timeDiff / step / (chart.element.offsetWidth / 100.0));nn if (week && step === 1) {n unitStepSize = Math.ceil(unitStepSize / 7.0) * 7;n }nn options.scales.xAxes.time.unitStepSize = unitStepSize;n }n }nn if (!options.scales.xAxes.time.tooltipFormat) {n if (day) {n options.scales.xAxes.time.tooltipFormat = "ll";n } else if (hour) {n options.scales.xAxes.time.tooltipFormat = "MMM D, h a";n } else if (minute) {n options.scales.xAxes.time.tooltipFormat = "h:mm a";n }n }n }nn var data = {n labels: labels,n datasets: datasetsn };n return data;n };nn var defaultExport = function defaultExport(library) {n this.name = "chartjs";n this.library = library;n };nn defaultExport.prototype.renderLineChart = function renderLineChart(chart, chartType) {n var chartOptions = {}; // fix for github.com/chartjs/Chart.js/issues/2441nn if (!chart.options.max && allZeros(chart.data)) {n chartOptions.max = 1;n }nn var options = jsOptions(chart, merge(chartOptions, chart.options));n setFormatOptions(chart, options, chartType);n var data = createDataTable(chart, options, chartType || "line");nn if (chart.xtype === "number") {n options.scales.xAxes.type = "linear";n options.scales.xAxes.position = "bottom";n } else {n options.scales.xAxes.type = chart.xtype === "string" ? "category" : "time";n }nn this.drawChart(chart, "line", data, options);n };nn defaultExport.prototype.renderPieChart = function renderPieChart(chart) {n var options = merge({}, baseOptions);nn if (chart.options.donut) {n options.cutoutPercentage = 50;n }nn if ("legend" in chart.options) {n hideLegend(options, chart.options.legend);n }nn if (chart.options.title) {n setTitle(options, chart.options.title);n }nn options = merge(options, chart.options.library || {});n setFormatOptions(chart, options, "pie");n var labels = [];n var values = [];nn for (var i = 0; i < chart.data.length; i++) {n var point = chart.data;n labels.push(point);n values.push(point);n }nn var dataset = {n data: values,n backgroundColor: chart.options.colors || defaultColorsn };n dataset = merge(dataset, chart.options.dataset || {});n var data = {n labels: labels,n datasets: [dataset]n };n this.drawChart(chart, "pie", data, options);n };nn defaultExport.prototype.renderColumnChart = function renderColumnChart(chart, chartType) {n var options;nn if (chartType === "bar") {n var barOptions = merge(baseOptions, defaultOptions);n delete barOptions.scales.yAxes.ticks.maxTicksLimit;n options = jsOptionsFunc(barOptions, hideLegend, setTitle, setBarMin, setBarMax, setStacked, setXtitle, setYtitle)(chart, chart.options);n } else {n options = jsOptions(chart, chart.options);n }nn setFormatOptions(chart, options, chartType);n var data = createDataTable(chart, options, "column");nn if (chartType !== "bar") {n setLabelSize(chart, data, options);n }nn this.drawChart(chart, chartType === "bar" ? "horizontalBar" : "bar", data, options);n };nn defaultExport.prototype.renderAreaChart = function renderAreaChart(chart) {n this.renderLineChart(chart, "area");n };nn defaultExport.prototype.renderBarChart = function renderBarChart(chart) {n this.renderColumnChart(chart, "bar");n };nn defaultExport.prototype.renderScatterChart = function renderScatterChart(chart, chartType) {n chartType = chartType || "scatter";n var options = jsOptions(chart, chart.options);n setFormatOptions(chart, options, chartType);nn if (!("showLines" in options)) {n options.showLines = false;n }nn var data = createDataTable(chart, options, chartType);n options.scales.xAxes.type = "linear";n options.scales.xAxes.position = "bottom";n this.drawChart(chart, chartType, data, options);n };nn defaultExport.prototype.renderBubbleChart = function renderBubbleChart(chart) {n this.renderScatterChart(chart, "bubble");n };nn defaultExport.prototype.destroy = function destroy(chart) {n if (chart.chart) {n chart.chart.destroy();n }n };nn defaultExport.prototype.drawChart = function drawChart(chart, type, data, options) {n this.destroy(chart);n var chartOptions = {n type: type,n data: data,n options: optionsn };nn if (chart.options.code) {n window.console.log("new Chart(ctx, " + JSON.stringify(chartOptions) + ");");n }nn chart.element.innerHTML = "<canvas></canvas>";n var ctx = chart.element.getElementsByTagName("CANVAS");n chart.chart = new this.library(ctx, chartOptions);n };nn var defaultOptions$1 = {n chart: {},n xAxis: {n title: {n text: nulln },n labels: {n style: {n fontSize: "12px"n }n }n },n yAxis: {n title: {n text: nulln },n labels: {n style: {n fontSize: "12px"n }n }n },n title: {n text: nulln },n credits: {n enabled: falsen },n legend: {n borderWidth: 0n },n tooltip: {n style: {n fontSize: "12px"n }n },n plotOptions: {n areaspline: {},n series: {n marker: {}n }n }n };nn var hideLegend$1 = function hideLegend$1(options, legend, hideLegend) {n if (legend !== undefined) {n options.legend.enabled = !!legend;nn if (legend && legend !== true) {n if (legend === "top" || legend === "bottom") {n options.legend.verticalAlign = legend;n } else {n options.legend.layout = "vertical";n options.legend.verticalAlign = "middle";n options.legend.align = legend;n }n }n } else if (hideLegend) {n options.legend.enabled = false;n }n };nn var setTitle$1 = function setTitle$1(options, title) {n options.title.text = title;n };nn var setMin$1 = function setMin$1(options, min) {n options.yAxis.min = min;n };nn var setMax$1 = function setMax$1(options, max) {n options.yAxis.max = max;n };nn var setStacked$1 = function setStacked$1(options, stacked) {n options.plotOptions.series.stacking = stacked ? stacked === true ? "normal" : stacked : null;n };nn var setXtitle$1 = function setXtitle$1(options, title) {n options.xAxis.title.text = title;n };nn var setYtitle$1 = function setYtitle$1(options, title) {n options.yAxis.title.text = title;n };nn var jsOptions$1 = jsOptionsFunc(defaultOptions$1, hideLegend$1, setTitle$1, setMin$1, setMax$1, setStacked$1, setXtitle$1, setYtitle$1);nn var setFormatOptions$1 = function setFormatOptions$1(chart, options, chartType) {n var formatOptions = {n prefix: chart.options.prefix,n suffix: chart.options.suffix,n thousands: chart.options.thousands,n decimal: chart.options.decimaln };nn if (chartType !== "pie" && !options.yAxis.labels.formatter) {n options.yAxis.labels.formatter = function () {n return formatValue("", this.value, formatOptions);n };n }nn if (!options.tooltip.pointFormatter) {n options.tooltip.pointFormatter = function () {n return '<span style="color:' + this.color + "\">\u25CF</span> " + formatValue(this.series.name + ': ', this.y, formatOptions) + '<br/>';n };n }n };nn var defaultExport$1 = function defaultExport(library) {n this.name = "highcharts";n this.library = library;n };nn defaultExport$1.prototype.renderLineChart = function renderLineChart(chart, chartType) {n chartType = chartType || "spline";n var chartOptions = {};nn if (chartType === "areaspline") {n chartOptions = {n plotOptions: {n areaspline: {n stacking: "normal"n },n area: {n stacking: "normal"n },n series: {n marker: {n enabled: falsen }n }n }n };n }nn if (chart.options.curve === false) {n if (chartType === "areaspline") {n chartType = "area";n } else if (chartType === "spline") {n chartType = "line";n }n }nn var options = jsOptions$1(chart, chart.options, chartOptions),n data,n i,n j;n options.xAxis.type = chart.xtype === "string" ? "category" : chart.xtype === "number" ? "linear" : "datetime";nn if (!options.chart.type) {n options.chart.type = chartType;n }nn setFormatOptions$1(chart, options, chartType);n var series = chart.data;nn for (i = 0; i < series.length; i++) {n series.name = series.name || "Value";n data = series.data;nn if (chart.xtype === "datetime") {n for (j = 0; j < data.length; j++) {n data[0] = data[0].getTime();n }n }nn series.marker = {n symbol: "circle"n };nn if (chart.options.points === false) {n series.marker.enabled = false;n }n }nn this.drawChart(chart, series, options);n };nn defaultExport$1.prototype.renderScatterChart = function renderScatterChart(chart) {n var options = jsOptions$1(chart, chart.options, {});n options.chart.type = "scatter";n this.drawChart(chart, chart.data, options);n };nn defaultExport$1.prototype.renderPieChart = function renderPieChart(chart) {n var chartOptions = merge(defaultOptions$1, {});nn if (chart.options.colors) {n chartOptions.colors = chart.options.colors;n }nn if (chart.options.donut) {n chartOptions.plotOptions = {n pie: {n innerSize: "50%"n }n };n }nn if ("legend" in chart.options) {n hideLegend$1(chartOptions, chart.options.legend);n }nn if (chart.options.title) {n setTitle$1(chartOptions, chart.options.title);n }nn var options = merge(chartOptions, chart.options.library || {});n setFormatOptions$1(chart, options, "pie");n var series = [{n type: "pie",n name: chart.options.label || "Value",n data: chart.datan }];n this.drawChart(chart, series, options);n };nn defaultExport$1.prototype.renderColumnChart = function renderColumnChart(chart, chartType) {n chartType = chartType || "column";n var series = chart.data;n var options = jsOptions$1(chart, chart.options),n i,n j,n s,n d,n rows = [],n categories = [];n options.chart.type = chartType;n setFormatOptions$1(chart, options, chartType);nn for (i = 0; i < series.length; i++) {n s = series;nn for (j = 0; j < s.data.length; j++) {n d = s.data;nn if (!rows[d]) {n rows[d] = new Array(series.length);n categories.push(d);n }nn rows[d][i] = d;n }n }nn if (chart.xtype === "number") {n categories.sort(sortByNumber);n }nn options.xAxis.categories = categories;n var newSeries = [],n d2;nn for (i = 0; i < series.length; i++) {n d = [];nn for (j = 0; j < categories.length; j++) {n d.push(rows[categories][i] || 0);n }nn d2 = {n name: series.name || "Value",n data: dn };nn if (series.stack) {n d2.stack = series.stack;n }nn newSeries.push(d2);n }nn this.drawChart(chart, newSeries, options);n };nn defaultExport$1.prototype.renderBarChart = function renderBarChart(chart) {n this.renderColumnChart(chart, "bar");n };nn defaultExport$1.prototype.renderAreaChart = function renderAreaChart(chart) {n this.renderLineChart(chart, "areaspline");n };nn defaultExport$1.prototype.destroy = function destroy(chart) {n if (chart.chart) {n chart.chart.destroy();n }n };nn defaultExport$1.prototype.drawChart = function drawChart(chart, data, options) {n this.destroy(chart);n options.chart.renderTo = chart.element.id;n options.series = data;nn if (chart.options.code) {n window.console.log("new Highcharts.Chart(" + JSON.stringify(options) + ");");n }nn chart.chart = new this.library.Chart(options);n };nn var loaded = {};n var callbacks = []; // Set chart optionsnn var defaultOptions$2 = {n chartArea: {},n fontName: "'Lucida Grande', 'Lucida Sans Unicode', Verdana, Arial, Helvetica, sans-serif",n pointSize: 6,n legend: {n textStyle: {n fontSize: 12,n color: "#444"n },n alignment: "center",n position: "right"n },n curveType: "function",n hAxis: {n textStyle: {n color: "#666",n fontSize: 12n },n titleTextStyle: {},n gridlines: {n color: "transparent"n },n baselineColor: "#ccc",n viewWindow: {}n },n vAxis: {n textStyle: {n color: "#666",n fontSize: 12n },n titleTextStyle: {},n baselineColor: "#ccc",n viewWindow: {}n },n tooltip: {n textStyle: {n color: "#666",n fontSize: 12n }n }n };nn var hideLegend$2 = function hideLegend$2(options, legend, hideLegend) {n if (legend !== undefined) {n var position;nn if (!legend) {n position = "none";n } else if (legend === true) {n position = "right";n } else {n position = legend;n }nn options.legend.position = position;n } else if (hideLegend) {n options.legend.position = "none";n }n };nn var setTitle$2 = function setTitle$2(options, title) {n options.title = title;n options.titleTextStyle = {n color: "#333",n fontSize: "20px"n };n };nn var setMin$2 = function setMin$2(options, min) {n options.vAxis.viewWindow.min = min;n };nn var setMax$2 = function setMax$2(options, max) {n options.vAxis.viewWindow.max = max;n };nn var setBarMin$1 = function setBarMin$1(options, min) {n options.hAxis.viewWindow.min = min;n };nn var setBarMax$1 = function setBarMax$1(options, max) {n options.hAxis.viewWindow.max = max;n };nn var setStacked$2 = function setStacked$2(options, stacked) {n options.isStacked = stacked ? stacked : false;n };nn var setXtitle$2 = function setXtitle$2(options, title) {n options.hAxis.title = title;n options.hAxis.titleTextStyle.italic = false;n };nn var setYtitle$2 = function setYtitle$2(options, title) {n options.vAxis.title = title;n options.vAxis.titleTextStyle.italic = false;n };nn var jsOptions$2 = jsOptionsFunc(defaultOptions$2, hideLegend$2, setTitle$2, setMin$2, setMax$2, setStacked$2, setXtitle$2, setYtitle$2);nn var resize = function resize(callback) {n if (window.attachEvent) {n window.attachEvent("onresize", callback);n } else if (window.addEventListener) {n window.addEventListener("resize", callback, true);n }nn callback();n };nn var defaultExport$2 = function defaultExport(library) {n this.name = "google";n this.library = library;n };nn defaultExport$2.prototype.renderLineChart = function renderLineChart(chart) {n var this$1 = this;n this.waitForLoaded(chart, function () {n var chartOptions = {};nn if (chart.options.curve === false) {n chartOptions.curveType = "none";n }nn if (chart.options.points === false) {n chartOptions.pointSize = 0;n }nn var options = jsOptions$2(chart, chart.options, chartOptions);n var data = this$1.createDataTable(chart.data, chart.xtype);n this$1.drawChart(chart, "LineChart", data, options);n });n };nn defaultExport$2.prototype.renderPieChart = function renderPieChart(chart) {n var this$1 = this;n this.waitForLoaded(chart, function () {n var chartOptions = {n chartArea: {n top: "10%",n height: "80%"n },n legend: {}n };nn if (chart.options.colors) {n chartOptions.colors = chart.options.colors;n }nn if (chart.options.donut) {n chartOptions.pieHole = 0.5;n }nn if ("legend" in chart.options) {n hideLegend$2(chartOptions, chart.options.legend);n }nn if (chart.options.title) {n setTitle$2(chartOptions, chart.options.title);n }nn var options = merge(merge(defaultOptions$2, chartOptions), chart.options.library || {});n var data = new this$1.library.visualization.DataTable();n data.addColumn("string", "");n data.addColumn("number", "Value");n data.addRows(chart.data);n this$1.drawChart(chart, "PieChart", data, options);n });n };nn defaultExport$2.prototype.renderColumnChart = function renderColumnChart(chart) {n var this$1 = this;n this.waitForLoaded(chart, function () {n var options = jsOptions$2(chart, chart.options);n var data = this$1.createDataTable(chart.data, chart.xtype);n this$1.drawChart(chart, "ColumnChart", data, options);n });n };nn defaultExport$2.prototype.renderBarChart = function renderBarChart(chart) {n var this$1 = this;n this.waitForLoaded(chart, function () {n var chartOptions = {n hAxis: {n gridlines: {n color: "#ccc"n }n }n };n var options = jsOptionsFunc(defaultOptions$2, hideLegend$2, setTitle$2, setBarMin$1, setBarMax$1, setStacked$2, setXtitle$2, setYtitle$2)(chart, chart.options, chartOptions);n var data = this$1.createDataTable(chart.data, chart.xtype);n this$1.drawChart(chart, "BarChart", data, options);n });n };nn defaultExport$2.prototype.renderAreaChart = function renderAreaChart(chart) {n var this$1 = this;n this.waitForLoaded(chart, function () {n var chartOptions = {n isStacked: true,n pointSize: 0,n areaOpacity: 0.5n };n var options = jsOptions$2(chart, chart.options, chartOptions);n var data = this$1.createDataTable(chart.data, chart.xtype);n this$1.drawChart(chart, "AreaChart", data, options);n });n };nn defaultExport$2.prototype.renderGeoChart = function renderGeoChart(chart) {n var this$1 = this;n this.waitForLoaded(chart, function () {n var chartOptions = {n legend: "none",n colorAxis: {n colors: chart.options.colors || ["#f6c7b6", "#ce502d"]n }n };n var options = merge(merge(defaultOptions$2, chartOptions), chart.options.library || {});n var data = new this$1.library.visualization.DataTable();n data.addColumn("string", "");n data.addColumn("number", chart.options.label || "Value");n data.addRows(chart.data);n this$1.drawChart(chart, "GeoChart", data, options);n });n };nn defaultExport$2.prototype.renderScatterChart = function renderScatterChart(chart) {n var this$1 = this;n this.waitForLoaded(chart, function () {n var chartOptions = {};n var options = jsOptions$2(chart, chart.options, chartOptions);n var series = chart.data,n rows2 = [],n i,n j,n data,n d;nn for (i = 0; i < series.length; i++) {n series.name = series.name || "Value";n d = series.data;nn for (j = 0; j < d.length; j++) {n var row = new Array(series.length + 1);n row = d[0];n row[i + 1] = d[1];n rows2.push(row);n }n }nn data = new this$1.library.visualization.DataTable();n data.addColumn("number", "");nn for (i = 0; i < series.length; i++) {n data.addColumn("number", series.name);n }nn data.addRows(rows2);n this$1.drawChart(chart, "ScatterChart", data, options);n });n };nn defaultExport$2.prototype.renderTimeline = function renderTimeline(chart) {n var this$1 = this;n this.waitForLoaded(chart, "timeline", function () {n var chartOptions = {n legend: "none"n };nn if (chart.options.colors) {n chartOptions.colors = chart.options.colors;n }nn var options = merge(merge(defaultOptions$2, chartOptions), chart.options.library || {});n var data = new this$1.library.visualization.DataTable();n data.addColumn({n type: "string",n id: "Name"n });n data.addColumn({n type: "date",n id: "Start"n });n data.addColumn({n type: "date",n id: "End"n });n data.addRows(chart.data);n chart.element.style.lineHeight = "normal";n this$1.drawChart(chart, "Timeline", data, options);n });n };nn defaultExport$2.prototype.destroy = function destroy(chart) {n if (chart.chart) {n chart.chart.clearChart();n }n };nn defaultExport$2.prototype.drawChart = function drawChart(chart, type, data, options) {n this.destroy(chart);nn if (chart.options.code) {n window.console.log("var data = new google.visualization.DataTable(" + data.toJSON() + ");\nvar chart = new google.visualization." + type + "(element);\nchart.draw(data, " + JSON.stringify(options) + ");");n }nn chart.chart = new this.library.visualization(chart.element);n resize(function () {n chart.chart.draw(data, options);n });n };nn defaultExport$2.prototype.waitForLoaded = function waitForLoaded(chart, pack, callback) {n var this$1 = this;nn if (!callback) {n callback = pack;n pack = "corechart";n }nn callbacks.push({n pack: pack,n callback: callbackn });nn if (loaded) {n this.runCallbacks();n } else {n loaded = true; // groups.google.com/forum/#!topic/google-visualization-api/fMKJcyA2yyInn var loadOptions = {n packages: [pack],n callback: function callback() {n this$1.runCallbacks();n }n };nn var config = chart.__config();nn if (config.language) {n loadOptions.language = config.language;n }nn if (pack === "corechart" && config.mapsApiKey) {n loadOptions.mapsApiKey = config.mapsApiKey;n }nn this.library.charts.load("current", loadOptions);n }n };nn defaultExport$2.prototype.runCallbacks = function runCallbacks() {n var cb, call;nn for (var i = 0; i < callbacks.length; i++) {n cb = callbacks;n call = this.library.visualization && (cb.pack === "corechart" && this.library.visualization.LineChart || cb.pack === "timeline" && this.library.visualization.Timeline);nn if (call) {n cb.callback();n callbacks.splice(i, 1);n i–;n }n }n }; // cant use object as keynnn defaultExport$2.prototype.createDataTable = function createDataTable(series, columnType) {n var i,n j,n s,n d,n key,n rows = [],n sortedLabels = [];nn for (i = 0; i < series.length; i++) {n s = series;n series.name = series.name || "Value";nn for (j = 0; j < s.data.length; j++) {n d = s.data;n key = columnType === "datetime" ? d.getTime() : d;nn if (!rows) {n rows = new Array(series.length);n sortedLabels.push(key);n }nn rows[i] = toFloat(d);n }n }nn var rows2 = [];n var day = true;n var value;nn for (j = 0; j < sortedLabels.length; j++) {n i = sortedLabels;nn if (columnType === "datetime") {n value = new Date(toFloat(i));n day = day && isDay(value);n } else if (columnType === "number") {n value = toFloat(i);n } else {n value = i;n }nn rows2.push(.concat(rows));n }nn if (columnType === "datetime") {n rows2.sort(sortByTime);n } else if (columnType === "number") {n rows2.sort(sortByNumberSeries);nn for (i = 0; i < rows2.length; i++) {n rows2[0] = toStr(rows2[0]);n }nn columnType = "string";n } // create datatablennn var data = new this.library.visualization.DataTable();n columnType = columnType === "datetime" && day ? "date" : columnType;n data.addColumn(columnType, "");nn for (i = 0; i < series.length; i++) {n data.addColumn("number", series.name);n }nn data.addRows(rows2);n return data;n };nn var pendingRequests = [],n runningRequests = 0,n maxRequests = 4;nn function pushRequest(url, success, error) {n pendingRequests.push([url, success, error]);n runNext();n }nn function runNext() {n if (runningRequests < maxRequests) {n var request = pendingRequests.shift();nn if (request) {n runningRequests++;n getJSON(request, request, request);n runNext();n }n }n }nn function requestComplete() {n runningRequests–;n runNext();n }nn function getJSON(url, success, error) {n ajaxCall(url, success, function (jqXHR, textStatus, errorThrown) {n var message = typeof errorThrown === "string" ? errorThrown : errorThrown.message;n error(message);n });n }nn function ajaxCall(url, success, error) {n var $ = window.jQuery || window.Zepto || window.$;nn if ($) {n $.ajax({n dataType: "json",n url: url,n success: success,n error: error,n complete: requestCompleten });n } else {n var xhr = new XMLHttpRequest();n xhr.open("GET", url, true);n xhr.setRequestHeader("Content-Type", "application/json");nn xhr.onload = function () {n requestComplete();nn if (xhr.status === 200) {n success(JSON.parse(xhr.responseText), xhr.statusText, xhr);n } else {n error(xhr, "error", xhr.statusText);n }n };nn xhr.send();n }n }nn var config = {};n var adapters = []; // helpersnn function setText(element, text) {n if (document.body.innerText) {n element.innerText = text;n } else {n element.textContent = text;n }n }nn function chartError(element, message) {n setText(element, "Error Loading Chart: " + message);n element.style.color = "#ff0000";n }nn function errorCatcher(chart) {n try {n chart.__render();n } catch (err) {n chartError(chart.element, err.message);n throw err;n }n }nn function fetchDataSource(chart, dataSource) {n if (typeof dataSource === "string") {n pushRequest(dataSource, function (data) {n chart.rawData = data;n errorCatcher(chart);n }, function (message) {n chartError(chart.element, message);n });n } else {n chart.rawData = dataSource;n errorCatcher(chart);n }n }nn function addDownloadButton(chart) {n var element = chart.element;n var link = document.createElement("a");n var download = chart.options.download;nn if (download === true) {n download = {};n } else if (typeof download === "string") {n download = {n filename: downloadn };n }nn link.download = download.filename || "chart.png"; // caniuse.com/downloadnn link.style.position = "absolute";n link.style.top = "20px";n link.style.right = "20px";n link.style.zIndex = 1000;n link.style.lineHeight = "20px";n link.target = "_blank"; // for safarinn var image = document.createElement("img");n image.alt = "Download";n image.style.border = "none"; // icon from font-awesomen // fa2png.io/nn image.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAABCFBMVEUAAADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMywEsqxAAAAV3RSTlMAAQIDBggJCgsMDQ4PERQaHB0eISIjJCouLzE0OTo/QUJHSUpLTU5PUllhYmltcHh5foWLjI+SlaCio6atr7S1t7m6vsHHyM7R2tze5Obo7fHz9ff5+/1hlxK2AAAA30lEQVQYGUXBhVYCQQBA0TdYWAt2d3d3YWAHyur7/z9xgD16Lw0DW+XKx+1GgX+FRzM3HWQWrHl5N/oapW5RPe0PkBu+UYeICvozTWZVK23Ao04B79oJrOsJDOoxkZoQPWgX29pHpCZEk7rEvQYiNSFq1UMqvlCjJkRBS1R8hb00Vb/TajtBL7nTHE1X1vyMQF732dQhyF2o6SAwrzP06iUQzvwsArlnzcOdrgBhJyHa1QOgO9U1GsKuvjUTjavliZYQ8nNPapG6sap/3nrIdJ6bOWzmX/fy0XVpfzZP3S8OJT3g9EEiJwAAAABJRU5ErkJggg==";n link.appendChild(image);n element.style.position = "relative";n chart.__downloadAttached = true; // mouseenternn chart.__enterEvent = addEvent(element, "mouseover", function (e) {n var related = e.relatedTarget; // check download option again to ensure it wasn't changednn if ((!related || related !== this && !childOf(this, related)) && chart.options.download) {n link.href = chart.toImage(download);n element.appendChild(link);n }n }); // mouseleavenn chart.__leaveEvent = addEvent(element, "mouseout", function (e) {n var related = e.relatedTarget;nn if (!related || related !== this && !childOf(this, related)) {n if (link.parentNode) {n link.parentNode.removeChild(link);n }n }n });n } // stackoverflow.com/questions/10149963/adding-event-listener-cross-browsernnn function addEvent(elem, event, fn) {n if (elem.addEventListener) {n elem.addEventListener(event, fn, false);n return fn;n } else {n var fn2 = function fn2() {n // set the this pointer same as addEventListener when fn is calledn return fn.call(elem, window.event);n };nn elem.attachEvent("on" + event, fn2);n return fn2;n }n }nn function removeEvent(elem, event, fn) {n if (elem.removeEventListener) {n elem.removeEventListener(event, fn, false);n } else {n elem.detachEvent("on" + event, fn);n }n } // gist.github.com/shawnbot/4166283nnn function childOf(p, c) {n if (p === c) {n return false;n }nn while (c && c !== p) {n c = c.parentNode;n }nn return c === p;n }nn function getAdapterType(library) {n if (library) {n if (library.product === "Highcharts") {n return defaultExport$1;n } else if (library.charts) {n return defaultExport$2;n } else if (isFunction(library)) {n return defaultExport;n }n }nn throw new Error("Unknown adapter");n }nn function addAdapter(library) {n var adapterType = getAdapterType(library);n var adapter = new adapterType(library);nn if (adapters.indexOf(adapter) === -1) {n adapters.push(adapter);n }n }nn function loadAdapters() {n if ("Chart" in window) {n addAdapter(window.Chart);n }nn if ("Highcharts" in window) {n addAdapter(window.Highcharts);n }nn if (window.google && window.google.charts) {n addAdapter(window.google);n }n }nn function dataEmpty(data, chartType) {n if (chartType === "PieChart" || chartType === "GeoChart" || chartType === "Timeline") {n return data.length === 0;n } else {n for (var i = 0; i < data.length; i++) {n if (data.data.length > 0) {n return false;n }n }nn return true;n }n }nn function renderChart(chartType, chart) {n if (chart.options.messages && chart.options.messages.empty && dataEmpty(chart.data, chartType)) {n setText(chart.element, chart.options.messages.empty);n } else {n callAdapter(chartType, chart);nn if (chart.options.download && !chart.__downloadAttached && chart.adapter === "chartjs") {n addDownloadButton(chart);n }n }n } // TODO remove chartType if cross-browser wayn // to get the name of the chart classnnn function callAdapter(chartType, chart) {n var i, adapter, fnName, adapterName;n fnName = "render" + chartType;n adapterName = chart.options.adapter;n loadAdapters();nn for (i = 0; i < adapters.length; i++) {n adapter = adapters;nn if ((!adapterName || adapterName === adapter.name) && isFunction(adapter)) {n chart.adapter = adapter.name;n chart.__adapterObject = adapter;n return adapter(chart);n }n }nn if (adapters.length > 0) {n throw new Error("No charting library found for " + chartType);n } else {n throw new Error("No charting libraries found - be sure to include one before your charts");n }n } // process datannn var toFormattedKey = function toFormattedKey(key, keyType) {n if (keyType === "number") {n key = toFloat(key);n } else if (keyType === "datetime") {n key = toDate(key);n } else {n key = toStr(key);n }nn return key;n };nn var formatSeriesData = function formatSeriesData(data, keyType) {n var r = [],n key,n j;nn for (j = 0; j < data.length; j++) {n if (keyType === "bubble") {n r.push([toFloat(data[0]), toFloat(data[1]), toFloat(data[2])]);n } else {n key = toFormattedKey(data[0], keyType);n r.push([key, toFloat(data[1])]);n }n }nn if (keyType === "datetime") {n r.sort(sortByTime);n } else if (keyType === "number") {n r.sort(sortByNumberSeries);n }nn return r;n };nn function detectXType(series, noDatetime) {n if (detectXTypeWithFunction(series, isNumber)) {n return "number";n } else if (!noDatetime && detectXTypeWithFunction(series, isDate)) {n return "datetime";n } else {n return "string";n }n }nn function detectXTypeWithFunction(series, func) {n var i, j, data;nn for (i = 0; i < series.length; i++) {n data = toArr(series.data);nn for (j = 0; j < data.length; j++) {n if (!func(data[0])) {n return false;n }n }n }nn return true;n } // creates a shallow copy of each element of the arrayn // elements are expected to be objectsnnn function copySeries(series) {n var newSeries = [],n i,n j;nn for (i = 0; i < series.length; i++) {n var copy = {};nn for (j in series) {n if (series.hasOwnProperty(j)) {n copy = series[j];n }n }nn newSeries.push(copy);n }nn return newSeries;n }nn function processSeries(chart, keyType, noDatetime) {n var i;n var opts = chart.options;n var series = chart.rawData; // see if one series or multiplenn if (!isArray(series) || _typeof(series) !== "object" || isArray(series)) {n series = [{n name: opts.label,n data: seriesn }];n chart.hideLegend = true;n } else {n chart.hideLegend = false;n }nn chart.xtype = keyType ? keyType : opts.discrete ? "string" : detectXType(series, noDatetime); // right formatnn series = copySeries(series);nn for (i = 0; i < series.length; i++) {n series.data = formatSeriesData(toArr(series.data), chart.xtype);n }nn return series;n }nn function processSimple(chart) {n var perfectData = toArr(chart.rawData),n i;nn for (i = 0; i < perfectData.length; i++) {n perfectData = [toStr(perfectData[0]), toFloat(perfectData[1])];n }nn return perfectData;n } // define classesnnn var Chart = function Chart(element, dataSource, options) {n var elementId;nn if (typeof element === "string") {n elementId = element;n element = document.getElementById(element);nn if (!element) {n throw new Error("No element with id " + elementId);n }n }nn this.element = element;n this.options = merge(Chartkick.options, options || {});n this.dataSource = dataSource;n Chartkick.charts = this;n fetchDataSource(this, dataSource);nn if (this.options.refresh) {n this.startRefresh();n }n };nn Chart.prototype.getElement = function getElement() {n return this.element;n };nn Chart.prototype.getDataSource = function getDataSource() {n return this.dataSource;n };nn Chart.prototype.getData = function getData() {n return this.data;n };nn Chart.prototype.getOptions = function getOptions() {n return this.options;n };nn Chart.prototype.getChartObject = function getChartObject() {n return this.chart;n };nn Chart.prototype.getAdapter = function getAdapter() {n return this.adapter;n };nn Chart.prototype.updateData = function updateData(dataSource, options) {n this.dataSource = dataSource;nn if (options) {n this.__updateOptions(options);n }nn fetchDataSource(this, dataSource);n };nn Chart.prototype.setOptions = function setOptions(options) {n this.__updateOptions(options);nn this.redraw();n };nn Chart.prototype.redraw = function redraw() {n fetchDataSource(this, this.rawData);n };nn Chart.prototype.refreshData = function refreshData() {n if (typeof this.dataSource === "string") {n // prevent browser from cachingn var sep = this.dataSource.indexOf("?") === -1 ? "?" : "&";n var url = this.dataSource + sep + "_=" + new Date().getTime();n fetchDataSource(this, url);n }n };nn Chart.prototype.startRefresh = function startRefresh() {n var this$1 = this;n var refresh = this.options.refresh;nn if (refresh && typeof this.dataSource !== "string") {n throw new Error("Data source must be a URL for refresh");n }nn if (!this.intervalId) {n if (refresh) {n this.intervalId = setInterval(function () {n this$1.refreshData();n }, refresh * 1000);n } else {n throw new Error("No refresh interval");n }n }n };nn Chart.prototype.stopRefresh = function stopRefresh() {n if (this.intervalId) {n clearInterval(this.intervalId);n this.intervalId = null;n }n };nn Chart.prototype.toImage = function toImage(download) {n if (this.adapter === "chartjs") {n if (download && download.background && download.background !== "transparent") {n // stackoverflow.com/questions/30464750/chartjs-line-chart-set-background-colorn var canvas = this.chart.chart.canvas;n var ctx = this.chart.chart.ctx;n var tmpCanvas = document.createElement("canvas");n var tmpCtx = tmpCanvas.getContext("2d");n tmpCanvas.width = ctx.canvas.width;n tmpCanvas.height = ctx.canvas.height;n tmpCtx.fillStyle = download.background;n tmpCtx.fillRect(0, 0, tmpCanvas.width, tmpCanvas.height);n tmpCtx.drawImage(canvas, 0, 0);n return tmpCanvas.toDataURL("image/png");n } else {n return this.chart.toBase64Image();n }n } else {n // TODO throw error in next major versionn // throw new Error("Feature only available for Chart.js");n return null;n }n };nn Chart.prototype.destroy = function destroy() {n if (this.__adapterObject) {n this.__adapterObject.destroy(this);n }nn if (this.__enterEvent) {n removeEvent(this.element, "mouseover", this.__enterEvent);n }nn if (this.__leaveEvent) {n removeEvent(this.element, "mouseout", this.__leaveEvent);n }n };nn Chart.prototype.__updateOptions = function __updateOptions(options) {n var updateRefresh = options.refresh && options.refresh !== this.options.refresh;n this.options = merge(Chartkick.options, options);nn if (updateRefresh) {n this.stopRefresh();n this.startRefresh();n }n };nn Chart.prototype.__render = function __render() {n this.data = this.__processData();n renderChart(this.__chartName(), this);n };nn Chart.prototype.__config = function __config() {n return config;n };nn var LineChart =n /*@__PURE__*/n function (Chart) {n function LineChart() {n Chart.apply(this, arguments);n }nn if (Chart) LineChart.__proto__ = Chart;n LineChart.prototype = Object.create(Chart && Chart.prototype);n LineChart.prototype.constructor = LineChart;nn LineChart.prototype.__processData = function __processData() {n return processSeries(this);n };nn LineChart.prototype.__chartName = function __chartName() {n return "LineChart";n };nn return LineChart;n }(Chart);nn var PieChart =n /*@__PURE__*/n function (Chart) {n function PieChart() {n Chart.apply(this, arguments);n }nn if (Chart) PieChart.__proto__ = Chart;n PieChart.prototype = Object.create(Chart && Chart.prototype);n PieChart.prototype.constructor = PieChart;nn PieChart.prototype.__processData = function __processData() {n return processSimple(this);n };nn PieChart.prototype.__chartName = function __chartName() {n return "PieChart";n };nn return PieChart;n }(Chart);nn var ColumnChart =n /*@__PURE__*/n function (Chart) {n function ColumnChart() {n Chart.apply(this, arguments);n }nn if (Chart) ColumnChart.__proto__ = Chart;n ColumnChart.prototype = Object.create(Chart && Chart.prototype);n ColumnChart.prototype.constructor = ColumnChart;nn ColumnChart.prototype.__processData = function __processData() {n return processSeries(this, null, true);n };nn ColumnChart.prototype.__chartName = function __chartName() {n return "ColumnChart";n };nn return ColumnChart;n }(Chart);nn var BarChart =n /*@__PURE__*/n function (Chart) {n function BarChart() {n Chart.apply(this, arguments);n }nn if (Chart) BarChart.__proto__ = Chart;n BarChart.prototype = Object.create(Chart && Chart.prototype);n BarChart.prototype.constructor = BarChart;nn BarChart.prototype.__processData = function __processData() {n return processSeries(this, null, true);n };nn BarChart.prototype.__chartName = function __chartName() {n return "BarChart";n };nn return BarChart;n }(Chart);nn var AreaChart =n /*@__PURE__*/n function (Chart) {n function AreaChart() {n Chart.apply(this, arguments);n }nn if (Chart) AreaChart.__proto__ = Chart;n AreaChart.prototype = Object.create(Chart && Chart.prototype);n AreaChart.prototype.constructor = AreaChart;nn AreaChart.prototype.__processData = function __processData() {n return processSeries(this);n };nn AreaChart.prototype.__chartName = function __chartName() {n return "AreaChart";n };nn return AreaChart;n }(Chart);nn var GeoChart =n /*@__PURE__*/n function (Chart) {n function GeoChart() {n Chart.apply(this, arguments);n }nn if (Chart) GeoChart.__proto__ = Chart;n GeoChart.prototype = Object.create(Chart && Chart.prototype);n GeoChart.prototype.constructor = GeoChart;nn GeoChart.prototype.__processData = function __processData() {n return processSimple(this);n };nn GeoChart.prototype.__chartName = function __chartName() {n return "GeoChart";n };nn return GeoChart;n }(Chart);nn var ScatterChart =n /*@__PURE__*/n function (Chart) {n function ScatterChart() {n Chart.apply(this, arguments);n }nn if (Chart) ScatterChart.__proto__ = Chart;n ScatterChart.prototype = Object.create(Chart && Chart.prototype);n ScatterChart.prototype.constructor = ScatterChart;nn ScatterChart.prototype.__processData = function __processData() {n return processSeries(this, "number");n };nn ScatterChart.prototype.__chartName = function __chartName() {n return "ScatterChart";n };nn return ScatterChart;n }(Chart);nn var BubbleChart =n /*@__PURE__*/n function (Chart) {n function BubbleChart() {n Chart.apply(this, arguments);n }nn if (Chart) BubbleChart.__proto__ = Chart;n BubbleChart.prototype = Object.create(Chart && Chart.prototype);n BubbleChart.prototype.constructor = BubbleChart;nn BubbleChart.prototype.__processData = function __processData() {n return processSeries(this, "bubble");n };nn BubbleChart.prototype.__chartName = function __chartName() {n return "BubbleChart";n };nn return BubbleChart;n }(Chart);nn var Timeline =n /*@__PURE__*/n function (Chart) {n function Timeline() {n Chart.apply(this, arguments);n }nn if (Chart) Timeline.__proto__ = Chart;n Timeline.prototype = Object.create(Chart && Chart.prototype);n Timeline.prototype.constructor = Timeline;nn Timeline.prototype.__processData = function __processData() {n var i,n data = this.rawData;nn for (i = 0; i < data.length; i++) {n data[1] = toDate(data[1]);n data[2] = toDate(data[2]);n }nn return data;n };nn Timeline.prototype.__chartName = function __chartName() {n return "Timeline";n };nn return Timeline;n }(Chart);nn var Chartkick = {n LineChart: LineChart,n PieChart: PieChart,n ColumnChart: ColumnChart,n BarChart: BarChart,n AreaChart: AreaChart,n GeoChart: GeoChart,n ScatterChart: ScatterChart,n BubbleChart: BubbleChart,n Timeline: Timeline,n charts: {},n configure: function configure(options) {n for (var key in options) {n if (options.hasOwnProperty(key)) {n config = options;n }n }n },n setDefaultOptions: function setDefaultOptions(opts) {n Chartkick.options = opts;n },n eachChart: function eachChart(callback) {n for (var chartId in Chartkick.charts) {n if (Chartkick.charts.hasOwnProperty(chartId)) {n callback(Chartkick.charts);n }n }n },n config: config,n options: {},n adapters: adapters,n addAdapter: addAdapter,n use: function use(adapter) {n addAdapter(adapter);n return Chartkick;n }n }; // not ideal, but allows for simpler integrationnn if (typeof window !== "undefined" && !window.Chartkick) {n window.Chartkick = Chartkick;n } // backwards compatibility for esm requirennn Chartkick = Chartkick;n return Chartkick;n});”,“map”:null,“metadata”:{},“sourceType”:“module”}