diff --git a/app/assets/images/key/cyclemap/cycleway.png b/app/assets/images/key/cyclemap/cycleway.png
deleted file mode 100644
index 13bed4a7d..000000000
Binary files a/app/assets/images/key/cyclemap/cycleway.png and /dev/null differ
diff --git a/app/assets/images/key/cyclemap/footway.svg b/app/assets/images/key/cyclemap/footway.svg
deleted file mode 100644
index ecad17425..000000000
--- a/app/assets/images/key/cyclemap/footway.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/app/assets/images/key/cyclemap/motorway12.png b/app/assets/images/key/cyclemap/motorway12.png
deleted file mode 100644
index 749493ad6..000000000
Binary files a/app/assets/images/key/cyclemap/motorway12.png and /dev/null differ
diff --git a/app/assets/images/key/cyclemap/pedestrian.svg b/app/assets/images/key/cyclemap/pedestrian.svg
deleted file mode 100644
index af8fce170..000000000
--- a/app/assets/images/key/cyclemap/pedestrian.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/app/assets/images/key/cyclemap/primary12.png b/app/assets/images/key/cyclemap/primary12.png
deleted file mode 100644
index fed37d054..000000000
Binary files a/app/assets/images/key/cyclemap/primary12.png and /dev/null differ
diff --git a/app/assets/images/key/cyclemap/rail.png b/app/assets/images/key/cyclemap/rail.png
deleted file mode 100644
index 0abf0c1df..000000000
Binary files a/app/assets/images/key/cyclemap/rail.png and /dev/null differ
diff --git a/app/assets/images/key/cyclemap/rail14.png b/app/assets/images/key/cyclemap/rail14.png
deleted file mode 100644
index 957f17c85..000000000
Binary files a/app/assets/images/key/cyclemap/rail14.png and /dev/null differ
diff --git a/app/assets/images/key/cyclemap/secondary12.png b/app/assets/images/key/cyclemap/secondary12.png
deleted file mode 100644
index cde008523..000000000
Binary files a/app/assets/images/key/cyclemap/secondary12.png and /dev/null differ
diff --git a/app/assets/images/key/cyclemap/track.png b/app/assets/images/key/cyclemap/track.png
deleted file mode 100644
index f294edca0..000000000
Binary files a/app/assets/images/key/cyclemap/track.png and /dev/null differ
diff --git a/app/assets/images/key/cyclemap/trunk12.png b/app/assets/images/key/cyclemap/trunk12.png
deleted file mode 100644
index 51230a021..000000000
Binary files a/app/assets/images/key/cyclemap/trunk12.png and /dev/null differ
diff --git a/app/assets/images/key/mapnik/bridge.svg b/app/assets/images/key/mapnik/bridge.svg
deleted file mode 100644
index 4096e8166..000000000
--- a/app/assets/images/key/mapnik/bridge.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/app/assets/images/key/mapnik/bridleway.png b/app/assets/images/key/mapnik/bridleway.png
deleted file mode 100644
index 9aec1ad33..000000000
Binary files a/app/assets/images/key/mapnik/bridleway.png and /dev/null differ
diff --git a/app/assets/images/key/mapnik/building15.svg b/app/assets/images/key/mapnik/building15.svg
deleted file mode 100644
index cc0507340..000000000
--- a/app/assets/images/key/mapnik/building15.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/app/assets/images/key/mapnik/building16.svg b/app/assets/images/key/mapnik/building16.svg
deleted file mode 100644
index 6ff2210a5..000000000
--- a/app/assets/images/key/mapnik/building16.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/app/assets/images/key/mapnik/cycleway.png b/app/assets/images/key/mapnik/cycleway.png
deleted file mode 100644
index a1a16f1ed..000000000
Binary files a/app/assets/images/key/mapnik/cycleway.png and /dev/null differ
diff --git a/app/assets/images/key/mapnik/footway.png b/app/assets/images/key/mapnik/footway.png
deleted file mode 100644
index 4486119ba..000000000
Binary files a/app/assets/images/key/mapnik/footway.png and /dev/null differ
diff --git a/app/assets/images/key/mapnik/glacier10.svg b/app/assets/images/key/mapnik/glacier10.svg
deleted file mode 100644
index be79f238a..000000000
--- a/app/assets/images/key/mapnik/glacier10.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/app/assets/images/key/mapnik/glacier5.svg b/app/assets/images/key/mapnik/glacier5.svg
deleted file mode 100644
index 8e6d368eb..000000000
--- a/app/assets/images/key/mapnik/glacier5.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/app/assets/images/key/mapnik/motorway.png b/app/assets/images/key/mapnik/motorway.png
deleted file mode 100644
index 484fc9daa..000000000
Binary files a/app/assets/images/key/mapnik/motorway.png and /dev/null differ
diff --git a/app/assets/images/key/mapnik/rail12.svg b/app/assets/images/key/mapnik/rail12.svg
deleted file mode 100644
index 45c76a41e..000000000
--- a/app/assets/images/key/mapnik/rail12.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/app/assets/images/key/mapnik/rail18.svg b/app/assets/images/key/mapnik/rail18.svg
deleted file mode 100644
index 5094bafde..000000000
--- a/app/assets/images/key/mapnik/rail18.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/app/assets/images/key/mapnik/track.png b/app/assets/images/key/mapnik/track.png
deleted file mode 100644
index f294edca0..000000000
Binary files a/app/assets/images/key/mapnik/track.png and /dev/null differ
diff --git a/app/assets/images/key/mapnik/tram15.svg b/app/assets/images/key/mapnik/tram15.svg
deleted file mode 100644
index 8f873f7ee..000000000
--- a/app/assets/images/key/mapnik/tram15.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/app/assets/images/key/mapnik/tunnel.svg b/app/assets/images/key/mapnik/tunnel.svg
deleted file mode 100644
index 05cd7e713..000000000
--- a/app/assets/images/key/mapnik/tunnel.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/app/assets/images/key/opnvkarte/main_road11.svg b/app/assets/images/key/opnvkarte/main_road11.svg
deleted file mode 100644
index b03c74414..000000000
--- a/app/assets/images/key/opnvkarte/main_road11.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/app/assets/images/key/opnvkarte/main_road13.svg b/app/assets/images/key/opnvkarte/main_road13.svg
deleted file mode 100644
index 2d5902236..000000000
--- a/app/assets/images/key/opnvkarte/main_road13.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/app/assets/images/key/opnvkarte/main_road15.svg b/app/assets/images/key/opnvkarte/main_road15.svg
deleted file mode 100644
index cb5391648..000000000
--- a/app/assets/images/key/opnvkarte/main_road15.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/app/assets/images/key/opnvkarte/main_road17.svg b/app/assets/images/key/opnvkarte/main_road17.svg
deleted file mode 100644
index de7db0f17..000000000
--- a/app/assets/images/key/opnvkarte/main_road17.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/app/assets/images/key/opnvkarte/motorway13.svg b/app/assets/images/key/opnvkarte/motorway13.svg
deleted file mode 100644
index c44e777a2..000000000
--- a/app/assets/images/key/opnvkarte/motorway13.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/app/assets/images/key/opnvkarte/motorway15.svg b/app/assets/images/key/opnvkarte/motorway15.svg
deleted file mode 100644
index c217bb2a7..000000000
--- a/app/assets/images/key/opnvkarte/motorway15.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/app/assets/images/key/opnvkarte/motorway17.svg b/app/assets/images/key/opnvkarte/motorway17.svg
deleted file mode 100644
index 36b37db59..000000000
--- a/app/assets/images/key/opnvkarte/motorway17.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/app/assets/images/key/opnvkarte/motorway8.svg b/app/assets/images/key/opnvkarte/motorway8.svg
deleted file mode 100644
index 21f006cef..000000000
--- a/app/assets/images/key/opnvkarte/motorway8.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/app/assets/images/key/opnvkarte/rail11.svg b/app/assets/images/key/opnvkarte/rail11.svg
deleted file mode 100644
index 849f5cf94..000000000
--- a/app/assets/images/key/opnvkarte/rail11.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/app/assets/images/key/opnvkarte/rail15.svg b/app/assets/images/key/opnvkarte/rail15.svg
deleted file mode 100644
index efe7792b9..000000000
--- a/app/assets/images/key/opnvkarte/rail15.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/app/helpers/svg_helper.rb b/app/helpers/svg_helper.rb
index abb512f0d..a40fa7086 100644
--- a/app/helpers/svg_helper.rb
+++ b/app/helpers/svg_helper.rb
@@ -1,7 +1,37 @@
module SvgHelper
- def solid_svg_tag(width, height, fill, **options)
- tag.svg :width => width, :height => height, **options do
- tag.rect :width => "100%", :height => "100%", :fill => fill
+ def key_svg_tag(**options)
+ border_width = options["border"] ? (options["border-width"] || 1) : 0
+ rect_attrs = {
+ :width => "100%",
+ :height => "100%",
+ :fill => options["fill"] || "none"
+ }
+ if border_width.positive?
+ rect_attrs[:x] = rect_attrs[:y] = format("%g", 0.5 * border_width)
+ rect_attrs[:width] = options["width"] - border_width
+ rect_attrs[:height] = options["height"] - border_width
+ end
+ svg_attrs = options.slice("width", "height", "opacity", :class)
+
+ tag.svg(**svg_attrs) do
+ horizontal = "H#{options['width']}"
+ concat tag.rect(**rect_attrs, **stroke_attrs(options, "border")) if options["fill"] || options["border"]
+ if options["line"]
+ y_middle = format("%g", 0.5 * options["height"])
+ concat tag.path(:d => "M0,#{y_middle} #{horizontal}", **stroke_attrs(options, "line"))
+ end
+ if options["casing"]
+ casing_width = options["casing-width"] || 1
+ y_top = format("%g", 0.5 * casing_width)
+ y_bottom = format("%g", options["height"] - (0.5 * casing_width))
+ concat tag.path(:d => "M0,#{y_top} #{horizontal} M0,#{y_bottom} #{horizontal}", **stroke_attrs(options, "casing"))
+ end
end
end
+
+ private
+
+ def stroke_attrs(attrs, prefix)
+ attrs.select { |key| key.start_with?(prefix) }.transform_keys { |key| key.delete_prefix(prefix).prepend("stroke") }
+ end
end
diff --git a/app/views/site/key.html.erb b/app/views/site/key.html.erb
index 28e364685..82105097e 100644
--- a/app/views/site/key.html.erb
+++ b/app/views/site/key.html.erb
@@ -4,10 +4,10 @@
<% layer_data.each do |entry| %>
<%= tag.tr :class => "mapkey-table-entry", :data => { :layer => layer_name, :zoom_min => entry["min_zoom"], :zoom_max => entry["max_zoom"] } do %>
- <% if entry["width"] && entry["height"] && entry["fill"] %>
- <%= solid_svg_tag entry["width"], entry["height"], entry["fill"], :class => "d-block mx-auto" %>
- <% else %>
+ <% if entry["image"] %>
<%= image_tag "key/#{layer_name}/#{entry['image']}", :class => "d-block mx-auto" %>
+ <% else %>
+ <%= key_svg_tag :class => "d-block mx-auto", **entry %>
<% end %>
|
diff --git a/config/key.yml b/config/key.yml
index d7d4017b1..5341245e5 100644
--- a/config/key.yml
+++ b/config/key.yml
@@ -1,24 +1,24 @@
mapnik:
# transportation: roads.mss
- - { min_zoom: 6, name: motorway, image: motorway.png }
+ - { min_zoom: 6, name: motorway, width: 52, height: 5, fill: "#e892a2", casing: "#dc2a67" }
- { min_zoom: 6, name: main_road, image: mainroad.png }
- { min_zoom: 8, name: main_road, image: mainroad8.png }
- { min_zoom: 12, name: main_road, image: mainroad12.png }
- - { min_zoom: 13, name: track, image: track.png }
- - { min_zoom: 13, name: bridleway, image: bridleway.png }
- - { min_zoom: 13, name: cycleway, image: cycleway.png }
- - { min_zoom: 13, name: footway, image: footway.png }
+ - { min_zoom: 13, name: track, width: 52, height: 3, opacity: .8, line: "#996600", line-width: 1.5, line-dasharray: "6 5" }
+ - { min_zoom: 13, name: bridleway, width: 52, height: 3, line: green, line-width: 1.25, line-dasharray: "4 2" }
+ - { min_zoom: 13, name: cycleway, width: 52, height: 1, line: blue, line-dasharray: "3 3.5" }
+ - { min_zoom: 13, name: footway, width: 52, height: 3, line: salmon, line-width: 1.3, line-dasharray: "3 3.5" }
- { min_zoom: 8, name: rail, width: 52, height: 1, fill: "#787878" }
- - { min_zoom: 12, name: rail, image: rail12.svg }
- - { min_zoom: 18, name: rail, image: rail18.svg }
+ - { min_zoom: 12, name: rail, width: 52, height: 3, fill: "#707070", line: white, line-dasharray: 8, line-dashoffset: 2 }
+ - { min_zoom: 18, name: rail, width: 52, height: 4, fill: "#707070", line: white, line-dasharray: 8, line-dashoffset: 2, line-width: 2 }
- { min_zoom: 12, name: subway, width: 52, height: 2, fill: "#999" }
- { min_zoom: 8, name: light_rail, width: 52, height: 1, fill: "#ccc" }
- { min_zoom: 10, name: light_rail, width: 52, height: 1, fill: "#aaa" }
- { min_zoom: 13, name: light_rail, width: 52, height: 2, fill: "#666" }
- - { min_zoom: 12, name: tram_only, width: 52, height: 1, fill: "#6e6e6eaa" }
- - { min_zoom: 14, name: tram_only, width: 52, height: 1, fill: "#6e6e6e" }
- - { min_zoom: 15, name: tram_only, image: tram15.svg }
- - { min_zoom: 17, name: tram_only, width: 52, height: 2, fill: "#6e6e6e" }
+ - { min_zoom: 12, name: tram_only, width: 52, height: 1, line: "#6e6e6e", line-width: 0.75 }
+ - { min_zoom: 14, name: tram_only, width: 52, height: 3, line: "#6e6e6e", line-width: 1 }
+ - { min_zoom: 15, name: tram_only, width: 52, height: 3, line: "#6e6e6e", line-width: 1.5 }
+ - { min_zoom: 17, name: tram_only, width: 52, height: 2, line: "#6e6e6e", line-width: 2 }
- { min_zoom: 12, name: [cable_car, chair_lift], image: cable.png }
- { min_zoom: 11, name: [runway_only, taxiway], image: runway11.svg }
- { min_zoom: 12, name: [runway_only, taxiway], image: runway12.svg }
@@ -30,8 +30,8 @@ mapnik:
# landcover z5: landcover.mss, water.mss
- { name: [lake_only, reservoir], width: 26, height: 10, fill: "#aad3df" }
- { name: intermittent_water, image: intermittent_water.svg }
- - { min_zoom: 5, name: glacier, image: glacier5.svg }
- - { min_zoom: 10, name: glacier, image: glacier10.svg }
+ - { min_zoom: 5, name: glacier, width: 26, height: 10, fill: "#ddecec", border: "#9cf" }
+ - { min_zoom: 10, name: glacier, width: 26, height: 10, fill: "#ddecec", border: "#9cf", border-dasharray: "4 2" }
- { min_zoom: 10, name: reef, image: reef.png }
- { min_zoom: 10, name: wetland, image: wetland.png }
- { min_zoom: 5, name: [forest_only, wood], width: 26, height: 10, fill: "#bddab1" }
@@ -74,40 +74,42 @@ mapnik:
- { min_zoom: 13, name: [school_only, university, hospital], image: school.svg }
# buildings: buildings.mss
- { min_zoom: 14, name: building, width: 10, height: 10, fill: "#ab9793" }
- - { min_zoom: 15, name: building, image: building15.svg }
- - { min_zoom: 16, name: building, image: building16.svg }
+ - { min_zoom: 15, name: building, width: 10, height: 10, fill: "#b9a99c", border: "#a99a8d" }
+ - { min_zoom: 16, name: building, width: 10, height: 10, fill: "#c4b6ab", border: "#a99a8d" }
# stations: stations.mss
- { min_zoom: 12, name: station, width: 4, height: 4, fill: "#7981b0" }
- { min_zoom: 13, name: station, width: 6, height: 6, fill: "#7981b0" }
- { min_zoom: 15, name: station, width: 9, height: 9, fill: "#7981b0" }
# other
- { min_zoom: 11, name: [summit_only, peak], image: summit.svg } # amenity-points.mss
- - { min_zoom: 13, name: tunnel, image: tunnel.svg } # roads.mss
- - { min_zoom: 13, name: bridge, image: bridge.svg } # roads.mss
+ - { min_zoom: 13, name: tunnel, width: 50, height: 5, casing: grey, casing-dasharray: "4 2", casing-dashoffset: 1 } # roads.mss
+ - { min_zoom: 13, name: bridge, width: 50, height: 5, casing: black } # roads.mss
- { min_zoom: 15, name: private, image: private.png }
- { min_zoom: 15, name: destination, image: destination.png }
- { min_zoom: 12, name: construction, image: construction.png }
cyclemap:
- { min_zoom: 5, name: motorway, width: 50, height: 3, fill: "#9a9ab1" }
- - { min_zoom: 12, name: motorway, image: motorway12.png }
+ - { min_zoom: 12, name: motorway, width: 50, height: 5, fill: "#bdbece", casing: "#8d95a7" }
- { min_zoom: 6, name: trunk, width: 50, height: 2, fill: "#c8d8c8" }
- - { min_zoom: 12, name: trunk, image: trunk12.png }
+ - { min_zoom: 12, name: trunk, width: 50, height: 5, fill: "#c8d8c8", casing: "#abb5a4" }
- { min_zoom: 8, name: primary, width: 50, height: 2, fill: "#d8c8c8" }
- - { min_zoom: 12, name: primary, image: primary12.png }
+ - { min_zoom: 12, name: primary, width: 50, height: 4, fill: "#f0e3e3", casing: "#d4b6b7" }
- { min_zoom: 10, name: secondary, width: 50, height: 1, fill: "#dadacc" }
- - { min_zoom: 12, name: secondary, image: secondary12.png }
- - { min_zoom: 15, name: pedestrian, image: pedestrian.svg }
- - { min_zoom: 13, name: track, image: track.png }
- - { min_zoom: 8, name: cycleway, image: cycleway.png }
+ - { min_zoom: 12, name: secondary, width: 50, height: 4, fill: "#ededc8", casing: "#c8b48a" }
+ - { min_zoom: 15, name: pedestrian, width: 50, height: 4, fill: "#e2e3e2", casing: "#9a9a9a" }
+ - { min_zoom: 13, name: track, width: 50, height: 3, fill: white, casing: "#999", casing-dasharray: "5 3", casing-dashoffset: 1 }
+ - { min_zoom: 15, name: track, width: 50, height: 4, fill: white, casing: "#999", casing-dasharray: "5 3", casing-dashoffset: 1 }
+ - { min_zoom: 17, name: track, width: 50, height: 5, fill: white, casing: "#999", casing-dasharray: "5 3", casing-dashoffset: 1 }
+ - { min_zoom: 8, name: cycleway, width: 50, height: 3, line: "#0100fe", line-width: 1.5, line-dasharray: "6 2" }
- { min_zoom: 5, name: cycleway_national, width: 50, height: 2, fill: "#fe0000" }
- { min_zoom: 13, name: cycleway_national, width: 50, height: 4, fill: "#ffb3b3" }
- { min_zoom: 7, name: cycleway_regional, width: 50, height: 2, fill: "#b638fb" }
- { min_zoom: 13, name: cycleway_regional, width: 50, height: 4, fill: "#ddb5d9" }
- { min_zoom: 8, name: cycleway_local, width: 50, height: 2, fill: "#0100fe" }
- { min_zoom: 13, name: cycleway_local, width: 50, height: 4, fill: "#b2b2ff" }
- - { min_zoom: 13, name: footway, image: footway.svg }
- - { min_zoom: 7, name: rail, image: rail.png }
- - { min_zoom: 14, name: rail, image: rail14.png }
+ - { min_zoom: 13, name: footway, width: 50, height: 3, line: "#bd6d6e", line-width: 1.5, line-dasharray: "6 2" }
+ - { min_zoom: 7, name: rail, width: 50, height: 3, line: "#999999", line-width: 1.5 }
+ - { min_zoom: 14, name: rail, width: 50, height: 4, fill: "#999999", line: white, line-dasharray: 4, line-width: 2 }
- { min_zoom: 1, name: [lake_only, reservoir], width: 26, height: 10, fill: "#addeff" }
- { min_zoom: 9, name: [forest_only, wood], width: 26, height: 10, fill: "#b3d6a4" }
- { min_zoom: 10, name: meadow, width: 26, height: 10, fill: "#c0de9c" }
@@ -119,8 +121,8 @@ cyclemap:
opnvkarte:
- { min_zoom: 6, name: rail, width: 52, height: 1, fill: "#868686" }
- { min_zoom: 8, name: rail, width: 52, height: 2, fill: "#868686" }
- - { min_zoom: 11, name: rail, image: rail11.svg }
- - { min_zoom: 15, name: rail, image: rail15.svg }
+ - { min_zoom: 11, name: rail, width: 52, height: 3, fill: "#868686", line: "#eeeeee", line-dasharray: 10, line-dashoffset: 9 }
+ - { min_zoom: 15, name: rail, width: 52, height: 4, fill: "#868686", line: "#eeeeee", line-dasharray: 10, line-dashoffset: 9, line-width: 2 }
- { min_zoom: 17, name: rail, image: rail17.svg }
- { min_zoom: 6, name: train, width: 52, height: 2, fill: "#ffc366" }
- { min_zoom: 10, name: train, width: 52, height: 3, fill: "#ffc366" }
@@ -154,15 +156,15 @@ opnvkarte:
- { min_zoom: 15, name: bus_stop, image: bus_stop15.svg }
- { min_zoom: 13, name: stop, image: stop13.svg }
- { min_zoom: 15, name: stop, image: stop15.svg }
- - { min_zoom: 8, name: motorway, image: motorway8.svg }
- - { min_zoom: 13, name: motorway, image: motorway13.svg }
- - { min_zoom: 15, name: motorway, image: motorway15.svg }
- - { min_zoom: 17, name: motorway, image: motorway17.svg }
- - { min_zoom: 8, name: main_road, width: 52, height: 1, fill: "#5c6d6d88" }
- - { min_zoom: 11, name: main_road, image: main_road11.svg }
- - { min_zoom: 13, name: main_road, image: main_road13.svg }
- - { min_zoom: 15, name: main_road, image: main_road15.svg }
- - { min_zoom: 17, name: main_road, image: main_road17.svg }
+ - { min_zoom: 8, name: motorway, width: 52, height: 4, fill: "#dddddd", casing: "#6d6d6d" }
+ - { min_zoom: 13, name: motorway, width: 52, height: 8, fill: "#dddddd", casing: "#6d6d6d" }
+ - { min_zoom: 15, name: motorway, width: 52, height: 13, fill: "#dddddd", casing: "#6d6d6d", line: "#ffffff", line-dasharray: 12, line-dashoffset: 4 }
+ - { min_zoom: 17, name: motorway, width: 52, height: 17, fill: "#dddddd", casing: "#6d6d6d", line: "#ffffff", line-dasharray: 12, line-dashoffset: 4, casing-width: 2 }
+ - { min_zoom: 8, name: main_road, width: 52, height: 1, fill: "#5c6d6d88" }
+ - { min_zoom: 11, name: main_road, width: 52, height: 4, fill: "#dddddd", casing: "#a1968b" }
+ - { min_zoom: 13, name: main_road, width: 52, height: 8, fill: "#dddddd", casing: "#a1968b" }
+ - { min_zoom: 15, name: main_road, width: 52, height: 13, fill: "#dddddd", casing: "#a1968b" }
+ - { min_zoom: 17, name: main_road, width: 52, height: 17, fill: "#dddddd", casing: "#a1968b" }
# landcover
- { min_zoom: 0, name: [lake_only, reservoir], width: 26, height: 10, fill: "#a1cbea" }
- { min_zoom: 8, name: [lake_only, reservoir], width: 26, height: 10, fill: "#bfd3ef" }
diff --git a/test/helpers/svg_helper_test.rb b/test/helpers/svg_helper_test.rb
new file mode 100644
index 000000000..25a9e4568
--- /dev/null
+++ b/test/helpers/svg_helper_test.rb
@@ -0,0 +1,113 @@
+require "test_helper"
+
+class SvgHelperTest < ActionView::TestCase
+ def test_key_fill
+ svg = key_svg_tag("width" => 60, "height" => 40, "fill" => "green")
+ expected = <<~HTML.gsub(/\n\s*/, "")
+
+ HTML
+ assert_dom_equal expected, svg
+ end
+
+ def test_key_border
+ svg = key_svg_tag("width" => 60, "height" => 40, "border" => "red")
+ expected = <<~HTML.gsub(/\n\s*/, "")
+
+ HTML
+ assert_dom_equal expected, svg
+ end
+
+ def test_key_border_width
+ svg = key_svg_tag("width" => 60, "height" => 40, "border" => "red", "border-width" => 3)
+ expected = <<~HTML.gsub(/\n\s*/, "")
+
+ HTML
+ assert_dom_equal expected, svg
+ end
+
+ def test_key_border_with_integer_coords
+ svg = key_svg_tag("width" => 60, "height" => 40, "border" => "red", "border-width" => 2)
+ expected = <<~HTML.gsub(/\n\s*/, "")
+
+ HTML
+ assert_dom_equal expected, svg
+ end
+
+ def test_key_border_fractional_width
+ svg = key_svg_tag("width" => 60, "height" => 40, "border" => "red", "border-width" => 1.5)
+ expected = <<~HTML.gsub(/\n\s*/, "")
+
+ HTML
+ assert_dom_equal expected, svg
+ end
+
+ def test_key_line
+ svg = key_svg_tag("width" => 80, "height" => 15, "line" => "blue")
+ expected = <<~HTML.gsub(/\n\s*/, "")
+
+ HTML
+ assert_dom_equal expected, svg
+ end
+
+ def test_key_line_width
+ svg = key_svg_tag("width" => 80, "height" => 15, "line" => "blue", "line-width" => 3)
+ expected = <<~HTML.gsub(/\n\s*/, "")
+
+ HTML
+ assert_dom_equal expected, svg
+ end
+
+ def test_key_line_with_integer_coords
+ svg = key_svg_tag("width" => 80, "height" => 20, "line" => "blue")
+ expected = <<~HTML.gsub(/\n\s*/, "")
+
+ HTML
+ assert_dom_equal expected, svg
+ end
+
+ def test_key_casing
+ svg = key_svg_tag("width" => 80, "height" => 20, "casing" => "yellow")
+ expected = <<~HTML.gsub(/\n\s*/, "")
+
+ HTML
+ assert_dom_equal expected, svg
+ end
+
+ def test_key_casing_width
+ svg = key_svg_tag("width" => 80, "height" => 20, "casing" => "yellow", "casing-width" => 5)
+ expected = <<~HTML.gsub(/\n\s*/, "")
+
+ HTML
+ assert_dom_equal expected, svg
+ end
+
+ def test_key_casing_with_integer_coords
+ svg = key_svg_tag("width" => 80, "height" => 20, "casing" => "yellow", "casing-width" => 2)
+ expected = <<~HTML.gsub(/\n\s*/, "")
+
+ HTML
+ assert_dom_equal expected, svg
+ end
+end
|