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 () { 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.5}); $("#changeset_" + id).addClass("selected"); } function unHighlightChangeset(id) { group.getLayer(id).setStyle({fillOpacity: 0}); $("#changeset_" + id).removeClass("selected"); } function clickChangeset(id) { OSM.route($("#changeset_" + id).find(".changeset_id").attr("href")); } function loadData() { $.ajax({ url: window.location.pathname, method: "GET", data: {bbox: map.getBounds().toBBoxString()}, success: function(html) { $('#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: "#ee9900", fillColor: "#ffff55", fillOpacity: 0}); rect.id = changeset.id; rect.addTo(group); } } page.pushstate = page.popstate = function(path) { $("#history_tab").addClass("current"); $("#sidebar").removeClass("minimized"); map.invalidateSize(); $("#sidebar_content").load(path, page.load); }; page.load = function() { map .on("moveend", loadData) .addLayer(group); loadData(); }; page.unload = function() { map .off("moveend", loadData) .removeLayer(group); group.clearLayers(); $("#history_tab").removeClass("current"); }; return page; };