Adding pagination to the changesets, thus allowing you to browe large changesets, without MySQL complaining about memory. Probably needs some fine tuning. You currently can only page one of nodes, ways, and relations, without manually setting the relations. Fixing deprection notice for the classic_pagination plugin.

This commit is contained in:
Shaun McDonald 2008-11-27 17:06:43 +00:00
parent 89bd962ff0
commit 2ed84e26cd
5 changed files with 47 additions and 13 deletions

View file

@ -116,6 +116,9 @@ class BrowseController < ApplicationController
def changeset
begin
@changeset = Changeset.find(params[:id])
@node_pages, @nodes = paginate(:old_nodes, :conditions => {:changeset_id => @changeset.id}, :per_page => 20, :parameter => 'node_page')
@way_pages, @ways = paginate(:old_ways, :conditions => {:changeset_id => @changeset.id}, :per_page => 20, :parameter => 'way_page')
@relation_pages, @relations = paginate(:old_relations, :conditions => {:changeset_id => @changeset.id}, :per_page => 20, :parameter => 'relation_page')
@title = "Changeset | #{@changeset.id}"
@next = Changeset.find(:first, :order => "id ASC", :conditions => [ "id > :id", { :id => @changeset.id }] )

View file

@ -1,2 +1,5 @@
module BrowseHelper
def link_to_page(page, page_param)
return link_to(page, page_param => page)
end
end

View file

@ -5,6 +5,11 @@
<td><%= h(changeset_details.created_at) %></td>
</tr>
<tr>
<th>Closed at:</th>
<td><%= h(changeset_details.closed_at) %></td>
</tr>
<% if changeset_details.user.data_public? %>
<tr>
<th>Belongs to:</th>
@ -21,27 +26,33 @@
</table>
</td>
</tr>
<% end %>
<% else %>
<tr>
<th>Tags</th>
<td>There are no tags for this changeset</td>
</tr>
<% end %>
<% unless changeset_details.old_nodes.empty? %>
<% unless @nodes.empty? %>
<tr valign="top">
<th>Has the following nodes:</th>
<th>Has the following <%= @node_pages.item_count %> nodes:</th>
<td>
<table padding="0">
<% changeset_details.old_nodes.each do |node| %>
<% @nodes.each do |node| %>
<tr><td><%= link_to "Node #{node.id.to_s}, version #{node.version.to_s}", :action => "node", :id => node.id.to_s %></td></tr>
<% end %>
</table>
</td>
</tr>
<%= render :partial => 'paging_nav', :locals => { :pages => @node_pages, :page_param => "node_page"} %>
<% end %>
<% unless changeset_details.old_ways.empty? %>
<% unless @ways.empty? %>
<tr valign="top">
<th>Has the following ways:</th>
<th>Has the following <%= @way_pages.item_count %> ways:</th>
<td>
<table padding="0">
<% changeset_details.old_ways.each do |way| %>
<% @ways.each do |way| %>
<tr><td><%= link_to "Way #{way.id.to_s}, version #{way.version.to_s}", :action => "way", :id => way.id.to_s %></td></tr>
<% end %>
<%=
@ -49,20 +60,22 @@
%>
</table>
</td>
</tr>
</tr>
<%= render :partial => 'paging_nav', :locals => { :pages => @way_pages, :page_param => "way_page" } %>
<% end %>
<% unless changeset_details.old_relations.empty? %>
<% unless @relations.empty? %>
<tr valign="top">
<th>Has the following relations:</th>
<th>Has the following <%= @relation_pages.item_count %> relations:</th>
<td>
<table padding="0">
<% changeset_details.old_relations.each do |relation| %>
<% @relations.each do |relation| %>
<tr><td><%= link_to "Relation #{relation.id.to_s}, version #{relation.version.to_s}", :action => "relation", :id => relation.id.to_s %></td></tr>
<% end %>
</table>
</td>
</tr>
<%= render :partial => 'paging_nav', :locals => { :pages => @relation_pages, :page_param => "relation_page" } %>
<% end %>
</table>

View file

@ -0,0 +1,15 @@
<tr><td colspan='2'>
<% current_page = pages.current_page %>
Showing page
<%= 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 <%= pages.item_count %>)
<% if pages.page_count > 1 %>
| <%= pagination_links_each(pages, {}) { |n| link_to_page(n, page_param) } %>
<% end %>
</td>
</tr>

View file

@ -97,8 +97,8 @@ module ActionController
"Unknown options: #{unknown_option_keys.join(', ')}" unless
unknown_option_keys.empty?
options[:singular_name] ||= Inflector.singularize(collection_id.to_s)
options[:class_name] ||= Inflector.camelize(options[:singular_name])
options[:singular_name] ||= ActiveSupport::Inflector.singularize(collection_id.to_s)
options[:class_name] ||= ActiveSupport::Inflector.camelize(options[:singular_name])
end
# Returns a paginator and a collection of Active Record model instances