Sort changeset rectangles by size
authorJohn Firebaugh <john.firebaugh@gmail.com>
Thu, 29 Nov 2012 13:50:03 +0000 (05:50 -0800)
committerJohn Firebaugh <john.firebaugh@gmail.com>
Thu, 29 Nov 2012 13:50:03 +0000 (05:50 -0800)
This should help make more changesets accessible on the
map, without requiring precision cursor placement on the
changeset boundary (#169).

app/assets/javascripts/changeset.js

index 6ad1fd7fac35ce5da0b01d5edfd7c65f1ce4c302..152b3b4f77f4636f470ff216cf397ecef660a6df 100644 (file)
@@ -1,20 +1,30 @@
 $(document).ready(function () {
-  var rects = {};
+  var changesets = [], rects = {};
   var map = createMap("changeset_list_map");
   var group = L.featureGroup().addTo(map);
 
   $("[data-changeset]").each(function () {
     var changeset = $(this).data('changeset');
     if (changeset.bbox) {
-      var rect = L.rectangle([[changeset.bbox.minlat, changeset.bbox.minlon],
-                              [changeset.bbox.maxlat, changeset.bbox.maxlon]],
-                             {weight: 2, color: "#ee9900", fillColor: "#ffff55", fillOpacity: 0});
-      rect.id = changeset.id;
-      rects[changeset.id] = rect;
-      rect.addTo(group);
+      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;
+    rects[changeset.id] = rect;
+    rect.addTo(group);
+  }
+
   function highlightChangeset(id) {
     rects[id].setStyle({fillOpacity: 0.5});
     $("#tr-changeset-" + id).addClass("selected");