]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/changeset.js
Move changeset JS to page-specific script file
[rails.git] / app / assets / javascripts / changeset.js
diff --git a/app/assets/javascripts/changeset.js b/app/assets/javascripts/changeset.js
new file mode 100644 (file)
index 0000000..0946056
--- /dev/null
@@ -0,0 +1,75 @@
+var highlight;
+
+function highlightChangeset(id) {
+  var feature = vectors.getFeatureByFid(id);
+  var bounds = feature.geometry.getBounds();
+
+  if (bounds.containsBounds(map.getExtent())) {
+    bounds = map.getExtent().scale(1.1);
+  }
+
+  if (highlight) vectors.removeFeatures(highlight);
+
+  highlight = new OpenLayers.Feature.Vector(bounds.toGeometry(), {}, {
+    strokeWidth: 2,
+    strokeColor: "#ee9900",
+    fillColor: "#ffff55",
+    fillOpacity: 0.5
+  });
+
+  vectors.addFeatures(highlight);
+
+  $("#tr-changeset-" + id).addClass("selected");
+}
+
+function unHighlightChangeset(id) {
+  vectors.removeFeatures(highlight);
+
+  $("#tr-changeset-" + id).removeClass("selected");
+}
+
+$(document).ready(function () {
+  var map = createMap("changeset_list_map", {
+    controls: [
+      new OpenLayers.Control.Navigation(),
+      new OpenLayers.Control.Zoom(),
+      new OpenLayers.Control.SimplePanZoom()
+    ]
+  });
+
+  var bounds = new OpenLayers.Bounds();
+
+  $("[data-changeset]").each(function () {
+    var changeset = $(this).data('changeset');
+    if (changeset.bbox) {
+      var bbox = new OpenLayers.Bounds(changeset.bbox.minlon, changeset.bbox.minlat, changeset.bbox.maxlon, changeset.bbox.maxlat);
+
+      bounds.extend(bbox);
+
+      addBoxToMap(bbox, changeset.id, true);
+    }
+  });
+
+  vectors.events.on({
+    "featureselected": function(feature) {
+      highlightChangeset(feature.feature.fid);
+    },
+    "featureunselected": function(feature) {
+      unHighlightChangeset(feature.feature.fid);
+    }
+  });
+
+  var selectControl = new OpenLayers.Control.SelectFeature(vectors, {
+    multiple: false,
+    hover: true
+  });
+  map.addControl(selectControl);
+  selectControl.activate();
+
+  var params = OSM.mapParams();
+  if (params.bbox) {
+    map.zoomToExtent(proj(new OpenLayers.Bounds(params.minlon, params.minlat, params.maxlon, params.maxlat)));
+  } else {
+    map.zoomToExtent(proj(bounds));
+  }
+});