123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935 |
- /*
- * Chartkick.js
- * Create beautiful Javascript charts with minimal code
- * https://github.com/ankane/chartkick.js
- * v1.4.1
- * MIT License
- */
- /*jslint browser: true, indent: 2, plusplus: true, vars: true */
- (function (window) {
- 'use strict';
- var config = window.Chartkick || {};
- var Chartkick, DATE_PATTERN, ISO8601_PATTERN, DECIMAL_SEPARATOR, adapters = [];
- DATE_PATTERN = /^(\d\d\d\d)(\-)?(\d\d)(\-)?(\d\d)$/i;
- // helpers
- function isArray(variable) {
- return Object.prototype.toString.call(variable) === "[object Array]";
- }
- function isFunction(variable) {
- return variable instanceof Function;
- }
- function isPlainObject(variable) {
- return !isFunction(variable) && variable instanceof Object;
- }
- // https://github.com/madrobby/zepto/blob/master/src/zepto.js
- function extend(target, source) {
- var key;
- for (key in source) {
- if (isPlainObject(source[key]) || isArray(source[key])) {
- if (isPlainObject(source[key]) && !isPlainObject(target[key])) {
- target[key] = {};
- }
- if (isArray(source[key]) && !isArray(target[key])) {
- target[key] = [];
- }
- extend(target[key], source[key]);
- } else if (source[key] !== undefined) {
- target[key] = source[key];
- }
- }
- }
- function merge(obj1, obj2) {
- var target = {};
- extend(target, obj1);
- extend(target, obj2);
- return target;
- }
- // https://github.com/Do/iso8601.js
- ISO8601_PATTERN = /(\d\d\d\d)(\-)?(\d\d)(\-)?(\d\d)(T)?(\d\d)(:)?(\d\d)?(:)?(\d\d)?([\.,]\d+)?($|Z|([\+\-])(\d\d)(:)?(\d\d)?)/i;
- DECIMAL_SEPARATOR = String(1.5).charAt(1);
- function parseISO8601(input) {
- var day, hour, matches, milliseconds, minutes, month, offset, result, seconds, type, year;
- type = Object.prototype.toString.call(input);
- if (type === '[object Date]') {
- return input;
- }
- if (type !== '[object String]') {
- return;
- }
- if (matches = input.match(ISO8601_PATTERN)) {
- year = parseInt(matches[1], 10);
- month = parseInt(matches[3], 10) - 1;
- day = parseInt(matches[5], 10);
- hour = parseInt(matches[7], 10);
- minutes = matches[9] ? parseInt(matches[9], 10) : 0;
- seconds = matches[11] ? parseInt(matches[11], 10) : 0;
- milliseconds = matches[12] ? parseFloat(DECIMAL_SEPARATOR + matches[12].slice(1)) * 1000 : 0;
- result = Date.UTC(year, month, day, hour, minutes, seconds, milliseconds);
- if (matches[13] && matches[14]) {
- offset = matches[15] * 60;
- if (matches[17]) {
- offset += parseInt(matches[17], 10);
- }
- offset *= matches[14] === '-' ? -1 : 1;
- result -= offset * 60 * 1000;
- }
- return new Date(result);
- }
- }
- // end iso8601.js
- function negativeValues(series) {
- var i, j, data;
- for (i = 0; i < series.length; i++) {
- data = series[i].data;
- for (j = 0; j < data.length; j++) {
- if (data[j][1] < 0) {
- return true;
- }
- }
- }
- return false;
- }
- function jsOptionsFunc(defaultOptions, hideLegend, setMin, setMax, setStacked, setXtitle, setYtitle) {
- return function (series, opts, chartOptions) {
- var options = merge({}, defaultOptions);
- options = merge(options, chartOptions || {});
- // hide legend
- // this is *not* an external option!
- if (opts.hideLegend) {
- hideLegend(options);
- }
- // min
- if ("min" in opts) {
- setMin(options, opts.min);
- } else if (!negativeValues(series)) {
- setMin(options, 0);
- }
- // max
- if (opts.max) {
- setMax(options, opts.max);
- }
- if (opts.stacked) {
- setStacked(options);
- }
- if (opts.colors) {
- options.colors = opts.colors;
- }
- if (opts.xtitle) {
- setXtitle(options, opts.xtitle);
- }
- if (opts.ytitle) {
- setYtitle(options, opts.ytitle);
- }
- // merge library last
- options = merge(options, opts.library || {});
- return options;
- };
- }
- function setText(element, text) {
- if (document.body.innerText) {
- element.innerText = text;
- } else {
- element.textContent = text;
- }
- }
- function chartError(element, message) {
- setText(element, "Error Loading Chart: " + message);
- element.style.color = "#ff0000";
- }
- function getJSON(element, url, success) {
- var $ = window.jQuery || window.Zepto || window.$;
- $.ajax({
- dataType: "json",
- url: url,
- success: success,
- error: function (jqXHR, textStatus, errorThrown) {
- var message = (typeof errorThrown === "string") ? errorThrown : errorThrown.message;
- chartError(element, message);
- }
- });
- }
- function errorCatcher(chart, callback) {
- try {
- callback(chart);
- } catch (err) {
- chartError(chart.element, err.message);
- throw err;
- }
- }
- function fetchDataSource(chart, callback) {
- if (typeof chart.dataSource === "string") {
- getJSON(chart.element, chart.dataSource, function (data, textStatus, jqXHR) {
- chart.data = data;
- errorCatcher(chart, callback);
- });
- } else {
- chart.data = chart.dataSource;
- errorCatcher(chart, callback);
- }
- }
- // type conversions
- function toStr(n) {
- return "" + n;
- }
- function toFloat(n) {
- return parseFloat(n);
- }
- function toDate(n) {
- var matches, year, month, day;
- if (typeof n !== "object") {
- if (typeof n === "number") {
- n = new Date(n * 1000); // ms
- } else if (matches = n.match(DATE_PATTERN)) {
- year = parseInt(matches[1], 10);
- month = parseInt(matches[3], 10) - 1;
- day = parseInt(matches[5], 10);
- return new Date(year, month, day);
- } else { // str
- // try our best to get the str into iso8601
- // TODO be smarter about this
- var str = n.replace(/ /, "T").replace(" ", "").replace("UTC", "Z");
- n = parseISO8601(str) || new Date(n);
- }
- }
- return n;
- }
- function toArr(n) {
- if (!isArray(n)) {
- var arr = [], i;
- for (i in n) {
- if (n.hasOwnProperty(i)) {
- arr.push([i, n[i]]);
- }
- }
- n = arr;
- }
- return n;
- }
- function sortByTime(a, b) {
- return a[0].getTime() - b[0].getTime();
- }
- if ("Highcharts" in window) {
- var HighchartsAdapter = new function () {
- var Highcharts = window.Highcharts;
- this.name = "highcharts";
- var defaultOptions = {
- chart: {},
- xAxis: {
- title: {
- text: null
- },
- labels: {
- style: {
- fontSize: "12px"
- }
- }
- },
- yAxis: {
- title: {
- text: null
- },
- labels: {
- style: {
- fontSize: "12px"
- }
- }
- },
- title: {
- text: null
- },
- credits: {
- enabled: false
- },
- legend: {
- borderWidth: 0
- },
- tooltip: {
- style: {
- fontSize: "12px"
- }
- },
- plotOptions: {
- areaspline: {},
- series: {
- marker: {}
- }
- }
- };
- var hideLegend = function (options) {
- options.legend.enabled = false;
- };
- var setMin = function (options, min) {
- options.yAxis.min = min;
- };
- var setMax = function (options, max) {
- options.yAxis.max = max;
- };
- var setStacked = function (options) {
- options.plotOptions.series.stacking = "normal";
- };
- var setXtitle = function (options, title) {
- options.xAxis.title.text = title;
- };
- var setYtitle = function (options, title) {
- options.yAxis.title.text = title;
- };
- var jsOptions = jsOptionsFunc(defaultOptions, hideLegend, setMin, setMax, setStacked, setXtitle, setYtitle);
- this.renderLineChart = function (chart, chartType) {
- chartType = chartType || "spline";
- var chartOptions = {};
- if (chartType === "areaspline") {
- chartOptions = {
- plotOptions: {
- areaspline: {
- stacking: "normal"
- },
- series: {
- marker: {
- enabled: false
- }
- }
- }
- };
- }
- var options = jsOptions(chart.data, chart.options, chartOptions), data, i, j;
- options.xAxis.type = chart.options.discrete ? "category" : "datetime";
- options.chart.type = chartType;
- options.chart.renderTo = chart.element.id;
- var series = chart.data;
- for (i = 0; i < series.length; i++) {
- data = series[i].data;
- if (!chart.options.discrete) {
- for (j = 0; j < data.length; j++) {
- data[j][0] = data[j][0].getTime();
- }
- }
- series[i].marker = {symbol: "circle"};
- }
- options.series = series;
- new Highcharts.Chart(options);
- };
- this.renderScatterChart = function (chart) {
- var chartOptions = {};
- var options = jsOptions(chart.data, chart.options, chartOptions);
- options.chart.type = 'scatter';
- options.chart.renderTo = chart.element.id;
- options.series = chart.data;
- new Highcharts.Chart(options);
- };
- this.renderPieChart = function (chart) {
- var chartOptions = {};
- if (chart.options.colors) {
- chartOptions.colors = chart.options.colors;
- }
- var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});
- options.chart.renderTo = chart.element.id;
- options.series = [{
- type: "pie",
- name: "Value",
- data: chart.data
- }];
- new Highcharts.Chart(options);
- };
- this.renderColumnChart = function (chart, chartType) {
- var chartType = chartType || "column";
- var series = chart.data;
- var options = jsOptions(series, chart.options), i, j, s, d, rows = [];
- options.chart.type = chartType;
- options.chart.renderTo = chart.element.id;
- for (i = 0; i < series.length; i++) {
- s = series[i];
- for (j = 0; j < s.data.length; j++) {
- d = s.data[j];
- if (!rows[d[0]]) {
- rows[d[0]] = new Array(series.length);
- }
- rows[d[0]][i] = d[1];
- }
- }
- var categories = [];
- for (i in rows) {
- if (rows.hasOwnProperty(i)) {
- categories.push(i);
- }
- }
- options.xAxis.categories = categories;
- var newSeries = [];
- for (i = 0; i < series.length; i++) {
- d = [];
- for (j = 0; j < categories.length; j++) {
- d.push(rows[categories[j]][i] || 0);
- }
- newSeries.push({
- name: series[i].name,
- data: d
- });
- }
- options.series = newSeries;
- new Highcharts.Chart(options);
- };
- var self = this;
- this.renderBarChart = function (chart) {
- self.renderColumnChart(chart, "bar");
- };
- this.renderAreaChart = function (chart) {
- self.renderLineChart(chart, "areaspline");
- };
- };
- adapters.push(HighchartsAdapter);
- }
- if (window.google && window.google.setOnLoadCallback) {
- var GoogleChartsAdapter = new function () {
- var google = window.google;
- this.name = "google";
- var loaded = {};
- var callbacks = [];
- var runCallbacks = function () {
- var cb, call;
- for (var i = 0; i < callbacks.length; i++) {
- cb = callbacks[i];
- call = google.visualization && ((cb.pack === "corechart" && google.visualization.LineChart) || (cb.pack === "timeline" && google.visualization.Timeline))
- if (call) {
- cb.callback();
- callbacks.splice(i, 1);
- i--;
- }
- }
- };
- var waitForLoaded = function (pack, callback) {
- if (!callback) {
- callback = pack;
- pack = "corechart";
- }
- callbacks.push({pack: pack, callback: callback});
- if (loaded[pack]) {
- runCallbacks();
- } else {
- loaded[pack] = true;
- // https://groups.google.com/forum/#!topic/google-visualization-api/fMKJcyA2yyI
- var loadOptions = {
- packages: [pack],
- callback: runCallbacks
- };
- if (config.language) {
- loadOptions.language = config.language;
- }
- google.load("visualization", "1", loadOptions);
- }
- };
- // Set chart options
- var defaultOptions = {
- chartArea: {},
- fontName: "'Lucida Grande', 'Lucida Sans Unicode', Verdana, Arial, Helvetica, sans-serif",
- pointSize: 6,
- legend: {
- textStyle: {
- fontSize: 12,
- color: "#444"
- },
- alignment: "center",
- position: "right"
- },
- curveType: "function",
- hAxis: {
- textStyle: {
- color: "#666",
- fontSize: 12
- },
- titleTextStyle: {},
- gridlines: {
- color: "transparent"
- },
- baselineColor: "#ccc",
- viewWindow: {}
- },
- vAxis: {
- textStyle: {
- color: "#666",
- fontSize: 12
- },
- titleTextStyle: {},
- baselineColor: "#ccc",
- viewWindow: {}
- },
- tooltip: {
- textStyle: {
- color: "#666",
- fontSize: 12
- }
- }
- };
- var hideLegend = function (options) {
- options.legend.position = "none";
- };
- var setMin = function (options, min) {
- options.vAxis.viewWindow.min = min;
- };
- var setMax = function (options, max) {
- options.vAxis.viewWindow.max = max;
- };
- var setBarMin = function (options, min) {
- options.hAxis.viewWindow.min = min;
- };
- var setBarMax = function (options, max) {
- options.hAxis.viewWindow.max = max;
- };
- var setStacked = function (options) {
- options.isStacked = true;
- };
- var setXtitle = function (options, title) {
- options.hAxis.title = title;
- options.hAxis.titleTextStyle.italic = false;
- }
- var setYtitle = function (options, title) {
- options.vAxis.title = title;
- options.vAxis.titleTextStyle.italic = false;
- };
- var jsOptions = jsOptionsFunc(defaultOptions, hideLegend, setMin, setMax, setStacked, setXtitle, setYtitle);
- // cant use object as key
- var createDataTable = function (series, columnType) {
- var data = new google.visualization.DataTable();
- data.addColumn(columnType, "");
- var i, j, s, d, key, rows = [];
- for (i = 0; i < series.length; i++) {
- s = series[i];
- data.addColumn("number", s.name);
- for (j = 0; j < s.data.length; j++) {
- d = s.data[j];
- key = (columnType === "datetime") ? d[0].getTime() : d[0];
- if (!rows[key]) {
- rows[key] = new Array(series.length);
- }
- rows[key][i] = toFloat(d[1]);
- }
- }
- var rows2 = [];
- var day = true;
- var value;
- for (i in rows) {
- if (rows.hasOwnProperty(i)) {
- if (columnType === "datetime") {
- value = new Date(toFloat(i));
- day = day && isDay(value);
- } else if (columnType === "number") {
- value = toFloat(i);
- } else {
- value = i;
- }
- rows2.push([value].concat(rows[i]));
- }
- }
- if (columnType === "datetime") {
- rows2.sort(sortByTime);
- }
- data.addRows(rows2);
- if (columnType === "datetime" && day) {
- var formatter = new google.visualization.DateFormat({
- pattern: "MMM d, yyyy"
- });
- formatter.format(data, 0);
- }
- return data;
- };
- var resize = function (callback) {
- if (window.attachEvent) {
- window.attachEvent("onresize", callback);
- } else if (window.addEventListener) {
- window.addEventListener("resize", callback, true);
- }
- callback();
- };
- this.renderLineChart = function (chart) {
- waitForLoaded(function () {
- var options = jsOptions(chart.data, chart.options);
- var data = createDataTable(chart.data, chart.options.discrete ? "string" : "datetime");
- chart.chart = new google.visualization.LineChart(chart.element);
- resize(function () {
- chart.chart.draw(data, options);
- });
- });
- };
- this.renderPieChart = function (chart) {
- waitForLoaded(function () {
- var chartOptions = {
- chartArea: {
- top: "10%",
- height: "80%"
- }
- };
- if (chart.options.colors) {
- chartOptions.colors = chart.options.colors;
- }
- var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});
- var data = new google.visualization.DataTable();
- data.addColumn("string", "");
- data.addColumn("number", "Value");
- data.addRows(chart.data);
- chart.chart = new google.visualization.PieChart(chart.element);
- resize(function () {
- chart.chart.draw(data, options);
- });
- });
- };
- this.renderColumnChart = function (chart) {
- waitForLoaded(function () {
- var options = jsOptions(chart.data, chart.options);
- var data = createDataTable(chart.data, "string");
- chart.chart = new google.visualization.ColumnChart(chart.element);
- resize(function () {
- chart.chart.draw(data, options);
- });
- });
- };
- this.renderBarChart = function (chart) {
- waitForLoaded(function () {
- var chartOptions = {
- hAxis: {
- gridlines: {
- color: "#ccc"
- }
- }
- };
- var options = jsOptionsFunc(defaultOptions, hideLegend, setBarMin, setBarMax, setStacked)(chart.data, chart.options, chartOptions);
- var data = createDataTable(chart.data, "string");
- chart.chart = new google.visualization.BarChart(chart.element);
- resize(function () {
- chart.chart.draw(data, options);
- });
- });
- };
- this.renderAreaChart = function (chart) {
- waitForLoaded(function () {
- var chartOptions = {
- isStacked: true,
- pointSize: 0,
- areaOpacity: 0.5
- };
- var options = jsOptions(chart.data, chart.options, chartOptions);
- var data = createDataTable(chart.data, chart.options.discrete ? "string" : "datetime");
- chart.chart = new google.visualization.AreaChart(chart.element);
- resize(function () {
- chart.chart.draw(data, options);
- });
- });
- };
- this.renderGeoChart = function (chart) {
- waitForLoaded(function () {
- var chartOptions = {
- legend: "none",
- colorAxis: {
- colors: chart.options.colors || ["#f6c7b6", "#ce502d"]
- }
- };
- var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});
- var data = new google.visualization.DataTable();
- data.addColumn("string", "");
- data.addColumn("number", "Value");
- data.addRows(chart.data);
- chart.chart = new google.visualization.GeoChart(chart.element);
- resize(function () {
- chart.chart.draw(data, options);
- });
- });
- };
- this.renderScatterChart = function (chart) {
- waitForLoaded(function () {
- var chartOptions = {};
- var options = jsOptions(chart.data, chart.options, chartOptions);
- var data = createDataTable(chart.data, "number");
- chart.chart = new google.visualization.ScatterChart(chart.element);
- resize(function () {
- chart.chart.draw(data, options);
- });
- });
- };
- this.renderTimeline = function (chart) {
- waitForLoaded("timeline", function () {
- var chartOptions = {
- legend: "none"
- };
- if (chart.options.colors) {
- chartOptions.colors = chart.options.colors;
- }
- var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});
- var data = new google.visualization.DataTable();
- data.addColumn({type: "string", id: "Name"});
- data.addColumn({type: "date", id: "Start"});
- data.addColumn({type: "date", id: "End"});
- data.addRows(chart.data);
- chart.chart = new google.visualization.Timeline(chart.element);
- resize(function () {
- chart.chart.draw(data, options);
- });
- });
- };
- };
- adapters.push(GoogleChartsAdapter);
- }
- // TODO remove chartType if cross-browser way
- // to get the name of the chart class
- function renderChart(chartType, chart) {
- var i, adapter, fnName, adapterName;
- fnName = "render" + chartType;
- adapterName = chart.options.adapter;
- for (i = 0; i < adapters.length; i++) {
- adapter = adapters[i];
- if ((!adapterName || adapterName === adapter.name) && isFunction(adapter[fnName])) {
- return adapter[fnName](chart);
- }
- }
- throw new Error("No adapter found");
- }
- // process data
- var toFormattedKey = function (key, keyType) {
- if (keyType === "number") {
- key = toFloat(key);
- } else if (keyType === "datetime") {
- key = toDate(key);
- } else {
- key = toStr(key);
- }
- return key;
- };
- var formatSeriesData = function (data, keyType) {
- var r = [], key, j;
- for (j = 0; j < data.length; j++) {
- key = toFormattedKey(data[j][0], keyType);
- r.push([key, toFloat(data[j][1])]);
- }
- if (keyType === "datetime") {
- r.sort(sortByTime);
- }
- return r;
- };
- function isDay(d) {
- return d.getMilliseconds() + d.getSeconds() + d.getMinutes() + d.getHours() === 0;
- }
- function processSeries(series, opts, keyType) {
- var i;
- // see if one series or multiple
- if (!isArray(series) || typeof series[0] !== "object" || isArray(series[0])) {
- series = [{name: "Value", data: series}];
- opts.hideLegend = true;
- } else {
- opts.hideLegend = false;
- }
- if (opts.discrete) {
- keyType = "string";
- }
- // right format
- for (i = 0; i < series.length; i++) {
- series[i].data = formatSeriesData(toArr(series[i].data), keyType);
- }
- return series;
- }
- function processSimple(data) {
- var perfectData = toArr(data), i;
- for (i = 0; i < perfectData.length; i++) {
- perfectData[i] = [toStr(perfectData[i][0]), toFloat(perfectData[i][1])];
- }
- return perfectData;
- }
- function processTime(data)
- {
- var i;
- for (i = 0; i < data.length; i++) {
- data[i][1] = toDate(data[i][1]);
- data[i][2] = toDate(data[i][2]);
- }
- return data;
- }
- function processLineData(chart) {
- chart.data = processSeries(chart.data, chart.options, "datetime");
- renderChart("LineChart", chart);
- }
- function processColumnData(chart) {
- chart.data = processSeries(chart.data, chart.options, "string");
- renderChart("ColumnChart", chart);
- }
- function processPieData(chart) {
- chart.data = processSimple(chart.data);
- renderChart("PieChart", chart);
- }
- function processBarData(chart) {
- chart.data = processSeries(chart.data, chart.options, "string");
- renderChart("BarChart", chart);
- }
- function processAreaData(chart) {
- chart.data = processSeries(chart.data, chart.options, "datetime");
- renderChart("AreaChart", chart);
- }
- function processGeoData(chart) {
- chart.data = processSimple(chart.data);
- renderChart("GeoChart", chart);
- }
- function processScatterData(chart) {
- chart.data = processSeries(chart.data, chart.options, "number");
- renderChart("ScatterChart", chart);
- }
- function processTimelineData(chart) {
- chart.data = processTime(chart.data);
- renderChart("Timeline", chart);
- }
- function setElement(chart, element, dataSource, opts, callback) {
- if (typeof element === "string") {
- element = document.getElementById(element);
- }
- chart.element = element;
- chart.options = opts || {};
- chart.dataSource = dataSource;
- Chartkick.charts[element.id] = chart;
- fetchDataSource(chart, callback);
- }
- // define classes
- Chartkick = {
- LineChart: function (element, dataSource, opts) {
- setElement(this, element, dataSource, opts, processLineData);
- },
- PieChart: function (element, dataSource, opts) {
- setElement(this, element, dataSource, opts, processPieData);
- },
- ColumnChart: function (element, dataSource, opts) {
- setElement(this, element, dataSource, opts, processColumnData);
- },
- BarChart: function (element, dataSource, opts) {
- setElement(this, element, dataSource, opts, processBarData);
- },
- AreaChart: function (element, dataSource, opts) {
- setElement(this, element, dataSource, opts, processAreaData);
- },
- GeoChart: function (element, dataSource, opts) {
- setElement(this, element, dataSource, opts, processGeoData);
- },
- ScatterChart: function (element, dataSource, opts) {
- setElement(this, element, dataSource, opts, processScatterData);
- },
- Timeline: function (element, dataSource, opts) {
- setElement(this, element, dataSource, opts, processTimelineData);
- },
- charts: {}
- };
- window.Chartkick = Chartkick;
- }(window));
|