lazy_high_charts 1.5.2 → 1.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.travis.yml +1 -2
- data/CHANGELOG.md +15 -1
- data/GEM_VERSION +1 -1
- data/Gemfile +1 -1
- data/README.md +80 -17
- data/lazy_high_charts.gemspec +1 -1
- data/lib/lazy_high_charts.rb +1 -1
- data/lib/lazy_high_charts/high_chart.rb +8 -7
- data/lib/lazy_high_charts/high_chart_globals.rb +29 -0
- data/lib/lazy_high_charts/layout_helper.rb +88 -44
- data/lib/lazy_high_charts/options_key_filter.rb +43 -25
- data/lib/tasks/high_charts.rake +22 -3
- data/spec/dummy_sinatra/app.rb +31 -7
- data/spec/high_chart_globals_spec.rb +51 -0
- data/spec/high_chart_spec.rb +32 -31
- data/spec/lazy_high_charts_spec.rb +57 -27
- data/spec/options_key_filter_spec.rb +5 -5
- data/spec/spec_helper.rb +1 -1
- metadata +21 -30
- data/vendor/assets/javascripts/highcharts/adapters/mootools-adapter.js +0 -13
- data/vendor/assets/javascripts/highcharts/adapters/prototype-adapter.js +0 -15
- data/vendor/assets/javascripts/highcharts/highcharts-more.js +0 -50
- data/vendor/assets/javascripts/highcharts/highcharts.js +0 -285
- data/vendor/assets/javascripts/highcharts/highstock.js +0 -353
- data/vendor/assets/javascripts/highcharts/modules/exporting.js +0 -22
- data/vendor/assets/javascripts/highcharts/stock/adapters/mootools-adapter.js +0 -13
- data/vendor/assets/javascripts/highcharts/stock/adapters/prototype-adapter.js +0 -15
- data/vendor/assets/javascripts/highcharts/stock/highcharts-more.js +0 -50
- data/vendor/assets/javascripts/highcharts/stock/modules/exporting.js +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 3eee1a5afbb4b3c63d64dfc871914509471aab415d129342eea21b54ccf09fee
|
4
|
+
data.tar.gz: 246cdc1ea7fba6367c8d19603ffb7f0b3df67f86a3be9082cd316af3475e74a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 03d0468dd7d3223b36e28109222e958b68540a80114607a54daa0f8ce0bcdeeead869a23bec4a956a071e34e448d29c680c59bce239431576350c179555bd385
|
7
|
+
data.tar.gz: 031b37c48d4ce4085b18543e7c50ac278fb4e19dfbc13362b1934242700a9dab73504e50f1f8ce2831f891a60a4aea5a833b6936498ef76b10325b02e9dcaf52
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,10 +1,24 @@
|
|
1
|
+
# VERSION 1.5.5
|
2
|
+
* Mon Oct 19, 2015
|
3
|
+
1. Support for HighChart global settings.
|
4
|
+
[#149](https://github.com/michelson/lazy_high_charts/issues/149)
|
5
|
+
2. Minor code refactorings.
|
6
|
+
|
7
|
+
# VERSION 1.5.4
|
8
|
+
* Fri May 21
|
9
|
+
1. Include ActionView::Helpers::TagHelper to the layout helper to avoid method conflict in object.
|
10
|
+
|
11
|
+
# VERSION 1.5.3
|
12
|
+
* Fri Apr 18
|
13
|
+
1. update HighChart js lib to latest.
|
14
|
+
|
1
15
|
# VERSION 1.5.2
|
2
16
|
* Sun Mar 11, 2014
|
3
17
|
1. Merge some requirement tweaks to use gem in NON-Rails contexts
|
4
18
|
|
5
19
|
# VERSION 1.5.1
|
6
20
|
* Sun Dec 22, 2013
|
7
|
-
1. Share highcharts:update rake task for gem and rails host app
|
21
|
+
1. Share highcharts:update rake task for gem and rails host app
|
8
22
|
|
9
23
|
# VERSION 1.5.0
|
10
24
|
* Sun Jul 21, 2013
|
data/GEM_VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.6.1
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
# LazyHighCharts
|
2
2
|
|
3
|
+
[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/michelson/lazy_high_charts?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
4
|
+
|
3
5
|
This gem provides a simple and extremely flexible way to use HighCharts from ruby code.
|
4
|
-
Tested on Ruby on Rails, Sinatra and Nanoc, but it should work with others too.
|
6
|
+
Tested on Ruby on Rails, Sinatra and Nanoc, but it should work with others too. Highcharts is not free for commercial use, so make sure you have a valid license to use Highcharts.
|
5
7
|
|
6
8
|
|
7
9
|
[![Build Status](https://travis-ci.org/michelson/lazy_high_charts.png?branch=master)](http://travis-ci.org/michelson/lazy_high_charts)
|
@@ -40,43 +42,104 @@ then run
|
|
40
42
|
bundle install
|
41
43
|
```
|
42
44
|
|
45
|
+
and make sure to get the latest version (unless you'd like an older version for some reason)
|
46
|
+
```bash
|
47
|
+
rake highcharts:update
|
48
|
+
```
|
49
|
+
|
50
|
+
and add this in the application.js
|
51
|
+
|
52
|
+
```js
|
53
|
+
//= require jquery
|
54
|
+
//= require jquery_ujs
|
55
|
+
//= require_tree .
|
56
|
+
//= require turbolinks
|
57
|
+
|
58
|
+
//= require highcharts/highcharts
|
59
|
+
//= require highcharts/highcharts-more
|
60
|
+
//= require highcharts/highstock
|
61
|
+
```
|
62
|
+
|
43
63
|
to install it.
|
44
64
|
|
45
65
|
## Usage:
|
46
66
|
|
47
67
|
### Controller code:
|
48
68
|
```ruby
|
49
|
-
@
|
50
|
-
f.title(:
|
51
|
-
f.xAxis(:
|
52
|
-
f.series(:
|
53
|
-
f.series(:
|
69
|
+
@chart = LazyHighCharts::HighChart.new('graph') do |f|
|
70
|
+
f.title(text: "Population vs GDP For 5 Big Countries [2009]")
|
71
|
+
f.xAxis(categories: ["United States", "Japan", "China", "Germany", "France"])
|
72
|
+
f.series(name: "GDP in Billions", yAxis: 0, data: [14119, 5068, 4985, 3339, 2656])
|
73
|
+
f.series(name: "Population in Millions", yAxis: 1, data: [310, 127, 1340, 81, 65])
|
54
74
|
|
55
75
|
f.yAxis [
|
56
|
-
{:
|
57
|
-
{:
|
76
|
+
{title: {text: "GDP in Billions", margin: 70} },
|
77
|
+
{title: {text: "Population in Millions"}, opposite: true},
|
58
78
|
]
|
59
79
|
|
60
|
-
f.legend(:
|
61
|
-
f.chart({:
|
80
|
+
f.legend(align: 'right', verticalAlign: 'top', y: 75, x: -50, layout: 'vertical')
|
81
|
+
f.chart({defaultSeriesType: "column"})
|
82
|
+
end
|
83
|
+
|
84
|
+
@chart_globals = LazyHighCharts::HighChartGlobals.new do |f|
|
85
|
+
f.global(useUTC: false)
|
86
|
+
f.chart(
|
87
|
+
backgroundColor: {
|
88
|
+
linearGradient: [0, 0, 500, 500],
|
89
|
+
stops: [
|
90
|
+
[0, "rgb(255, 255, 255)"],
|
91
|
+
[1, "rgb(240, 240, 255)"]
|
92
|
+
]
|
93
|
+
},
|
94
|
+
borderWidth: 2,
|
95
|
+
plotBackgroundColor: "rgba(255, 255, 255, .9)",
|
96
|
+
plotShadow: true,
|
97
|
+
plotBorderWidth: 1
|
98
|
+
)
|
99
|
+
f.lang(thousandsSep: ",")
|
100
|
+
f.colors(["#90ed7d", "#f7a35c", "#8085e9", "#f15c80", "#e4d354"])
|
62
101
|
end
|
63
102
|
```
|
64
103
|
|
65
104
|
### View Helpers:
|
66
105
|
```ruby
|
67
|
-
<%=
|
106
|
+
<%= high_chart_globals(@chart_globals) %>
|
107
|
+
<%= high_chart("some_id", @chart) %>
|
68
108
|
```
|
69
109
|
|
70
|
-
|
110
|
+
`high_chart_globals` is optional. Use it to set the global options of all charts that are currently displayed on the page. More info [here](http://api.highcharts.com/highcharts#global).
|
111
|
+
|
112
|
+
### No Data
|
113
|
+
|
114
|
+
When your series has no data and you want to display a message using Highcharts' noData feature ([Highcarts doc](http://api.highcharts.com/highcharts/noData)) you have to include the `no-data-to-display.js` file like so:
|
115
|
+
|
116
|
+
````
|
117
|
+
//= require highcharts/highcharts
|
118
|
+
//= require highcharts/highcharts-more
|
119
|
+
//= require highcharts/modules/no-data-to-display
|
120
|
+
````
|
121
|
+
|
122
|
+
You can then set the actual message that is displayed like so:
|
123
|
+
|
124
|
+
````
|
125
|
+
@chart = LazyHighCharts::HighChart.new('graph') do |f|
|
126
|
+
f.options[:lang] = { noData: "My beautiful noData message" }
|
127
|
+
f.title(text: nil)
|
128
|
+
f.series([])
|
129
|
+
end
|
130
|
+
````
|
131
|
+
|
132
|
+
|
133
|
+
### Demo projects:
|
71
134
|
|
72
|
-
[Nanoc App](spec/dummy_nanoc
|
135
|
+
[Nanoc App](spec/dummy_nanoc)
|
73
136
|
|
74
|
-
[Rails App](spec/dummy_rails
|
137
|
+
[Rails App](spec/dummy_rails)
|
75
138
|
|
76
|
-
[Sinatra App](spec/dummy_sinatra
|
139
|
+
[Sinatra App](spec/dummy_sinatra)
|
77
140
|
|
78
141
|
|
79
|
-
### Update to latest js library.
|
142
|
+
### Update to latest js library. Additional command line
|
80
143
|
|
81
144
|
To update to the current highcharts.js directly from http://code.highcharts.com/", you can always run
|
82
145
|
|
@@ -97,7 +160,7 @@ We're open to any contribution. It has to be tested properly though.
|
|
97
160
|
* Test your changes. We won't accept any untested contributions (except if they're not testable).
|
98
161
|
* Create an [issue](https://github.com/michelson/lazy_high_charts/issues) with a link to your commits.
|
99
162
|
|
100
|
-
Thanks for all [
|
163
|
+
Thanks for all [contributors](https://github.com/michelson/lazy_high_charts/contributors)
|
101
164
|
|
102
165
|
## Maintainers
|
103
166
|
* Deshi Xiao [github/xiaods](https://github.com/xiaods)
|
data/lazy_high_charts.gemspec
CHANGED
data/lib/lazy_high_charts.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
require 'action_view'
|
2
|
-
include ActionView::Helpers::TagHelper
|
3
2
|
require 'json'
|
4
3
|
|
5
4
|
require File.join(File.dirname(__FILE__), *%w[lazy_high_charts core_ext string])
|
6
5
|
require File.join(File.dirname(__FILE__), *%w[lazy_high_charts options_key_filter])
|
7
6
|
require File.join(File.dirname(__FILE__), *%w[lazy_high_charts layout_helper])
|
8
7
|
require File.join(File.dirname(__FILE__), *%w[lazy_high_charts high_chart])
|
8
|
+
require File.join(File.dirname(__FILE__), *%w[lazy_high_charts high_chart_globals])
|
9
9
|
if defined?(::Rails::Railtie)
|
10
10
|
require File.join(File.dirname(__FILE__), *%w[lazy_high_charts railtie])
|
11
11
|
require File.join(File.dirname(__FILE__), *%w[lazy_high_charts engine]) if ::Rails.version.to_s >= '3.1'
|
@@ -34,7 +34,6 @@ module LazyHighCharts
|
|
34
34
|
self.subtitle({})
|
35
35
|
end
|
36
36
|
|
37
|
-
|
38
37
|
# Pass other methods through to the javascript high_chart object.
|
39
38
|
#
|
40
39
|
# For instance: <tt>high_chart.grid(:color => "#699")</tt>
|
@@ -66,11 +65,13 @@ module LazyHighCharts
|
|
66
65
|
#
|
67
66
|
# @return [Hash] options JSON options hash
|
68
67
|
def full_options
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
68
|
+
options_collection_as_string self
|
69
|
+
end
|
70
|
+
|
71
|
+
def to_json
|
72
|
+
data = self.options.clone
|
73
|
+
data[:series] = self.series_data.clone
|
74
|
+
data
|
74
75
|
end
|
75
76
|
|
76
77
|
private
|
@@ -82,7 +83,7 @@ module LazyHighCharts
|
|
82
83
|
end
|
83
84
|
|
84
85
|
def series_options
|
85
|
-
@options.reject { |k,
|
86
|
+
@options.reject { |k, _| SERIES_OPTIONS.include?(k.to_s) == false }
|
86
87
|
end
|
87
88
|
|
88
89
|
def merge_options(name, opts)
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module LazyHighCharts
|
2
|
+
class HighChartGlobals
|
3
|
+
include LayoutHelper
|
4
|
+
|
5
|
+
attr_accessor :options
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
self.tap do |chart_globals|
|
9
|
+
chart_globals.options ||= {}
|
10
|
+
yield chart_globals if block_given?
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
# Pass other methods through to the high_chart_globals object.
|
15
|
+
#
|
16
|
+
# For instance: <tt>high_chart_globals.global(:useUTC => false)</tt>
|
17
|
+
def method_missing(meth, opts = {})
|
18
|
+
if meth.to_s == 'to_ary'
|
19
|
+
super
|
20
|
+
end
|
21
|
+
merge_options meth, opts
|
22
|
+
end
|
23
|
+
|
24
|
+
def merge_options(name, opts)
|
25
|
+
@options.merge! name => opts
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
module LazyHighCharts
|
4
4
|
module LayoutHelper
|
5
|
+
include ActionView::Helpers::TagHelper
|
5
6
|
|
6
7
|
def high_chart(placeholder, object, &block)
|
7
8
|
object.html_options.merge!({:id => placeholder})
|
@@ -15,6 +16,10 @@ module LazyHighCharts
|
|
15
16
|
high_graph_stock(placeholder, object, &block).concat(content_tag("div", "", object.html_options))
|
16
17
|
end
|
17
18
|
|
19
|
+
def high_chart_globals(object)
|
20
|
+
build_globals_html_output(object)
|
21
|
+
end
|
22
|
+
|
18
23
|
def high_graph(placeholder, object, &block)
|
19
24
|
build_html_output("Chart", placeholder, object, &block)
|
20
25
|
end
|
@@ -23,59 +28,27 @@ module LazyHighCharts
|
|
23
28
|
build_html_output("StockChart", placeholder, object, &block)
|
24
29
|
end
|
25
30
|
|
26
|
-
|
27
|
-
options_collection = [generate_json_from_hash(OptionsKeyFilter.filter(object.options))]
|
28
|
-
options_collection << %|"series": [#{generate_json_from_array(object.series_data)}]|
|
31
|
+
private
|
29
32
|
|
33
|
+
def build_html_output(type, placeholder, object, &block)
|
30
34
|
core_js =<<-EOJS
|
31
|
-
var options =
|
35
|
+
var options = #{options_collection_as_string(object)};
|
32
36
|
#{capture(&block) if block_given?}
|
33
37
|
window.chart_#{placeholder.underscore} = new Highcharts.#{type}(options);
|
34
38
|
EOJS
|
35
39
|
|
36
|
-
|
37
|
-
|
38
|
-
<script type="text/javascript">
|
39
|
-
(function() {
|
40
|
-
#{core_js}
|
41
|
-
})()
|
42
|
-
</script>
|
43
|
-
EOJS
|
44
|
-
elsif defined?(Turbolinks) && request.headers["X-XHR-Referer"]
|
45
|
-
graph =<<-EOJS
|
46
|
-
<script type="text/javascript">
|
47
|
-
(function() {
|
48
|
-
var f = function(){
|
49
|
-
document.removeEventListener('page:load', f, true);
|
50
|
-
#{core_js}
|
51
|
-
};
|
52
|
-
document.addEventListener('page:load', f, true);
|
53
|
-
})()
|
54
|
-
</script>
|
55
|
-
EOJS
|
56
|
-
else
|
57
|
-
graph =<<-EOJS
|
58
|
-
<script type="text/javascript">
|
59
|
-
(function() {
|
60
|
-
var onload = window.onload;
|
61
|
-
window.onload = function(){
|
62
|
-
if (typeof onload == "function") onload();
|
63
|
-
#{core_js}
|
64
|
-
};
|
65
|
-
})()
|
66
|
-
</script>
|
67
|
-
EOJS
|
68
|
-
end
|
40
|
+
encapsulate_js core_js
|
41
|
+
end
|
69
42
|
|
70
|
-
|
71
|
-
|
72
|
-
else
|
73
|
-
return graph
|
74
|
-
end
|
43
|
+
def build_globals_html_output(object)
|
44
|
+
options_collection = [generate_json_from_hash(OptionsKeyFilter.filter(object.options))]
|
75
45
|
|
76
|
-
|
46
|
+
core_js =<<-EOJS
|
47
|
+
Highcharts.setOptions({ #{options_collection.join(',')} });
|
48
|
+
EOJS
|
77
49
|
|
78
|
-
|
50
|
+
encapsulate_js core_js
|
51
|
+
end
|
79
52
|
|
80
53
|
def generate_json_from_hash hash
|
81
54
|
hash.each_pair.map do |key, value|
|
@@ -100,6 +73,77 @@ module LazyHighCharts
|
|
100
73
|
array.map { |value| generate_json_from_value(value) }.join(",")
|
101
74
|
end
|
102
75
|
|
76
|
+
def request_is_xhr?
|
77
|
+
defined?(request) && request.respond_to?(:xhr?) && request.xhr?
|
78
|
+
end
|
79
|
+
|
80
|
+
def request_is_referrer?
|
81
|
+
defined?(request) && request.respond_to?(:headers) && request.headers["X-XHR-Referer"]
|
82
|
+
end
|
83
|
+
|
84
|
+
def request_turbolinks_5_tureferrer?
|
85
|
+
defined?(request) && request.respond_to?(:headers) && request.headers["Turbolinks-Referrer"]
|
86
|
+
end
|
87
|
+
|
88
|
+
def options_collection_as_string object
|
89
|
+
options_collection = [generate_json_from_hash(OptionsKeyFilter.filter(object.options))]
|
90
|
+
options_collection << %|"series": [#{generate_json_from_array(object.series_data)}]|
|
91
|
+
"{ #{options_collection.join(',')} }"
|
92
|
+
end
|
93
|
+
|
94
|
+
def encapsulate_js(core_js)
|
95
|
+
if request_is_xhr?
|
96
|
+
js_output = "#{js_start} #{core_js} #{js_end}"
|
97
|
+
# Turbolinks.version < 5
|
98
|
+
elsif defined?(Turbolinks) && request_is_referrer?
|
99
|
+
js_output =<<-EOJS
|
100
|
+
#{js_start}
|
101
|
+
var f = function(){
|
102
|
+
document.removeEventListener('page:load', f, true);
|
103
|
+
#{core_js}
|
104
|
+
};
|
105
|
+
document.addEventListener('page:load', f, true);
|
106
|
+
#{js_end}
|
107
|
+
EOJS
|
108
|
+
# Turbolinks >= 5
|
109
|
+
elsif defined?(Turbolinks) && request_turbolinks_5_tureferrer?
|
110
|
+
js_output =<<-EOJS
|
111
|
+
#{js_start}
|
112
|
+
document.addEventListener("turbolinks:load", function() {
|
113
|
+
#{core_js}
|
114
|
+
});
|
115
|
+
#{js_end}
|
116
|
+
EOJS
|
117
|
+
else
|
118
|
+
js_output =<<-EOJS
|
119
|
+
#{js_start}
|
120
|
+
window.addEventListener('load', function() {
|
121
|
+
#{core_js}
|
122
|
+
});
|
123
|
+
#{js_end}
|
124
|
+
EOJS
|
125
|
+
end
|
126
|
+
|
127
|
+
if defined?(raw)
|
128
|
+
return raw(js_output)
|
129
|
+
else
|
130
|
+
return js_output
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
def js_start
|
135
|
+
<<-EOJS
|
136
|
+
<script type="text/javascript">
|
137
|
+
(function() {
|
138
|
+
EOJS
|
139
|
+
end
|
140
|
+
|
141
|
+
def js_end
|
142
|
+
<<-EOJS
|
143
|
+
})()
|
144
|
+
</script>
|
145
|
+
EOJS
|
146
|
+
end
|
103
147
|
end
|
104
148
|
end
|
105
149
|
|