X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/e660e609661edadc1ed5ad49d6e83e936b2f91cd..f61ac2586f341589e0e5c880f585928518cf38c2:/lib/classic_pagination/pagination_helper.rb
diff --git a/lib/classic_pagination/pagination_helper.rb b/lib/classic_pagination/pagination_helper.rb
index 069d77566..72d16fc98 100644
--- a/lib/classic_pagination/pagination_helper.rb
+++ b/lib/classic_pagination/pagination_helper.rb
@@ -13,7 +13,7 @@ module ActionView
:always_show_anchors => true,
:link_to_current_page => false,
:params => {}
- }
+ }.freeze
end
# Creates a basic HTML link bar for the given +paginator+. Links will be created
@@ -27,7 +27,7 @@ module ActionView
# (i.e. Older Pages: 1 2 3 4)
# :suffix:: suffix for pagination links
# (i.e. 1 2 3 4 <- Older Pages)
- # :window_size:: the number of pages to show around
+ # :window_size:: the number of pages to show around
# the current page (defaults to 2)
# :always_show_anchors:: whether or not the first and last
# pages should always be shown
@@ -48,20 +48,20 @@ module ActionView
# # => 1 2 3 ... 10
#
# pagination_links(@person_pages, :always_show_anchors => false)
- # # => 1 2 3
+ # # => 1 2 3
#
# pagination_links(@person_pages, :window_size => 1)
# # => 1 2 ... 10
#
# pagination_links(@person_pages, :params => { :viewer => "flash" })
- # # => 1 2 3 ...
+ # # => 1 2 3 ...
# # 10
- def pagination_links(paginator, options={}, html_options={})
+ def pagination_links(paginator, options = {}, html_options = {})
name = options[:name] || DEFAULT_OPTIONS[:name]
params = (options[:params] || DEFAULT_OPTIONS[:params]).clone
-
- prefix = options[:prefix] || ''
- suffix = options[:suffix] || ''
+
+ prefix = options[:prefix] || ""
+ suffix = options[:suffix] || ""
pagination_links_each(paginator, options, prefix, suffix) do |n|
params[name] = n
@@ -71,9 +71,9 @@ module ActionView
# Iterate through the pages of a given +paginator+, invoking a
# block for each page number that needs to be rendered as a link.
- #
+ #
# ==== Options
- # :window_size:: the number of pages to show around
+ # :window_size:: the number of pages to show around
# the current page (defaults to +2+)
# :always_show_anchors:: whether or not the first and last
# pages should always be shown
@@ -97,31 +97,32 @@ module ActionView
current_page = paginator.current_page
window_pages = current_page.window(options[:window_size]).pages
- return if window_pages.length <= 1 unless link_to_current_page
-
- first, last = paginator.first, paginator.last
-
- html = ''
+ return unless link_to_current_page || window_pages.length > 1
+
+ first = paginator.first
+ last = paginator.last
+
+ html = ""
html << prefix if prefix
- if always_show_anchors and not (wp_first = window_pages[0]).first?
+ if always_show_anchors && !(wp_first = window_pages[0]).first?
html << yield(first.number)
- html << ' ... ' if wp_first.number - first.number > 1
- html << ' '
+ html << " ... " if wp_first.number - first.number > 1
+ html << " "
end
-
+
window_pages.each do |page|
- if current_page == page && !link_to_current_page
- html << page.number.to_s
- else
- html << yield(page.number)
- end
- html << ' '
+ html << if current_page == page && !link_to_current_page
+ page.number.to_s
+ else
+ yield(page.number)
+ end
+ html << " "
end
-
- if always_show_anchors and not (wp_last = window_pages[-1]).last?
- html << ' ... ' if last.number - wp_last.number > 1
+
+ if always_show_anchors && !(wp_last = window_pages[-1]).last?
+ html << " ... " if last.number - wp_last.number > 1
html << yield(last.number)
end
@@ -129,7 +130,40 @@ module ActionView
html
end
-
- end # PaginationHelper
- end # Helpers
-end # ActionView
+
+ def pagination_items(paginator, options)
+ options = DEFAULT_OPTIONS.merge(options)
+ link_to_current_page = options[:link_to_current_page]
+ always_show_anchors = options[:always_show_anchors]
+
+ current_page = paginator.current_page
+ window_pages = current_page.window(options[:window_size]).pages
+
+ first = paginator.first
+ last = paginator.last
+
+ items = []
+
+ if always_show_anchors && !(wp_first = window_pages[0]).first?
+ items.push [first.number.to_s, first.number]
+ items.push ["...", "disabled"] if wp_first.number - first.number > 1
+ end
+
+ window_pages.each do |page|
+ if current_page == page && !link_to_current_page
+ items.push [page.number.to_s, "active"]
+ else
+ items.push [page.number.to_s, page.number]
+ end
+ end
+
+ if always_show_anchors && !(wp_last = window_pages[-1]).last?
+ items.push ["...", "disabled"] if last.number - wp_last.number > 1
+ items.push [last.number.to_s, last.number]
+ end
+
+ items
+ end
+ end
+ end
+end