daru-view 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/.rspec +4 -0
- data/.rubocop.yml +122 -0
- data/.simplecov +3 -0
- data/.travis.yml +18 -0
- data/CHANGELOG.md +21 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/CONTRIBUTING.md +53 -0
- data/Gemfile +11 -0
- data/LICENSE.txt +21 -0
- data/README.md +287 -0
- data/Rakefile +22 -0
- data/_config.yml +1 -0
- data/daru-view.gemspec +52 -0
- data/lib/assets/.keep +0 -0
- data/lib/daru/view.rb +127 -0
- data/lib/daru/view/adapters/datatables.rb +90 -0
- data/lib/daru/view/adapters/googlecharts.rb +180 -0
- data/lib/daru/view/adapters/googlecharts/data_table_iruby.rb +86 -0
- data/lib/daru/view/adapters/googlecharts/display.rb +54 -0
- data/lib/daru/view/adapters/googlecharts/iruby_notebook.rb +15 -0
- data/lib/daru/view/adapters/highcharts.rb +114 -0
- data/lib/daru/view/adapters/highcharts/core_ext/string.rb +10 -0
- data/lib/daru/view/adapters/highcharts/display.rb +58 -0
- data/lib/daru/view/adapters/highcharts/iruby_notebook.rb +29 -0
- data/lib/daru/view/adapters/highcharts/layout_helper_iruby.rb +76 -0
- data/lib/daru/view/adapters/js/googlecharts_js/google_visualr.js +44 -0
- data/lib/daru/view/adapters/js/googlecharts_js/loader.js +226 -0
- data/lib/daru/view/adapters/js/highcharts_js/adapters/mootools-adapter.js +13 -0
- data/lib/daru/view/adapters/js/highcharts_js/adapters/prototype-adapter.js +15 -0
- data/lib/daru/view/adapters/js/highcharts_js/highcharts-3d.js +74 -0
- data/lib/daru/view/adapters/js/highcharts_js/highcharts-more.js +64 -0
- data/lib/daru/view/adapters/js/highcharts_js/highcharts.js +399 -0
- data/lib/daru/view/adapters/js/highcharts_js/highstock.js +519 -0
- data/lib/daru/view/adapters/js/highcharts_js/modules/accessibility.js +48 -0
- data/lib/daru/view/adapters/js/highcharts_js/modules/annotations.js +14 -0
- data/lib/daru/view/adapters/js/highcharts_js/modules/boost.js +51 -0
- data/lib/daru/view/adapters/js/highcharts_js/modules/broken-axis.js +15 -0
- data/lib/daru/view/adapters/js/highcharts_js/modules/canvas-tools.js +133 -0
- data/lib/daru/view/adapters/js/highcharts_js/modules/data.js +26 -0
- data/lib/daru/view/adapters/js/highcharts_js/modules/drilldown.js +25 -0
- data/lib/daru/view/adapters/js/highcharts_js/modules/exporting.js +27 -0
- data/lib/daru/view/adapters/js/highcharts_js/modules/funnel.js +13 -0
- data/lib/daru/view/adapters/js/highcharts_js/modules/heatmap.js +25 -0
- data/lib/daru/view/adapters/js/highcharts_js/modules/no-data-to-display.js +12 -0
- data/lib/daru/view/adapters/js/highcharts_js/modules/offline-exporting.js +19 -0
- data/lib/daru/view/adapters/js/highcharts_js/modules/solid-gauge.js +14 -0
- data/lib/daru/view/adapters/js/highcharts_js/modules/treemap.js +31 -0
- data/lib/daru/view/adapters/js/highcharts_js/stock/adapters/mootools-adapter.js +13 -0
- data/lib/daru/view/adapters/js/highcharts_js/stock/adapters/prototype-adapter.js +15 -0
- data/lib/daru/view/adapters/js/highcharts_js/stock/highcharts-more.js +64 -0
- data/lib/daru/view/adapters/js/highcharts_js/stock/modules/exporting.js +27 -0
- data/lib/daru/view/adapters/js/highcharts_js/stock/modules/funnel.js +13 -0
- data/lib/daru/view/adapters/js/nyaplot_js/d3-downloadable.js +129 -0
- data/lib/daru/view/adapters/js/nyaplot_js/d3.min.js +5 -0
- data/lib/daru/view/adapters/js/nyaplot_js/nyaplot.js +5294 -0
- data/lib/daru/view/adapters/nyaplot.rb +62 -0
- data/lib/daru/view/adapters/nyaplot/display.rb +9 -0
- data/lib/daru/view/adapters/nyaplot/iruby_notebook.rb +22 -0
- data/lib/daru/view/app/rails/helpers/view_helper.rb +26 -0
- data/lib/daru/view/app/rails/railtie.rb +15 -0
- data/lib/daru/view/plot.rb +106 -0
- data/lib/daru/view/table.rb +99 -0
- data/lib/daru/view/templates/googlecharts/chart_div.erb +4 -0
- data/lib/daru/view/templates/googlecharts/init.inline.js.erb +16 -0
- data/lib/daru/view/templates/highcharts/init.inline.js.erb +16 -0
- data/lib/daru/view/templates/highcharts/static_html.erb +7 -0
- data/lib/daru/view/templates/nyaplot/init.inline.js.erb +16 -0
- data/lib/daru/view/templates/nyaplot/init_script.erb +3 -0
- data/lib/daru/view/version.rb +5 -0
- data/lib/tasks/.keep +0 -0
- data/lib/tasks/google_charts.rake +25 -0
- data/lib/tasks/high_charts.rake +60 -0
- data/lib/tasks/nyaplot.rake +25 -0
- data/spec/adapters/datatables_spec.rb +21 -0
- data/spec/adapters/googlecharts_spec.rb +34 -0
- data/spec/adapters/highcharts_spec.rb +177 -0
- data/spec/adapters/nyaplot_spec.rb +447 -0
- data/spec/app/rails/helpers/view_helpers_spec.rb +35 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Daru DataFrame and DataTables-checkpoint.ipynb +16091 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/DataTables | basic examples-checkpoint.ipynb +6 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Google Chart | Line Chart-checkpoint.ipynb +1389 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Google Chart | Area Chart-checkpoint.ipynb +606 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Google Chart | Bar Chart-checkpoint.ipynb +1404 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Google Chart | Bubble Chart-checkpoint.ipynb +866 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Google Chart | Candlestick Chart-checkpoint.ipynb +607 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Google Chart | Combo Chart-checkpoint.ipynb +478 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Google Chart | Histogram-checkpoint.ipynb +1182 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Google Chart | Org Chart-checkpoint.ipynb +6 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Google Chart | Pie Chart-checkpoint.ipynb +6 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Google Chart | Stepped Area Chart-checkpoint.ipynb +699 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Google Chart | Timeline-checkpoint.ipynb +1523 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Google Chart | Treemap-checkpoint.ipynb +650 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Google Chart | gauge-checkpoint.ipynb +477 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Google Charts | Basics-checkpoint.ipynb +1881 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Google Charts | Column Charts-checkpoint.ipynb +6 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Google Charts | Geo Charts examples-checkpoint.ipynb +791 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Google Charts | Scatter Chart-checkpoint.ipynb +1570 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/GoolgeChart | Datatables-checkpoint.ipynb +1792 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/HighCharts - Area chart-checkpoint.ipynb +1272 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/HighCharts - Bar Chart-checkpoint.ipynb +877 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/HighCharts - column charts-checkpoint.ipynb +1587 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/HighCharts- Pie charts-checkpoint.ipynb +1126 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Highcharts - Combinations -checkpoint.ipynb +925 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Highcharts - Daynamic charts-checkpoint.ipynb +839 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Highcharts - line graphs-checkpoint.ipynb +1297 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Highcharts - line graphs2-checkpoint.ipynb +879 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Highcharts - scatter -bubble charts-checkpoint.ipynb +1071 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Highcharts | add_series method and highcharts examples-checkpoint.ipynb +1165 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Nyaplot basics | Daru Examples-checkpoint.ipynb +1383 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Nyaplot other examples-checkpoint.ipynb +6 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Nyaplot testing -checkpoint.ipynb +270 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Nyaplot | Creating Visualizations with DataFrame | from daru examples-checkpoint.ipynb +1716 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/Pie Chart using HighCharts2-checkpoint.ipynb +784 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/highcharts - Use HTML table (generated from daru) as data source-checkpoint.ipynb +956 -0
- data/spec/dummy_iruby/.ipynb_checkpoints/spec_testing-checkpoint.ipynb +1433 -0
- data/spec/dummy_iruby/Daru DataFrame and DataTables.ipynb +16091 -0
- data/spec/dummy_iruby/DataTables | basic examples.ipynb +15587 -0
- data/spec/dummy_iruby/Gemfile +33 -0
- data/spec/dummy_iruby/Google Chart | Line Chart.ipynb +1389 -0
- data/spec/dummy_iruby/Google Chart | Area Chart.ipynb +606 -0
- data/spec/dummy_iruby/Google Chart | Bar Chart.ipynb +1394 -0
- data/spec/dummy_iruby/Google Chart | Bubble Chart.ipynb +866 -0
- data/spec/dummy_iruby/Google Chart | Candlestick Chart.ipynb +607 -0
- data/spec/dummy_iruby/Google Chart | Combo Chart.ipynb +478 -0
- data/spec/dummy_iruby/Google Chart | Histogram.ipynb +1182 -0
- data/spec/dummy_iruby/Google Chart | Org Chart.ipynb +474 -0
- data/spec/dummy_iruby/Google Chart | Pie Chart.ipynb +1177 -0
- data/spec/dummy_iruby/Google Chart | Stepped Area Chart.ipynb +699 -0
- data/spec/dummy_iruby/Google Chart | Timeline.ipynb +1523 -0
- data/spec/dummy_iruby/Google Chart | Treemap.ipynb +659 -0
- data/spec/dummy_iruby/Google Chart | gauge.ipynb +477 -0
- data/spec/dummy_iruby/Google Charts | Basics.ipynb +1882 -0
- data/spec/dummy_iruby/Google Charts | Column Charts.ipynb +1138 -0
- data/spec/dummy_iruby/Google Charts | Geo Charts examples.ipynb +791 -0
- data/spec/dummy_iruby/Google Charts | Scatter Chart.ipynb +1570 -0
- data/spec/dummy_iruby/GoolgeChart | Datatables.ipynb +1801 -0
- data/spec/dummy_iruby/HighCharts - Area chart.ipynb +1272 -0
- data/spec/dummy_iruby/HighCharts - Bar Chart.ipynb +877 -0
- data/spec/dummy_iruby/HighCharts - column charts.ipynb +1587 -0
- data/spec/dummy_iruby/HighCharts- Pie charts.ipynb +1197 -0
- data/spec/dummy_iruby/Highcharts - Combinations .ipynb +925 -0
- data/spec/dummy_iruby/Highcharts - Daynamic charts.ipynb +839 -0
- data/spec/dummy_iruby/Highcharts - line graphs.ipynb +1297 -0
- data/spec/dummy_iruby/Highcharts - line graphs2.ipynb +879 -0
- data/spec/dummy_iruby/Highcharts - scatter -bubble charts.ipynb +1071 -0
- data/spec/dummy_iruby/Highcharts | add_series method and highcharts examples.ipynb +1228 -0
- data/spec/dummy_iruby/Nyaplot basics | Daru Examples.ipynb +1390 -0
- data/spec/dummy_iruby/Nyaplot other examples.ipynb +589 -0
- data/spec/dummy_iruby/Nyaplot testing .ipynb +270 -0
- data/spec/dummy_iruby/Nyaplot | Creating Visualizations with DataFrame | from daru examples.ipynb +1716 -0
- data/spec/dummy_iruby/Pie Chart using HighCharts2.ipynb +784 -0
- data/spec/dummy_iruby/highcharts - Use HTML table (generated from daru) as data source.ipynb +951 -0
- data/spec/dummy_iruby/spec_testing.ipynb +1433 -0
- data/spec/dummy_nanoc/Gemfile +12 -0
- data/spec/dummy_nanoc/README.md +40 -0
- data/spec/dummy_nanoc/Rules +90 -0
- data/spec/dummy_nanoc/content/googlecharts/index.html +29 -0
- data/spec/dummy_nanoc/content/highcharts/index.html +42 -0
- data/spec/dummy_nanoc/content/index.html +26 -0
- data/spec/dummy_nanoc/content/nyaplot/index.html +9 -0
- data/spec/dummy_nanoc/content/stylesheet.css +101 -0
- data/spec/dummy_nanoc/layouts/default.html +31 -0
- data/spec/dummy_nanoc/layouts/googlecharts_layout.html +30 -0
- data/spec/dummy_nanoc/layouts/highcharts_layout.html +30 -0
- data/spec/dummy_nanoc/layouts/nyaplot_layout.html +30 -0
- data/spec/dummy_nanoc/lib/default.rb +300 -0
- data/spec/dummy_nanoc/nanoc.yaml +90 -0
- data/spec/dummy_nanoc/output/googlecharts/index.html +390 -0
- data/spec/dummy_nanoc/output/highcharts/index.html +1153 -0
- data/spec/dummy_nanoc/output/index.html +87 -0
- data/spec/dummy_nanoc/output/nyaplot/index.html +135 -0
- data/spec/dummy_nanoc/output/stylesheet.css +101 -0
- data/spec/dummy_nanoc/tmp/nanoc/1029d67644815/checksums +0 -0
- data/spec/dummy_nanoc/tmp/nanoc/1029d67644815/compiled_content +2229 -0
- data/spec/dummy_nanoc/tmp/nanoc/1029d67644815/dependencies +5 -0
- data/spec/dummy_nanoc/tmp/nanoc/1029d67644815/outdatedness +0 -0
- data/spec/dummy_nanoc/tmp/nanoc/1029d67644815/rule_memory +0 -0
- data/spec/dummy_sinatra/Gemfile +9 -0
- data/spec/dummy_sinatra/README.md +15 -0
- data/spec/dummy_sinatra/app.rb +143 -0
- data/spec/dummy_sinatra/config.ru +0 -0
- data/spec/dummy_sinatra/views/googlecharts.erb +31 -0
- data/spec/dummy_sinatra/views/googlecharts_layout.erb +12 -0
- data/spec/dummy_sinatra/views/highcharts.erb +15 -0
- data/spec/dummy_sinatra/views/highcharts_layout.erb +12 -0
- data/spec/dummy_sinatra/views/index.erb +2 -0
- data/spec/dummy_sinatra/views/layout.erb +26 -0
- data/spec/dummy_sinatra/views/nyaplot.erb +13 -0
- data/spec/dummy_sinatra/views/nyaplot_layout.erb +14 -0
- data/spec/plot_spec.rb +86 -0
- data/spec/spec_helper.rb +11 -0
- metadata +568 -0
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'securerandom'
|
2
|
+
require 'google_visualr'
|
3
|
+
|
4
|
+
module GoogleVisualr
|
5
|
+
class DataTable
|
6
|
+
# options will enable us to give some styling for table.
|
7
|
+
# E.g. pagination, row numbers, etc
|
8
|
+
attr_accessor :options
|
9
|
+
|
10
|
+
# included to use `js_parameters` method
|
11
|
+
include GoogleVisualr::ParamHelpers
|
12
|
+
|
13
|
+
# overiding the current initialze method (of the google_visualr).
|
14
|
+
# This might be not a good idea. But right now I need these lines in it :
|
15
|
+
# ` unless options[:cols].nil?` , `unless options[:rows].nil?` and
|
16
|
+
# `@options = options`
|
17
|
+
# Few lines is changed, to fix rubocop error.
|
18
|
+
def initialize(options={})
|
19
|
+
@cols = []
|
20
|
+
@rows = []
|
21
|
+
@options = options
|
22
|
+
return if options.empty?
|
23
|
+
|
24
|
+
new_columns(options[:cols]) unless options[:cols].nil?
|
25
|
+
|
26
|
+
return if options[:rows].nil?
|
27
|
+
rows = options[:rows]
|
28
|
+
rows.each do |row|
|
29
|
+
add_row(row[:c])
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Generates JavaScript and renders the Google Chart DataTable in the
|
34
|
+
# final HTML output.
|
35
|
+
#
|
36
|
+
# Parameters:
|
37
|
+
# *div_id [Required] The ID of the DIV element that the Google Chart DataTable should be rendered in.
|
38
|
+
def to_js_full_script(element_id=SecureRandom.uuid)
|
39
|
+
js = ''
|
40
|
+
js << '\n<script type=\'text/javascript\'>'
|
41
|
+
js << load_js(element_id)
|
42
|
+
js << draw_js(element_id)
|
43
|
+
js << '\n</script>'
|
44
|
+
js
|
45
|
+
end
|
46
|
+
|
47
|
+
def chart_function_name(element_id)
|
48
|
+
"draw_#{element_id.tr('-', '_')}"
|
49
|
+
end
|
50
|
+
|
51
|
+
def google_table_version
|
52
|
+
'1.0'.freeze
|
53
|
+
end
|
54
|
+
|
55
|
+
def package_name
|
56
|
+
'table'
|
57
|
+
end
|
58
|
+
|
59
|
+
# Generates JavaScript for loading the appropriate Google Visualization package, with callback to render chart.
|
60
|
+
#
|
61
|
+
# Parameters:
|
62
|
+
# *div_id [Required] The ID of the DIV element that the Google Chart should be rendered in.
|
63
|
+
def load_js(element_id)
|
64
|
+
js = ''
|
65
|
+
js << "\n google.load('visualization', #{google_table_version}, "
|
66
|
+
js << "\n {packages: ['#{package_name}'], callback:"
|
67
|
+
js << "\n #{chart_function_name(element_id)}});"
|
68
|
+
js
|
69
|
+
end
|
70
|
+
|
71
|
+
# Generates JavaScript function for rendering the chart.
|
72
|
+
#
|
73
|
+
# Parameters:
|
74
|
+
# *div_id [Required] The ID of the DIV element that the Google Chart should be rendered in.
|
75
|
+
def draw_js(element_id)
|
76
|
+
js = ''
|
77
|
+
js << "\n function #{chart_function_name(element_id)}() {"
|
78
|
+
js << "\n #{to_js}"
|
79
|
+
js << "\n var table = new google.visualization.Table("
|
80
|
+
js << "\n document.getElementById('#{element_id}'));"
|
81
|
+
js << "\n table.draw(data_table, #{js_parameters(@options)}); "
|
82
|
+
js << "\n };"
|
83
|
+
js
|
84
|
+
end
|
85
|
+
end # class Datatable end
|
86
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'securerandom'
|
2
|
+
require 'erb'
|
3
|
+
require_relative 'data_table_iruby'
|
4
|
+
|
5
|
+
module GoogleVisualr
|
6
|
+
def self.init_script(
|
7
|
+
dependent_js=['google_visualr.js', 'loader.js']
|
8
|
+
)
|
9
|
+
js = ''
|
10
|
+
js << "\n<script type='text/javascript'>"
|
11
|
+
js << GoogleVisualr.generate_init_code(dependent_js)
|
12
|
+
js << "\n</script>"
|
13
|
+
js
|
14
|
+
end
|
15
|
+
|
16
|
+
module Display
|
17
|
+
def show_script(dom=SecureRandom.uuid, options={})
|
18
|
+
script_tag = options.fetch(:script_tag) { true }
|
19
|
+
if script_tag
|
20
|
+
# if it is data table
|
21
|
+
if is_a?(GoogleVisualr::DataTable)
|
22
|
+
to_js_full_script(dom)
|
23
|
+
else
|
24
|
+
to_js(dom)
|
25
|
+
end
|
26
|
+
else
|
27
|
+
html = ''
|
28
|
+
html << load_js(dom)
|
29
|
+
html << draw_js(dom)
|
30
|
+
html
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_html(id=nil, options={})
|
35
|
+
path = File.expand_path('../../../templates/googlecharts/chart_div.erb', __FILE__)
|
36
|
+
template = File.read(path)
|
37
|
+
id ||= SecureRandom.uuid
|
38
|
+
chart_script = show_script(id, script_tag: false)
|
39
|
+
ERB.new(template).result(binding)
|
40
|
+
end
|
41
|
+
|
42
|
+
def show_in_iruby(dom=SecureRandom.uuid)
|
43
|
+
IRuby.html(to_html(dom))
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
class DataTable
|
48
|
+
include Display
|
49
|
+
end
|
50
|
+
|
51
|
+
class BaseChart
|
52
|
+
include Display
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module GoogleVisualr
|
2
|
+
# generate initializing code
|
3
|
+
def self.generate_init_code(dependent_js)
|
4
|
+
js_dir = File.expand_path('../../js/googlecharts_js', __FILE__)
|
5
|
+
path = File.expand_path('../../../templates/googlecharts/init.inline.js.erb', __FILE__)
|
6
|
+
template = File.read(path)
|
7
|
+
ERB.new(template).result(binding)
|
8
|
+
end
|
9
|
+
|
10
|
+
# Enable to show plots on IRuby notebook
|
11
|
+
def self.init_iruby(dependent_js=['google_visualr.js', 'loader.js'])
|
12
|
+
js = generate_init_code(dependent_js)
|
13
|
+
IRuby.display(IRuby.javascript(js))
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
require 'lazy_high_charts'
|
2
|
+
require_relative 'highcharts/iruby_notebook'
|
3
|
+
require_relative 'highcharts/display'
|
4
|
+
require_relative 'highcharts/core_ext/string'
|
5
|
+
require 'daru'
|
6
|
+
|
7
|
+
module Daru
|
8
|
+
module View
|
9
|
+
module Adapter
|
10
|
+
module HighchartsAdapter
|
11
|
+
extend self # rubocop:disable Style/ModuleFunction
|
12
|
+
|
13
|
+
# Read : https://www.highcharts.com/docs/chart-concepts to understand
|
14
|
+
# the highcharts option concept.
|
15
|
+
#
|
16
|
+
# TODO : this docs must be improved
|
17
|
+
#
|
18
|
+
# @param [Hash] options the options to create a chart with.
|
19
|
+
# @option opts [String] :title The chart title
|
20
|
+
# @option opts [String] :subtitle The chart subtitle
|
21
|
+
# @option opts [String/Symbol] :type The chart type
|
22
|
+
# @option opts [Daru::Vector / Array] :x X Axis data
|
23
|
+
# @option opts [Daru::Vector / Array] :y Y Axis data
|
24
|
+
# @option opts [Hash] :chart The chart options(there are many
|
25
|
+
# options in chart Hash, same as LazyHighCahrts or HighCharts)
|
26
|
+
# @option opts [Hash] :plotOptions The plot options, how the plot
|
27
|
+
# type is configured
|
28
|
+
#
|
29
|
+
# @param [Array/Daru::DataFrame/Daru::Vector] data
|
30
|
+
#
|
31
|
+
def init(data=[], options={})
|
32
|
+
data_new = guess_data(data)
|
33
|
+
# TODO : for multiple series need some modification
|
34
|
+
# Alternate way is using `add_series` method.
|
35
|
+
#
|
36
|
+
# There are many options present in Highcharts so it is better to use
|
37
|
+
# directly all the options. That means Daru::View::Plot will
|
38
|
+
# behave same as LazyHighCharts when `data` is an Array and
|
39
|
+
# `options` are passed.
|
40
|
+
#
|
41
|
+
@chart = LazyHighCharts::HighChart.new do |f|
|
42
|
+
# all the options present in `options` and about the
|
43
|
+
# series (means name, type, data) used in f.series(..)
|
44
|
+
f.options = options.empty? ? LazyHighCharts::HighChart.new.defaults_options : options
|
45
|
+
|
46
|
+
series_type = options[:type] unless options[:type].nil?
|
47
|
+
series_name = options[:name] unless options[:name].nil?
|
48
|
+
f.series(type: series_type, name: series_name, data: data_new)
|
49
|
+
end
|
50
|
+
@chart
|
51
|
+
end
|
52
|
+
|
53
|
+
def init_script
|
54
|
+
LazyHighCharts.init_script
|
55
|
+
end
|
56
|
+
|
57
|
+
def generate_body(plot)
|
58
|
+
plot.to_html
|
59
|
+
end
|
60
|
+
|
61
|
+
def export_html_file(plot, path='./plot.html')
|
62
|
+
path = File.expand_path(path, Dir.pwd)
|
63
|
+
str = generate_html(plot)
|
64
|
+
File.write(path, str)
|
65
|
+
end
|
66
|
+
|
67
|
+
def show_in_iruby(plot)
|
68
|
+
plot.show_in_iruby
|
69
|
+
end
|
70
|
+
|
71
|
+
def generate_html(plot)
|
72
|
+
path = File.expand_path('../../templates/highcharts/static_html.erb', __FILE__)
|
73
|
+
template = File.read(path)
|
74
|
+
initial_script = init_script
|
75
|
+
chart_div = generate_body(plots)
|
76
|
+
ERB.new(template).result(binding)
|
77
|
+
end
|
78
|
+
|
79
|
+
def init_iruby
|
80
|
+
LazyHighCharts.init_iruby
|
81
|
+
end
|
82
|
+
|
83
|
+
# Generally, in opts Hash, :name, :type, :data , :center=> [X, Y],
|
84
|
+
# :size=> Integer, :showInLegend=> Bool, etc may present.
|
85
|
+
def add_series(plot, opts={})
|
86
|
+
plot.series(opts)
|
87
|
+
plot
|
88
|
+
end
|
89
|
+
|
90
|
+
private
|
91
|
+
|
92
|
+
def guess_data(data_set)
|
93
|
+
case
|
94
|
+
when data_set.is_a?(Daru::DataFrame)
|
95
|
+
# TODO : Currently I didn't find use case for multi index.
|
96
|
+
return ArgumentError unless data_set.index.is_a?(Daru::Index)
|
97
|
+
index_val = data_set.index.to_a
|
98
|
+
data_set.access_row_tuples_by_indexs(*index_val)
|
99
|
+
when data_set.is_a?(Daru::Vector)
|
100
|
+
data_set.to_a
|
101
|
+
when data_set.is_a?(Array)
|
102
|
+
data_set
|
103
|
+
when data_set.is_a?(String)
|
104
|
+
# it can be `id` of html table
|
105
|
+
data_set
|
106
|
+
else
|
107
|
+
# TODO: error msg
|
108
|
+
raise ArgumentError
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end # HighchartsAdapter end
|
112
|
+
end # Adapter end
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require_relative 'layout_helper_iruby'
|
2
|
+
require_relative 'iruby_notebook'
|
3
|
+
|
4
|
+
module LazyHighCharts
|
5
|
+
def self.init_script(
|
6
|
+
dependent_js=['highstock.js', 'modules/exporting.js',
|
7
|
+
'highcharts-3d.js', 'modules/data.js']
|
8
|
+
)
|
9
|
+
# Highstock is based on Highcharts, meaning it has all the core
|
10
|
+
# functionality of Highcharts, plus some additional features. So
|
11
|
+
# highstock.js contains highcharts.js .If highstock.js is removed then
|
12
|
+
# add highchart.js to make chart script work.
|
13
|
+
#
|
14
|
+
# Note: Don't reorder the dependent_js elements. It must be loaded in
|
15
|
+
# the same sequence. Otherwise some of the JS overlap and doesn't work.
|
16
|
+
js = ''
|
17
|
+
js << "\n<script type='text/javascript'>"
|
18
|
+
js << LazyHighCharts.generate_init_code(dependent_js)
|
19
|
+
js << "\n</script>"
|
20
|
+
js
|
21
|
+
end
|
22
|
+
|
23
|
+
class HighChart
|
24
|
+
# @example
|
25
|
+
#
|
26
|
+
# To display the html code of the chart, use `to_html`. To see the same
|
27
|
+
# in IRuby notebook use `show_in_iruby`.
|
28
|
+
# User can also use :
|
29
|
+
# `IRuby.html chart.to_html` (or)
|
30
|
+
# `IRuby.html chart.to_html.to_s` (or)
|
31
|
+
# `IRuby.display chart.to_html, mime: 'text/html'`
|
32
|
+
# to get the same chart in IRuby notebook.
|
33
|
+
#
|
34
|
+
def to_html(placeholder=random_canvas_id)
|
35
|
+
chart_hash_must_be_present
|
36
|
+
high_chart(placeholder, self)
|
37
|
+
end
|
38
|
+
|
39
|
+
def show_in_iruby(placeholder=random_canvas_id)
|
40
|
+
# TODO : placeholder pass, in plot#div
|
41
|
+
chart_hash_must_be_present
|
42
|
+
IRuby.html high_chart_iruby(placeholder, self)
|
43
|
+
end
|
44
|
+
|
45
|
+
# This method is not needed if `to_html` generates the same code. Here
|
46
|
+
# `to_html` generates the code with `onload`, so there is need of
|
47
|
+
# `high_chart_iruby` which doesn't use `onload` in chart script.
|
48
|
+
def to_html_iruby(placeholder=random_canvas_id)
|
49
|
+
# TODO : placeholder pass, in plot#div
|
50
|
+
chart_hash_must_be_present
|
51
|
+
high_chart_iruby(placeholder, self)
|
52
|
+
end
|
53
|
+
|
54
|
+
def chart_hash_must_be_present
|
55
|
+
@options[:chart] ||= {}
|
56
|
+
end
|
57
|
+
end # class end
|
58
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module LazyHighCharts
|
2
|
+
# generate initializing code
|
3
|
+
def self.generate_init_code(dependent_js)
|
4
|
+
js_dir = File.expand_path('../../js/highcharts_js', __FILE__)
|
5
|
+
path = File.expand_path('../../../templates/highcharts/init.inline.js.erb', __FILE__)
|
6
|
+
template = File.read(path)
|
7
|
+
ERB.new(template).result(binding)
|
8
|
+
end
|
9
|
+
|
10
|
+
# Enable to show plots on IRuby notebook
|
11
|
+
def self.init_iruby(
|
12
|
+
dependent_js=['highcharts.js', 'modules/exporting.js',
|
13
|
+
'highcharts-3d.js', 'modules/data.js']
|
14
|
+
)
|
15
|
+
# TODO: include highstock.js for highstock and modules/*.js files for
|
16
|
+
# exporting and getting data from various source like csv files etc.
|
17
|
+
#
|
18
|
+
# Highstock.js includes the highcharts.js, so only one of them required.
|
19
|
+
# see: https://www.highcharts.com/errors/16
|
20
|
+
#
|
21
|
+
# , 'modules/exporting.js' : for the exporting button
|
22
|
+
# data.js for getting data as csv or html table.
|
23
|
+
# 'highcharts-more.js' : for arearange and some other chart type
|
24
|
+
# Note: Don't reorder the dependent_js elements. It must be loaded in
|
25
|
+
# the same sequence. Otherwise some of the JS overlap and doesn't work.
|
26
|
+
js = generate_init_code(dependent_js)
|
27
|
+
IRuby.display(IRuby.javascript(js))
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module LazyHighCharts
|
2
|
+
module LayoutHelper
|
3
|
+
def high_chart_iruby(placeholder, object, &block)
|
4
|
+
object.html_options[:id] = placeholder
|
5
|
+
object.options[:chart][:renderTo] = placeholder
|
6
|
+
high_graph_iruby(placeholder, object, &block).concat(content_tag('div', '', object.html_options))
|
7
|
+
end
|
8
|
+
|
9
|
+
def high_graph_iruby(placeholder, object, &block)
|
10
|
+
build_html_output_iruby('Chart', placeholder, object, &block)
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def build_html_output_iruby(type, placeholder, object, &block)
|
16
|
+
core_js =<<-EOJS
|
17
|
+
var options = #{options_collection_as_string(object)};
|
18
|
+
#{capture(&block) if block_given?}
|
19
|
+
window.chart_#{placeholder.underscore} = new Highcharts.#{type}(options);
|
20
|
+
EOJS
|
21
|
+
|
22
|
+
encapsulate_js_iruby core_js
|
23
|
+
end
|
24
|
+
|
25
|
+
# rubocop:disable Metrics/PerceivedComplexity, Metrics/MethodLength
|
26
|
+
def encapsulate_js_iruby(core_js)
|
27
|
+
js_output =
|
28
|
+
if request_is_xhr?
|
29
|
+
"#{js_start_iruby} #{core_js} #{js_end_iruby}"
|
30
|
+
# Turbolinks.version < 5
|
31
|
+
elsif defined?(Turbolinks)
|
32
|
+
if request_is_referrer?
|
33
|
+
<<-EOJS
|
34
|
+
#{js_start_iruby}
|
35
|
+
var f = function(){
|
36
|
+
document.removeEventListener('page:load', f, true);
|
37
|
+
#{core_js}
|
38
|
+
};
|
39
|
+
document.addEventListener('page:load', f, true);
|
40
|
+
#{js_end_iruby}
|
41
|
+
EOJS
|
42
|
+
elsif request_turbolinks_5_tureferrer?
|
43
|
+
<<-EOJS
|
44
|
+
#{js_start_iruby}
|
45
|
+
document.addEventListener("turbolinks:load", function() {
|
46
|
+
#{core_js}
|
47
|
+
});
|
48
|
+
#{js_end_iruby}
|
49
|
+
EOJS
|
50
|
+
end
|
51
|
+
else
|
52
|
+
<<-EOJS
|
53
|
+
#{js_start_iruby}
|
54
|
+
#{core_js}
|
55
|
+
#{js_end_iruby}
|
56
|
+
EOJS
|
57
|
+
end
|
58
|
+
|
59
|
+
defined?(raw) ? raw(js_output) : js_output
|
60
|
+
end
|
61
|
+
|
62
|
+
def js_start_iruby
|
63
|
+
<<-EOJS
|
64
|
+
<script type="text/javascript">
|
65
|
+
$(function() {
|
66
|
+
EOJS
|
67
|
+
end
|
68
|
+
|
69
|
+
def js_end_iruby
|
70
|
+
<<-EOJS
|
71
|
+
});
|
72
|
+
</script>
|
73
|
+
EOJS
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|