chartkick 3.2.0 → 3.4.0
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 +4 -4
- data/CHANGELOG.md +74 -47
- data/README.md +45 -16
- data/lib/chartkick/helper.rb +31 -16
- data/lib/chartkick/version.rb +1 -1
- data/vendor/assets/javascripts/Chart.bundle.js +4432 -2965
- data/vendor/assets/javascripts/chartkick.js +202 -30
- metadata +3 -4
- data/CONTRIBUTING.md +0 -46
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5afacd4c10d0cfddc6a2a660efead206ee042e80d48dd749f9de79feb365c1fd
|
|
4
|
+
data.tar.gz: c7fc99b0b2b467a6326df99f5832de2b3674f5f80415749cf57177142eecfc45
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 75b1793b427c5d9d4604b813773253adb864b6134fad48f952c72377f75da40c8daa19eaf06fd7ce0b2da31a1ba436cfe54bde318ac849ec2080652582ac7076
|
|
7
|
+
data.tar.gz: 8f47e12f6e9c746871d02f0d5bd3093da1017c5a222837696b5b0d7b7e4008c400c8556e4f85ec7b0ccd79c15a9cb510a91a7d9ecf896d1a106b7c82e68ddc36
|
data/CHANGELOG.md
CHANGED
|
@@ -1,23 +1,50 @@
|
|
|
1
|
-
## 3.
|
|
1
|
+
## 3.4.0 (2020-08-04)
|
|
2
|
+
|
|
3
|
+
- Fixed CSS injection with `width` and `height` options
|
|
4
|
+
|
|
5
|
+
## 3.3.2 (2020-07-23)
|
|
6
|
+
|
|
7
|
+
- Updated Chartkick.js to 3.2.1
|
|
8
|
+
|
|
9
|
+
## 3.3.1 (2019-12-26)
|
|
10
|
+
|
|
11
|
+
- Updated Chart.js to 2.9.3
|
|
12
|
+
- Fixed deprecating warnings in Ruby 2.7
|
|
13
|
+
|
|
14
|
+
## 3.3.0 (2019-11-09)
|
|
15
|
+
|
|
16
|
+
- Updated Chartkick.js to 3.2.0
|
|
17
|
+
- Rolled back Chart.js to 2.8.0 due to legend change
|
|
18
|
+
|
|
19
|
+
## 3.2.2 (2019-10-27)
|
|
20
|
+
|
|
21
|
+
- Updated Chartkick.js to 3.1.3
|
|
22
|
+
- Updated Chart.js to 2.9.1
|
|
23
|
+
|
|
24
|
+
## 3.2.1 (2019-07-15)
|
|
25
|
+
|
|
26
|
+
- Updated Chartkick.js to 3.1.1
|
|
27
|
+
|
|
28
|
+
## 3.2.0 (2019-06-04)
|
|
2
29
|
|
|
3
30
|
- Fixed XSS vulnerability - see [#488](https://github.com/ankane/chartkick/issues/488)
|
|
4
31
|
|
|
5
|
-
## 3.1.0
|
|
32
|
+
## 3.1.0 (2019-05-26)
|
|
6
33
|
|
|
7
34
|
- Updated Chartkick.js to 3.1.0
|
|
8
35
|
- Updated Chart.js to 2.8.0
|
|
9
36
|
|
|
10
|
-
## 3.0.2
|
|
37
|
+
## 3.0.2 (2019-01-03)
|
|
11
38
|
|
|
12
39
|
- Fixed error with `nonce` option with Secure Headers and Rails < 5.2
|
|
13
40
|
- Updated Chartkick.js to 3.0.2
|
|
14
41
|
- Updated Chart.js to 2.7.3
|
|
15
42
|
|
|
16
|
-
## 3.0.1
|
|
43
|
+
## 3.0.1 (2018-08-13)
|
|
17
44
|
|
|
18
45
|
- Updated Chartkick.js to 3.0.1
|
|
19
46
|
|
|
20
|
-
## 3.0.0
|
|
47
|
+
## 3.0.0 (2018-08-08)
|
|
21
48
|
|
|
22
49
|
- Updated Chartkick.js to 3.0.0
|
|
23
50
|
- Added `code` option
|
|
@@ -31,55 +58,55 @@ Breaking changes
|
|
|
31
58
|
- Removed `window.Chartkick = {...}` way to set config - use `Chartkick.configure` instead
|
|
32
59
|
- Removed support for the Google Charts jsapi loader - use loader.js instead
|
|
33
60
|
|
|
34
|
-
## 2.3.5
|
|
61
|
+
## 2.3.5 (2018-06-15)
|
|
35
62
|
|
|
36
63
|
- Updated Chartkick.js to 2.3.6
|
|
37
64
|
|
|
38
|
-
## 2.3.4
|
|
65
|
+
## 2.3.4 (2018-04-10)
|
|
39
66
|
|
|
40
67
|
- Updated Chartkick.js to 2.3.5
|
|
41
68
|
- Updated Chart.js to 2.7.2
|
|
42
69
|
|
|
43
|
-
## 2.3.3
|
|
70
|
+
## 2.3.3 (2018-03-25)
|
|
44
71
|
|
|
45
72
|
- Updated Chartkick.js to 2.3.4
|
|
46
73
|
|
|
47
|
-
## 2.3.2
|
|
74
|
+
## 2.3.2 (2018-02-26)
|
|
48
75
|
|
|
49
76
|
- Updated Chartkick.js to 2.3.3
|
|
50
77
|
|
|
51
|
-
## 2.3.1
|
|
78
|
+
## 2.3.1 (2018-02-23)
|
|
52
79
|
|
|
53
80
|
- Updated Chartkick.js to 2.3.1
|
|
54
81
|
|
|
55
|
-
## 2.3.0
|
|
82
|
+
## 2.3.0 (2018-02-21)
|
|
56
83
|
|
|
57
84
|
- Fixed deep merge error for non-Rails apps
|
|
58
85
|
- Updated Chartkick.js to 2.3.0
|
|
59
86
|
|
|
60
|
-
## 2.2.5
|
|
87
|
+
## 2.2.5 (2017-10-28)
|
|
61
88
|
|
|
62
89
|
- Updated Chart.js to 2.7.1
|
|
63
90
|
|
|
64
|
-
## 2.2.4
|
|
91
|
+
## 2.2.4 (2017-05-14)
|
|
65
92
|
|
|
66
93
|
- Added compatibility with Rails API
|
|
67
94
|
- Updated Chartkick.js to 2.2.4
|
|
68
95
|
|
|
69
|
-
## 2.2.3
|
|
96
|
+
## 2.2.3 (2017-02-22)
|
|
70
97
|
|
|
71
98
|
- Updated Chartkick.js to 2.2.3
|
|
72
99
|
- Updated Chart.js to 2.5.0
|
|
73
100
|
|
|
74
|
-
## 2.2.2
|
|
101
|
+
## 2.2.2 (2017-01-07)
|
|
75
102
|
|
|
76
103
|
- Updated Chartkick.js to 2.2.2
|
|
77
104
|
|
|
78
|
-
## 2.2.1
|
|
105
|
+
## 2.2.1 (2016-12-05)
|
|
79
106
|
|
|
80
107
|
- Updated Chartkick.js to 2.2.1
|
|
81
108
|
|
|
82
|
-
## 2.2.0
|
|
109
|
+
## 2.2.0 (2016-12-03)
|
|
83
110
|
|
|
84
111
|
- Updated Chartkick.js to 2.2.0
|
|
85
112
|
- Improved JavaScript API
|
|
@@ -87,59 +114,59 @@ Breaking changes
|
|
|
87
114
|
- Added `refresh` option
|
|
88
115
|
- Added `donut` option to pie chart
|
|
89
116
|
|
|
90
|
-
## 2.1.3
|
|
117
|
+
## 2.1.3 (2016-11-29)
|
|
91
118
|
|
|
92
119
|
- Updated Chartkick.js to 2.1.2 - fixes missing zero values for Chart.js
|
|
93
120
|
|
|
94
|
-
## 2.1.2
|
|
121
|
+
## 2.1.2 (2016-11-28)
|
|
95
122
|
|
|
96
123
|
- Added `defer` option
|
|
97
124
|
- Added `nonce` option
|
|
98
125
|
- Updated Chartkick.js to 2.1.1
|
|
99
126
|
|
|
100
|
-
## 2.1.1
|
|
127
|
+
## 2.1.1 (2016-09-11)
|
|
101
128
|
|
|
102
129
|
- Use custom version of Chart.js to fix label overlap
|
|
103
130
|
|
|
104
|
-
## 2.1.0
|
|
131
|
+
## 2.1.0 (2016-09-10)
|
|
105
132
|
|
|
106
133
|
- Added basic support for new Google Charts loader
|
|
107
134
|
- Added `configure` function
|
|
108
135
|
- Dropped jQuery and Zepto dependencies for AJAX
|
|
109
136
|
- Updated Chart.js to 2.2.2
|
|
110
137
|
|
|
111
|
-
## 2.0.2
|
|
138
|
+
## 2.0.2 (2016-08-11)
|
|
112
139
|
|
|
113
140
|
- Updated Chartkick.js to 2.0.1
|
|
114
141
|
- Updated Chart.js to 2.2.1
|
|
115
142
|
|
|
116
|
-
## 2.0.1
|
|
143
|
+
## 2.0.1 (2016-07-29)
|
|
117
144
|
|
|
118
145
|
- Small Chartkick.js fixes
|
|
119
146
|
- Updated Chart.js to 2.2.0
|
|
120
147
|
|
|
121
|
-
## 2.0.0
|
|
148
|
+
## 2.0.0 (2016-05-30)
|
|
122
149
|
|
|
123
150
|
- Chart.js is now the default adapter - yay open source!
|
|
124
151
|
- Axis types are automatically detected - no need for `discrete: true`
|
|
125
152
|
- Better date support
|
|
126
153
|
- New JavaScript API
|
|
127
154
|
|
|
128
|
-
## 1.5.2
|
|
155
|
+
## 1.5.2 (2016-05-05)
|
|
129
156
|
|
|
130
157
|
- Fixed Sprockets error
|
|
131
158
|
|
|
132
|
-
## 1.5.1
|
|
159
|
+
## 1.5.1 (2016-05-03)
|
|
133
160
|
|
|
134
161
|
- Updated chartkick.js to latest version
|
|
135
162
|
- Included `Chart.bundle.js`
|
|
136
163
|
|
|
137
|
-
## 1.5.0
|
|
164
|
+
## 1.5.0 (2016-05-01)
|
|
138
165
|
|
|
139
166
|
- Added Chart.js adapter **beta**
|
|
140
167
|
- Fixed line height on timeline charts
|
|
141
168
|
|
|
142
|
-
## 1.4.2
|
|
169
|
+
## 1.4.2 (2016-02-29)
|
|
143
170
|
|
|
144
171
|
- Added `width` option
|
|
145
172
|
- Added `label` option
|
|
@@ -148,86 +175,86 @@ Breaking changes
|
|
|
148
175
|
- Better tooltip for dates for Google Charts
|
|
149
176
|
- Fixed asset precompilation issue with Rails 5
|
|
150
177
|
|
|
151
|
-
## 1.4.1
|
|
178
|
+
## 1.4.1 (2015-09-07)
|
|
152
179
|
|
|
153
180
|
- Fixed regression with `min: nil`
|
|
154
181
|
|
|
155
|
-
## 1.4.0
|
|
182
|
+
## 1.4.0 (2015-08-31)
|
|
156
183
|
|
|
157
184
|
- Added scatter chart
|
|
158
185
|
- Added axis titles
|
|
159
186
|
|
|
160
|
-
## 1.3.2
|
|
187
|
+
## 1.3.2 (2014-07-04)
|
|
161
188
|
|
|
162
189
|
- Fixed `except` error when not using Rails
|
|
163
190
|
|
|
164
|
-
## 1.3.1
|
|
191
|
+
## 1.3.1 (2014-06-30)
|
|
165
192
|
|
|
166
193
|
- Fixed blank screen bug
|
|
167
194
|
- Fixed language support
|
|
168
195
|
|
|
169
|
-
## 1.3.0
|
|
196
|
+
## 1.3.0 (2014-06-28)
|
|
170
197
|
|
|
171
198
|
- Added timelines
|
|
172
199
|
|
|
173
|
-
## 1.2.5
|
|
200
|
+
## 1.2.5 (2014-06-12)
|
|
174
201
|
|
|
175
202
|
- Added support for multiple groups
|
|
176
203
|
- Added `html` option
|
|
177
204
|
|
|
178
|
-
## 1.2.4
|
|
205
|
+
## 1.2.4 (2014-03-24)
|
|
179
206
|
|
|
180
207
|
- Added global options
|
|
181
208
|
- Added `colors` option
|
|
182
209
|
|
|
183
|
-
## 1.2.3
|
|
210
|
+
## 1.2.3 (2014-03-23)
|
|
184
211
|
|
|
185
212
|
- Added geo chart
|
|
186
213
|
- Added `discrete` option
|
|
187
214
|
|
|
188
|
-
## 1.2.2
|
|
215
|
+
## 1.2.2 (2014-02-23)
|
|
189
216
|
|
|
190
217
|
- Added global `content_for` option
|
|
191
218
|
- Added `stacked` option
|
|
192
219
|
|
|
193
|
-
## 1.2.1
|
|
220
|
+
## 1.2.1 (2013-12-08)
|
|
194
221
|
|
|
195
222
|
- Added localization for Google Charts
|
|
196
223
|
|
|
197
|
-
## 1.2.0
|
|
224
|
+
## 1.2.0 (2013-07-27)
|
|
198
225
|
|
|
199
226
|
- Added bar chart and area chart
|
|
200
227
|
- Resize Google Charts on window resize
|
|
201
228
|
|
|
202
|
-
## 1.1.3
|
|
229
|
+
## 1.1.3 (2013-06-26)
|
|
203
230
|
|
|
204
231
|
- Added content_for option
|
|
205
232
|
|
|
206
|
-
## 1.1.2
|
|
233
|
+
## 1.1.2 (2013-06-11)
|
|
207
234
|
|
|
208
235
|
- Updated chartkick.js to v1.0.1
|
|
209
236
|
|
|
210
|
-
## 1.1.1
|
|
237
|
+
## 1.1.1 (2013-06-10)
|
|
211
238
|
|
|
212
239
|
- Added support for Sinatra
|
|
213
240
|
|
|
214
|
-
## 1.1.0
|
|
241
|
+
## 1.1.0 (2013-06-03)
|
|
215
242
|
|
|
216
243
|
- Added support for Padrino and Rails 2.3+
|
|
217
244
|
|
|
218
|
-
## 1.0.1
|
|
245
|
+
## 1.0.1 (2013-05-23)
|
|
219
246
|
|
|
220
247
|
- Updated chartkick.js to v1.0.1
|
|
221
248
|
|
|
222
|
-
## 1.0.0
|
|
249
|
+
## 1.0.0 (2013-05-15)
|
|
223
250
|
|
|
224
251
|
- Use semantic versioning (no changes)
|
|
225
252
|
|
|
226
|
-
## 0.0.5
|
|
253
|
+
## 0.0.5 (2013-05-14)
|
|
227
254
|
|
|
228
255
|
- Removed `:min => 0` default for charts with negative values
|
|
229
256
|
- Show legend when data given in `{:name => "", :data => {}}` format
|
|
230
257
|
|
|
231
|
-
## 0.0.4
|
|
258
|
+
## 0.0.4 (2013-05-13)
|
|
232
259
|
|
|
233
260
|
- Fix for `Uncaught ReferenceError: Chartkick is not defined` when chartkick.js is included in the `<head>`
|
data/README.md
CHANGED
|
@@ -8,6 +8,8 @@ Create beautiful JavaScript charts with one line of Ruby. No more fighting with
|
|
|
8
8
|
|
|
9
9
|
:two_hearts: A perfect companion to [Groupdate](https://github.com/ankane/groupdate), [Hightop](https://github.com/ankane/hightop), and [ActiveMedian](https://github.com/ankane/active_median)
|
|
10
10
|
|
|
11
|
+
[](https://travis-ci.org/ankane/chartkick)
|
|
12
|
+
|
|
11
13
|
## Quick Start
|
|
12
14
|
|
|
13
15
|
Add this line to your application's Gemfile:
|
|
@@ -242,6 +244,30 @@ Set a decimal separator - *Chart.js, Highcharts*
|
|
|
242
244
|
<%= line_chart data, decimal: "," %>
|
|
243
245
|
```
|
|
244
246
|
|
|
247
|
+
Set significant digits - *Chart.js, Highcharts*
|
|
248
|
+
|
|
249
|
+
```erb
|
|
250
|
+
<%= line_chart data, precision: 3 %>
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
Set rounding - *Chart.js, Highcharts*
|
|
254
|
+
|
|
255
|
+
```erb
|
|
256
|
+
<%= line_chart data, round: 2 %>
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
Show insignificant zeros, useful for currency - *Chart.js, Highcharts*
|
|
260
|
+
|
|
261
|
+
```erb
|
|
262
|
+
<%= line_chart data, round: 2, zeros: true %>
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
Friendly byte sizes - *Chart.js 2.8+*
|
|
266
|
+
|
|
267
|
+
```erb
|
|
268
|
+
<%= line_chart data, bytes: true %>
|
|
269
|
+
```
|
|
270
|
+
|
|
245
271
|
Show a message when data is empty
|
|
246
272
|
|
|
247
273
|
```erb
|
|
@@ -299,7 +325,7 @@ Then, in your layout, use:
|
|
|
299
325
|
<%= yield :charts_js %>
|
|
300
326
|
```
|
|
301
327
|
|
|
302
|
-
|
|
328
|
+
For Padrino, use `yield_content` instead of `yield`.
|
|
303
329
|
|
|
304
330
|
This is great for including all of your JavaScript at the bottom of the page.
|
|
305
331
|
|
|
@@ -346,9 +372,7 @@ If you want to use the charting library directly, get the code with:
|
|
|
346
372
|
<%= line_chart data, code: true %>
|
|
347
373
|
```
|
|
348
374
|
|
|
349
|
-
The code will be logged to the JavaScript console.
|
|
350
|
-
|
|
351
|
-
> JavaScript functions cannot be logged, so it may not be identical.
|
|
375
|
+
The code will be logged to the JavaScript console. JavaScript functions cannot be logged, so it may not be identical.
|
|
352
376
|
|
|
353
377
|
### Download Charts
|
|
354
378
|
|
|
@@ -360,7 +384,7 @@ Give users the ability to download charts. It all happens in the browser - no se
|
|
|
360
384
|
<%= line_chart data, download: true %>
|
|
361
385
|
```
|
|
362
386
|
|
|
363
|
-
|
|
387
|
+
Safari will open the image in a new window instead of downloading.
|
|
364
388
|
|
|
365
389
|
Set the filename
|
|
366
390
|
|
|
@@ -394,7 +418,7 @@ Next, choose your charting library.
|
|
|
394
418
|
- [Google Charts](#google-charts)
|
|
395
419
|
- [Highcharts](#highcharts)
|
|
396
420
|
|
|
397
|
-
|
|
421
|
+
In the instructions below, `application.js` must be included **before** the charts in your views, unless using the `:content_for` option.
|
|
398
422
|
|
|
399
423
|
### Chart.js
|
|
400
424
|
|
|
@@ -538,6 +562,12 @@ Redraw the chart with:
|
|
|
538
562
|
chart.redraw()
|
|
539
563
|
```
|
|
540
564
|
|
|
565
|
+
Destroy the chart with:
|
|
566
|
+
|
|
567
|
+
```javascript
|
|
568
|
+
chart.destroy()
|
|
569
|
+
```
|
|
570
|
+
|
|
541
571
|
Loop over charts with:
|
|
542
572
|
|
|
543
573
|
```javascript
|
|
@@ -573,14 +603,6 @@ Breaking changes
|
|
|
573
603
|
- Removed `window.Chartkick = {...}` way to set config - use `Chartkick.configure` instead
|
|
574
604
|
- Removed support for the Google Charts jsapi loader - use loader.js instead
|
|
575
605
|
|
|
576
|
-
### 2.0
|
|
577
|
-
|
|
578
|
-
Breaking changes
|
|
579
|
-
|
|
580
|
-
- Chart.js is now the default adapter if multiple are loaded - yay open source!
|
|
581
|
-
- Axis types are automatically detected - no need for `discrete: true`
|
|
582
|
-
- Better date support - dates are no longer treated as UTC
|
|
583
|
-
|
|
584
606
|
## Credits
|
|
585
607
|
|
|
586
608
|
Chartkick uses [iso8601.js](https://github.com/Do/iso8601.js) to parse dates and times.
|
|
@@ -589,8 +611,6 @@ Chartkick uses [iso8601.js](https://github.com/Do/iso8601.js) to parse dates and
|
|
|
589
611
|
|
|
590
612
|
View the [changelog](https://github.com/ankane/chartkick/blob/master/CHANGELOG.md)
|
|
591
613
|
|
|
592
|
-
Chartkick follows [Semantic Versioning](https://semver.org/)
|
|
593
|
-
|
|
594
614
|
## Contributing
|
|
595
615
|
|
|
596
616
|
Everyone is encouraged to help improve this project. Here are a few ways you can help:
|
|
@@ -599,3 +619,12 @@ Everyone is encouraged to help improve this project. Here are a few ways you can
|
|
|
599
619
|
- Fix bugs and [submit pull requests](https://github.com/ankane/chartkick/pulls)
|
|
600
620
|
- Write, clarify, or fix documentation
|
|
601
621
|
- Suggest or add new features
|
|
622
|
+
|
|
623
|
+
To get started with development:
|
|
624
|
+
|
|
625
|
+
```sh
|
|
626
|
+
git clone https://github.com/ankane/chartkick.git
|
|
627
|
+
cd chartkick
|
|
628
|
+
bundle install
|
|
629
|
+
bundle exec rake test
|
|
630
|
+
```
|
data/lib/chartkick/helper.rb
CHANGED
|
@@ -4,35 +4,35 @@ require "erb"
|
|
|
4
4
|
module Chartkick
|
|
5
5
|
module Helper
|
|
6
6
|
def line_chart(data_source, **options)
|
|
7
|
-
chartkick_chart "LineChart", data_source, options
|
|
7
|
+
chartkick_chart "LineChart", data_source, **options
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
def pie_chart(data_source, **options)
|
|
11
|
-
chartkick_chart "PieChart", data_source, options
|
|
11
|
+
chartkick_chart "PieChart", data_source, **options
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def column_chart(data_source, **options)
|
|
15
|
-
chartkick_chart "ColumnChart", data_source, options
|
|
15
|
+
chartkick_chart "ColumnChart", data_source, **options
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
def bar_chart(data_source, **options)
|
|
19
|
-
chartkick_chart "BarChart", data_source, options
|
|
19
|
+
chartkick_chart "BarChart", data_source, **options
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
def area_chart(data_source, **options)
|
|
23
|
-
chartkick_chart "AreaChart", data_source, options
|
|
23
|
+
chartkick_chart "AreaChart", data_source, **options
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
def scatter_chart(data_source, **options)
|
|
27
|
-
chartkick_chart "ScatterChart", data_source, options
|
|
27
|
+
chartkick_chart "ScatterChart", data_source, **options
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
def geo_chart(data_source, **options)
|
|
31
|
-
chartkick_chart "GeoChart", data_source, options
|
|
31
|
+
chartkick_chart "GeoChart", data_source, **options
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
def timeline(data_source, **options)
|
|
35
|
-
chartkick_chart "Timeline", data_source, options
|
|
35
|
+
chartkick_chart "Timeline", data_source, **options
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
private
|
|
@@ -41,8 +41,8 @@ module Chartkick
|
|
|
41
41
|
@chartkick_chart_id ||= 0
|
|
42
42
|
options = chartkick_deep_merge(Chartkick.options, options)
|
|
43
43
|
element_id = options.delete(:id) || "chart-#{@chartkick_chart_id += 1}"
|
|
44
|
-
height = options.delete(:height) || "300px"
|
|
45
|
-
width = options.delete(:width) || "100%"
|
|
44
|
+
height = (options.delete(:height) || "300px").to_s
|
|
45
|
+
width = (options.delete(:width) || "100%").to_s
|
|
46
46
|
defer = !!options.delete(:defer)
|
|
47
47
|
# content_for: nil must override default
|
|
48
48
|
content_for = options.key?(:content_for) ? options.delete(:content_for) : Chartkick.content_for
|
|
@@ -63,18 +63,31 @@ module Chartkick
|
|
|
63
63
|
|
|
64
64
|
# html vars
|
|
65
65
|
html_vars = {
|
|
66
|
-
id: element_id
|
|
67
|
-
height: height,
|
|
68
|
-
width: width
|
|
66
|
+
id: element_id
|
|
69
67
|
}
|
|
70
68
|
html_vars.each_key do |k|
|
|
71
69
|
html_vars[k] = ERB::Util.html_escape(html_vars[k])
|
|
72
70
|
end
|
|
73
|
-
|
|
71
|
+
|
|
72
|
+
# css vars
|
|
73
|
+
css_vars = {
|
|
74
|
+
height: height,
|
|
75
|
+
width: width
|
|
76
|
+
}
|
|
77
|
+
css_vars.each_key do |k|
|
|
78
|
+
# limit to alphanumeric and % for simplicity
|
|
79
|
+
# this prevents things like calc() but safety is the priority
|
|
80
|
+
raise ArgumentError, "Invalid #{k}" unless css_vars[k] =~ /\A[a-zA-Z0-9%]*\z/
|
|
81
|
+
# we limit above, but escape for safety as fail-safe
|
|
82
|
+
# to prevent XSS injection in worse-case scenario
|
|
83
|
+
css_vars[k] = ERB::Util.html_escape(css_vars[k])
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
html = (options.delete(:html) || %(<div id="%{id}" style="height: %{height}; width: %{width}; text-align: center; color: #999; line-height: %{height}; font-size: 14px; font-family: 'Lucida Grande', 'Lucida Sans Unicode', Verdana, Arial, Helvetica, sans-serif;">Loading...</div>)) % html_vars.merge(css_vars)
|
|
74
87
|
|
|
75
88
|
# js vars
|
|
76
89
|
js_vars = {
|
|
77
|
-
type: klass,
|
|
90
|
+
type: klass.to_json,
|
|
78
91
|
id: element_id.to_json,
|
|
79
92
|
data: data_source.respond_to?(:chart_json) ? data_source.chart_json : data_source.to_json,
|
|
80
93
|
options: options.to_json
|
|
@@ -82,9 +95,10 @@ module Chartkick
|
|
|
82
95
|
js_vars.each_key do |k|
|
|
83
96
|
js_vars[k] = chartkick_json_escape(js_vars[k])
|
|
84
97
|
end
|
|
85
|
-
createjs = "new Chartkick
|
|
98
|
+
createjs = "new Chartkick[%{type}](%{id}, %{data}, %{options});" % js_vars
|
|
86
99
|
|
|
87
100
|
if defer
|
|
101
|
+
# TODO remove type in 4.0
|
|
88
102
|
js = <<JS
|
|
89
103
|
<script type="text/javascript"#{nonce_html}>
|
|
90
104
|
(function() {
|
|
@@ -100,6 +114,7 @@ module Chartkick
|
|
|
100
114
|
</script>
|
|
101
115
|
JS
|
|
102
116
|
else
|
|
117
|
+
# TODO remove type in 4.0
|
|
103
118
|
js = <<JS
|
|
104
119
|
<script type="text/javascript"#{nonce_html}>
|
|
105
120
|
#{createjs}
|