2 <%= error_messages_for 'user' %>
3 <%= start_form_tag :controller => 'user', :action => 'edit', :display_name => @user.display_name %>
4 <table style="width : 100%">
5 <tr><td>Name</td><td><%= @user.email %></td></tr>
6 <tr><td>Mapper since</td><td><%= @user.creation_time %> (<%= time_ago_in_words(@user.creation_time) %> ago)</td></tr>
7 <tr><td>Display Name</td><td><%= text_field :user, :display_name, :value => @user.display_name %></td></tr>
8 <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>
11 <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>
12 <div id="map" style="border: 1px solid black; position: relative; width : 90%; height : 300px;">
13 <% # This now just used to detect the width/height required for the popup. %>
14 <p id="highlightinfo"></p>
18 <tr><td valign="top">Description</td><td><%= text_area :user, :description, :value => @user.description, :class => "editDescription" %></td></tr>
20 <%= submit_tag 'Save Changes' %>
23 <% nearest_str = "" %>
24 <% if @user.home_lat and @user.home_lon %>
25 <h2>Users in your area</h2>
27 <% if @user.nearby.empty? %>
28 There are no users who admit to mapping in your area. Better go out and spread the word about OSM!
31 <p>These users are mapping in your area:</p>
37 <% @user.nearby(1,1).each do |nearby| %>
38 <% nearest_str = "nearest.push( { 'display_name' : '#{nearby.display_name}', 'home_lat' : #{nearby.home_lat}, 'home_lon' : #{nearby.home_lon} } )" %>
41 <td><%= link_to nearby.display_name, :controller => 'user', :action => 'view', :display_name => nearby.display_name %></td>
42 <td><%= link_to 'send message', :controller => 'message', :action => 'new', :user_id => nearby.id %></td>
50 <script type="text/javascript">
51 var nearest = [], friends = [];
55 <% if @user.home_lat and @user.home_lon %>
57 <% mlon = @user.home_lon %>
58 <% mlat = @user.home_lat %>
59 <% lon = @user.home_lon %>
60 <% lat = @user.home_lat %>
62 <script type="text/javascript">
63 var mlat = <%= mlat %>;
64 var mlon = <%= mlon %>;
67 <% lon = params['lon'] || '-0.1' %>
68 <% lat = params['lat'] || '51.5' %>
69 <% zoom = params['zoom'] || '4' %>
74 <script type="text/javascript">
77 var zoom = <%= zoom %>;
78 var PI = 3.14159265358979323846;
82 <% if params['scale'] and params['scale'].length > 0 then %>
83 zoom = Math.log(360.0/(( <% print params['scale'].to_f() %> ) * 512.0)) / Math.log(2.0);
86 lon = lon * 20037508.34 / 180;
87 lat = Math.log(Math.tan( (90 + lat) * PI / 360)) / (PI / 180);
88 lat = lat * 20037508.34 / 180;
90 mlon = mlon * 20037508.34 / 180;
91 mlat = Math.log(Math.tan( (90 + mlat) * PI / 360)) / (PI / 180);
92 mlat = mlat * 20037508.34 / 180;
96 <script type="text/javascript" src="/javascripts/OpenLayers.js"></script>
98 <script type="text/javascript">
100 var map, layer, markers, marker, popup;
103 function mercator2lonlat( merc ) {
104 var lon_deg = (merc.lon / 20037508.34) * 180;
105 var lat_deg = (merc.lat / 20037508.34) * 180;
106 var PI = 3.14159265358979323846;
107 lat_deg = 180/PI * (2 * Math.atan(Math.exp(lat_deg * PI / 180)) - PI / 2);
108 return new OpenLayers.LonLat(lon_deg,lat_deg);
111 function lonlat2mercator( ll ) {
112 var lon = ll.lon * 20037508.34 / 180;
113 var lat = Math.log(Math.tan( (90 + ll.lat) * PI / 360)) / (PI / 180);
114 lat = lat * 20037508.34 / 180;
115 return new OpenLayers.LonLat(lon,lat);
120 OpenLayers.Util.onImageLoadError = function() {
121 this.src = "http://www.openstreetmap.org/javascripts/img/404.png";
123 map = new OpenLayers.Map( "map",
124 {maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34), maxZoomLevel:18, maxResolution:156543, units:'meters', projection: "EPSG:41001"} );
125 layer = new OpenLayers.Layer.LikeGoogle( "Mapnik", "http://tile.openstreetmap.org/", {type:'png'} );
127 layer = new OpenLayers.Layer.LikeGoogle( "Osmarender", "http://dev.openstreetmap.org/~ojw/Tiles/tile.php/", {type:'png'} );
132 markers = new OpenLayers.Layer.Markers("markers");
133 map.addLayer(markers);
136 marker = new OpenLayers.Marker(new OpenLayers.LonLat(mlon,mlat));
137 marker.events.register("click", "marker", markerOnClick );
138 markers.addMarker(marker);
141 var near_icon = OpenLayers.Marker.defaultIcon();
142 near_icon.url = OpenLayers.Util.getImagesLocation() + "marker-green.png";;
143 var i = nearest.length;
145 var nearmarker = new OpenLayers.Marker( lonlat2mercator( new OpenLayers.LonLat( nearest[i].home_lon, nearest[i].home_lat ) ), near_icon );
146 markers.addMarker( nearmarker );
147 nearmarker.events.register("click", "nearmarker", makeMarkerFunction( i ) );
150 map.addControl(new OpenLayers.Control.LayerSwitcher());
151 map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
153 map.events.register("click", map, setHome);
156 function makeMarkerFunction( i ) {
157 return function() { markerOnClick( i ); };
160 function markerOnClick( i ) {
162 if( typeof( i ) == 'number' ) {
163 html = '<p>Nearby mapper: <a href="/user/'+nearest[i].display_name+'">'+nearest[i].display_name+'</a></p>';
164 html += '<p style="text-align:right">(<a href="#" onclick="return closePopup();">close</a>)</p>';
165 position = lonlat2mercator( new OpenLayers.LonLat( nearest[i].home_lon, nearest[i].home_lat ) );
167 html = '<p>Your location (<a href="#" onclick="return closePopup()">close</a>)</p>';
168 position = new OpenLayers.LonLat(mlon,mlat);
170 var box = document.getElementById( 'highlightinfo' );
171 box.innerHTML = html;
173 popup = new OpenLayers.Popup.AnchoredBubble( 'popup', position, new OpenLayers.Size( box.offsetWidth, box.offsetHeight ), html, OpenLayers.Marker.defaultIcon(), true );
174 map.addPopup( popup );
177 function closePopup() {
179 map.removePopup( popup );
185 function setHome( e ) {
187 if( ! document.getElementById( 'updatehome' ).checked )
189 var lonlat = map.getLonLatFromViewPortPx(e.xy)
191 var lon_deg = (lonlat.lon / 20037508.34) * 180;
192 var lat_deg = (lonlat.lat / 20037508.34) * 180;
193 var PI = 3.14159265358979323846;
194 lat_deg = 180/PI * (2 * Math.atan(Math.exp(lat_deg * PI / 180)) - PI / 2);
195 var homerow = document.getElementById( 'homerow' );
196 var home_lat = document.getElementById( 'home_lat' );
197 var home_lon = document.getElementById( 'home_lon' );
198 homerow.className = '';
199 home_lat.value = lat_deg;
200 home_lon.value = lon_deg;
202 markers.removeMarker(marker);
204 marker = new OpenLayers.Marker(lonlat);
205 markers.addMarker(marker);
207 window.onload = init;
212 <% if @user.data_public? %>
213 All your edits are public.
215 Currently your edits are anonymous and people can't find out where you are located. To show what you edited and allow people to contact you through the website, click the button below. This action cannot be reversed.
217 <%= start_form_tag :controller => 'user', :action => 'go_public'%>
218 <%= submit_tag 'Make all my edits public, forever' %>