Clicking on nearby markers displays a popup showing the name of the mapper with a link to their page.
A similar popup is shown for your own marker. Checkbox added for updating your own position, checked if you haven't set a location yet, unchecked by default if you have.
This commit is contained in:
parent
83beee6d6a
commit
914b358154
3 changed files with 56 additions and 6 deletions
|
@ -1,15 +1,17 @@
|
|||
<h2>User details</h2>
|
||||
<%= error_messages_for 'user' %>
|
||||
<%= start_form_tag :controller => 'user', :action => 'edit', :display_name => @user.display_name %>
|
||||
<table>
|
||||
<table style="width : 100%">
|
||||
<tr><td>Name</td><td><%= @user.email %></td></tr>
|
||||
<tr><td>Mapper since</td><td><%= @user.creation_time %> (<%= time_ago_in_words(@user.creation_time) %> ago)</td></tr>
|
||||
<tr><td>Display Name</td><td><%= text_field :user, :display_name, :value => @user.display_name %></td></tr>
|
||||
<tr id="homerow" <% unless @user.home_lat and @user.home_lon %> class="nohome" <%end%> ><td>Your home</td><td><em class="message">You have not entered your home location.</em><span class="location">Latitude: <%= text_field :user, :home_lat, :value => @user.home_lat, :size => 20, :id => "home_lat" %> Longitude <%= text_field :user, :home_lon, :value => @user.home_lon, :size => 20, :id => "home_lon" %></span> </td></tr>
|
||||
|
||||
<tr><td></td><td>
|
||||
<p>Update home location when I click on the map? <input type="checkbox" value="1" <% unless @user.home_lat and @user.home_lon %> checked="checked" <% end %> id="updatehome" /> </p>
|
||||
<div id="map" style="border: 1px solid black; position: relative; width : 90%; height : 300px;">
|
||||
<h3>Click on the map to (re)set your location</h3>
|
||||
<% # This now just used to detect the width/height required for the popup. %>
|
||||
<p id="highlightinfo"></p>
|
||||
</div>
|
||||
</td></tr>
|
||||
|
||||
|
@ -95,7 +97,7 @@
|
|||
|
||||
<script type="text/javascript">
|
||||
<!--
|
||||
var map, layer, markers, marker;
|
||||
var map, layer, markers, marker, popup;
|
||||
|
||||
|
||||
function mercator2lonlat( merc ) {
|
||||
|
@ -132,6 +134,7 @@
|
|||
|
||||
<% if marker %>
|
||||
marker = new OpenLayers.Marker(new OpenLayers.LonLat(mlon,mlat));
|
||||
marker.events.register("click", "marker", markerOnClick );
|
||||
markers.addMarker(marker);
|
||||
<%end%>
|
||||
|
||||
|
@ -139,7 +142,9 @@
|
|||
near_icon.url = OpenLayers.Util.getImagesLocation() + "marker-green.png";;
|
||||
var i = nearest.length;
|
||||
while( i-- ) {
|
||||
markers.addMarker( new OpenLayers.Marker( lonlat2mercator( new OpenLayers.LonLat( nearest[i].home_lon, nearest[i].home_lat ) ), near_icon ) );
|
||||
var nearmarker = new OpenLayers.Marker( lonlat2mercator( new OpenLayers.LonLat( nearest[i].home_lon, nearest[i].home_lat ) ), near_icon );
|
||||
markers.addMarker( nearmarker );
|
||||
nearmarker.events.register("click", "nearmarker", makeMarkerFunction( i ) );
|
||||
}
|
||||
|
||||
map.addControl(new OpenLayers.Control.LayerSwitcher());
|
||||
|
@ -148,7 +153,39 @@
|
|||
map.events.register("click", map, setHome);
|
||||
}
|
||||
|
||||
function makeMarkerFunction( i ) {
|
||||
return function() { markerOnClick( i ); };
|
||||
}
|
||||
|
||||
function markerOnClick( i ) {
|
||||
var html, position;
|
||||
if( typeof( i ) == 'number' ) {
|
||||
html = '<p>Nearby mapper: <a href="/user/'+nearest[i].display_name+'">'+nearest[i].display_name+'</a></p>';
|
||||
html += '<p style="text-align:right">(<a href="#" onclick="return closePopup();">close</a>)</p>';
|
||||
position = lonlat2mercator( new OpenLayers.LonLat( nearest[i].home_lon, nearest[i].home_lat ) );
|
||||
} else {
|
||||
html = '<p>Your location (<a href="#" onclick="return closePopup()">close</a>)</p>';
|
||||
position = new OpenLayers.LonLat(mlon,mlat);
|
||||
}
|
||||
var box = document.getElementById( 'highlightinfo' );
|
||||
box.innerHTML = html;
|
||||
closePopup();
|
||||
popup = new OpenLayers.Popup.AnchoredBubble( 'popup', position, new OpenLayers.Size( box.offsetWidth, box.offsetHeight ), html, OpenLayers.Marker.defaultIcon(), true );
|
||||
map.addPopup( popup );
|
||||
}
|
||||
|
||||
function closePopup() {
|
||||
if( popup ) {
|
||||
map.removePopup( popup );
|
||||
delete popup;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function setHome( e ) {
|
||||
closePopup();
|
||||
if( ! document.getElementById( 'updatehome' ).checked )
|
||||
return;
|
||||
var lonlat = map.getLonLatFromViewPortPx(e.xy)
|
||||
|
||||
var lon_deg = (lonlat.lon / 20037508.34) * 180;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue