]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/index/export.js
Avoid swapping min and max longitude in RTL mode
[rails.git] / app / assets / javascripts / index / export.js
index 01d21cea255d52830d7e1ad091710aa67369a8e9..48e950b2137870f88e4aac912781cf3b94d17a70 100644 (file)
@@ -1,71 +1,87 @@
-function initializeExport(map) {
-  if (window.location.pathname == "/export") {
-    startExport();
+OSM.Export = function(map) {
+  var page = {};
+
+  var locationFilter = new L.LocationFilter({
+    enableButton: false,
+    adjustButton: false
+  }).on("change", update);
+
+  function getBounds() {
+    return L.latLngBounds(
+      L.latLng($("#minlat").val(), $("#minlon").val()),
+      L.latLng($("#maxlat").val(), $("#maxlon").val()));
   }
 
-  function startExport() {
-    var locationFilter = new L.LocationFilter({
-      enableButton: false,
-      adjustButton: false
-    }).addTo(map);
+  function boundsChanged() {
+    var bounds = getBounds();
+    map.fitBounds(bounds);
+    locationFilter.setBounds(bounds);
+    locationFilter.enable();
+    validateControls();
+  }
 
-    update();
+  function enableFilter(e) {
+    e.preventDefault();
 
-    locationFilter.on("change", update);
+    $("#drag_box").hide();
 
-    map.on("moveend", update);
+    locationFilter.setBounds(map.getBounds().pad(-0.2));
+    locationFilter.enable();
+    validateControls();
+  }
 
-    $("#maxlat,#minlon,#maxlon,#minlat").change(boundsChanged);
+  function update() {
+    setBounds(locationFilter.isEnabled() ? locationFilter.getBounds() : map.getBounds());
+    validateControls();
+  }
 
-    $("#drag_box").click(enableFilter);
+  function setBounds(bounds) {
+    var precision = OSM.zoomPrecision(map.getZoom());
+    $("#minlon").val(bounds.getWest().toFixed(precision));
+    $("#minlat").val(bounds.getSouth().toFixed(precision));
+    $("#maxlon").val(bounds.getEast().toFixed(precision));
+    $("#maxlat").val(bounds.getNorth().toFixed(precision));
+
+    $("#export_overpass").attr("href",
+        "https://overpass-api.de/api/map?bbox=" +
+        $("#minlon").val() + "," + $("#minlat").val() + "," +
+        $("#maxlon").val() + "," + $("#maxlat").val());
+  }
+
+  function validateControls() {
+    $("#export_osm_too_large").toggle(getBounds().getSize() > OSM.MAX_REQUEST_AREA);
+    $("#export_commit").toggle(getBounds().getSize() < OSM.MAX_REQUEST_AREA);
+  }
 
-    setBounds(map.getBounds());
-
-    $("#sidebar").one("closed", function () {
-      map.removeLayer(locationFilter);
-      map.off("moveend", update);
-      locationFilter.off("change", update);
-    });
-
-    function getBounds() {
-      return L.latLngBounds(L.latLng($("#minlat").val(), $("#minlon").val()),
-                            L.latLng($("#maxlat").val(), $("#maxlon").val()));
-    }
-
-    function boundsChanged() {
-      var bounds = getBounds();
-
-      map.fitBounds(bounds);
-      locationFilter.setBounds(bounds);
-
-      enableFilter();
-      validateControls();
-    }
-
-    function enableFilter() {
-      if (!locationFilter.getBounds().isValid()) {
-        locationFilter.setBounds(map.getBounds().pad(-0.2));
-      }
-
-      $("#drag_box").hide();
-      locationFilter.enable();
-    }
-
-    function update() {
-      setBounds(locationFilter.isEnabled() ? locationFilter.getBounds() : map.getBounds());
-      validateControls();
-    }
-
-    function setBounds(bounds) {
-      var precision = zoomPrecision(map.getZoom());
-      $("#minlon").val(bounds.getWest().toFixed(precision));
-      $("#minlat").val(bounds.getSouth().toFixed(precision));
-      $("#maxlon").val(bounds.getEast().toFixed(precision));
-      $("#maxlat").val(bounds.getNorth().toFixed(precision));
-    }
-
-    function validateControls() {
-      $("#export_osm_too_large").toggle(getBounds().getSize() > OSM.MAX_REQUEST_AREA);
-    }
+  function checkSubmit(e) {
+    if (getBounds().getSize() > OSM.MAX_REQUEST_AREA) e.preventDefault();
   }
-}
+
+  page.pushstate = page.popstate = function(path) {
+    $("#export_tab").addClass("current");
+    OSM.loadSidebarContent(path, page.load);
+  };
+
+  page.load = function() {
+    map
+      .addLayer(locationFilter)
+      .on("moveend", update);
+
+    $("#maxlat, #minlon, #maxlon, #minlat").change(boundsChanged);
+    $("#drag_box").click(enableFilter);
+    $(".export_form").on("submit", checkSubmit);
+
+    update();
+    return map.getState();
+  };
+
+  page.unload = function() {
+    map
+      .removeLayer(locationFilter)
+      .off("moveend", update);
+
+    $("#export_tab").removeClass("current");
+  };
+
+  return page;
+};