class WillPaginate::ViewHelpers::LinkRenderer
This class does the heavy lifting of actually building the pagination
links. It is used by will_paginate
helper internally.
Public Instance Methods
container_attributes()
click to toggle source
Returns the subset of options
this instance was initialized
with that represent HTML attributes for the container element of pagination
links.
# File lib/will_paginate/view_helpers/link_renderer.rb, line 37 def container_attributes @container_attributes ||= @options.except(*(ViewHelpers.pagination_options.keys + [:renderer] - [:class])) end
prepare(collection, options, template)
click to toggle source
-
collection
is a WillPaginate::Collection instance or any other object that conforms to that API -
options
are forwarded fromwill_paginate
view helper -
template
is the reference to the template being rendered
Calls superclass method
# File lib/will_paginate/view_helpers/link_renderer.rb, line 16 def prepare(collection, options, template) super(collection, options) @template = template @container_attributes = @base_url_params = nil end
to_html()
click to toggle source
Process it! This method returns the complete HTML string which contains pagination links. Feel free to subclass LinkRenderer and change this method as you see fit.
# File lib/will_paginate/view_helpers/link_renderer.rb, line 25 def to_html html = pagination.map do |item| item.is_a?(Fixnum) ? page_number(item) : send(item) end.join(@options[:link_separator]) @options[:container] ? html_container(html) : html end
Protected Instance Methods
gap()
click to toggle source
# File lib/will_paginate/view_helpers/link_renderer.rb, line 51 def gap text = @template.will_paginate_translate(:page_gap) { '…' } %Q(<span class="gap">#{text}</span>) end
html_container(html)
click to toggle source
# File lib/will_paginate/view_helpers/link_renderer.rb, line 74 def html_container(html) tag(:div, html, container_attributes) end
next_page()
click to toggle source
# File lib/will_paginate/view_helpers/link_renderer.rb, line 61 def next_page num = @collection.current_page < total_pages && @collection.current_page + 1 previous_or_next_page(num, @options[:next_label], 'next_page') end
page_number(page)
click to toggle source
# File lib/will_paginate/view_helpers/link_renderer.rb, line 43 def page_number(page) unless page == current_page link(page, page, :rel => rel_value(page)) else tag(:em, page, :class => 'current') end end
previous_or_next_page(page, text, classname)
click to toggle source
# File lib/will_paginate/view_helpers/link_renderer.rb, line 66 def previous_or_next_page(page, text, classname) if page link(text, page, :class => classname) else tag(:span, text, :class => classname + ' disabled') end end
previous_page()
click to toggle source
# File lib/will_paginate/view_helpers/link_renderer.rb, line 56 def previous_page num = @collection.current_page > 1 && @collection.current_page - 1 previous_or_next_page(num, @options[:previous_label], 'previous_page') end
url(page)
click to toggle source
Returns URL params for page_link_or_span
, taking the current
GET params and :params
option into account.
# File lib/will_paginate/view_helpers/link_renderer.rb, line 80 def url(page) raise NotImplementedError end
Private Instance Methods
link(text, target, attributes = {})
click to toggle source
# File lib/will_paginate/view_helpers/link_renderer.rb, line 90 def link(text, target, attributes = {}) if target.is_a? Fixnum attributes[:rel] = rel_value(target) target = url(target) end attributes[:href] = target tag(:a, text, attributes) end
param_name()
click to toggle source
# File lib/will_paginate/view_helpers/link_renderer.rb, line 86 def param_name @options[:param_name].to_s end
rel_value(page)
click to toggle source
# File lib/will_paginate/view_helpers/link_renderer.rb, line 109 def rel_value(page) case page when @collection.current_page - 1; 'prev' + (page == 1 ? ' start' : '') when @collection.current_page + 1; 'next' when 1; 'start' end end
symbolized_update(target, other)
click to toggle source
# File lib/will_paginate/view_helpers/link_renderer.rb, line 117 def symbolized_update(target, other) other.each do |key, value| key = key.to_sym existing = target[key] if value.is_a?(Hash) and (existing.is_a?(Hash) or existing.nil?) symbolized_update(existing || (target[key] = {}), value) else target[key] = value end end end
tag(name, value, attributes = {})
click to toggle source
# File lib/will_paginate/view_helpers/link_renderer.rb, line 99 def tag(name, value, attributes = {}) string_attributes = attributes.inject('') do |attrs, pair| unless pair.last.nil? attrs << %Q( #{pair.first}="#{CGI::escapeHTML(pair.last.to_s)}") end attrs end "<#{name}#{string_attributes}>#{value}</#{name}>" end