Allow people to add coordinates to diary entries, add them to the RSS feeds and diary display pages using geo microformat.

This commit is contained in:
Dan Karran 2007-09-03 22:37:42 +00:00
parent c81c31775b
commit b78d25a3a8
3 changed files with 59 additions and 6 deletions

View file

@ -41,10 +41,7 @@ class DiaryEntryController < ApplicationController
end
@entries.each do |entry|
# add geodata here
latitude = nil
longitude = nil
rss.add(latitude, longitude, entry.title, entry.user.display_name, url_for({:controller => 'diary_entry', :action => 'list', :id => entry.id, :display_name => entry.user.display_name}), entry.body, entry.created_at)
rss.add(entry.latitude, entry.longitude, entry.title, entry.user.display_name, url_for({:controller => 'diary_entry', :action => 'list', :id => entry.id, :display_name => entry.user.display_name}), entry.body, entry.created_at)
end
render :text => rss.to_s, :content_type => "application/rss+xml"

View file

@ -1,5 +1,8 @@
<b><%= diary_entry.title %></b><br />
<%= simple_format(diary_entry.body) %>
Posted by user <b><%= link_to diary_entry.user.display_name, :controller => 'user', :action => 'view', :display_name => diary_entry.user.display_name %></b> at <%= diary_entry.created_at %><br />
<% if diary_entry.latitude and diary_entry.longitude %>
Coordinates: <div class="geo" style="display: inline"><span class="latitude"><%= diary_entry.latitude %></span>; <span class="longitude"><%= diary_entry.longitude %></span></div> (<%=link_to 'map', :controller => 'site', :action => 'index', :lat => diary_entry.latitude, :lon => diary_entry.longitude, :zoom => 14 %> / <%=link_to 'edit', :controller => 'site', :action => 'edit', :lat => diary_entry.latitude, :lon => diary_entry.longitude, :zoom => 14 %>)<br/>
<% end %>
Posted by <b><%= link_to diary_entry.user.display_name, :controller => 'user', :action => 'view', :display_name => diary_entry.user.display_name %></b> at <%= diary_entry.created_at %><br />
<br />
<hr />

View file

@ -8,11 +8,64 @@
</tr>
<tr valign="top">
<th>Body</th>
<td><%= f.text_area :body, :cols => 80 %></td>
<td><%= f.text_area :body, :cols => 80, :rows => 10 %></td>
</tr>
<tr valign="top">
<th>Location</th>
<td><div id="map" style="border: 1px solid black; position: relative; width : 90%; height : 250px;"></div><br/>
<span class="location">Latitude: <%= f.text_field :latitude, :size => 20, :id => "latitude" %> Longitude <%= f.text_field :longitude, :size => 20, :id => "longitude" %></span></td>
</tr>
<tr>
<th></th>
<td><%= submit_tag 'Save' %></td>
</tr>
</table>
<% end %>
<% if @user.home_lat.nil? or @user.home_lon.nil? %>
<% lon = params['lon'] || '-0.1' %>
<% lat = params['lat'] || '51.5' %>
<% zoom = params['zoom'] || '4' %>
<% else %>
<% lon = @user.home_lon %>
<% lat = @user.home_lat %>
<% zoom = '12' %>
<% end %>
<script type="text/javascript" src="/openlayers/OpenLayers.js"></script>
<%= javascript_include_tag 'map.js' %>
<script type="text/javascript">
<!--
var marker;
function init(){
var centre = lonLatToMercator(new OpenLayers.LonLat(<%= lon %>, <%= lat %>));
var zoom = <%= zoom %>;
var map = createMap("map");
map.setCenter(centre, zoom);
map.events.register("click", map, setLocation);
}
function setLocation( e ) {
closeMapPopup();
var merc = map.getLonLatFromViewPortPx(e.xy);
var lonlat = mercatorToLonLat(merc);
document.getElementById('latitude').value = lonlat.lat;
document.getElementById('longitude').value = lonlat.lon;
if (marker) {
removeMarkerFromMap(marker);
}
marker = addMarkerToMap(merc, null, "Diary entry location");
}
window.onload = init;
// -->
</script>