Zum Inhalt springen

MediaWiki:Kartographer.js: Unterschied zwischen den Versionen

Aus Scuba-Spot.info
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
/* This JavaScript is loaded on all pages containing maps */
/* Global JavaScript for Kartographer maps */


(function (mw) {
(function (mw) {
    // Define overlay and base layers separately
  // Metadata-only definitions: no direct L.* calls here
    const tileLayers = {
  const tileLayers = {
        overlays: {
    overlays: {
            openseamap: {
      openseamap: {
                name: "Open Sea Map",
        name: "Open Sea Map",
                layer: L.tileLayer("https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png", {
        isVector: false,
                    wvIsExternal: true,
        tilesUrl: "https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png",
                    wvIsOverlay: true,
        options: {
                    defaultActive: true,
          spDefaultActive: true,
                    attribs: [
          attribs: [
                        {
            {
                            url: "https://www.openstreetmap.org/copyright",
              url: "https://www.openstreetmap.org/copyright",
                            name: "OpenStreetMap",
              name: "OpenStreetMap",
                            label: "Map data"
              label: "Map data"
                        },
                        {
                            url: "https://www.openseamap.org/",
                            name: "Open Sea Map",
                            label: "Map style"
                        }
                    ]
                })
             },
             },
             contours: {
             {
                name: "Contours",
              url: "https://www.openseamap.org/",
                layer: L.vectorGrid.protobuf("https://tiles.scuba-spot.info/contours/{z}/{x}/{y}", {
              name: "Open Sea Map",
                    vectorTileLayerStyles: {
              label: "Map style"
                        merged: {
                            weight: 1,
                            color: '#333'
                        }
                    },
                    interactive: true
                })
             }
             }
        },
          ]
        baseLayers: {
            // Example for future use:
            // mapnik: {
            //    name: "Mapnik",
            //    layer: L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", { subdomains: ["a", "b", "c"] })
            // }
         }
         }
     };
      },
      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
        }
      }
     },
    baseLayers: {
      // future base-layer entries
    }
  };


    function addCustomLayers(map) {
  // Create a Leaflet layer (tile or vector) from metadata
        const base = {};
  function makeLayer(def) {
        const overlays = {};
    if (def.isVector) {
      return L.vectorGrid.protobuf(def.tilesUrl, def.options);
    }
    return L.tileLayer(def.tilesUrl, def.options);
  }


        for (const key in tileLayers.baseLayers) {
  // Add layers to the map with control and default activation
            const entry = tileLayers.baseLayers[key];
  function addCustomLayers(map) {
            base[entry.name] = entry.layer;
    const base = {};
        }
    const overlays = {};


        for (const key in tileLayers.overlays) {
    Object.values(tileLayers.baseLayers).forEach(def => {
            const entry = tileLayers.overlays[key];
      base[def.name] = makeLayer(def);
            overlays[entry.name] = entry.layer;
    });
        }


        L.control.layers(base, overlays).addTo(map);
    Object.values(tileLayers.overlays).forEach(def => {
      const layer = makeLayer(def);
      overlays[def.name] = layer;
      if (def.options.spDefaultActive) {
        layer.addTo(map);
      }
    });


        // Activate default overlays
    L.control.layers(base, overlays).addTo(map);
        for (const key in tileLayers.overlays) {
  }
            const entry = tileLayers.overlays[key];
            if (entry.layer && entry.layer.options.defaultActive) {
                entry.layer.addTo(map);
            }
        }
    }


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

Version vom 10. Juni 2025, 20:40 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"
            }
          ]
        }
      },
      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
        }
      }
    },
    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);
  }

  // Hook into Kartographer
  mw.hook("wikipage.maps").add(function (maps) {
    maps.forEach(addCustomLayers);
  });
})(mediaWiki);