From 2ecec47fea37ec27f477e66ce7fe241f5d0cccec Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 13 Sep 2023 06:53:57 -0400 Subject: [PATCH] Set baseURL to support "data/movies.json" style URLs (#100) --- vl-convert-rs/src/converter.rs | 4 +++- vl-convert-rs/tests/test_specs.rs | 2 ++ .../vl-specs/circle_binned_base_url.vl.json | 16 ++++++++++++++++ .../expected/v5_8/circle_binned_base_url.png | Bin 0 -> 18754 bytes .../expected/v5_8/circle_binned_base_url.svg | 1 + 5 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 vl-convert-rs/tests/vl-specs/circle_binned_base_url.vl.json create mode 100644 vl-convert-rs/tests/vl-specs/expected/v5_8/circle_binned_base_url.png create mode 100644 vl-convert-rs/tests/vl-specs/expected/v5_8/circle_binned_base_url.svg diff --git a/vl-convert-rs/src/converter.rs b/vl-convert-rs/src/converter.rs index c577f987..81ddd803 100644 --- a/vl-convert-rs/src/converter.rs +++ b/vl-convert-rs/src/converter.rs @@ -200,7 +200,9 @@ import('{url}').then((sg) => {{ let function_str = r#" function vegaToSvg(vgSpec) { let runtime = vega.parse(vgSpec); - let view = new vega.View(runtime, {renderer: 'none'}); + const baseURL = 'https://vega.github.io/vega-datasets/'; + const loader = vega.loader({ mode: 'http', baseURL }); + let view = new vega.View(runtime, {renderer: 'none', loader}); let svgPromise = view.toSVG(); return svgPromise } diff --git a/vl-convert-rs/tests/test_specs.rs b/vl-convert-rs/tests/test_specs.rs index 702a99bf..6d12f16e 100644 --- a/vl-convert-rs/tests/test_specs.rs +++ b/vl-convert-rs/tests/test_specs.rs @@ -270,6 +270,7 @@ mod test_svg { fn test( #[values( "circle_binned", + "circle_binned_base_url", "stacked_bar_h", "bar_chart_trellis_compact", "line_with_log_scale", @@ -314,6 +315,7 @@ mod test_png_no_theme { #[rstest(name, scale, case("circle_binned", 1.0), + case("circle_binned_base_url", 1.0), case("stacked_bar_h", 2.0), case("bar_chart_trellis_compact", 2.0), case("line_with_log_scale", 2.0), diff --git a/vl-convert-rs/tests/vl-specs/circle_binned_base_url.vl.json b/vl-convert-rs/tests/vl-specs/circle_binned_base_url.vl.json new file mode 100644 index 00000000..0ffbc30a --- /dev/null +++ b/vl-convert-rs/tests/vl-specs/circle_binned_base_url.vl.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://vega.github.io/schema/vega-lite/v5.json", + "data": {"url": "data/movies.json"}, + "mark": "circle", + "encoding": { + "x": { + "bin": {"maxbins": 10}, + "field": "IMDB Rating" + }, + "y": { + "bin": {"maxbins": 10}, + "field": "Rotten Tomatoes Rating" + }, + "size": {"aggregate": "count"} + } +} \ No newline at end of file diff --git a/vl-convert-rs/tests/vl-specs/expected/v5_8/circle_binned_base_url.png b/vl-convert-rs/tests/vl-specs/expected/v5_8/circle_binned_base_url.png new file mode 100644 index 0000000000000000000000000000000000000000..20b60541c4b187dd0bb21068ad26720781c26cea GIT binary patch literal 18754 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 \ No newline at end of file