Zum Inhalt springen

MediaWiki:Kartographer.js: Unterschied zwischen den Versionen

Aus Scuba-Spot.info
Keine Bearbeitungszusammenfassung
Markierung: Zurückgesetzt
Keine Bearbeitungszusammenfassung
 
(16 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
/* Jedes JavaScript an dieser Stelle wird für alle Benutzer auf Seiten geladen, die Karten enthalten */
/* Global JavaScript for Kartographer maps */


(function (mw) {
(function (mw) {
     var maptiles = {/*
  // Metadata-only definitions: no direct L.* calls here
         "mapnik": {
  const tileLayers = {
            "tilesUrl": "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
     overlays: {
            "options": {
      openseamap: {
                "wvIsExternal": true,
         name: "Open Sea Map",
                "wvName": "Mapnik",
        isVector: false,
                "subdomains": ["a", "b", "c"],
        tilesUrl: "https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png",
                "attribs": [
        options: {
                    {
          spDefaultActive: true,
                        "url": "https://www.openstreetmap.org/copyright",
          attribs: [
                        "name": "OpenStreetMap",
            {
                        "label": "Map data"
              url: "https://www.openstreetmap.org/copyright",
                    }
              name: "OpenStreetMap",
                ]
              label: "Map data"
            },
            {
              url: "https://www.openseamap.org/",
              name: "Open Sea Map",
              label: "Map style"
             }
             }
         },*/
          ],
         "landscape": {
          maxNativeZoom: 18,
            "tilesUrl": "https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png",
          maxZoom: 19,
            "options": {
         }
                "wvIsExternal": true,
      },
                "wvIsOverlay": true,
      contours: {
                "wvName": "Open Sea Map",
         name: "Contours",
                "defaultActive": true,
        isVector: true,
                "attribs": [
        tilesUrl: "https://tiles.scuba-spot.info/contours/{z}/{x}/{y}",
                    {
        options: {
                        "url": "https://www.openstreetmap.org/copyright",
          vectorTileLayerStyles: {
                        "name": "OpenStreetMap",
            merged: { weight: 1, color: "#333" }
                        "label": "Map data"
          },
                    },
          interactive: true,
                    {
          defaultActive: false,
                        "url": "https://www.openseamap.org/",
          maxNativeZoom: 18,
                        "name": "Open Sea Map",
          maxZoom: 19,
                        "label": "Map style"
        }
                    }
      }
                ]
    },
            }
    baseLayers: {
        }/*,
      // future base-layer entries
        "landscape": {
    }
            "tilesUrl": "http://tiles.scuba-spot.info/contours/{z}/{x}/{y}",
  };
            "options": {
 
                "wvIsExternal": true,
  // Create a Leaflet layer (tile or vector) from metadata
                "wvIsOverlay": true,
  function makeLayer(def) {
                "wvName": "Contours",
    if (def.isVector) {
                "defaultActive": false,
      return L.vectorGrid.protobuf(def.tilesUrl, def.options);
                "attribs": [
    }
                    {
    return L.tileLayer(def.tilesUrl, def.options);
                        "url": "https://www.swisstopo.admin.ch/de/hoehenmodell-swissbathy3d",
  }
                        "name": "swissBathy3D",
 
                        "label": "©swisstopo"
  // Add layers to the map with control and default activation
                    }
  function addCustomLayers(map) {
                ]
    const base = {};
            }
    const overlays = {};
        }*/
 
        // Add more layers as needed
    Object.values(tileLayers.baseLayers).forEach(def => {
     };
      base[def.name] = makeLayer(def);
     });


     // Function to add layers to the map
     Object.values(tileLayers.overlays).forEach(def => {
    function addCustomLayers(map) {
      const layer = makeLayer(def);
        var baseLayers = {};
      overlays[def.name] = layer;
        var overlayLayers = {};
      if (def.options.spDefaultActive) {
        layer.addTo(map);
      }
    });


        for (var key in maptiles) {
    L.control.layers(base, overlays).addTo(map);
            var tile = maptiles[key];
  }
            var layer = L.tileLayer(tile.tilesUrl, tile.options);
            if (tile.options.wvIsOverlay) {
                overlayLayers[tile.options.wvName] = layer;
                if (tile.options.defaultActive) {
                    layer.addTo(map);
                }
            } else {
                baseLayers[tile.options.wvName] = layer;
            }
        }


        L.control.layers(baseLayers, overlayLayers).addTo(map);
  // Inline maps
  mw.hook("wikipage.maps").add(function (maps) {
    if (Array.isArray(maps)) {
      maps.forEach(addCustomLayers);
    } else {
      addCustomLayers(maps);
     }
     }
  });


    // Hook into Kartographer's map initialization
  // Full-screen maps
    mw.hook('wikipage.maps').add(function (maps) {
  mw.hook("kartographer.bootstrap.map").add(addCustomLayers);
        maps.forEach(function (map) {
  mw.hook("kartographer.bootstrap.mapWindow").add(addCustomLayers);
            addCustomLayers(map);
        });
    });
})(mediaWiki);
})(mediaWiki);

Aktuelle Version vom 10. Juni 2025, 20:57 Uhr

/* Global JavaScript for Kartographer maps */

(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);