]> git.openstreetmap.org Git - rails.git/commitdiff
Merge branch 'pull/5556'
authorAnton Khorev <tony29@yandex.ru>
Tue, 28 Jan 2025 05:31:21 +0000 (08:31 +0300)
committerAnton Khorev <tony29@yandex.ru>
Tue, 28 Jan 2025 05:31:21 +0000 (08:31 +0300)
app/assets/javascripts/index.js
app/assets/javascripts/index/layers/data.js
app/assets/javascripts/index/layers/notes.js
app/assets/javascripts/leaflet.layers.js
app/assets/javascripts/leaflet.map.js
app/assets/javascripts/leaflet.share.js
app/assets/javascripts/router.js

index 56495b31a31c87fd18ca8b864ac492b84f1f0240..d61191fb43ab3e669417c7dd2c2246a65b969501 100644 (file)
@@ -173,7 +173,7 @@ $(document).ready(function () {
   var expiry = new Date();
   expiry.setYear(expiry.getFullYear() + 10);
 
-  map.on("moveend layeradd layerremove", function () {
+  map.on("moveend baselayerchange overlayadd overlayremove", function () {
     updateLinks(
       map.getCenter().wrap(),
       map.getZoom(),
@@ -205,7 +205,7 @@ $(document).ready(function () {
   });
 
   if (OSM.MATOMO) {
-    map.on("layeradd", function (e) {
+    map.on("baselayerchange overlayadd", function (e) {
       if (e.layer.options) {
         var goal = OSM.MATOMO.goals[e.layer.options.layerId];
 
index 7507a5f4e791875738f4c89023d73bcdd78133db..b972adbc2dc18f91c2bf72283ca731333c3ef158 100644 (file)
@@ -25,18 +25,16 @@ OSM.initializeDataLayer = function (map) {
     onSelect(e.layer);
   });
 
-  map.on("layeradd", function (e) {
-    if (e.layer === dataLayer) {
-      map.on("moveend", updateData);
-      updateData();
-    }
+  dataLayer.on("add", function () {
+    map.fire("overlayadd", { layer: this });
+    map.on("moveend", updateData);
+    updateData();
   });
 
-  map.on("layerremove", function (e) {
-    if (e.layer === dataLayer) {
-      map.off("moveend", updateData);
-      $("#browse_status").empty();
-    }
+  dataLayer.on("remove", function () {
+    map.off("moveend", updateData);
+    $("#browse_status").empty();
+    map.fire("overlayremove", { layer: this });
   });
 
   function updateData() {
@@ -63,11 +61,16 @@ OSM.initializeDataLayer = function (map) {
           .click(add)));
   }
 
-  function displayLoadError(message) {
+  function displayLoadError(message, close) {
     $("#browse_status").html(
       $("<div class='p-3'>").append(
-        $("<h2 class='flex-grow-1 text-break'>")
-          .text(I18n.t("browse.start_rjs.load_data")),
+        $("<div class='d-flex'>").append(
+          $("<h2 class='flex-grow-1 text-break'>")
+            .text(I18n.t("browse.start_rjs.load_data")),
+          $("<div>").append(
+            $("<button type='button' class='btn-close'>")
+              .attr("aria-label", I18n.t("javascripts.close"))
+              .click(close))),
         $("<div>").append(
           $("<div class='d-flex'>").append(
             $("<p class='alert alert-warning'>")
@@ -82,10 +85,10 @@ OSM.initializeDataLayer = function (map) {
 
     /*
      * Modern browsers are quite happy showing far more than 100 features in
-     * the data browser, so increase the limit to 2000 by default, but keep
+     * the data browser, so increase the limit to 4000 by default, but keep
      * it restricted to 500 for IE8 and 100 for older IEs.
      */
-    var maxFeatures = 2000;
+    var maxFeatures = 4000;
 
     /*@cc_on
       if (navigator.appVersion < 8) {
@@ -130,12 +133,16 @@ OSM.initializeDataLayer = function (map) {
         dataLoader = null;
         if (textStatus === "abort") { return; }
 
+        function closeError() {
+          $("#browse_status").empty();
+        }
+
         if (XMLHttpRequest.status === 400 && XMLHttpRequest.responseText) {
-          displayLoadError(XMLHttpRequest.responseText);
+          displayLoadError(XMLHttpRequest.responseText, closeError);
         } else if (XMLHttpRequest.statusText) {
-          displayLoadError(XMLHttpRequest.statusText);
+          displayLoadError(XMLHttpRequest.statusText, closeError);
         } else {
-          displayLoadError(String(XMLHttpRequest.status));
+          displayLoadError(String(XMLHttpRequest.status), closeError);
         }
       }
     });
index 4676aa425ea312b4f0a098d993fd306909c250d6..c0ba35d7e1b0d6f7c2e3819af78f1a7aada91f6f 100644 (file)
@@ -23,10 +23,12 @@ OSM.initializeNotesLayer = function (map) {
   noteLayer.on("add", () => {
     loadNotes();
     map.on("moveend", loadNotes);
+    map.fire("overlayadd", { layer: noteLayer });
   }).on("remove", () => {
     map.off("moveend", loadNotes);
     noteLayer.clearLayers();
     notes = {};
+    map.fire("overlayremove", { layer: noteLayer });
   }).on("click", function (e) {
     if (e.layer.id) {
       OSM.router.route("/note/" + e.layer.id);
index 35b958c7aaa097652ccebf1f392087c8a31801b7..3f577b532d3ba707dbf487277ce17d2bb1592883 100644 (file)
@@ -61,18 +61,16 @@ L.OSM.layers = function (options) {
 
       input.on("click", function () {
         layers.forEach(function (other) {
-          if (other === layer) {
-            map.addLayer(other);
-          } else {
+          if (other !== layer) {
             map.removeLayer(other);
           }
         });
-        map.fire("baselayerchange", { layer: layer });
+        map.addLayer(layer);
       });
 
       item.on("dblclick", toggle);
 
-      map.on("layeradd layerremove", function () {
+      map.on("baselayerchange", function () {
         input.prop("checked", map.hasLayer(layer));
       });
     });
@@ -121,10 +119,9 @@ L.OSM.layers = function (options) {
           } else {
             map.removeLayer(layer);
           }
-          map.fire("overlaylayerchange", { layer: layer });
         });
 
-        map.on("layeradd layerremove", function () {
+        map.on("overlayadd overlayremove", function () {
           input.prop("checked", map.hasLayer(layer));
         });
 
index 7929ea0ac7f33545f34c2a73de64150b1ed0f231..99d5a60503328074457a0921e2000428e57907a3 100644 (file)
@@ -40,6 +40,9 @@ L.OSM.Map = L.Map.extend({
       }
 
       const layer = new layerConstructor(layerOptions);
+      layer.on("add", () => {
+        this.fire("baselayerchange", { layer: layer });
+      });
       this.baseLayers.push(layer);
     }
 
@@ -53,8 +56,14 @@ L.OSM.Map = L.Map.extend({
       pane: "overlayPane",
       code: "G"
     });
+    this.gpsLayer.on("add", () => {
+      this.fire("overlayadd", { layer: this.gpsLayer });
+    }).on("remove", () => {
+      this.fire("overlayremove", { layer: this.gpsLayer });
+    });
+
 
-    this.on("layeradd", function (event) {
+    this.on("baselayerchange", function (event) {
       if (this.baseLayers.indexOf(event.layer) >= 0) {
         this.setMaxZoom(event.layer.options.maxZoom);
       }
@@ -109,14 +118,18 @@ L.OSM.Map = L.Map.extend({
     var layers = layerParam || "M",
         layersAdded = "";
 
-    for (var i = this.baseLayers.length - 1; i >= 0; i--) {
+    for (let i = this.baseLayers.length - 1; i >= 0; i--) {
+      if (layers.indexOf(this.baseLayers[i].options.code) === -1) {
+        this.removeLayer(this.baseLayers[i]);
+      }
+    }
+
+    for (let i = this.baseLayers.length - 1; i >= 0; i--) {
       if (layers.indexOf(this.baseLayers[i].options.code) >= 0) {
         this.addLayer(this.baseLayers[i]);
         layersAdded = layersAdded + this.baseLayers[i].options.code;
       } else if (i === 0 && layersAdded === "") {
         this.addLayer(this.baseLayers[i]);
-      } else {
-        this.removeLayer(this.baseLayers[i]);
       }
     }
   },
@@ -297,6 +310,7 @@ L.OSM.Map = L.Map.extend({
       }
 
       if (callback) callback(this._objectLayer.getBounds());
+      this.fire("overlayadd", { layer: this._objectLayer });
     } else { // element handled by L.OSM.DataLayer
       var map = this;
       this._objectLoader = $.ajax({
@@ -328,6 +342,7 @@ L.OSM.Map = L.Map.extend({
           map._objectLayer.addTo(map);
 
           if (callback) callback(map._objectLayer.getBounds());
+          map.fire("overlayadd", { layer: map._objectLayer });
         }
       });
     }
@@ -337,6 +352,7 @@ L.OSM.Map = L.Map.extend({
     this._object = null;
     if (this._objectLoader) this._objectLoader.abort();
     if (this._objectLayer) this.removeLayer(this._objectLayer);
+    this.fire("overlayremove", { layer: this._objectLayer });
   },
 
   getState: function () {
index 7713a6b147228d66f2ab1d426188dd6740af7a53..1eed2151a9ed3a9adb7d4fa7e63dc63f1458a04d 100644 (file)
@@ -269,7 +269,7 @@ L.OSM.share = function (options) {
 
     marker.on("dragend", movedMarker);
     map.on("move", movedMap);
-    map.on("moveend layeradd layerremove", update);
+    map.on("moveend baselayerchange overlayadd overlayremove", update);
 
     $ui
       .on("show", shown)
index c4e52417004c5c50871f23fe28edf967596c68b7..a8659d308762024606b7f1aa0df85398839326a6 100644 (file)
@@ -190,7 +190,7 @@ OSM.Router = function (map, rts) {
     currentRoute = routes.recognize(currentPath);
   };
 
-  map.on("moveend baselayerchange overlaylayerchange", router.updateHash);
+  map.on("moveend baselayerchange overlayadd overlayremove", router.updateHash);
   $(window).on("hashchange", router.hashUpdated);
 
   return router;