openstreetmap-website/app/assets/javascripts/index/history.js
Tom Hughes be931d0955 Restore click handler for changeset entries
The default click handler only handle the, not the rest of the
entry, so retore the handler but add an e.preventDefault() call
to stop the second handler running.
2013-12-02 18:49:56 +00:00

138 lines
3.3 KiB
JavaScript

OSM.History = function(map) {
var page = {};
$("#sidebar_content")
.on("click", ".changeset_more a", loadMore)
.on("mouseover", "[data-changeset]", function () {
highlightChangeset($(this).data("changeset").id);
})
.on("mouseout", "[data-changeset]", function () {
unHighlightChangeset($(this).data("changeset").id);
})
.on("click", "[data-changeset]", function (e) {
e.preventDefault();
clickChangeset($(this).data("changeset").id);
});
var group = L.featureGroup()
.on("mouseover", function (e) {
highlightChangeset(e.layer.id);
})
.on("mouseout", function (e) {
unHighlightChangeset(e.layer.id);
})
.on("click", function (e) {
clickChangeset(e.layer.id);
});
group.getLayerId = function(layer) {
return layer.id;
};
function highlightChangeset(id) {
group.getLayer(id).setStyle({fillOpacity: 0.3});
$("#changeset_" + id).addClass("selected");
}
function unHighlightChangeset(id) {
group.getLayer(id).setStyle({fillOpacity: 0});
$("#changeset_" + id).removeClass("selected");
}
function clickChangeset(id) {
OSM.router.route($("#changeset_" + id).find(".changeset_id").attr("href"));
}
function loadData() {
var data = {};
if (window.location.pathname === '/history') {
data = {bbox: map.getBounds().wrap().toBBoxString()};
}
$.ajax({
url: window.location.pathname,
method: "GET",
data: data,
success: function(html, status, xhr) {
$('#sidebar_content .changesets').html(html);
updateMap();
}
});
}
function loadMore(e) {
e.preventDefault();
e.stopPropagation();
var div = $(this).parents(".changeset_more");
$(this).hide();
div.find(".loader").show();
$.get($(this).attr("href"), function(data) {
div.replaceWith(data);
updateMap();
});
}
function updateMap() {
group.clearLayers();
var changesets = [];
$("[data-changeset]").each(function () {
var changeset = $(this).data('changeset');
if (changeset.bbox) {
changeset.bounds = L.latLngBounds(
[changeset.bbox.minlat, changeset.bbox.minlon],
[changeset.bbox.maxlat, changeset.bbox.maxlon]);
changesets.push(changeset);
}
});
changesets.sort(function (a, b) {
return b.bounds.getSize() - a.bounds.getSize();
});
for (var i = 0; i < changesets.length; ++i) {
var changeset = changesets[i],
rect = L.rectangle(changeset.bounds,
{weight: 2, color: "#FF9500", opacity: 1, fillColor: "#FFFFBF", fillOpacity: 0});
rect.id = changeset.id;
rect.addTo(group);
}
if (window.location.pathname !== '/history') {
var bounds = group.getBounds();
if (bounds.isValid()) map.fitBounds(bounds);
}
}
page.pushstate = page.popstate = function(path) {
$("#history_tab").addClass("current");
OSM.loadSidebarContent(path, page.load);
};
page.load = function() {
map.addLayer(group);
if (window.location.pathname === '/history') {
map.on("moveend", loadData)
}
loadData();
};
page.unload = function() {
map.removeLayer(group);
if (window.location.pathname === '/history') {
map.off("moveend", loadData)
}
$("#history_tab").removeClass("current");
};
return page;
};