vega 0.1.3 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c3b596c09118b82dc1166f6413ff31aae7801b79db73f4dc2e09acab9ccfa21a
4
- data.tar.gz: 9ce59baf66bfd278f457a7686d8d8b2e4aa9c6f046d99b1d1184d206b6a680a0
3
+ metadata.gz: 4e3a67fe76080049bf0aece9305b4b75830595582417ae7f041ffef56accae89
4
+ data.tar.gz: c8b284392d1d872ab214ee1a25226d0d682f8e39e5099d4c549ee52be803887a
5
5
  SHA512:
6
- metadata.gz: 79c6c4705a054f0f9b9a4001f10496c1af17440ebf672c77ca856a35c9778c98ed40ce5f31ac90f31b05ec23df9640ff41d070b31b8466e8dec7930b1cf1a56d
7
- data.tar.gz: ff0808b2c0cbaac73e266798cb048c6d0884e36b135f76bc5ebe74af5125a42a7e9a7018c22a7077a4c8530be431171cdc3b6d4a9e28a48643a24772b65537f7
6
+ metadata.gz: 2e9f5e249a6ad941fc37dee172ffdbe9d6d24b20b3376c49557762df5178cdaacdf535cd2d15780aeb0f68865cca23565ae8ecc1c18b47808c4d2c76b78193c1
7
+ data.tar.gz: dc8fa74465709a9ef563b49747efc27be0d93c04c44668e1d05ff049eb7a686030f4323dfb8c0ec3e10d871777719eb1c2bb52c844b851eaec37d29416712bc8
data/CHANGELOG.md CHANGED
@@ -1,3 +1,23 @@
1
+ ## 0.2.3 (2021-11-15)
2
+
3
+ - Updated Vega-Embed to 6.20.1 to fix spec version warnings
4
+ - Fixed error with iRuby
5
+
6
+ ## 0.2.2 (2021-11-06)
7
+
8
+ - Added experimental support for exporting charts
9
+ - Removed automatic pinning for `importmap-rails` (still experimental)
10
+
11
+ ## 0.2.1 (2021-10-24)
12
+
13
+ - Added support for `nil` height
14
+ - Fixed source map warnings
15
+
16
+ ## 0.2.0 (2021-10-23)
17
+
18
+ - Added experimental support for `importmap-rails`
19
+ - Updated Vega to 5.21.0, Vega-Lite to 5.1.1, and Vega-Embed to 6.19.1
20
+
1
21
  ## 0.1.3 (2021-03-14)
2
22
 
3
23
  - Added Vega-Interpreter
