- map.attributionControl.setPrefix('');
-
- if (!args.layer || args.layer == "mapnik" || args.layer == "osmarender") {
- new L.OSM.Mapnik().addTo(map);
- } else if (args.layer == "cyclemap" || args.layer == "cycle map") {
- new L.OSM.CycleMap().addTo(map);
- } else if (args.layer == "transportmap") {
- new L.OSM.TransportMap().addTo(map);
- } else if (args.layer == "mapquest") {
- new L.OSM.MapQuestOpen().addTo(map);
- }
+ map.attributionControl.setPrefix("");
+ map.removeControl(map.attributionControl);
+
+ const isDarkTheme = args.theme === "dark" || (args.theme !== "light" && window.matchMedia("(prefers-color-scheme: dark)").matches);
+ const layers = <%=
+ YAML.load_file(Rails.root.join("config/layers.yml"))
+ .select { |entry| entry["canEmbed"] }
+ .each_with_object({}) do |entry, obj|
+ obj[entry["layerId"]] = {
+ layer: entry["leafletOsmId"],
+ darkLayer: entry["leafletOsmDarkId"],
+ apiKeyId: entry["apiKeyId"]
+ }.compact
+ end.to_json
+ %>;
+ const layerId = (args.layer || "").replaceAll(" ", "");
+ const layerConfig = layers[layerId] || layers.mapnik;
+ const { layer, ...options } = {
+ layer: layerConfig.darkLayer && isDarkTheme ? layerConfig.darkLayer : layerConfig.layer,
+ apikey: apiKeys[layerConfig.apiKeyId],
+ ...tileOptions[layerId]
+ };
+ new L.OSM[layer](options).addTo(map);