Add a map to the changeset list page, with a bounding box for each changeset and highighting when the mouse is placed over either a box on the map or a row of the table.
74 lines
2.6 KiB
Text
74 lines
2.6 KiB
Text
<%= javascript_include_tag '/openlayers/OpenLayers.js' %>
|
|
<%= javascript_include_tag '/openlayers/OpenStreetMap.js' %>
|
|
<%= javascript_include_tag 'map.js' %>
|
|
<div id="browse_map_changeset">
|
|
<div id="small_map">
|
|
</div>
|
|
<span id="loading"><%= t 'browse.map.loading' %></span>
|
|
</div>
|
|
<script type="text/javascript">
|
|
OpenLayers.Lang.setCode("<%= I18n.locale.to_s %>");
|
|
|
|
/*
|
|
This function borrowed from the latest version of OpenLayers.Layer.Vector. OSM is using an older version.
|
|
http://trac.osgeo.org/openlayers/browser/trunk/openlayers/lib/OpenLayers/Layer/Vector.js
|
|
*/
|
|
function getFeaturesByAttribute(obj, attrName, attrValue) {
|
|
var i,
|
|
feature,
|
|
len = obj.features.length,
|
|
foundFeatures = [];
|
|
for(i = 0; i < len; i++) {
|
|
feature = obj.features[i];
|
|
if(feature && feature.attributes) {
|
|
if (feature.attributes[attrName] === attrValue) {
|
|
foundFeatures.push(feature);
|
|
}
|
|
}
|
|
}
|
|
return foundFeatures;
|
|
}
|
|
function highlightChangesetMap(name) {
|
|
getFeaturesByAttribute(vectors,'name',name)[0].style.strokeColor='#ffff55';
|
|
vectors.redraw();
|
|
}
|
|
function unHighlightChangesetMap(name) {
|
|
getFeaturesByAttribute(vectors,'name',name)[0].style.strokeColor='#ee9900';
|
|
vectors.redraw();
|
|
}
|
|
function init() {
|
|
var map = createMap("small_map", {
|
|
controls: [ new OpenLayers.Control.Navigation(), new OpenLayers.Control.PanZoom(), new OpenLayers.Control.PanZoomBar() ]
|
|
});
|
|
|
|
var bounds = new OpenLayers.Bounds();
|
|
<%= render :partial => 'changeset_map_add', :collection => @edits unless @edits.nil? %>
|
|
|
|
vectors.events.on({
|
|
'featureselected': function(feature) {
|
|
document.getElementById('tr-' + feature.feature.attributes['name']).style.backgroundColor = '#ffff55';
|
|
feature.feature.style.strokeColor='#ffff00';
|
|
vectors.redraw();
|
|
},
|
|
'featureunselected': function(feature) {
|
|
document.getElementById('tr-' + feature.feature.attributes['name']).style.backgroundColor = '';
|
|
feature.feature.style.strokeColor='#ee9900';
|
|
vectors.redraw();
|
|
}
|
|
});
|
|
var selectControl = new OpenLayers.Control.SelectFeature(vectors,
|
|
{multiple: false, hover:true});
|
|
map.addControl(selectControl);
|
|
selectControl.activate();
|
|
|
|
<!-- if bounds were passed, just use those -->
|
|
<% if ! @bbox.nil? %>
|
|
bounds = new OpenLayers.Bounds(<%= @bbox %>);
|
|
<% end %>
|
|
setMapExtent(bounds);
|
|
|
|
$("loading").innerHTML = "";
|
|
}
|
|
|
|
window.onload = init;
|
|
</script>
|