lazy_high_charts 1.5.2 → 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
+
[](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
|
[](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
|
|