pushState based navigation between map-based layouts

This commit is contained in:
John Firebaugh 2013-10-02 16:41:44 -07:00
parent 64cb9b0a8b
commit a56d1036d5
13 changed files with 275 additions and 143 deletions

View file

@ -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;
};