pushState based navigation between map-based layouts
This commit is contained in:
parent
64cb9b0a8b
commit
a56d1036d5
13 changed files with 275 additions and 143 deletions
|
@ -1,71 +1,76 @@
|
|||
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();
|
||||
|
||||
update();
|
||||
map.fitBounds(bounds);
|
||||
locationFilter.setBounds(bounds);
|
||||
|
||||
locationFilter.on("change", update);
|
||||
enableFilter();
|
||||
validateControls();
|
||||
}
|
||||
|
||||
map.on("moveend", update);
|
||||
function enableFilter() {
|
||||
if (!locationFilter.getBounds().isValid()) {
|
||||
locationFilter.setBounds(map.getBounds().pad(-0.2));
|
||||
}
|
||||
|
||||
$("#maxlat,#minlon,#maxlon,#minlat").change(boundsChanged);
|
||||
$("#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);
|
||||
}
|
||||
|
||||
page.pushstate = page.popstate = function(path) {
|
||||
$("#export_tab").addClass("current");
|
||||
$('#sidebar_content').load(path, page.load);
|
||||
};
|
||||
|
||||
page.load = function() {
|
||||
map
|
||||
.addLayer(locationFilter)
|
||||
.on("moveend", update);
|
||||
|
||||
$("#maxlat, #minlon, #maxlon, #minlat").change(boundsChanged);
|
||||
$("#drag_box").click(enableFilter);
|
||||
|
||||
setBounds(map.getBounds());
|
||||
update();
|
||||
};
|
||||
|
||||
$("#sidebar").one("closed", function () {
|
||||
map.removeLayer(locationFilter);
|
||||
map.off("moveend", update);
|
||||
locationFilter.off("change", update);
|
||||
});
|
||||
page.unload = function() {
|
||||
map
|
||||
.removeLayer(locationFilter)
|
||||
.off("moveend", update);
|
||||
|
||||
function getBounds() {
|
||||
return L.latLngBounds(L.latLng($("#minlat").val(), $("#minlon").val()),
|
||||
L.latLng($("#maxlat").val(), $("#maxlon").val()));
|
||||
}
|
||||
$("#export_tab").removeClass("current");
|
||||
};
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
return page;
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue