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
Source
# File lib/will_paginate/view_helpers/link_renderer.rb, line 37 def container_attributes @container_attributes ||= { :role => 'navigation', :"aria-label" => @template.will_paginate_translate(:container_aria_label) { 'Pagination' } }.update @options.except(*(ViewHelpers.pagination_options.keys + [:renderer] - [:class])) end
Returns the subset of options
this instance was initialized with that represent HTML attributes for the container element of pagination links.
Source
# 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
-
collection
is aWillPaginate::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
Source
# File lib/will_paginate/view_helpers/link_renderer.rb, line 25 def to_html html = pagination.map do |item| item.is_a?(Integer) ? page_number(item) : send(item) end.join(@options[:link_separator]) @options[:container] ? html_container(html) : html end
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.
Protected Instance Methods
Source
# File lib/will_paginate/view_helpers/link_renderer.rb, line 55 def gap text = @template.will_paginate_translate(:page_gap) { '…' } %(<span class="gap">#{text}</span>) end
Source
# File lib/will_paginate/view_helpers/link_renderer.rb, line 78 def html_container(html) tag(:div, html, container_attributes) end
Source
# File lib/will_paginate/view_helpers/link_renderer.rb, line 65 def next_page num = @collection.current_page < total_pages && @collection.current_page + 1 previous_or_next_page(num, @options[:next_label], 'next_page') end
Source
# File lib/will_paginate/view_helpers/link_renderer.rb, line 46 def page_number(page) aria_label = @template.will_paginate_translate(:page_aria_label, :page => page.to_i) { "Page #{page}" } if page == current_page tag(:em, page, :class => 'current', :"aria-label" => aria_label, :"aria-current" => 'page') else link(page, page, :rel => rel_value(page), :"aria-label" => aria_label) end end
Source
# File lib/will_paginate/view_helpers/link_renderer.rb, line 70 def previous_or_next_page(page, text, classname) if page link(text, page, :class => classname) else tag(:span, text, :class => classname + ' disabled', :"aria-disabled" => true) end end
Source
# File lib/will_paginate/view_helpers/link_renderer.rb, line 60 def previous_page num = @collection.current_page > 1 && @collection.current_page - 1 previous_or_next_page(num, @options[:previous_label], 'previous_page') end
Source
# File lib/will_paginate/view_helpers/link_renderer.rb, line 84 def url(page) raise NotImplementedError end
Returns URL params for page_link_or_span
, taking the current GET params and :params
option into account.
Private Instance Methods
Source
# File lib/will_paginate/view_helpers/link_renderer.rb, line 94 def link(text, target, attributes = {}) if target.is_a?(Integer) attributes[:rel] = rel_value(target) target = url(target) end attributes[:href] = target tag(:a, text, attributes) end
Source
# File lib/will_paginate/view_helpers/link_renderer.rb, line 90 def param_name @options[:param_name].to_s end
Source
# File lib/will_paginate/view_helpers/link_renderer.rb, line 113 def rel_value(page) case page when @collection.current_page - 1; 'prev' when @collection.current_page + 1; 'next' end end
Source
# File lib/will_paginate/view_helpers/link_renderer.rb, line 120 def symbolized_update(target, other, blacklist = nil) other.each_pair do |key, value| key = key.to_sym existing = target[key] next if blacklist && blacklist.include?(key) if value.respond_to?(:each_pair) and (existing.is_a?(Hash) or existing.nil?) symbolized_update(existing || (target[key] = {}), value) else target[key] = value end end end
Source
# File lib/will_paginate/view_helpers/link_renderer.rb, line 103 def tag(name, value, attributes = {}) string_attributes = attributes.inject('') do |attrs, pair| unless pair.last.nil? attrs << %( #{pair.first}="#{CGI::escapeHTML(pair.last.to_s)}") end attrs end "<#{name}#{string_attributes}>#{value}</#{name}>" end