]> git.openstreetmap.org Git - rails.git/blob - app/assets/javascripts/index/history.js
Merge remote-tracking branch 'jfirebaugh/legacy-params'
[rails.git] / app / assets / javascripts / index / history.js
1 OSM.History = function(map) {
2   var page = {};
3
4   $("#sidebar_content")
5     .on("click", ".changeset_more a", loadMore)
6     .on("mouseover", "[data-changeset]", function () {
7       highlightChangeset($(this).data("changeset").id);
8     })
9     .on("mouseout", "[data-changeset]", function () {
10       unHighlightChangeset($(this).data("changeset").id);
11     })
12     .on("click", "[data-changeset]", function (e) {
13       e.preventDefault();
14       clickChangeset($(this).data("changeset").id);
15     });
16
17   var group = L.featureGroup()
18     .on("mouseover", function (e) {
19       highlightChangeset(e.layer.id);
20     })
21     .on("mouseout", function (e) {
22       unHighlightChangeset(e.layer.id);
23     })
24     .on("click", function (e) {
25       clickChangeset(e.layer.id);
26     });
27
28   group.getLayerId = function(layer) {
29     return layer.id;
30   };
31
32   function highlightChangeset(id) {
33     group.getLayer(id).setStyle({fillOpacity: 0.3});
34     $("#changeset_" + id).addClass("selected");
35   }
36
37   function unHighlightChangeset(id) {
38     group.getLayer(id).setStyle({fillOpacity: 0});
39     $("#changeset_" + id).removeClass("selected");
40   }
41
42   function clickChangeset(id) {
43     OSM.router.route($("#changeset_" + id).find(".changeset_id").attr("href"));
44   }
45
46   function loadData() {
47     var data = {list: '1'};
48
49     if (window.location.pathname === '/history') {
50       data.bbox = map.getBounds().wrap().toBBoxString();
51     }
52
53     $.ajax({
54       url: window.location.pathname,
55       method: "GET",
56       data: data,
57       success: function(html, status, xhr) {
58         $('#sidebar_content .changesets').html(html);
59         updateMap();
60       }
61     });
62   }
63
64   function loadMore(e) {
65     e.preventDefault();
66     e.stopPropagation();
67
68     var div = $(this).parents(".changeset_more");
69
70     $(this).hide();
71     div.find(".loader").show();
72
73     $.get($(this).attr("href"), function(data) {
74       div.replaceWith(data);
75       updateMap();
76     });
77   }
78
79   function updateMap() {
80     group.clearLayers();
81
82     var changesets = [];
83
84     $("[data-changeset]").each(function () {
85       var changeset = $(this).data('changeset');
86       if (changeset.bbox) {
87         changeset.bounds = L.latLngBounds(
88           [changeset.bbox.minlat, changeset.bbox.minlon],
89           [changeset.bbox.maxlat, changeset.bbox.maxlon]);
90         changesets.push(changeset);
91       }
92     });
93
94     changesets.sort(function (a, b) {
95       return b.bounds.getSize() - a.bounds.getSize();
96     });
97
98     for (var i = 0; i < changesets.length; ++i) {
99       var changeset = changesets[i],
100         rect = L.rectangle(changeset.bounds,
101           {weight: 2, color: "#FF9500", opacity: 1, fillColor: "#FFFFBF", fillOpacity: 0});
102       rect.id = changeset.id;
103       rect.addTo(group);
104     }
105
106     if (window.location.pathname !== '/history') {
107       var bounds = group.getBounds();
108       if (bounds.isValid()) map.fitBounds(bounds);
109     }
110   }
111
112   page.pushstate = page.popstate = function(path) {
113     $("#history_tab").addClass("current");
114     OSM.loadSidebarContent(path, page.load);
115   };
116
117   page.load = function() {
118     map.addLayer(group);
119
120     if (window.location.pathname === '/history') {
121       map.on("moveend", loadData)
122     }
123
124     loadData();
125   };
126
127   page.unload = function() {
128     map.removeLayer(group);
129
130     if (window.location.pathname === '/history') {
131       map.off("moveend", loadData)
132     }
133
134     $("#history_tab").removeClass("current");
135   };
136
137   return page;
138 };