will_paginate 2.3.15 → 2.3.16
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.
- data/CHANGELOG.rdoc +22 -0
- data/README.md +53 -0
- data/Rakefile +19 -44
- data/lib/will_paginate.rb +13 -6
- data/lib/will_paginate/array.rb +7 -7
- data/lib/will_paginate/collection.rb +22 -8
- data/lib/will_paginate/finder.rb +2 -2
- data/lib/will_paginate/i18n.rb +29 -0
- data/lib/will_paginate/locale/en.yml +33 -0
- data/lib/will_paginate/per_page.rb +27 -0
- data/lib/will_paginate/version.rb +1 -1
- data/lib/will_paginate/view_helpers.rb +76 -33
- data/test/ci.rb +56 -0
- data/test/collection_test.rb +19 -2
- data/test/console +4 -4
- data/test/database.yml +4 -10
- data/test/finder_test.rb +24 -0
- data/test/fixtures/developer.rb +1 -1
- data/test/gemfiles/Gemfile.1.2 +13 -0
- data/test/gemfiles/Gemfile.1.2.lock +39 -0
- data/test/gemfiles/Gemfile.2.0 +16 -0
- data/test/gemfiles/Gemfile.2.0.lock +28 -0
- data/test/gemfiles/Gemfile.2.1 +16 -0
- data/test/gemfiles/Gemfile.2.1.lock +28 -0
- data/test/gemfiles/Gemfile.2.2 +16 -0
- data/test/gemfiles/Gemfile.2.2.lock +28 -0
- data/test/helper.rb +7 -10
- data/test/lib/activerecord_test_case.rb +7 -12
- data/test/lib/activerecord_test_connector.rb +14 -4
- data/test/lib/load_fixtures.rb +2 -1
- data/test/lib/view_test_process.rb +7 -0
- data/test/view_test.rb +5 -5
- metadata +22 -25
- data/README.rdoc +0 -107
- data/test/boot.rb +0 -21
- data/test/tasks.rake +0 -59
data/CHANGELOG.rdoc
CHANGED
|
@@ -1,3 +1,25 @@
|
|
|
1
|
+
= 2.3.16, released 2011-08-09
|
|
2
|
+
|
|
3
|
+
* added global <tt>WillPaginate.per_page = 30</tt> setting
|
|
4
|
+
* added i18n capabilities to previous/next labels and page_entries_info
|
|
5
|
+
* page_entries_info ":entry_name" parameter is now renamed to ":model"
|
|
6
|
+
* new option: page_entries_info(:html => false)
|
|
7
|
+
* fix page_entries_info output with rails_xss
|
|
8
|
+
* raise an InvalidPage exception if the calculated offset is bigger than BIGINT
|
|
9
|
+
* fixed bugs with Rails 1.2.6
|
|
10
|
+
|
|
11
|
+
= 2.3.15, released 2010-09-09
|
|
12
|
+
|
|
13
|
+
* ensure respond_to? works as expected considering methods that begin with 'paginate'
|
|
14
|
+
* fix counting in pagination when Integer has length method (Ruby Facets)
|
|
15
|
+
* stop using deprecated Object#returning
|
|
16
|
+
* fixed has_many :through in combination with `:uniq` for Postgres and SQLite3
|
|
17
|
+
|
|
18
|
+
= 2.3.14, released 2010-05-26
|
|
19
|
+
= 2.3.13, released 2010-05-26
|
|
20
|
+
|
|
21
|
+
* better rails_xss compatibility
|
|
22
|
+
|
|
1
23
|
= 2.3.12, released 2009-12-01
|
|
2
24
|
|
|
3
25
|
* make view helpers "HTML safe" for Rails 2.3.5 with rails_xss plugin
|
data/README.md
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# will_paginate
|
|
2
|
+
|
|
3
|
+
will_paginate v2.3 is a pagination plugin for Rails and Active Record.
|
|
4
|
+
|
|
5
|
+
Installation:
|
|
6
|
+
|
|
7
|
+
~~~ ruby
|
|
8
|
+
## environment.rb
|
|
9
|
+
Rails::Initializer.run do |config|
|
|
10
|
+
config.gem 'will_paginate', :version => '~> 2.3.16'
|
|
11
|
+
end
|
|
12
|
+
~~~
|
|
13
|
+
|
|
14
|
+
See [installation instructions][install] on the wiki for more info.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## Basic will_paginate use
|
|
18
|
+
|
|
19
|
+
~~~ ruby
|
|
20
|
+
## perform a paginated query:
|
|
21
|
+
@posts = Post.paginate(:page => params[:page])
|
|
22
|
+
|
|
23
|
+
# or, use an explicit "per page" limit:
|
|
24
|
+
Post.paginate(:page => params[:page], :per_page => 30)
|
|
25
|
+
|
|
26
|
+
## render page links in the view:
|
|
27
|
+
<%= will_paginate @posts %>
|
|
28
|
+
~~~
|
|
29
|
+
|
|
30
|
+
And that's it! You're done. You just need to add some CSS styles to [make those pagination links prettier][css].
|
|
31
|
+
|
|
32
|
+
You can customize the default "per_page" value:
|
|
33
|
+
|
|
34
|
+
~~~ ruby
|
|
35
|
+
# for the Post model
|
|
36
|
+
class Post
|
|
37
|
+
self.per_page = 10
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# set per_page globally
|
|
41
|
+
WillPaginate.per_page = 10
|
|
42
|
+
~~~
|
|
43
|
+
|
|
44
|
+
See [the wiki][wiki] for more documentation. [Ask on the group][group] if you have usage questions. [Report bugs][issues] on GitHub.
|
|
45
|
+
|
|
46
|
+
Happy paginating.
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
[wiki]: https://github.com/mislav/will_paginate/wiki
|
|
50
|
+
[install]: https://github.com/mislav/will_paginate/wiki/Installation "will_paginate installation"
|
|
51
|
+
[group]: http://groups.google.com/group/will_paginate "will_paginate discussion and support group"
|
|
52
|
+
[issues]: https://github.com/mislav/will_paginate/issues
|
|
53
|
+
[css]: http://mislav.uniqpath.com/will_paginate/
|
data/Rakefile
CHANGED
|
@@ -1,53 +1,28 @@
|
|
|
1
|
-
require '
|
|
2
|
-
begin
|
|
3
|
-
hanna_dir = '/Users/mislav/Projects/Hanna/lib'
|
|
4
|
-
$:.unshift hanna_dir if File.exists? hanna_dir
|
|
5
|
-
require 'hanna/rdoctask'
|
|
6
|
-
rescue LoadError
|
|
7
|
-
require 'rake'
|
|
8
|
-
require 'rake/rdoctask'
|
|
9
|
-
end
|
|
10
|
-
load 'test/tasks.rake'
|
|
1
|
+
require 'rake/testtask'
|
|
11
2
|
|
|
12
3
|
desc 'Default: run unit tests.'
|
|
13
4
|
task :default => :test
|
|
14
5
|
|
|
15
|
-
desc '
|
|
16
|
-
Rake::
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
rdoc.main = "README.rdoc" # page to start on
|
|
24
|
-
rdoc.title = "will_paginate documentation"
|
|
25
|
-
|
|
26
|
-
rdoc.rdoc_dir = 'doc' # rdoc output folder
|
|
27
|
-
rdoc.options << '--inline-source' << '--charset=UTF-8'
|
|
28
|
-
rdoc.options << '--webcvs=http://github.com/mislav/will_paginate/tree/master/'
|
|
6
|
+
desc 'Test the will_paginate plugin.'
|
|
7
|
+
Rake::TestTask.new(:test) do |t|
|
|
8
|
+
if ENV['DB'] and ENV['DB'] != 'sqlite3'
|
|
9
|
+
t.pattern = %w[test/finder_test.rb]
|
|
10
|
+
else
|
|
11
|
+
t.pattern = 'test/**/*_test.rb'
|
|
12
|
+
end
|
|
13
|
+
t.libs << 'test'
|
|
29
14
|
end
|
|
30
15
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
if spec_file = Dir['*.gemspec'].first
|
|
38
|
-
spec = File.read spec_file
|
|
39
|
-
spec.gsub! /^(\s* s.(test_)?files \s* = \s* )( \[ [^\]]* \] | %w\( [^)]* \) )/mx do
|
|
40
|
-
assignment = $1
|
|
41
|
-
bunch = $2 ? list.grep(/^test\//) : list
|
|
42
|
-
'%s%%w(%s)' % [assignment, bunch.join(' ')]
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
File.open(spec_file, 'w') { |f| f << spec }
|
|
16
|
+
namespace :test do ||
|
|
17
|
+
desc 'Test only Rails integration'
|
|
18
|
+
Rake::TestTask.new(:rails) do |t|
|
|
19
|
+
t.pattern = %w[test/finder_test.rb test/view_test.rb]
|
|
20
|
+
t.libs << 'test'
|
|
46
21
|
end
|
|
47
|
-
File.open('.manifest', 'w') { |f| f << list.join("\n") }
|
|
48
|
-
end
|
|
49
22
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
23
|
+
desc 'Test only ActiveRecord integration'
|
|
24
|
+
Rake::TestTask.new(:db) do |t|
|
|
25
|
+
t.pattern = %w[test/finder_test.rb]
|
|
26
|
+
t.libs << 'test'
|
|
27
|
+
end
|
|
53
28
|
end
|
data/lib/will_paginate.rb
CHANGED
|
@@ -36,12 +36,13 @@ module WillPaginate
|
|
|
36
36
|
|
|
37
37
|
# support pagination on associations
|
|
38
38
|
a = ActiveRecord::Associations
|
|
39
|
-
[ a::AssociationCollection ]
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
39
|
+
klasses = [ a::AssociationCollection ]
|
|
40
|
+
# detect http://dev.rubyonrails.org/changeset/9230
|
|
41
|
+
unless a::HasManyThroughAssociation.superclass == a::HasManyAssociation
|
|
42
|
+
klasses << a::HasManyThroughAssociation
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
klasses.each do |klass|
|
|
45
46
|
klass.send :include, Finder::ClassMethods
|
|
46
47
|
klass.class_eval { alias_method_chain :method_missing, :paginate }
|
|
47
48
|
end
|
|
@@ -88,3 +89,9 @@ if defined? Rails
|
|
|
88
89
|
WillPaginate.enable_activerecord if defined? ActiveRecord
|
|
89
90
|
WillPaginate.enable_actionpack if defined? ActionController
|
|
90
91
|
end
|
|
92
|
+
|
|
93
|
+
# load default translations only for newer versions of I18n
|
|
94
|
+
if defined? I18n and not defined? I18n::Backend::Simple::MATCH
|
|
95
|
+
require 'will_paginate/i18n'
|
|
96
|
+
I18n.load_path.unshift(*WillPaginate::I18n.load_path)
|
|
97
|
+
end
|
data/lib/will_paginate/array.rb
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
require 'will_paginate/collection'
|
|
2
|
+
require 'will_paginate/per_page'
|
|
2
3
|
|
|
3
4
|
# http://www.desimcadam.com/archives/8
|
|
4
5
|
Array.class_eval do
|
|
5
6
|
def paginate(options = {})
|
|
6
7
|
raise ArgumentError, "parameter hash expected (got #{options.inspect})" unless Hash === options
|
|
7
|
-
|
|
8
|
-
WillPaginate
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
) { |pager|
|
|
8
|
+
page = options[:page] || 1
|
|
9
|
+
per_page = options[:per_page] || WillPaginate.per_page
|
|
10
|
+
total = options[:total_entries] || self.length
|
|
11
|
+
|
|
12
|
+
WillPaginate::Collection.create(page, per_page, total) do |pager|
|
|
13
13
|
pager.replace self[pager.offset, pager.per_page].to_a
|
|
14
|
-
|
|
14
|
+
end
|
|
15
15
|
end
|
|
16
16
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
require 'will_paginate/per_page'
|
|
2
|
+
|
|
1
3
|
module WillPaginate
|
|
2
4
|
# = Invalid page number error
|
|
3
5
|
# This is an ArgumentError raised in case a page was requested that is either
|
|
@@ -17,8 +19,24 @@ module WillPaginate
|
|
|
17
19
|
# requested. Use <tt>WillPaginate::Collection#out_of_bounds?</tt> method to
|
|
18
20
|
# check for those cases and manually deal with them as you see fit.
|
|
19
21
|
class InvalidPage < ArgumentError
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
# a value bigger than this would result in invalid SQL queries
|
|
23
|
+
BIGINT = 9223372036854775807
|
|
24
|
+
|
|
25
|
+
def self.validate(page_value, per_page_value)
|
|
26
|
+
page = page_value.to_i
|
|
27
|
+
raise self.new(page_value, page) if page < 1
|
|
28
|
+
per_page = per_page_value.to_i
|
|
29
|
+
offset = (page - 1) * per_page
|
|
30
|
+
raise self, "invalid offset: #{offset.inspect}" if offset < 0 or offset > BIGINT
|
|
31
|
+
[page, per_page]
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def initialize(value, page_num = nil)
|
|
35
|
+
if page_num
|
|
36
|
+
super "#{value.inspect} given as value, which translates to '#{page_num}' as page number"
|
|
37
|
+
else
|
|
38
|
+
super value
|
|
39
|
+
end
|
|
22
40
|
end
|
|
23
41
|
end
|
|
24
42
|
|
|
@@ -44,12 +62,8 @@ module WillPaginate
|
|
|
44
62
|
# and the total number of entries. The last argument is optional because it
|
|
45
63
|
# is best to do lazy counting; in other words, count *conditionally* after
|
|
46
64
|
# populating the collection using the +replace+ method.
|
|
47
|
-
def initialize(page, per_page, total = nil)
|
|
48
|
-
@current_page = page
|
|
49
|
-
raise InvalidPage.new(page, @current_page) if @current_page < 1
|
|
50
|
-
@per_page = per_page.to_i
|
|
51
|
-
raise ArgumentError, "`per_page` setting cannot be less than 1 (#{@per_page} given)" if @per_page < 1
|
|
52
|
-
|
|
65
|
+
def initialize(page, per_page = WillPaginate.per_page, total = nil)
|
|
66
|
+
@current_page, @per_page = InvalidPage.validate(page, per_page)
|
|
53
67
|
self.total_entries = total if total
|
|
54
68
|
end
|
|
55
69
|
|
data/lib/will_paginate/finder.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'will_paginate/core_ext'
|
|
2
|
+
require 'will_paginate/per_page'
|
|
2
3
|
|
|
3
4
|
module WillPaginate
|
|
4
5
|
# A mixin for ActiveRecord::Base. Provides +per_page+ class method
|
|
@@ -8,11 +9,10 @@ module WillPaginate
|
|
|
8
9
|
#
|
|
9
10
|
module Finder
|
|
10
11
|
def self.included(base)
|
|
12
|
+
base.extend PerPage
|
|
11
13
|
base.extend ClassMethods
|
|
12
14
|
class << base
|
|
13
15
|
alias_method_chain :method_missing, :paginate
|
|
14
|
-
# alias_method_chain :find_every, :paginate
|
|
15
|
-
define_method(:per_page) { 30 } unless respond_to?(:per_page)
|
|
16
16
|
end
|
|
17
17
|
end
|
|
18
18
|
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module WillPaginate
|
|
2
|
+
module I18n
|
|
3
|
+
def self.locale_dir
|
|
4
|
+
File.expand_path('../locale', __FILE__)
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def self.load_path
|
|
8
|
+
Dir["#{locale_dir}/*.{rb,yml}"]
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def will_paginate_translate(keys, options = {})
|
|
12
|
+
if defined? ::I18n
|
|
13
|
+
defaults = Array(keys).dup
|
|
14
|
+
if block_given?
|
|
15
|
+
if defined? ::I18n::Backend::Simple::MATCH
|
|
16
|
+
# procs in defaults array were not supported back then
|
|
17
|
+
defaults << yield(defaults.first, options)
|
|
18
|
+
else
|
|
19
|
+
defaults << Proc.new
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
::I18n.translate(defaults.shift, options.merge(:default => defaults, :scope => :will_paginate))
|
|
23
|
+
else
|
|
24
|
+
key = Array === keys ? keys.first : keys
|
|
25
|
+
yield key, options
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
en:
|
|
2
|
+
will_paginate:
|
|
3
|
+
previous_label: "« Previous"
|
|
4
|
+
next_label: "Next »"
|
|
5
|
+
page_gap: "…"
|
|
6
|
+
|
|
7
|
+
page_entries_info:
|
|
8
|
+
single_page:
|
|
9
|
+
zero: "No %{model} found"
|
|
10
|
+
one: "Displaying 1 %{model}"
|
|
11
|
+
other: "Displaying all %{count} %{model}"
|
|
12
|
+
single_page_html:
|
|
13
|
+
zero: "No %{model} found"
|
|
14
|
+
one: "Displaying <b>1</b> %{model}"
|
|
15
|
+
other: "Displaying <b>all %{count}</b> %{model}"
|
|
16
|
+
|
|
17
|
+
multi_page: "Displaying %{model} %{from} - %{to} of %{count} in total"
|
|
18
|
+
multi_page_html: "Displaying %{model} <b>%{from} - %{to}</b> of <b>%{count}</b> in total"
|
|
19
|
+
|
|
20
|
+
# models:
|
|
21
|
+
# entry:
|
|
22
|
+
# zero: entries
|
|
23
|
+
# one: entry
|
|
24
|
+
# few: entries
|
|
25
|
+
# other: entries
|
|
26
|
+
|
|
27
|
+
# line_item:
|
|
28
|
+
# page_entries_info:
|
|
29
|
+
# single_page:
|
|
30
|
+
# zero: "Your shopping cart is empty"
|
|
31
|
+
# one: "Displaying one item in your cart"
|
|
32
|
+
# other: "Displaying all %{count} items"
|
|
33
|
+
# multi_page: "Displaying items %{from} - %{to} of %{count} in total"
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module WillPaginate
|
|
2
|
+
module PerPage
|
|
3
|
+
def per_page
|
|
4
|
+
defined?(@per_page) ? @per_page : WillPaginate.per_page
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def per_page=(limit)
|
|
8
|
+
@per_page = limit.to_i
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.extended(base)
|
|
12
|
+
base.extend Inheritance if base.is_a? Class
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
module Inheritance
|
|
16
|
+
def inherited(subclass)
|
|
17
|
+
super
|
|
18
|
+
subclass.per_page = self.per_page
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
extend PerPage
|
|
24
|
+
|
|
25
|
+
# default number of items per page
|
|
26
|
+
self.per_page = 30
|
|
27
|
+
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'will_paginate/core_ext'
|
|
2
|
+
require 'will_paginate/i18n'
|
|
2
3
|
|
|
3
4
|
module WillPaginate
|
|
4
5
|
# = Will Paginate view helpers
|
|
@@ -20,11 +21,13 @@ module WillPaginate
|
|
|
20
21
|
# older versions of Rails) you can easily translate link texts to previous
|
|
21
22
|
# and next pages, as well as override some other defaults to your liking.
|
|
22
23
|
module ViewHelpers
|
|
24
|
+
include WillPaginate::I18n
|
|
25
|
+
|
|
23
26
|
# default options that can be overridden on the global level
|
|
24
27
|
@@pagination_options = {
|
|
25
28
|
:class => 'pagination',
|
|
26
|
-
:previous_label =>
|
|
27
|
-
:next_label =>
|
|
29
|
+
:previous_label => nil,
|
|
30
|
+
:next_label => nil,
|
|
28
31
|
:inner_window => 4, # links around the current page
|
|
29
32
|
:outer_window => 1, # links around beginning and end
|
|
30
33
|
:separator => ' ', # single space is friendly to spiders and non-graphic browsers
|
|
@@ -102,7 +105,10 @@ module WillPaginate
|
|
|
102
105
|
WillPaginate::Deprecation::warn(":prev_label view parameter is now :previous_label; the old name has been deprecated", caller)
|
|
103
106
|
options[:previous_label] = options.delete(:prev_label)
|
|
104
107
|
end
|
|
105
|
-
|
|
108
|
+
|
|
109
|
+
options[:previous_label] ||= will_paginate_translate(:previous_label) { '« Previous' }
|
|
110
|
+
options[:next_label] ||= will_paginate_translate(:next_label) { 'Next »' }
|
|
111
|
+
|
|
106
112
|
# get the renderer instance
|
|
107
113
|
renderer = case options[:renderer]
|
|
108
114
|
when String
|
|
@@ -142,7 +148,7 @@ module WillPaginate
|
|
|
142
148
|
def paginated_section(*args, &block)
|
|
143
149
|
pagination = will_paginate(*args).to_s
|
|
144
150
|
|
|
145
|
-
|
|
151
|
+
if respond_to? :output_buffer
|
|
146
152
|
concat pagination
|
|
147
153
|
yield
|
|
148
154
|
concat pagination
|
|
@@ -160,31 +166,64 @@ module WillPaginate
|
|
|
160
166
|
#
|
|
161
167
|
# By default, the message will use the humanized class name of objects
|
|
162
168
|
# in collection: for instance, "project types" for ProjectType models.
|
|
163
|
-
# Override this with the <tt>:
|
|
169
|
+
# Override this with the <tt>:model</tt> parameter:
|
|
164
170
|
#
|
|
165
|
-
# <%= page_entries_info @posts, :
|
|
171
|
+
# <%= page_entries_info @posts, :model => 'item' %>
|
|
166
172
|
# #-> Displaying items 6 - 10 of 26 in total
|
|
167
173
|
def page_entries_info(collection, options = {})
|
|
168
|
-
|
|
169
|
-
(
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
174
|
+
if options.key? :entry_name
|
|
175
|
+
WillPaginate::Deprecation::warn(":entry_name parameter is now called :model", caller)
|
|
176
|
+
end
|
|
177
|
+
model = options[:model] || options[:entry_name]
|
|
178
|
+
model = collection.first.class unless model or collection.empty?
|
|
179
|
+
model ||= 'entry'
|
|
180
|
+
|
|
181
|
+
if html = options.fetch(:html, true)
|
|
182
|
+
b, eb = '<b>', '</b>'
|
|
183
|
+
sp = ' '
|
|
184
|
+
html_key = '_html'
|
|
185
|
+
else
|
|
186
|
+
b = eb = html_key = ''
|
|
187
|
+
sp = ' '
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
model_key = model.to_s.underscore
|
|
191
|
+
model_count = collection.total_pages > 1 ? 5 : collection.size
|
|
192
|
+
model_name = will_paginate_translate "models.#{model_key}", :count => model_count do |_, opts|
|
|
193
|
+
name = model_key.to_s.tr('_/', ' ')
|
|
194
|
+
raise "can't pluralize model name: #{model.inspect}" unless name.respond_to? :pluralize
|
|
195
|
+
opts[:count] == 1 ? name : name.pluralize
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
output = if collection.total_pages < 2
|
|
199
|
+
i18n_key = :"page_entries_info.single_page#{html_key}"
|
|
200
|
+
keys = [:"#{model_key}.#{i18n_key}", i18n_key]
|
|
201
|
+
|
|
202
|
+
will_paginate_translate keys, :count => collection.size, :model => model_name do |_, opts|
|
|
203
|
+
case opts[:count]
|
|
204
|
+
when 0; "No #{opts[:model]} found"
|
|
205
|
+
when 1; "Displaying #{b}1#{eb} #{opts[:model]}"
|
|
206
|
+
else "Displaying #{b}all#{sp}#{opts[:count]}#{eb} #{opts[:model]}"
|
|
207
|
+
end
|
|
176
208
|
end
|
|
177
209
|
else
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
collection.total_entries
|
|
182
|
-
|
|
210
|
+
i18n_key = :"page_entries_info.multi_page#{html_key}"
|
|
211
|
+
keys = [:"#{model_key}.#{i18n_key}", i18n_key]
|
|
212
|
+
params = {
|
|
213
|
+
:model => model_name, :count => collection.total_entries,
|
|
214
|
+
:from => collection.offset + 1, :to => collection.offset + collection.length
|
|
215
|
+
}
|
|
216
|
+
will_paginate_translate keys, params do |_, opts|
|
|
217
|
+
%{Displaying %s #{b}%d#{sp}-#{sp}%d#{eb} of #{b}%d#{eb} in total} %
|
|
218
|
+
[ opts[:model], opts[:from], opts[:to], opts[:count] ]
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
if html and output.respond_to?(:html_safe)
|
|
223
|
+
output.html_safe
|
|
224
|
+
else
|
|
225
|
+
output
|
|
183
226
|
end
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
if respond_to? :safe_helper
|
|
187
|
-
safe_helper :will_paginate, :paginated_section, :page_entries_info
|
|
188
227
|
end
|
|
189
228
|
|
|
190
229
|
def self.total_pages_for_collection(collection) #:nodoc:
|
|
@@ -205,15 +244,6 @@ module WillPaginate
|
|
|
205
244
|
# This class does the heavy lifting of actually building the pagination
|
|
206
245
|
# links. It is used by the <tt>will_paginate</tt> helper internally.
|
|
207
246
|
class LinkRenderer
|
|
208
|
-
|
|
209
|
-
# The gap in page links is represented by:
|
|
210
|
-
#
|
|
211
|
-
# <span class="gap">…</span>
|
|
212
|
-
attr_accessor :gap_marker
|
|
213
|
-
|
|
214
|
-
def initialize
|
|
215
|
-
@gap_marker = '<span class="gap">…</span>'
|
|
216
|
-
end
|
|
217
247
|
|
|
218
248
|
# * +collection+ is a WillPaginate::Collection instance or any other object
|
|
219
249
|
# that conforms to that API
|
|
@@ -253,6 +283,18 @@ module WillPaginate
|
|
|
253
283
|
end
|
|
254
284
|
@html_attributes
|
|
255
285
|
end
|
|
286
|
+
|
|
287
|
+
attr_writer :gap_marker
|
|
288
|
+
|
|
289
|
+
# The gap in page links is represented by:
|
|
290
|
+
#
|
|
291
|
+
# <span class="gap">…</span>
|
|
292
|
+
def gap_marker
|
|
293
|
+
@gap_marker ||= begin
|
|
294
|
+
gap_text = @template.will_paginate_translate(:page_gap) { '…' }
|
|
295
|
+
%(<span class="gap">#{gap_text}</span>)
|
|
296
|
+
end
|
|
297
|
+
end
|
|
256
298
|
|
|
257
299
|
protected
|
|
258
300
|
|
|
@@ -395,7 +437,8 @@ module WillPaginate
|
|
|
395
437
|
if defined? Rack::Utils
|
|
396
438
|
# For Rails > 2.3
|
|
397
439
|
Rack::Utils.parse_nested_query(params)
|
|
398
|
-
elsif defined?(ActionController::AbstractRequest)
|
|
440
|
+
elsif defined?(ActionController::AbstractRequest) and
|
|
441
|
+
ActionController::AbstractRequest.respond_to? :parse_query_parameters
|
|
399
442
|
ActionController::AbstractRequest.parse_query_parameters(params)
|
|
400
443
|
elsif defined?(ActionController::UrlEncodedPairParser)
|
|
401
444
|
# For Rails > 2.2
|