]> git.openstreetmap.org Git - rails.git/blob - app/assets/javascripts/index/export.js
Fix #2402
[rails.git] / app / assets / javascripts / index / export.js
1 OSM.Export = function (map) {
2   var page = {};
3
4   var locationFilter = new L.LocationFilter({
5     enableButton: false,
6     adjustButton: false
7   }).on("change", update);
8
9   function getBounds() {
10     return L.latLngBounds(
11       L.latLng($("#minlat").val(), $("#minlon").val()),
12       L.latLng($("#maxlat").val(), $("#maxlon").val()));
13   }
14
15   function boundsChanged() {
16     var bounds = getBounds();
17     map.fitBounds(bounds);
18     locationFilter.setBounds(bounds);
19     locationFilter.enable();
20     validateControls();
21   }
22
23   function enableFilter(e) {
24     e.preventDefault();
25
26     $("#drag_box").hide();
27
28     locationFilter.setBounds(map.getBounds().pad(-0.2));
29     locationFilter.enable();
30     validateControls();
31   }
32
33   function update() {
34     setBounds(locationFilter.isEnabled() ? locationFilter.getBounds() : map.getBounds());
35     validateControls();
36   }
37
38   function setBounds(bounds) {
39     var precision = OSM.zoomPrecision(map.getZoom());
40     $("#minlon").val(bounds.getWest().toFixed(precision));
41     $("#minlat").val(bounds.getSouth().toFixed(precision));
42     $("#maxlon").val(bounds.getEast().toFixed(precision));
43     $("#maxlat").val(bounds.getNorth().toFixed(precision));
44
45     $("#export_overpass").attr("href",
46                                "https://overpass-api.de/api/map?bbox=" +
47                                $("#minlon").val() + "," + $("#minlat").val() + "," +
48                                $("#maxlon").val() + "," + $("#maxlat").val());
49   }
50
51   function validateControls() {
52     $("#export_osm_too_large").toggle(getBounds().getSize() > OSM.MAX_REQUEST_AREA);
53     $("#export_commit").toggle(getBounds().getSize() < OSM.MAX_REQUEST_AREA);
54   }
55
56   function checkSubmit(e) {
57     if (getBounds().getSize() > OSM.MAX_REQUEST_AREA) e.preventDefault();
58   }
59
60   page.pushstate = page.popstate = function (path) {
61     $("#export_tab").addClass("current");
62     OSM.loadSidebarContent(path, page.load);
63   };
64
65   page.load = function () {
66     map
67       .addLayer(locationFilter)
68       .on("moveend", update);
69
70     $("#maxlat, #minlon, #maxlon, #minlat").change(boundsChanged);
71     $("#drag_box").click(enableFilter);
72     $(".export_form").on("submit", checkSubmit);
73
74     update();
75     return map.getState();
76   };
77
78   page.unload = function () {
79     map
80       .removeLayer(locationFilter)
81       .off("moveend", update);
82
83     $("#export_tab").removeClass("current");
84   };
85
86   return page;
87 };