]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/index/browse.js
Merge remote-tracking branch 'upstream/pull/4960'
[rails.git] / app / assets / javascripts / index / browse.js
index 772690ba3c5772d2a16d38f957e95e70e900adad..7a761b50036dd30d02c1ec2d2fd0ca16f6b660d0 100644 (file)
@@ -1,6 +1,5 @@
-function initializeBrowse(map) {
+OSM.initializeBrowse = function (map) {
   var browseBounds;
-  var selectedLayer;
   var dataLayer = map.dataLayer;
 
   dataLayer.setStyle({
@@ -26,63 +25,48 @@ function initializeBrowse(map) {
     onSelect(e.layer);
   });
 
-  map.on('layeradd', function (e) {
+  map.on("layeradd", function (e) {
     if (e.layer === dataLayer) {
       map.on("moveend", updateData);
       updateData();
     }
   });
 
-  map.on('layerremove', function (e) {
+  map.on("layerremove", function (e) {
     if (e.layer === dataLayer) {
       map.off("moveend", updateData);
+      $("#browse_status").empty();
     }
   });
 
   function updateData() {
-    if (map.getZoom() >= 15) {
-      var bounds = map.getBounds();
-      if (!browseBounds || !browseBounds.contains(bounds)) {
-        browseBounds = bounds;
-        getData();
-      }
-    } else {
-      setStatus(I18n.t('browse.start_rjs.zoom_or_select'));
+    var bounds = map.getBounds();
+    if (!browseBounds || !browseBounds.contains(bounds)) {
+      getData();
     }
   }
 
-  function displayFeatureWarning(count, limit, callback) {
-    clearStatus();
-
-    var div = document.createElement("div");
-
-    var p = document.createElement("p");
-    p.appendChild(document.createTextNode(I18n.t("browse.start_rjs.loaded_an_area_with_num_features", { num_features: count, max_features: limit })));
-    div.appendChild(p);
-
-    var input = document.createElement("input");
-    input.type = "submit";
-    input.value = I18n.t('browse.start_rjs.load_data');
-    input.onclick = callback;
-    div.appendChild(input);
-
-    $("#browse_content").html("");
-    $("#browse_content").append(div);
+  function displayFeatureWarning(count, limit, add, cancel) {
+    $("#browse_status").html(
+      $("<div class='p-3'>").append(
+        $("<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(cancel))),
+        $("<p class='alert alert-warning'>")
+          .text(I18n.t("browse.start_rjs.feature_warning", { num_features: count, max_features: limit })),
+        $("<input type='submit' class='btn btn-primary d-block mx-auto'>")
+          .val(I18n.t("browse.start_rjs.load_data"))
+          .click(add)));
   }
 
   var dataLoader;
 
   function getData() {
     var bounds = map.getBounds();
-    var size = bounds.getSize();
-
-    if (size > OSM.MAX_REQUEST_AREA) {
-      setStatus(I18n.t("browse.start_rjs.unable_to_load_size", { max_bbox_size: OSM.MAX_REQUEST_AREA, bbox_size: size }));
-      return;
-    }
-
-    setStatus(I18n.t('browse.start_rjs.loading'));
-
     var url = "/api/" + OSM.API_VERSION + "/map?bbox=" + bounds.toBBoxString();
 
     /*
@@ -105,21 +89,28 @@ function initializeBrowse(map) {
     dataLoader = $.ajax({
       url: url,
       success: function (xml) {
-        clearStatus();
-
         dataLayer.clearLayers();
-        selectedLayer = null;
 
         var features = dataLayer.buildFeatures(xml);
 
         function addFeatures() {
+          $("#browse_status").empty();
           dataLayer.addData(features);
+          browseBounds = bounds;
+        }
+
+        function cancelAddFeatures() {
+          $("#browse_status").empty();
         }
 
         if (features.length < maxFeatures) {
           addFeatures();
         } else {
-          displayFeatureWarning(features.length, maxFeatures, addFeatures);
+          displayFeatureWarning(features.length, maxFeatures, addFeatures, cancelAddFeatures);
+        }
+
+        if (map._objectLayer) {
+          map._objectLayer.bringToFront();
         }
 
         dataLoader = null;
@@ -128,24 +119,6 @@ function initializeBrowse(map) {
   }
 
   function onSelect(layer) {
-    // Unselect previously selected feature
-    if (selectedLayer) {
-      selectedLayer.setStyle(selectedLayer.originalStyle);
-    }
-
-    // Redraw in selected style
-    layer.originalStyle = layer.options;
-    layer.setStyle({color: '#0000ff', weight: 8});
-
-    OSM.route('/browse/' + layer.feature.type + '/' + layer.feature.id);
-
-    // Stash the currently drawn feature
-    selectedLayer = layer;
-  }
-
-  function setStatus(status) {
-  }
-
-  function clearStatus() {
+    OSM.router.route("/" + layer.feature.type + "/" + layer.feature.id);
   }
-}
+};