Use the rails paginator to paginate the trace list, and abstract some
authorTom Hughes <tom@compton.nu>
Wed, 8 Aug 2007 23:58:37 +0000 (23:58 +0000)
committerTom Hughes <tom@compton.nu>
Wed, 8 Aug 2007 23:58:37 +0000 (23:58 +0000)
common template code into a partial.

app/controllers/trace_controller.rb
app/views/trace/_trace_list.rhtml [new file with mode: 0644]
app/views/trace/_trace_paging_nav.rhtml
app/views/trace/list.rhtml
app/views/trace/mine.rhtml

index 288a4a67b676d6002f50fd1ea638ea68e5dc52b8..de8b17f3025c65427f61edfeed9118d855577b8d 100644 (file)
@@ -9,7 +9,6 @@ class TraceController < ApplicationController
   def list (target_user = nil, paging_action = 'list')
     @title = 'public GPS traces'
     @title += " tagged with #{params[:tag]}" if params[:tag]
-    @traces_per_page = 20
     page_index = params[:page] ? params[:page].to_i - 1 : 0 # nice 1-based page -> 0-based page index
 
     # from display name, pick up user id if one user's traces only
@@ -52,18 +51,9 @@ class TraceController < ApplicationController
     end
     
     opt[:conditions] = conditions
+    opt[:per_page] = 20
 
-    # count traces using all options except limit
-    @max_trace = Trace.count(opt)
-    @max_page = Integer((@max_trace + 1) / @traces_per_page) 
-    
-    # last step before fetch - add paging options
-    opt[:limit] = @traces_per_page
-    if page_index > 0
-      opt[:offset] = @traces_per_page * page_index
-    end
-
-    @traces = Trace.find(:all , opt)
+    @trace_pages, @traces = paginate(:traces, opt)
     
     # put together SET of tags across traces, for related links
     tagset = Hash.new
@@ -79,8 +69,8 @@ class TraceController < ApplicationController
     # final helper vars for view
     @display_name = display_name
     @all_tags = tagset.values
-    @paging_action = paging_action # the action that paging requests should route back to, e.g. 'list' or 'mine'
-    @page = page_index + 1 # nice 1-based external page numbers
+##    @paging_action = paging_action # the action that paging requests should route back to, e.g. 'list' or 'mine'
+##    @page = page_index + 1 # nice 1-based external page numbers
   end
 
   def mine
diff --git a/app/views/trace/_trace_list.rhtml b/app/views/trace/_trace_list.rhtml
new file mode 100644 (file)
index 0000000..c154702
--- /dev/null
@@ -0,0 +1,13 @@
+<%= render :partial => 'trace_paging_nav' %>
+
+<table id="keyvalue" cellpadding="3">
+  <tr>
+    <th></th>
+    <th></th>
+  </tr>
+  <%= render :partial => 'trace', :collection => @traces unless @traces.nil? %>
+</table>
+
+<%= render :partial => 'trace_paging_nav' %>
+
+<%= render :partial => 'trace_optionals' %>
index 6a22876cbf63a4c98cdde53f9b1f129b32e95a1b..a7e752893dd15c7546507b3598a1c07dd1a1b062 100644 (file)
@@ -1,19 +1,12 @@
-<%
-  range_start = ((@page - 1) * @traces_per_page) + 1
-  range_end = (@page==@max_page ? @max_trace : (@page * @traces_per_page))
-%>
+<% current_page = @trace_pages.current_page %>
 
 Showing page 
-<%= @page %> (<%= range_start %><% 
-if (@max_trace != range_start) # if more than 1 trace on page 
-  %>-<%= range_end %><% 
+<%= current_page.number %> (<%= current_page.first_item %><% 
+if (current_page.first_item < current_page.last_item) # if more than 1 trace on page 
+  %>-<%= current_page.last_item %><% 
 end %>
-of <%= @max_trace %>)
+of <%= @trace_pages.item_count %>)
 
-<% if @page > 1 %>
-  | <%= link_to 'previous page', {:controller => 'trace', :display_name => @display_name, :action => @paging_action, :page => @page-1}, {:title => 'previous page'} %>
-<% end %>
-
-<% if @page < @max_page %>
-  | <%= link_to 'next page', {:controller => 'trace', :display_name => @display_name, :action => @paging_action, :page => @page+1}, {:title => 'next page'} %>
+<% if @trace_pages.page_count > 1 %>
+ | <%= pagination_links(@trace_pages) %>
 <% end %>
index 237fd7ae4d33027550e56afe15fcc3b071889b5e..57e72fab4676bd48f9ecb0593eedfb10531282ca 100644 (file)
  | <%= link_to 'See all traces', {:controller => 'trace', :action => 'list'} %>
 <% end %>
 
-
 <br />
 <br />
 
-<%= render :partial => 'trace_paging_nav' %>
-
-<table id="keyvalue" cellpadding="3">
-  <tr>
-    <th></th>
-    <th></th>
-  </tr>
-  <%= render :partial => 'trace', :collection => @traces %>
-</table>
-<%= render :partial => 'trace_paging_nav' %>
-
-<%= render :partial => 'trace_optionals' %>
+<%= render :partial => 'trace_list' %>
index 661f73c52777bce3476e1269aaa05073d862d039..db5a8503a0d3542114968a2871c343c173a3461f 100644 (file)
 <%= submit_tag 'Upload' %> | <a href="http://wiki.openstreetmap.org/index.php/Upload">help</a>
 </td></tr>
 </table>
-
 <% end %>
 
-<%= render :partial => 'trace_paging_nav' %>
-<table id="keyvalue" cellpadding="3">
-  <tr>
-    <th></th>
-    <th></th>
-  </tr>
-  <%= render :partial => 'trace', :collection => @traces unless @traces.nil? %>
-</table>
-<%= render :partial => 'trace_paging_nav' %>
+<%= render :partial => 'trace_list' %>
 
 <% end %>
-
-<%= render :partial => 'trace_optionals' %>