gpx rss and gpx cleanups
authorSteve Coast <steve@asklater.com>
Fri, 8 Dec 2006 17:25:23 +0000 (17:25 +0000)
committerSteve Coast <steve@asklater.com>
Fri, 8 Dec 2006 17:25:23 +0000 (17:25 +0000)
app/controllers/trace_controller.rb
app/views/trace/_trace.rhtml
app/views/trace/list.rhtml
config/routes.rb
lib/osm.rb

index 3448b43acf42e5226fa2e3d8bd5e8117cbe06a93..3f689fd3ae7ef33a9f9970513b4cc2b18d9d53db 100644 (file)
@@ -3,11 +3,12 @@ class TraceController < ApplicationController
   layout 'site'
 
   def list
-    @traces = Trace.find(:all, :conditions => ['public = true'])
-  end
-
-  def mine
-    @traces = Trace.find(:all, :conditions => ['user_id = ?', @user.id])
+    @page = params[:page].to_i
+    if @page > 0
+      @traces = Trace.find(:all , :conditions => ['public = true'], :order => 'timestamp DESC', :offset => 20*@page, :limit => 20)
+    else
+      @traces = Trace.find(:all , :conditions => ['public = true'], :order => 'timestamp DESC', :limit => 20)
+    end
   end
 
   def view
@@ -41,7 +42,16 @@ class TraceController < ApplicationController
   def georss
     traces = Trace.find(:all, :conditions => ['public = true'], :order => 'timestamp DESC', :limit => 20)
 
+    rss = OSM::GeoRSS.new
+
+    #def add(latitude=0, longitude=0, title_text='dummy title', url='http://www.example.com/', description_text='dummy description', timestamp=Time.now)
+    traces.each do |trace|
+      rss.add(trace.latitude, trace.longitude, trace.name, url_for({:controller => 'trace', :action => 'view', :id => trace.id, :display_name => trace.user.display_name}), "<img src='#{url_for({:controller => 'trace', :action => 'icon', :id => trace.id, :user_login => trace.user.display_name})}'> GPX file with #{trace.size} points from #{trace.user.display_name}", trace.timestamp)
+    end
+
+    response.headers["Content-Type"] = 'application/xml+rss'
 
+    render :text => rss.to_s
   end
 
   def picture
index 1b85898d052702e68494626be7d6b545117b02db..a7d4b18c028b33237e37c23e8a15edc8de1848cc 100644 (file)
@@ -2,22 +2,20 @@
   <% cl = cycle('table0', 'table1') %>
   <td class="<%= cl %>">
     <% if trace.inserted %>
-    <a href="<%= url_for :controller => 'trace', :action => 'view', :id => trace.id, :user_login => trace.user.display_name %>">
-      <img src="<%= url_for :controller => 'trace', :action => 'icon', :id => trace.id, :user_login => trace.user.display_name %>" border="0">
-    </a>
+    <a href="<%= url_for :controller => 'trace', :action => 'view', :id => trace.id, :user_login => trace.user.display_name %>"><img src="<%= url_for :controller => 'trace', :action => 'icon', :id => trace.id, :user_login => trace.user.display_name %>" border="0"></a>
     <% end %>
   </td>
-  <td class="<%= cl %>"><%= link_to trace.name, {:controller => 'trace', :action => 'view', :id => trace.id} %>
+  <td class="<%= cl %>"><%= link_to trace.name, {:controller => 'trace', :action => 'view', :display_name => trace.user.display_name, :id => trace.id} %>
     <span class="gpxsummary" title="<%= trace.timestamp %>"> ... 
       <% if trace.inserted %> 
       (<%= trace.size %> points)
       <% end %> 
       ... <%= time_ago_in_words( trace.timestamp ) %>  ago</span>
-    <a href="/traces/user/blars/12701" title="more detail..." >more</a> /
+     <%= link_to 'more', {:controller => 'trace', :action => 'view', :display_name => trace.user.display_name, :id => trace.id} %> /
     <a href="/edit.html?lat=34.1032333&lon=-118.2272333&zoom=14" title="create maps">map</a><br />
       <%= trace.description %>
     <br />
-    by <%= link_to trace.user.display_name, {:controller => 'trace', :action => 'list', :user => trace.user.display_name} %>
+    by <%= link_to trace.user.display_name, {:controller => 'trace', :action => 'list', :display_name => trace.user.display_name} %>
     in 
     <% if trace.tags %>
     <% trace.tags.each do |tag| %>
index 6ff6b34a632054e926f1faef7f17d74108563a81..dc3861a5433d535250d310cd89ce972e000cc296 100644 (file)
@@ -1,8 +1,27 @@
 <h1>Public GPS Traces</h1>
+
+<br /><br />
+
+<span class="rsssmall"><a href="<%= url_for :controller => 'trace', :action => 'georss' %>"><img src="http://www.openstreetmap.org/images/RSS.gif" border="0"></a></span> | 
 <% if @user %>
   <%= link_to 'See just your traces', {:controller => 'trace', :action => 'mine'} %>
+<% else %>
+  <%= link_to 'login', {:controller => 'user', :action => 'login'} %> to see just your traces
+<% end %>
+
+
+<br /><br />
+Showing page 
+<% if @page > 0 %>
+  <%= link_to '<<<', {:controller => 'trace', :action => 'list', :page => @page-1}, {:title => 'previous page'} %>
 <% end %>
 
+<%= @page %> 
+
+<%= link_to '>>>', {:controller => 'trace', :action => 'list', :page => @page+1}, {:title => 'next page'} %>
+
+(<%= 1+(@page * 20)%>-<%= (1+@page) * 20 %>)
+
 <table id="keyvalue" cellpadding="3">
   <tr>
     <th></th>
index bb6da37851f4df938167b894d6b41ebc06fc6dfc..28d40bd5dd009adea74e4fe4fceb7e4b6d76be2c 100644 (file)
@@ -31,10 +31,12 @@ ActionController::Routing::Routes.draw do |map|
 
   # traces  
   map.connect '/traces', :controller => 'trace', :action => 'list'
+  map.connect '/traces/page/:page', :controller => 'trace', :action => 'list'
   map.connect '/traces/mine', :controller => 'trace', :action => 'mine'
-  map.connect '/traces/user/:user_login/:id', :controller => 'trace', :action => 'view', :id => nil
-  map.connect '/traces/user/:user_login/:id/picture', :controller => 'trace', :action => 'picture', :id => nil
-  map.connect '/traces/user/:user_login/:id/icon', :controller => 'trace', :action => 'icon', :id => nil
+  map.connect '/traces/rss', :controller => 'trace', :action => 'georss'
+  map.connect '/traces/user/:display_name/:id', :controller => 'trace', :action => 'view', :id => nil
+  map.connect '/traces/user/:display_name/:id/picture', :controller => 'trace', :action => 'picture', :id => nil
+  map.connect '/traces/user/:display_name/:id/icon', :controller => 'trace', :action => 'icon', :id => nil
 
   # fall through
   map.connect ':controller/:action/:id'
index e230b5791b95d2190d070520273c911457d9c15e..c223f05809d54319491713dbb69b2ae30d60bb68 100644 (file)
@@ -298,7 +298,7 @@ module OSM
 
       lon_el = XML::Node.new 'geo:lon'
       lon_el << longitude.to_s
-      item << lat_el
+      item << lon_el
 
       @channel << item
     end