MediaWiki:Kartographer.js: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
| (22 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
/* | /* Global JavaScript for Kartographer maps */ | ||
(function (mw) { | (function (mw) { | ||
// Metadata-only definitions: no direct L.* calls here | |||
const tileLayers = { | |||
overlays: { | |||
openseamap: { | |||
name: "Open Sea Map", | |||
isVector: false, | |||
tilesUrl: "https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png", | |||
options: { | |||
spDefaultActive: true, | |||
attribs: [ | |||
{ | |||
url: "https://www.openstreetmap.org/copyright", | |||
name: "OpenStreetMap", | |||
label: "Map data" | |||
}, | |||
{ | |||
url: "https://www.openseamap.org/", | |||
name: "Open Sea Map", | |||
label: "Map style" | |||
} | } | ||
], | |||
maxNativeZoom: 18, | |||
maxZoom: 19, | |||
} | |||
}, | |||
contours: { | |||
name: "Contours", | |||
isVector: true, | |||
tilesUrl: "https://tiles.scuba-spot.info/contours/{z}/{x}/{y}", | |||
options: { | |||
vectorTileLayerStyles: { | |||
merged: { weight: 1, color: "#333" } | |||
}, | |||
interactive: true, | |||
defaultActive: false, | |||
maxNativeZoom: 18, | |||
maxZoom: 19, | |||
} | } | ||
} | |||
}; | }, | ||
baseLayers: { | |||
// future base-layer entries | |||
} | |||
}; | |||
// Create a Leaflet layer (tile or vector) from metadata | |||
function makeLayer(def) { | |||
if (def.isVector) { | |||
return L.vectorGrid.protobuf(def.tilesUrl, def.options); | |||
} | |||
return L.tileLayer(def.tilesUrl, def.options); | |||
} | |||
// Add layers to the map with control and default activation | |||
function addCustomLayers(map) { | |||
const base = {}; | |||
const overlays = {}; | |||
Object.values(tileLayers.baseLayers).forEach(def => { | |||
base[def.name] = makeLayer(def); | |||
}); | |||
Object.values(tileLayers.overlays).forEach(def => { | |||
const layer = makeLayer(def); | |||
overlays[def.name] = layer; | |||
if (def.options.spDefaultActive) { | |||
layer.addTo(map); | |||
} | |||
}); | |||
L.control.layers(base, overlays).addTo(map); | |||
} | |||
// Inline maps | |||
mw.hook("wikipage.maps").add(function (maps) { | |||
if (Array.isArray(maps)) { | |||
maps.forEach(addCustomLayers); | |||
} else { | |||
addCustomLayers(maps); | |||
} | } | ||
}); | |||
// Full-screen maps | |||
mw.hook("kartographer.bootstrap.map").add(addCustomLayers); | |||
mw.hook("kartographer.bootstrap.mapWindow").add(addCustomLayers); | |||
})(mediaWiki); | })(mediaWiki); | ||