data/README.md CHANGED
@@ -6,7 +6,7 @@ Interactive charts for Ruby, powered by [Vega](https://vega.github.io/vega/) and
6
6
 
7
7
  Works with Rails, iRuby, and other frameworks
8
8
 
9
- [![Build Status](https://github.com/ankane/vega/workflows/build/badge.svg?branch=master)](https://github.com/ankane/vega/actions)
9
+ [![Build Status](https://github.com/ankane/vega-ruby/workflows/build/badge.svg?branch=master)](https://github.com/ankane/vega-ruby/actions)
10
10
 
11
11
  ## Installation
12
12
 
@@ -18,11 +18,32 @@ gem 'vega'
18
18
 
19
19
  The follow the instructions for how you plan to use it:
20
20
 
21
+ - [Rails 7 / Importmap](#rails-7--importmap) (experimental)
21
22
  - [Rails 6 / Webpacker](#rails-6--webpacker)
22
23
  - [Rails 5 / Sprockets](#rails-5--sprockets)
23
24
  - [iRuby](#iruby)
24
25
  - [Other](#other)
25
26
 
27
+ ### Rails 7 / Importmap
28
+
29
+ Add to `config/importmap.rb`:
30
+
31
+ ```ruby
32
+ pin "vega", to: "vega.js"
33
+ pin "vega-lite", to: "vega-lite.js"
34
+ pin "vega-embed", to: "vega-embed.js"
35
+ ```
36
+
37
+ And add to `app/javascript/application.js`:
38
+
39
+ ```js
40
+ import "vega"
41
+ import "vega-lite"
42
+ import "vega-embed"
43
+
44
+ window.dispatchEvent(new Event("vega:load"));
45
+ ```
46
+
26
47
  ### Rails 6 / Webpacker
27
48
 
28
49
  Run:
@@ -56,9 +77,9 @@ No additional set up is needed.
56
77
  For Sinatra and other web frameworks, include the Vega JavaScript files on pages with charts:
57
78
 
58
79
  ```html
59
- <script src="https://cdn.jsdelivr.net/npm/vega@5.19.1"></script>
60
- <script src="https://cdn.jsdelivr.net/npm/vega-lite@4.17.0"></script>
61
- <script src="https://cdn.jsdelivr.net/npm/vega-embed@6.15.1"></script>
80
+ <script src="https://cdn.jsdelivr.net/npm/vega@5.21.0"></script>
81
+ <script src="https://cdn.jsdelivr.net/npm/vega-lite@5.1.1"></script>
82
+ <script src="https://cdn.jsdelivr.net/npm/vega-embed@6.19.1"></script>
62
83
  ```
63
84
 
64
85
  ## Getting Started
@@ -294,7 +315,7 @@ You can also create a specification by hand
294
315
 
295
316
  ```ruby
296
317
  spec = {
297
- "$schema" => "https://vega.github.io/schema/vega-lite/v4.json",
318
+ "$schema" => "https://vega.github.io/schema/vega-lite/v5.json",
298
319
  "data" => {"url" => "https://www.example.com"},
299
320
  # ...
300
321
  }
@@ -318,10 +339,48 @@ Get the spec for a chart
318
339
  chart.spec
319
340
  ```
320
341
 
342
+ ## Exporting Charts (experimental)
343
+
344
+ Export charts to PNG, SVG, or PDF. This requires Node.js and npm 7+. Run:
345
+
346
+ ```sh
347
+ yarn add vega-cli vega-lite
348
+ ```
349
+
350
+ For PNG, use:
351
+
352
+ ```ruby
353
+ File.binwrite("chart.png", chart.to_png)
354
+ ```
355
+
356
+ For SVG, use:
357
+
358
+ ```ruby
359
+ File.binwrite("chart.svg", chart.to_svg)
360
+ ```
361
+
362
+ For PDF, use:
363
+
364
+ ```ruby
365
+ File.binwrite("chart.pdf", chart.to_pdf)
366
+ ```
367
+
321
368
  ## Content Security Policy (CSP)
322
369
 
323
370
  By default, the Vega parser uses the Function constructor, which [can cause issues with CSP](https://vega.github.io/vega/usage/interpreter/).
324
371
 
372
+ For Rails 7 / Importmap, add to `config/importmap.rb`:
373
+
374
+ ```ruby
375
+ pin "vega-interpreter", to: "vega-interpreter.js"
376
+ ```
377
+
378
+ And add to `app/javascript/application.js`:
379
+
380
+ ```js
381
+ import "vega-interpreter"
382
+ ```
383
+
325
384
  For Rails 6 / Webpacker, run:
326
385
 
327
386
  ```sh
@@ -342,22 +401,22 @@ embed_options(ast: true)
342
401
 
343
402
  ## History
344
403
 
345
- View the [changelog](https://github.com/ankane/vega/blob/master/CHANGELOG.md)
404
+ View the [changelog](https://github.com/ankane/vega-ruby/blob/master/CHANGELOG.md)
346
405
 
347
406
  ## Contributing
348
407
 
349
408
  Everyone is encouraged to help improve this project. Here are a few ways you can help:
350
409
 
351
- - [Report bugs](https://github.com/ankane/vega/issues)
352
- - Fix bugs and [submit pull requests](https://github.com/ankane/vega/pulls)
410
+ - [Report bugs](https://github.com/ankane/vega-ruby/issues)
411
+ - Fix bugs and [submit pull requests](https://github.com/ankane/vega-ruby/pulls)
353
412
  - Write, clarify, or fix documentation
354
413
  - Suggest or add new features
355
414
 
356
415
  To get started with development:
357
416
 
358
417
  ```sh
359
- git clone https://github.com/ankane/vega.git
360
- cd vega
418
+ git clone https://github.com/ankane/vega-ruby.git
419
+ cd vega-ruby
361
420
  bundle install
362
421
  bundle exec rake test
363
422
  ```
@@ -26,6 +26,11 @@ module Vega
26
26
  Spec.new(spec).to_iruby
27
27
  end
28
28
 
29
+ # for https://github.com/SciRuby/iruby/issues/314
30
+ def to_iruby_mimebundle(**)
31
+ [[to_iruby].to_h, nil]
32
+ end
33
+
29
34
  def to_json
30
35
  spec.to_json
31
36
  end
@@ -50,5 +55,15 @@ module Vega
50
55
  value
51
56
  end
52
57
  end
58
+
59
+ def export(cmd)
60
+ require "open3"
61
+
62
+ pkg = cmd.start_with?("vg") ? "vega-cli" : "vega-lite"
63
+ # use --no to prevent automatic installs
64
+ stdout, stderr, status = Open3.capture3("npm", "exec", "--no", "--package=#{pkg}", "--", cmd, stdin_data: to_json, binmode: true)
65
+ raise "Command failed: #{stderr}" unless status.success? && stdout.bytesize > 0
66
+ stdout
67
+ end
53
68
  end
54
69
  end
data/lib/vega/chart.rb CHANGED
@@ -23,5 +23,17 @@ module Vega
23
23
  self
24
24
  end
25
25
  immutable_method :data
26
+
27
+ def to_png
28
+ export("vg2png")
29
+ end
30
+
31
+ def to_svg
32
+ export("vg2svg")
33
+ end
34
+
35
+ def to_pdf
36
+ export("vg2pdf")
37
+ end
26
38
  end
27
39
  end
data/lib/vega/engine.rb CHANGED
@@ -1,5 +1,15 @@
1
1
  module Vega
2
2
  class Engine < ::Rails::Engine
3
3
  # for assets
4
+
5
+ # for importmap
6
+ if defined?(Importmap)
7
+ initializer "vega.importmap", after: "importmap" do |app|
8
+ app.config.assets.precompile << "vega-embed.js"
9
+ app.config.assets.precompile << "vega-interpreter.js"
10
+ app.config.assets.precompile << "vega-lite.js"
11
+ app.config.assets.precompile << "vega.js"
12
+ end
13
+ end
4
14
  end
5
15
  end
@@ -11,7 +11,7 @@ module Vega
11
11
  :transform, :layer, :hconcat, :vconcat, :concat
12
12
 
13
13
  def initialize
14
- @schema = "https://vega.github.io/schema/vega-lite/v4.json"
14
+ @schema = "https://vega.github.io/schema/vega-lite/v5.json"
15
15
  super()
16
16
  end
17
17
 
@@ -29,5 +29,17 @@ module Vega
29
29
  dup.spec!(*args)
30
30
  end
31
31
  end
32
+
33
+ def to_png
34
+ export("vl2png")
35
+ end
36
+
37
+ def to_svg
38
+ export("vl2svg")
39
+ end
40
+
41
+ def to_pdf
42
+ export("vl2pdf")
43
+ end
32
44
  end
33
45
  end
data/lib/vega/spec.rb CHANGED
@@ -11,7 +11,14 @@ module Vega
11
11
  output = <<~EOS
12
12
  #{html}
13
13
  <script>
14
- #{js}
14
+ (function() {
15
+ var createChart = function() { #{js} };
16
+ if ("vegaEmbed" in window) {
17
+ createChart();
18
+ } else {
19
+ window.addEventListener("vega:load", createChart, true);
20
+ }
21
+ })();
15
22
  </script>
16
23
  EOS
17
24
  output.respond_to?(:html_safe) ? output.html_safe : output
@@ -25,12 +32,13 @@ module Vega
25
32
  <script>
26
33
  require.config({
27
34
  paths: {
28
- 'vega': 'https://cdn.jsdelivr.net/npm/vega@5.19.1?noext',
29
- 'vega-lite': 'https://cdn.jsdelivr.net/npm/vega-lite@4.17.0?noext',
30
- 'vega-embed': 'https://cdn.jsdelivr.net/npm/vega-embed@6.15.1?noext'
35
+ 'vega': 'https://cdn.jsdelivr.net/npm/vega@5.21.0/build/vega.min',
36
+ 'vega-util': 'https://cdn.jsdelivr.net/npm/vega-util@1.17.0/build/vega-util.min',
37
+ 'vega-lite': 'https://cdn.jsdelivr.net/npm/vega-lite@5.1.1/build/vega-lite.min',
38
+ 'vega-embed': 'https://cdn.jsdelivr.net/npm/vega-embed@6.20.1/build/vega-embed.min'
31
39
  }
32
40
  });
33
- require(['vega', 'vega-lite', 'vega-embed'], function(vega, vegaLite, vegaEmbed) {
41
+ require(['vega', 'vega-util', 'vega-lite', 'vega-embed'], function(vega, vegaUtil, vegaLite, vegaEmbed) {
34
42
  #{js}
35
43
  });
36
44
  </script>
@@ -44,6 +52,7 @@ module Vega
44
52
  id = "chart-#{SecureRandom.hex(16)}" # 2**128 values
45
53
  width = @spec["width"].is_a?(Integer) ? "#{@spec["width"]}px" : "100%"
46
54
  height = @spec["height"].is_a?(Integer) ? "#{@spec["height"]}px" : "300px"
55
+ height = "auto" if @spec["height"].nil?
47
56
 
48
57
  # user can override with usermeta: {embedOptions: ...}
49
58
  embed_options = {actions: false}
data/lib/vega/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Vega
2
- VERSION = "0.1.3"
2
+ VERSION = "0.2.3"
3
3
  end
@@ -1,4 +1,4 @@
1
- Copyright (c) 2015-2018, University of Washington Interactive Data Lab
1
+ Copyright (c) 2015-2021, University of Washington Interactive Data Lab
2
2
  All rights reserved.
3
3
 
4
4
  Redistribution and use in source and binary forms, with or without