bootstrap_pager 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +15 -0
- data/.gitignore +18 -0
- data/.idea/encodings.xml +5 -0
- data/.idea/misc.xml +5 -0
- data/.idea/modules.xml +9 -0
- data/.idea/pager.iml +50 -0
- data/.idea/scopes/scope_settings.xml +5 -0
- data/.idea/vcs.xml +7 -0
- data/Gemfile +4 -0
- data/LICENSE +20 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +307 -0
- data/Rakefile +42 -0
- data/app/assets/javascripts/infinitescroll.js +8 -0
- data/app/helpers/pager_helper.rb +5 -0
- data/app/views/pager/_first_page.html.erb +11 -0
- data/app/views/pager/_first_page.html.haml +9 -0
- data/app/views/pager/_first_page.html.slim +10 -0
- data/app/views/pager/_gap.html.erb +8 -0
- data/app/views/pager/_gap.html.haml +8 -0
- data/app/views/pager/_gap.html.slim +10 -0
- data/app/views/pager/_last_page.html.erb +11 -0
- data/app/views/pager/_last_page.html.haml +9 -0
- data/app/views/pager/_last_page.html.slim +10 -0
- data/app/views/pager/_next_page.html.erb +11 -0
- data/app/views/pager/_next_page.html.haml +9 -0
- data/app/views/pager/_next_page.html.slim +10 -0
- data/app/views/pager/_page.html.erb +14 -0
- data/app/views/pager/_page.html.haml +11 -0
- data/app/views/pager/_page.html.slim +13 -0
- data/app/views/pager/_paginator.html.erb +25 -0
- data/app/views/pager/_paginator.html.haml +19 -0
- data/app/views/pager/_paginator.html.slim +20 -0
- data/app/views/pager/_prev_page.html.erb +11 -0
- data/app/views/pager/_prev_page.html.haml +9 -0
- data/app/views/pager/_prev_page.html.slim +10 -0
- data/bootstrap_pager.gemspec +36 -0
- data/config/locales/pager.yml +19 -0
- data/gemfiles/active_record_30.gemfile +9 -0
- data/gemfiles/active_record_31.gemfile +7 -0
- data/gemfiles/active_record_32.gemfile +10 -0
- data/gemfiles/active_record_40.gemfile +8 -0
- data/gemfiles/active_record_edge.gemfile +11 -0
- data/gemfiles/data_mapper_12.gemfile +15 -0
- data/gemfiles/mongo_mapper.gemfile +10 -0
- data/gemfiles/mongoid_24.gemfile +7 -0
- data/gemfiles/mongoid_30.gemfile +12 -0
- data/gemfiles/sinatra_13.gemfile +13 -0
- data/gemfiles/sinatra_14.gemfile +13 -0
- data/lib/bootstrap_pager/config.rb +51 -0
- data/lib/bootstrap_pager/grape.rb +4 -0
- data/lib/bootstrap_pager/helpers/action_view_extension.rb +152 -0
- data/lib/bootstrap_pager/helpers/paginator.rb +186 -0
- data/lib/bootstrap_pager/helpers/sinatra_helpers.rb +144 -0
- data/lib/bootstrap_pager/helpers/tags.rb +96 -0
- data/lib/bootstrap_pager/hooks.rb +41 -0
- data/lib/bootstrap_pager/models/active_record_extension.rb +22 -0
- data/lib/bootstrap_pager/models/active_record_model_extension.rb +20 -0
- data/lib/bootstrap_pager/models/active_record_relation_methods.rb +29 -0
- data/lib/bootstrap_pager/models/array_extension.rb +58 -0
- data/lib/bootstrap_pager/models/configuration_methods.rb +48 -0
- data/lib/bootstrap_pager/models/data_mapper_collection_methods.rb +15 -0
- data/lib/bootstrap_pager/models/data_mapper_extension.rb +48 -0
- data/lib/bootstrap_pager/models/mongo_mapper_extension.rb +18 -0
- data/lib/bootstrap_pager/models/mongoid_criteria_methods.rb +23 -0
- data/lib/bootstrap_pager/models/mongoid_extension.rb +33 -0
- data/lib/bootstrap_pager/models/page_scope_methods.rb +70 -0
- data/lib/bootstrap_pager/models/plucky_criteria_methods.rb +18 -0
- data/lib/bootstrap_pager/railtie.rb +7 -0
- data/lib/bootstrap_pager/sinatra.rb +5 -0
- data/lib/bootstrap_pager/version.rb +3 -0
- data/lib/bootstrap_pager.rb +38 -0
- data/lib/generators/pager/config_generator.rb +16 -0
- data/lib/generators/pager/templates/pager_config.rb +10 -0
- data/lib/generators/pager/views_generator.rb +118 -0
- data/spec/config/config_spec.rb +91 -0
- data/spec/fake_app/active_record/config.rb +3 -0
- data/spec/fake_app/active_record/models.rb +57 -0
- data/spec/fake_app/data_mapper/config.rb +7 -0
- data/spec/fake_app/data_mapper/models.rb +27 -0
- data/spec/fake_app/log/development.log +832 -0
- data/spec/fake_app/mongo_mapper/config.rb +2 -0
- data/spec/fake_app/mongo_mapper/models.rb +9 -0
- data/spec/fake_app/mongoid/config.rb +16 -0
- data/spec/fake_app/mongoid/models.rb +22 -0
- data/spec/fake_app/rails_app.rb +67 -0
- data/spec/fake_app/sinatra_app.rb +22 -0
- data/spec/fake_gem.rb +4 -0
- data/spec/helpers/action_view_extension_spec.rb +292 -0
- data/spec/helpers/helpers_spec.rb +135 -0
- data/spec/helpers/sinatra_helpers_spec.rb +170 -0
- data/spec/helpers/tags_spec.rb +140 -0
- data/spec/models/active_record/active_record_relation_methods_spec.rb +47 -0
- data/spec/models/active_record/default_per_page_spec.rb +32 -0
- data/spec/models/active_record/max_pages_spec.rb +23 -0
- data/spec/models/active_record/max_per_page_spec.rb +32 -0
- data/spec/models/active_record/scopes_spec.rb +242 -0
- data/spec/models/array_spec.rb +150 -0
- data/spec/models/data_mapper/data_mapper_spec.rb +207 -0
- data/spec/models/mongo_mapper/mongo_mapper_spec.rb +84 -0
- data/spec/models/mongoid/mongoid_spec.rb +126 -0
- data/spec/requests/users_spec.rb +53 -0
- data/spec/spec_helper.rb +33 -0
- data/spec/spec_helper_for_sinatra.rb +34 -0
- data/spec/support/database_cleaner.rb +16 -0
- data/spec/support/matchers.rb +52 -0
- data/vendor/assets/javascripts/jquery.infinitescroll.js +814 -0
- data/vendor/assets/javascripts/jquery.infinitescroll.min.js +1 -0
- metadata +311 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
-# Link to the "Next" page
|
|
2
|
+
-# available local variables
|
|
3
|
+
-# url: url to the next page
|
|
4
|
+
-# current_page: a page object for the currently displayed page
|
|
5
|
+
-# total_pages: total number of pages
|
|
6
|
+
-# per_page: number of items to fetch per page
|
|
7
|
+
-# remote: data-remote
|
|
8
|
+
%li.next
|
|
9
|
+
= link_to_unless current_page.last?, t('views.pagination.next').html_safe, url, :rel => 'next', :remote => remote
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/ Link to the "Next" page
|
|
2
|
+
- available local variables
|
|
3
|
+
url : url to the next page
|
|
4
|
+
current_page : a page object for the currently displayed page
|
|
5
|
+
total_pages : total number of pages
|
|
6
|
+
per_page : number of items to fetch per page
|
|
7
|
+
remote : data-remote
|
|
8
|
+
li.next
|
|
9
|
+
== link_to_unless current_page.last?, t('views.pagination.next').html_safe, url, :rel => 'next', :remote => remote
|
|
10
|
+
'
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<%# Link showing page number
|
|
2
|
+
- available local variables
|
|
3
|
+
page: a page object for "this" page
|
|
4
|
+
url: url to this page
|
|
5
|
+
current_page: a page object for the currently displayed page
|
|
6
|
+
total_pages: total number of pages
|
|
7
|
+
per_page: number of items to fetch per page
|
|
8
|
+
remote: data-remote
|
|
9
|
+
-%>
|
|
10
|
+
<li class="page<%= ' active' if page.current? %>">
|
|
11
|
+
<%= link_to_unless page.current?, page, url, {:remote => remote, :rel => page.next? ? 'next' : page.prev? ? 'prev' : nil} do |name| %>
|
|
12
|
+
<span><%= name %></span>
|
|
13
|
+
<% end %>
|
|
14
|
+
</li>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
-# Link showing page number
|
|
2
|
+
-# available local variables
|
|
3
|
+
-# page: a page object for "this" page
|
|
4
|
+
-# url: url to this page
|
|
5
|
+
-# current_page: a page object for the currently displayed page
|
|
6
|
+
-# total_pages: total number of pages
|
|
7
|
+
-# per_page: number of items to fetch per page
|
|
8
|
+
-# remote: data-remote
|
|
9
|
+
%li{:class => "page#{' active' if page.current?}"}
|
|
10
|
+
= link_to_unless page.current?, page, url, {:remote => remote, :rel => page.next? ? 'next' : page.prev? ? 'prev' : nil} do |name|
|
|
11
|
+
%span= name
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/ Link showing page number
|
|
2
|
+
- available local variables
|
|
3
|
+
page : a page object for "this" page
|
|
4
|
+
url : url to this page
|
|
5
|
+
current_page : a page object for the currently displayed page
|
|
6
|
+
total_pages : total number of pages
|
|
7
|
+
per_page : number of items to fetch per page
|
|
8
|
+
remote : data-remote
|
|
9
|
+
li class="page#{' active' if page.current?}"
|
|
10
|
+
== link_to_unless page.current?, page, url, {:remote => remote, :rel => page.next? ? 'next' : page.prev? ? 'prev' : nil} do |name|
|
|
11
|
+
span
|
|
12
|
+
== name
|
|
13
|
+
'
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<%# The container tag
|
|
2
|
+
- available local variables
|
|
3
|
+
current_page: a page object for the currently displayed page
|
|
4
|
+
total_pages: total number of pages
|
|
5
|
+
per_page: number of items to fetch per page
|
|
6
|
+
remote: data-remote
|
|
7
|
+
paginator: the paginator that renders the pagination tags inside
|
|
8
|
+
-%>
|
|
9
|
+
<%= paginator.render do -%>
|
|
10
|
+
<nav class="pagination">
|
|
11
|
+
<ul>
|
|
12
|
+
<%= first_page_tag unless current_page.first? %>
|
|
13
|
+
<%= prev_page_tag unless current_page.first? %>
|
|
14
|
+
<% each_page do |page| -%>
|
|
15
|
+
<% if page.left_outer? || page.right_outer? || page.inside_window? -%>
|
|
16
|
+
<%= page_tag page %>
|
|
17
|
+
<% elsif !page.was_truncated? -%>
|
|
18
|
+
<%= gap_tag %>
|
|
19
|
+
<% end -%>
|
|
20
|
+
<% end -%>
|
|
21
|
+
<%= next_page_tag unless current_page.last? %>
|
|
22
|
+
<%= last_page_tag unless current_page.last? %>
|
|
23
|
+
</ul>
|
|
24
|
+
</nav>
|
|
25
|
+
<% end -%>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
-# The container tag
|
|
2
|
+
-# available local variables
|
|
3
|
+
-# current_page: a page object for the currently displayed page
|
|
4
|
+
-# total_pages: total number of pages
|
|
5
|
+
-# per_page: number of items to fetch per page
|
|
6
|
+
-# remote: data-remote
|
|
7
|
+
-# paginator: the paginator that renders the pagination tags inside
|
|
8
|
+
= paginator.render do
|
|
9
|
+
%nav.pagination
|
|
10
|
+
%ul
|
|
11
|
+
= first_page_tag unless current_page.first?
|
|
12
|
+
= prev_page_tag unless current_page.first?
|
|
13
|
+
- each_page do |page|
|
|
14
|
+
- if page.left_outer? || page.right_outer? || page.inside_window?
|
|
15
|
+
= page_tag page
|
|
16
|
+
- elsif !page.was_truncated?
|
|
17
|
+
= gap_tag
|
|
18
|
+
= next_page_tag unless current_page.last?
|
|
19
|
+
= last_page_tag unless current_page.last?
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/ The container tag
|
|
2
|
+
- available local variables
|
|
3
|
+
current_page : a page object for the currently displayed page
|
|
4
|
+
total_pages : total number of pages
|
|
5
|
+
per_page : number of items to fetch per page
|
|
6
|
+
remote : data-remote
|
|
7
|
+
paginator : the paginator that renders the pagination tags inside
|
|
8
|
+
|
|
9
|
+
== paginator.render do
|
|
10
|
+
nav.pagination
|
|
11
|
+
ul
|
|
12
|
+
== first_page_tag unless current_page.first?
|
|
13
|
+
== prev_page_tag unless current_page.first?
|
|
14
|
+
- each_page do |page|
|
|
15
|
+
- if page.left_outer? || page.right_outer? || page.inside_window?
|
|
16
|
+
== page_tag page
|
|
17
|
+
- elsif !page.was_truncated?
|
|
18
|
+
== gap_tag
|
|
19
|
+
== next_page_tag unless current_page.last?
|
|
20
|
+
== last_page_tag unless current_page.last?
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<%# Link to the "Previous" page
|
|
2
|
+
- available local variables
|
|
3
|
+
url: url to the previous page
|
|
4
|
+
current_page: a page object for the currently displayed page
|
|
5
|
+
total_pages: total number of pages
|
|
6
|
+
per_page: number of items to fetch per page
|
|
7
|
+
remote: data-remote
|
|
8
|
+
-%>
|
|
9
|
+
<li class="prev">
|
|
10
|
+
<%= link_to_unless current_page.first?, t('views.pagination.previous').html_safe, url, :rel => 'prev', :remote => remote %>
|
|
11
|
+
</li>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
-# Link to the "Previous" page
|
|
2
|
+
-# available local variables
|
|
3
|
+
-# url: url to the previous page
|
|
4
|
+
-# current_page: a page object for the currently displayed page
|
|
5
|
+
-# total_pages: total number of pages
|
|
6
|
+
-# per_page: number of items to fetch per page
|
|
7
|
+
-# remote: data-remote
|
|
8
|
+
%li.prev
|
|
9
|
+
= link_to_unless current_page.first?, t('views.pagination.previous').html_safe, url, :rel => 'prev', :remote => remote
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/ Link to the "Previous" page
|
|
2
|
+
- available local variables
|
|
3
|
+
url : url to the previous page
|
|
4
|
+
current_page : a page object for the currently displayed page
|
|
5
|
+
total_pages : total number of pages
|
|
6
|
+
per_page : number of items to fetch per page
|
|
7
|
+
remote : data-remote
|
|
8
|
+
li.prev
|
|
9
|
+
== link_to_unless current_page.first?, t('views.pagination.previous').html_safe, url, :rel => 'prev', :remote => remote
|
|
10
|
+
'
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
|
3
|
+
require "bootstrap_pager/version"
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |s|
|
|
6
|
+
s.name = 'bootstrap_pager'
|
|
7
|
+
s.version = BootstrapPager::VERSION
|
|
8
|
+
s.platform = Gem::Platform::RUBY
|
|
9
|
+
s.authors = ['Karen Lundgren']
|
|
10
|
+
s.email = ['webmaster@sourcherryweb.com']
|
|
11
|
+
s.homepage = 'https://github.com/nerakdon/bootstrap_pager'
|
|
12
|
+
s.summary = 'A pagination engine plugin for Rails 3+ or other modern frameworks. Now with more shiny, including infinite paging, bootstrap integration, and the ability to use it within an engine.'
|
|
13
|
+
s.description = 'Like its ancestor Kaminari, BootstrapPager is a Scope & Engine based, clean, powerful, agnostic, customizable and sophisticated paginator for Rails 3+. Now with more shiny, including infinite paging, bootstrap integration, and the ability to use it within an engine. '
|
|
14
|
+
|
|
15
|
+
s.rubyforge_project = 'bootstrap_pager'
|
|
16
|
+
|
|
17
|
+
s.files = `git ls-files`.split("\n")
|
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
19
|
+
s.extra_rdoc_files = ['README.rdoc']
|
|
20
|
+
s.require_paths = ['lib']
|
|
21
|
+
|
|
22
|
+
s.licenses = ['MIT']
|
|
23
|
+
|
|
24
|
+
s.add_dependency 'activesupport', ['>= 3.0.0']
|
|
25
|
+
s.add_dependency 'actionpack', ['>= 3.0.0']
|
|
26
|
+
|
|
27
|
+
s.add_development_dependency 'bundler', ['>= 1.0.0']
|
|
28
|
+
s.add_development_dependency 'rake', ['>= 0']
|
|
29
|
+
s.add_development_dependency 'sqlite3', ['>= 0']
|
|
30
|
+
s.add_development_dependency 'tzinfo', ['>= 0']
|
|
31
|
+
s.add_development_dependency 'rspec', ['>= 0']
|
|
32
|
+
s.add_development_dependency 'rr', ['>= 0']
|
|
33
|
+
s.add_development_dependency 'capybara', ['>= 1.0']
|
|
34
|
+
s.add_development_dependency 'database_cleaner', ['>= 0']
|
|
35
|
+
s.add_development_dependency 'rdoc', ['>= 0']
|
|
36
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Sample localization file for BootstrapPager. You can override these values in your app's locales file if you want.
|
|
2
|
+
|
|
3
|
+
en:
|
|
4
|
+
views:
|
|
5
|
+
pagination:
|
|
6
|
+
first: "« First"
|
|
7
|
+
last: "Last »"
|
|
8
|
+
previous: "‹ Prev"
|
|
9
|
+
next: "Next ›"
|
|
10
|
+
truncate: "…"
|
|
11
|
+
helpers:
|
|
12
|
+
page_entries_info:
|
|
13
|
+
one_page:
|
|
14
|
+
display_entries:
|
|
15
|
+
zero: "No %{entry_name} found"
|
|
16
|
+
one: "Displaying <b>1</b> %{entry_name}"
|
|
17
|
+
other: "Displaying <b>all %{count}</b> %{entry_name}"
|
|
18
|
+
more_pages:
|
|
19
|
+
display_entries: "Displaying %{entry_name} <b>%{first} - %{last}</b> of <b>%{total}</b> in total"
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
source 'https://rubygems.org'
|
|
2
|
+
|
|
3
|
+
gem 'railties', '>= 3.2.3'
|
|
4
|
+
gem 'dm-core', '~> 1.2.0'
|
|
5
|
+
gem 'dm-migrations', '~> 1.2.0'
|
|
6
|
+
gem 'dm-aggregates', '~> 1.2.0'
|
|
7
|
+
gem 'dm-transactions', '~> 1.2.0'
|
|
8
|
+
gem 'dm-active_model', '~> 1.2.1'
|
|
9
|
+
gem 'dm-sqlite-adapter', '~> 1.2.0'
|
|
10
|
+
gem 'rspec-rails', '>= 2.0'
|
|
11
|
+
gem 'nokogiri'
|
|
12
|
+
gem 'xpath'
|
|
13
|
+
gem 'mime-types'
|
|
14
|
+
|
|
15
|
+
gemspec :path => '../'
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
source 'https://rubygems.org'
|
|
2
|
+
|
|
3
|
+
gem 'activerecord', '~> 3.2.3', :require => 'active_record'
|
|
4
|
+
gem 'sinatra', '~> 1.3.0'
|
|
5
|
+
gem 'tilt', '~> 1.3.0'
|
|
6
|
+
gem 'padrino-helpers', '~> 0.10.6'
|
|
7
|
+
gem 'rack-test', '>= 0'
|
|
8
|
+
gem 'sinatra-contrib', '~> 1.3.0'
|
|
9
|
+
gem 'nokogiri'
|
|
10
|
+
gem 'xpath'
|
|
11
|
+
gem 'mime-types'
|
|
12
|
+
|
|
13
|
+
gemspec :path => '../'
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
source 'https://rubygems.org'
|
|
2
|
+
|
|
3
|
+
gem 'activerecord', '~> 3.2.0', :require => 'active_record'
|
|
4
|
+
gem 'sinatra', '~> 1.4.0'
|
|
5
|
+
gem 'tilt', '~> 1.3.0'
|
|
6
|
+
gem 'padrino-helpers', '~> 0.11.3'
|
|
7
|
+
gem 'rack-test', '>= 0'
|
|
8
|
+
gem 'sinatra-contrib', '~> 1.4.0'
|
|
9
|
+
gem 'nokogiri'
|
|
10
|
+
gem 'xpath'
|
|
11
|
+
gem 'mime-types'
|
|
12
|
+
|
|
13
|
+
gemspec :path => '../'
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require 'active_support/configurable'
|
|
2
|
+
|
|
3
|
+
module BootstrapPager
|
|
4
|
+
# Configures global settings for BootstrapPager
|
|
5
|
+
# BootstrapPager.configure do |config|
|
|
6
|
+
# config.default_per_page = 10
|
|
7
|
+
# end
|
|
8
|
+
def self.configure(&block)
|
|
9
|
+
yield @config ||= BootstrapPager::Configuration.new
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Global settings for BootstrapPager
|
|
13
|
+
def self.config
|
|
14
|
+
@config
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# need a Class for 3.0
|
|
18
|
+
class Configuration #:nodoc:
|
|
19
|
+
include ActiveSupport::Configurable
|
|
20
|
+
config_accessor :default_per_page
|
|
21
|
+
config_accessor :max_per_page
|
|
22
|
+
config_accessor :window
|
|
23
|
+
config_accessor :outer_window
|
|
24
|
+
config_accessor :left
|
|
25
|
+
config_accessor :right
|
|
26
|
+
config_accessor :page_method_name
|
|
27
|
+
config_accessor :max_pages
|
|
28
|
+
|
|
29
|
+
def param_name
|
|
30
|
+
config.param_name.respond_to?(:call) ? config.param_name.call : config.param_name
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# define param_name writer (copied from AS::Configurable)
|
|
34
|
+
writer, line = 'def param_name=(value); config.param_name = value; end', __LINE__
|
|
35
|
+
singleton_class.class_eval writer, __FILE__, line
|
|
36
|
+
class_eval writer, __FILE__, line
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# this is ugly. why can't we pass the default value to config_accessor...?
|
|
40
|
+
configure do |config|
|
|
41
|
+
config.default_per_page = 25
|
|
42
|
+
config.max_per_page = nil
|
|
43
|
+
config.window = 4
|
|
44
|
+
config.outer_window = 0
|
|
45
|
+
config.left = 0
|
|
46
|
+
config.right = 0
|
|
47
|
+
config.page_method_name = :page
|
|
48
|
+
config.param_name = :page
|
|
49
|
+
config.max_pages = nil
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
module BootstrapPager
|
|
2
|
+
# = Helpers
|
|
3
|
+
module ActionViewExtension
|
|
4
|
+
# A helper that renders the pagination links.
|
|
5
|
+
#
|
|
6
|
+
# <%= paginate @articles %>
|
|
7
|
+
#
|
|
8
|
+
# ==== Options
|
|
9
|
+
# * <tt>:window</tt> - The "inner window" size (4 by default).
|
|
10
|
+
# * <tt>:outer_window</tt> - The "outer window" size (0 by default).
|
|
11
|
+
# * <tt>:left</tt> - The "left outer window" size (0 by default).
|
|
12
|
+
# * <tt>:right</tt> - The "right outer window" size (0 by default).
|
|
13
|
+
# * <tt>:params</tt> - url_for parameters for the links (:controller, :action, etc.)
|
|
14
|
+
# * <tt>:param_name</tt> - parameter name for page number in the links (:page by default)
|
|
15
|
+
# * <tt>:remote</tt> - Ajax? (false by default)
|
|
16
|
+
# * <tt>:engine_namespace</tt> - namespace of router (current engine's namespace by default)
|
|
17
|
+
# * <tt>:ANY_OTHER_VALUES</tt> - Any other hash key & values would be directly passed into each tag as :locals value.
|
|
18
|
+
def paginate(scope, options = {}, &block)
|
|
19
|
+
paginator = BootstrapPager::Helpers::Paginator.new self, options.reverse_merge(:current_page => scope.current_page, :total_pages => scope.total_pages, :per_page => scope.limit_value, :param_name => BootstrapPager.config.param_name, :remote => false)
|
|
20
|
+
paginator.to_s
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# A simple "Twitter like" pagination link that creates a link to the previous page.
|
|
24
|
+
#
|
|
25
|
+
# ==== Examples
|
|
26
|
+
# Basic usage:
|
|
27
|
+
#
|
|
28
|
+
# <%= link_to_previous_page @items, 'Previous Page' %>
|
|
29
|
+
#
|
|
30
|
+
# Ajax:
|
|
31
|
+
#
|
|
32
|
+
# <%= link_to_previous_page @items, 'Previous Page', :remote => true %>
|
|
33
|
+
#
|
|
34
|
+
# By default, it renders nothing if there are no more results on the previous page.
|
|
35
|
+
# You can customize this output by passing a block.
|
|
36
|
+
#
|
|
37
|
+
# <%= link_to_previous_page @users, 'Previous Page' do %>
|
|
38
|
+
# <span>At the Beginning</span>
|
|
39
|
+
# <% end %>
|
|
40
|
+
def link_to_previous_page(scope, name, options = {}, &block)
|
|
41
|
+
params = options.delete(:params) || {}
|
|
42
|
+
param_name = options.delete(:param_name) || BootstrapPager.config.param_name
|
|
43
|
+
engine_namespace = options.delete(:engine_namespace)
|
|
44
|
+
url = (engine_namespace || self).url_for params.merge(param_name => (scope.current_page - 1))
|
|
45
|
+
link_to_unless scope.first_page?, name, url, options.reverse_merge(:rel => 'previous') do
|
|
46
|
+
block.call if block
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# A simple "Twitter like" pagination link that creates a link to the next page.
|
|
51
|
+
#
|
|
52
|
+
# ==== Examples
|
|
53
|
+
# Basic usage:
|
|
54
|
+
#
|
|
55
|
+
# <%= link_to_next_page @items, 'Next Page' %>
|
|
56
|
+
#
|
|
57
|
+
# Ajax:
|
|
58
|
+
#
|
|
59
|
+
# <%= link_to_next_page @items, 'Next Page', :remote => true %>
|
|
60
|
+
#
|
|
61
|
+
# By default, it renders nothing if there are no more results on the next page.
|
|
62
|
+
# You can customize this output by passing a block.
|
|
63
|
+
#
|
|
64
|
+
# <%= link_to_next_page @users, 'Next Page' do %>
|
|
65
|
+
# <span>No More Pages</span>
|
|
66
|
+
# <% end %>
|
|
67
|
+
def link_to_next_page(scope, name, options = {}, &block)
|
|
68
|
+
params = options.delete(:params) || {}
|
|
69
|
+
param_name = options.delete(:param_name) || BootstrapPager.config.param_name
|
|
70
|
+
engine_namespace = options.delete(:engine_namespace)
|
|
71
|
+
url = (engine_namespace || self).url_for params.merge(param_name => (scope.current_page + 1))
|
|
72
|
+
link_to_unless scope.last_page?, name, url, options.reverse_merge(:rel => 'next') do
|
|
73
|
+
block.call if block
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Renders a helpful message with numbers of displayed vs. total entries.
|
|
78
|
+
# Ported from mislav/will_paginate
|
|
79
|
+
#
|
|
80
|
+
# ==== Examples
|
|
81
|
+
# Basic usage:
|
|
82
|
+
#
|
|
83
|
+
# <%= page_entries_info @posts %>
|
|
84
|
+
# #-> Displaying posts 6 - 10 of 26 in total
|
|
85
|
+
#
|
|
86
|
+
# By default, the message will use the humanized class name of objects
|
|
87
|
+
# in collection: for instance, "project types" for ProjectType models.
|
|
88
|
+
# The namespace will be cutted out and only the last name will be used.
|
|
89
|
+
# Override this with the <tt>:entry_name</tt> parameter:
|
|
90
|
+
#
|
|
91
|
+
# <%= page_entries_info @posts, :entry_name => 'item' %>
|
|
92
|
+
# #-> Displaying items 6 - 10 of 26 in total
|
|
93
|
+
def page_entries_info(collection, options = {})
|
|
94
|
+
entry_name = if options[:entry_name]
|
|
95
|
+
options[:entry_name]
|
|
96
|
+
elsif collection.is_a?(::BootstrapPager::PaginatableArray)
|
|
97
|
+
'entry'
|
|
98
|
+
else
|
|
99
|
+
if collection.respond_to? :model # DataMapper
|
|
100
|
+
collection.model.model_name.human.downcase
|
|
101
|
+
else # AR
|
|
102
|
+
collection.model_name.human.downcase
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
entry_name = entry_name.pluralize unless collection.total_count == 1
|
|
106
|
+
|
|
107
|
+
if collection.total_pages < 2
|
|
108
|
+
t('helpers.page_entries_info.one_page.display_entries', :entry_name => entry_name, :count => collection.total_count)
|
|
109
|
+
else
|
|
110
|
+
first = collection.offset_value + 1
|
|
111
|
+
last = collection.last_page? ? collection.total_count : collection.offset_value + collection.limit_value
|
|
112
|
+
t('helpers.page_entries_info.more_pages.display_entries', :entry_name => entry_name, :first => first, :last => last, :total => collection.total_count)
|
|
113
|
+
end.html_safe
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# Renders rel="next" and rel="prev" links to be used in the head.
|
|
117
|
+
#
|
|
118
|
+
# ==== Examples
|
|
119
|
+
# Basic usage:
|
|
120
|
+
#
|
|
121
|
+
# In head:
|
|
122
|
+
# <head>
|
|
123
|
+
# <title>My Website</title>
|
|
124
|
+
# <%= yield :head %>
|
|
125
|
+
# </head>
|
|
126
|
+
#
|
|
127
|
+
# Somewhere in body:
|
|
128
|
+
# <% content_for :head do %>
|
|
129
|
+
# <%= rel_next_prev_link_tags @items %>
|
|
130
|
+
# <% end %>
|
|
131
|
+
#
|
|
132
|
+
# #-> <link rel="next" href="/items/page/3" /><link rel="prev" href="/items/page/1" />
|
|
133
|
+
#
|
|
134
|
+
def rel_next_prev_link_tags(scope, options = {})
|
|
135
|
+
params = options.delete(:params) || {}
|
|
136
|
+
param_name = options.delete(:param_name) || BootstrapPager.config.param_name
|
|
137
|
+
engine_namespace = options.delete(:engine_namespace)
|
|
138
|
+
|
|
139
|
+
output = ""
|
|
140
|
+
|
|
141
|
+
unless scope.last_page?
|
|
142
|
+
output << '<link rel="next" href="' + (engine_namespace || self).url_for(params.merge(param_name => (scope.current_page + 1))) + '"/>'
|
|
143
|
+
end
|
|
144
|
+
unless scope.first_page?
|
|
145
|
+
output << '<link rel="prev" href="' + (engine_namespace || self).url_for(params.merge(param_name => (scope.current_page - 1))) + '"/>'
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
output.html_safe
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
end
|
|
152
|
+
end
|