X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/a01195f1497b4f4c6b7d019c7affc794d41101cd..91c30d3a8c0b746cafa91e09740981ed682e4fa7:/app/assets/javascripts/index/export.js diff --git a/app/assets/javascripts/index/export.js b/app/assets/javascripts/index/export.js index 01d21cea2..48e950b21 100644 --- a/app/assets/javascripts/index/export.js +++ b/app/assets/javascripts/index/export.js @@ -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; +};