mirror of
https://github.com/kaminari/kaminari.git
synced 2022-11-09 13:44:37 -05:00
Merge pull request #504 from ikeay/fix_sinatra_previous_link
Add link_to_previous_page helper for sinatra
This commit is contained in:
commit
c347875085
2 changed files with 65 additions and 0 deletions
|
@ -93,6 +93,18 @@ module Kaminari::Helpers
|
|||
paginator.to_s
|
||||
end
|
||||
|
||||
def link_to_previous_page(scope, name, options = {})
|
||||
params = options.delete(:params) || (Rack::Utils.parse_query(env['QUERY_STRING']).symbolize_keys rescue {})
|
||||
param_name = options.delete(:param_name) || Kaminari.config.param_name
|
||||
placeholder = options.delete(:placeholder)
|
||||
query = params.merge(param_name => (scope.current_page - 1))
|
||||
unless scope.first_page?
|
||||
link_to name, env['PATH_INFO'] + (query.empty? ? '' : "?#{query.to_query}"), options.reverse_merge(:rel => 'previous')
|
||||
else
|
||||
placeholder
|
||||
end
|
||||
end
|
||||
|
||||
# A simple "Twitter like" pagination link that creates a link to the next page.
|
||||
# Works on Sinatra.
|
||||
#
|
||||
|
|
|
@ -12,6 +12,17 @@ if defined? Sinatra
|
|||
</div>
|
||||
EOT
|
||||
|
||||
ERB_TEMPLATE_FOR_PREVIOUS_PAGE = <<EOT
|
||||
<div>
|
||||
<ul>
|
||||
<% @users.each do |user| %>
|
||||
<li class="user_info"><%= user.id %></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<%= link_to_previous_page(@users, "Previous!", {:id => 'previous_page_link'}.merge(@options || {})) %>
|
||||
</div>
|
||||
EOT
|
||||
|
||||
ERB_TEMPLATE_FOR_NEXT_PAGE = <<EOT
|
||||
<div>
|
||||
<ul>
|
||||
|
@ -125,6 +136,48 @@ EOT
|
|||
end
|
||||
end
|
||||
|
||||
describe '#link_to_previous_page' do
|
||||
before do
|
||||
mock_app do
|
||||
register Kaminari::Helpers::SinatraHelpers
|
||||
get '/users' do
|
||||
@page = params[:page] || 2
|
||||
@users = User.page(@page)
|
||||
erb ERB_TEMPLATE_FOR_PREVIOUS_PAGE
|
||||
end
|
||||
|
||||
get '/users_placeholder' do
|
||||
@page = params[:page] || 2
|
||||
@options = {:placeholder => %{<span id='no_previous_page'>No Previous Page</span>}}
|
||||
@users = User.page(@page)
|
||||
erb ERB_TEMPLATE_FOR_PREVIOUS_PAGE
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'having more page' do
|
||||
it 'should have a more page link' do
|
||||
get '/users'
|
||||
last_document.search('a#previous_page_link').should be_present
|
||||
last_document.search('a#previous_page_link').text.should match(/Previous!/)
|
||||
end
|
||||
end
|
||||
|
||||
context 'the first page' do
|
||||
it 'should not have a more page link' do
|
||||
get '/users?page=1'
|
||||
last_document.search('a#previous_page_link').should be_empty
|
||||
end
|
||||
|
||||
it 'should have a no more page notation using placeholder' do
|
||||
get '/users_placeholder?page=1'
|
||||
last_document.search('a#previous_page_link').should be_empty
|
||||
last_document.search('span#no_previous_page').should be_present
|
||||
last_document.search('span#no_previous_page').text.should match(/No Previous Page/)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#link_to_next_page' do
|
||||
before do
|
||||
mock_app do
|
||||
|
|
Loading…
Add table
Reference in a new issue