X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/703990a5bbdcdb782ef85983b960253aecc3e163..4d4b79800ac2b4ea282a74a9660c11d2748ee5c2:/app/assets/javascripts/leaflet.map.js diff --git a/app/assets/javascripts/leaflet.map.js b/app/assets/javascripts/leaflet.map.js index d053a81ce..6537b0b23 100644 --- a/app/assets/javascripts/leaflet.map.js +++ b/app/assets/javascripts/leaflet.map.js @@ -15,122 +15,29 @@ L.OSM.Map = L.Map.extend({ initialize: function (id, options) { L.Map.prototype.initialize.call(this, id, options); - const layerDefinitions = [ - { - leafletOsmId: "Mapnik", - code: "M", - keyId: "mapnik", - nameId: "standard", - credit: { - id: "make_a_donation", - href: "https://supporting.openstreetmap.org", - donate: true - } - }, - { - leafletOsmId: "CyclOSM", - code: "Y", - keyId: "cyclosm", - nameId: "cyclosm", - credit: { - id: "cyclosm_credit", - children: { - cyclosm_link: { - id: "cyclosm_name", - href: "https://www.cyclosm.org" - }, - osm_france_link: { - id: "osm_france", - href: "https://openstreetmap.fr/" - } - } - } - }, - { - leafletOsmId: "CycleMap", - code: "C", - keyId: "cyclemap", - nameId: "cycle_map", - apiKeyId: "THUNDERFOREST_KEY", - credit: { - id: "thunderforest_credit", - children: { - thunderforest_link: { - id: "andy_allan", - href: "https://www.thunderforest.com/" - } - } - } - }, - { - leafletOsmId: "TransportMap", - code: "T", - keyId: "transportmap", - nameId: "transport_map", - apiKeyId: "THUNDERFOREST_KEY", - credit: { - id: "thunderforest_credit", - children: { - thunderforest_link: { - id: "andy_allan", - href: "https://www.thunderforest.com/" - } - } - } - }, - { - leafletOsmId: "TracestrackTopo", - code: "P", - keyId: "tracestracktopo", - nameId: "tracestracktop_topo", - apiKeyId: "TRACESTRACK_KEY", - credit: { - id: "tracestrack_credit", - children: { - tracestrack_link: { - id: "tracestrack", - href: "https://www.tracestrack.com/" - } - } - } - }, - { - leafletOsmId: "HOT", - code: "H", - keyId: "hot", - nameId: "hot", - credit: { - id: "hotosm_credit", - children: { - hotosm_link: { - id: "hotosm_name", - href: "https://www.hotosm.org/" - }, - osm_france_link: { - id: "osm_france", - href: "https://openstreetmap.fr/" - } - } - } - } - ]; - this.baseLayers = []; - for (const layerDefinition of layerDefinitions) { + for (const layerDefinition of OSM.LAYER_DEFINITIONS) { if (layerDefinition.apiKeyId && !OSM[layerDefinition.apiKeyId]) continue; - const layerOptions = { - attribution: makeAttribution(layerDefinition.credit), - code: layerDefinition.code, - keyid: layerDefinition.keyId, - name: I18n.t(`javascripts.map.base.${layerDefinition.nameId}`) - }; - if (layerDefinition.apiKeyId) { - layerOptions.apikey = OSM[layerDefinition.apiKeyId]; + let layerConstructor = L.OSM.TileLayer; + const layerOptions = {}; + + for (const [property, value] of Object.entries(layerDefinition)) { + if (property === "credit") { + layerOptions.attribution = makeAttribution(value); + } else if (property === "nameId") { + layerOptions.name = I18n.t(`javascripts.map.base.${value}`); + } else if (property === "apiKeyId") { + layerOptions.apikey = OSM[value]; + } else if (property === "leafletOsmId") { + layerConstructor = L.OSM[value]; + } else { + layerOptions[property] = value; + } } - const layer = new L.OSM[layerDefinition.leafletOsmId](layerOptions); + const layer = new layerConstructor(layerOptions); this.baseLayers.push(layer); } @@ -223,11 +130,14 @@ L.OSM.Map = L.Map.extend({ }, getMapBaseLayerId: function () { - var baseLayerId; - this.eachLayer(function (layer) { - if (layer.options && layer.options.keyid) baseLayerId = layer.options.keyid; - }); - return baseLayerId; + const layer = this.getMapBaseLayer(); + if (layer) return layer.options.layerId; + }, + + getMapBaseLayer: function () { + for (const layer of this.baseLayers) { + if (this.hasLayer(layer)) return layer; + } }, getUrl: function (marker) {