From 73586b978e2368df17de7638c26bbb2fc8a4aec7 Mon Sep 17 00:00:00 2001 From: Harish Shetty Date: Wed, 8 Nov 2017 18:27:54 -0800 Subject: [PATCH 1/4] Added table_chart --- app/assets/javascripts/chartkick.js | 23 ++++++++++++++++++++++- lib/chartkick/helper.rb | 4 ++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/chartkick.js b/app/assets/javascripts/chartkick.js index 5b01e850..1d497a86 100644 --- a/app/assets/javascripts/chartkick.js +++ b/app/assets/javascripts/chartkick.js @@ -616,7 +616,7 @@ 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)); + call = google.visualization && ((cb.pack === "corechart" && google.visualization.LineChart) || (cb.pack === "timeline" && google.visualization.Timeline) || (cb.pack === 'table' && google.visualization.Table)); if (call) { cb.callback(); callbacks.splice(i, 1); @@ -1008,6 +1008,24 @@ }); }); }; + + this.renderTable = function (chart) { + waitForLoaded('table', function () { + var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {}); + + var data = new google.visualization.DataTable(); + for (var i = 0; i < chart.data[0].length; i++) { + data.addColumn.apply(data, chart.data[0][i]); + } + data.addRows(chart.data.slice(1)); + + chart.chart = new google.visualization.Table(chart.element); + + resize(function () { + chart.chart.draw(data, options); + }); + }); + }; }; adapters.push(GoogleChartsAdapter); @@ -1789,6 +1807,9 @@ Timeline: function (element, dataSource, options) { createChart("Timeline", this, element, dataSource, options, processTime); }, + Table: function (element, dataSource, options) { + createChart("Table", this, element, dataSource, options); + }, charts: {}, configure: function (options) { for (var key in options) { diff --git a/lib/chartkick/helper.rb b/lib/chartkick/helper.rb index 98d14f30..5351358c 100644 --- a/lib/chartkick/helper.rb +++ b/lib/chartkick/helper.rb @@ -35,6 +35,10 @@ def timeline(data_source, options = {}) chartkick_chart "Timeline", data_source, options end + def table(data_source, options = {}) + chartkick_chart "Table", data_source, options + end + private def chartkick_chart(klass, data_source, options) From 88505968bb055ff83691e1c1d5fe34cd17b9d186 Mon Sep 17 00:00:00 2001 From: Harish Shetty Date: Wed, 8 Nov 2017 19:23:31 -0800 Subject: [PATCH 2/4] Fixed a bug --- app/assets/javascripts/chartkick.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/javascripts/chartkick.js b/app/assets/javascripts/chartkick.js index 1d497a86..9e8d0136 100644 --- a/app/assets/javascripts/chartkick.js +++ b/app/assets/javascripts/chartkick.js @@ -1011,7 +1011,7 @@ this.renderTable = function (chart) { waitForLoaded('table', function () { - var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {}); + var options = merge(defaultOptions, chart.options.library || {}); var data = new google.visualization.DataTable(); for (var i = 0; i < chart.data[0].length; i++) { From 4da898dbd853993d954e9bdaac8c77507de73d1c Mon Sep 17 00:00:00 2001 From: Harish Shetty Date: Wed, 8 Nov 2017 22:25:09 -0800 Subject: [PATCH 3/4] Removed line height --- lib/chartkick/helper.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/chartkick/helper.rb b/lib/chartkick/helper.rb index 5351358c..51a743a0 100644 --- a/lib/chartkick/helper.rb +++ b/lib/chartkick/helper.rb @@ -51,7 +51,11 @@ def chartkick_chart(klass, data_source, options) # content_for: nil must override default content_for = options.key?(:content_for) ? options.delete(:content_for) : Chartkick.content_for nonce = options.key?(:nonce) ? " nonce=\"#{ERB::Util.html_escape(options.delete(:nonce))}\"" : nil - html = (options.delete(:html) || %(
Loading...
)) % {id: ERB::Util.html_escape(element_id), height: ERB::Util.html_escape(height), width: ERB::Util.html_escape(width)} + line_height = nil + unless klass == "Table" + line_height = "line-height: %{height};" % { height: ERB::Util.html_escape(height) } + end + html = (options.delete(:html) || %(
Loading...
)) % { id: ERB::Util.html_escape(element_id), height: ERB::Util.html_escape(height), width: ERB::Util.html_escape(width) } createjs = "new Chartkick.#{klass}(#{element_id.to_json}, #{data_source.respond_to?(:chart_json) ? data_source.chart_json : data_source.to_json}, #{options.to_json});" if defer From 1997b157b929d1f6e1e5423d24f7cb1d3f6769a2 Mon Sep 17 00:00:00 2001 From: Harish Shetty Date: Wed, 8 Nov 2017 22:49:33 -0800 Subject: [PATCH 4/4] Fixed the options issue --- app/assets/javascripts/chartkick.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/chartkick.js b/app/assets/javascripts/chartkick.js index 9e8d0136..4e7e21d6 100644 --- a/app/assets/javascripts/chartkick.js +++ b/app/assets/javascripts/chartkick.js @@ -1011,7 +1011,11 @@ this.renderTable = function (chart) { waitForLoaded('table', function () { - var options = merge(defaultOptions, chart.options.library || {}); + var defaultOptions = { + fontName: "'Lucida Grande', 'Lucida Sans Unicode', Verdana, Arial, Helvetica, sans-serif" + }; + + var options = merge(defaultOptions, chart.options || {}); var data = new google.visualization.DataTable(); for (var i = 0; i < chart.data[0].length; i++) {