Makes #pagination_links_full accept a block for building custom links.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@11029 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang 2012-12-17 19:38:17 +00:00
parent 42d3ec3a59
commit 7143bd6d27
1 changed files with 19 additions and 10 deletions

View File

@ -153,19 +153,29 @@ module Redmine
# Options: # Options:
# :per_page_links if set to false, the "Per page" links are not rendered # :per_page_links if set to false, the "Per page" links are not rendered
# #
def pagination_links_full(paginator, count=nil, options={}) def pagination_links_full(*args)
pagination_links_each(*args) do |text, parameters|
if block_given?
yield text, parameters
else
link_to text, params.merge(parameters)
end
end
end
# Yields the given block with the text and parameters
# for each pagination link and returns a string that represents the links
def pagination_links_each(paginator, count=nil, options={}, &block)
options.assert_valid_keys :per_page_links options.assert_valid_keys :per_page_links
per_page_links = options.delete(:per_page_links) per_page_links = options.delete(:per_page_links)
per_page_links = false if count.nil? per_page_links = false if count.nil?
page_param = paginator.page_param page_param = paginator.page_param
url_param = params.dup
html = '' html = ''
if paginator.previous_page if paginator.previous_page
# \xc2\xab(utf-8) = « # \xc2\xab(utf-8) = «
html << link_to("\xc2\xab " + l(:label_previous), html << yield("\xc2\xab " + l(:label_previous), page_param => paginator.previous_page) + ' '
url_param.merge(page_param => paginator.previous_page)) + ' '
end end
previous = nil previous = nil
@ -176,7 +186,7 @@ module Redmine
if page == paginator.page if page == paginator.page
html << page.to_s html << page.to_s
else else
html << link_to(page.to_s, url_param.merge(page_param => page)) html << link_to(page.to_s, page_param => page)
end end
html << ' ' html << ' '
previous = page previous = page
@ -184,13 +194,12 @@ module Redmine
if paginator.next_page if paginator.next_page
# \xc2\xbb(utf-8) = &#187; # \xc2\xbb(utf-8) = &#187;
html << ' ' + link_to(l(:label_next) + " \xc2\xbb", html << ' ' + link_to(l(:label_next) + " \xc2\xbb", page_param => paginator.next_page)
url_param.merge(page_param => paginator.next_page))
end end
html << " (#{paginator.first_item}-#{paginator.last_item}/#{paginator.item_count})" html << " (#{paginator.first_item}-#{paginator.last_item}/#{paginator.item_count})"
if per_page_links != false && links = per_page_links(paginator.per_page, paginator.item_count) if per_page_links != false && links = per_page_links(paginator.per_page, paginator.item_count, &block)
html << " | #{links}" html << " | #{links}"
end end
@ -198,7 +207,7 @@ module Redmine
end end
# Renders the "Per page" links. # Renders the "Per page" links.
def per_page_links(selected=nil, item_count=nil) def per_page_links(selected=nil, item_count=nil, &block)
values = Setting.per_page_options_array values = Setting.per_page_options_array
if item_count && values.any? if item_count && values.any?
if item_count > values.first if item_count > values.first
@ -212,7 +221,7 @@ module Redmine
return nil return nil
end end
links = values.collect do |n| links = values.collect do |n|
n == selected ? n : link_to(n, params.merge(:per_page => n)) n == selected ? n : yield(n, :per_page => n)
end end
l(:label_display_per_page, links.join(', ')) l(:label_display_per_page, links.join(', '))
end end