Class: Kaminari::Helpers::Paginator
- Includes:
- ActionView::Context
- Defined in:
- lib/kaminari/helpers/paginator.rb
Overview
The main container tag
Defined Under Namespace
Classes: PageProxy
Instance Method Summary collapse
-
#each_relevant_page ⇒ Object
(also: #each_page)
enumerate each page providing PageProxy object as the block parameter Because of performance reason, this doesn’t actually enumerate all pages but pages that are seemingly relevant to the paginator.
-
#initialize(template, options) ⇒ Paginator
constructor
:nodoc:.
- #page_tag(page) ⇒ Object
-
#render(&block) ⇒ Object
render given block as a view template.
-
#to_s ⇒ Object
:nodoc:.
Methods inherited from Tag
Constructor Details
#initialize(template, options) ⇒ Paginator
:nodoc:
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/kaminari/helpers/paginator.rb', line 14 def initialize(template, ) #:nodoc: @window_options = {}.tap do |h| h[:window] = .delete(:window) || .delete(:inner_window) || Kaminari.config.window outer_window = .delete(:outer_window) || Kaminari.config.outer_window h[:left] = .delete(:left) || Kaminari.config.left h[:left] = outer_window if h[:left] == 0 h[:right] = .delete(:right) || Kaminari.config.right h[:right] = outer_window if h[:right] == 0 end @template, @options = template, @theme = @options[:theme] ? "#{@options[:theme]}/" : '' @options[:current_page] = PageProxy.new @window_options.merge(@options), @options[:current_page], nil #FIXME for compatibility. remove num_pages at some time in the future @options[:total_pages] ||= @options[:num_pages] @options[:num_pages] ||= @options[:total_pages] @last = nil # initialize the output_buffer for Context @output_buffer = ActionView::OutputBuffer.new end |
Instance Method Details
#each_relevant_page ⇒ Object Also known as: each_page
enumerate each page providing PageProxy object as the block parameter Because of performance reason, this doesn’t actually enumerate all pages but pages that are seemingly relevant to the paginator. “Relevant” pages are:
-
pages inside the left outer window plus one for showing the gap tag
-
pages inside the inner window plus one on the left plus one on the right for showing the gap tags
-
pages inside the right outer window plus one for showing the gap tag
46 47 48 49 50 51 52 |
# File 'lib/kaminari/helpers/paginator.rb', line 46 def each_relevant_page return to_enum(:each_relevant_page) unless block_given? relevant_pages(@window_options.merge(@options)).each do |i| yield PageProxy.new(@window_options.merge(@options), i, @last) end end |
#page_tag(page) ⇒ Object
64 65 66 |
# File 'lib/kaminari/helpers/paginator.rb', line 64 def page_tag(page) @last = Page.new @template, @options.merge(:page => page) end |
#render(&block) ⇒ Object
render given block as a view template
35 36 37 38 |
# File 'lib/kaminari/helpers/paginator.rb', line 35 def render(&block) instance_eval(&block) if @options[:total_pages] > 1 @output_buffer end |
#to_s ⇒ Object
:nodoc:
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/kaminari/helpers/paginator.rb', line 76 def to_s #:nodoc: subscriber = ActionView::LogSubscriber.log_subscribers.detect {|ls| ls.is_a? ActionView::LogSubscriber} # There is a logging subscriber # and we don't want it to log render_partial # It is threadsafe, but might not repress logging # consistently in a high-load environment if subscriber unless defined? subscriber.render_partial_with_logging class << subscriber alias_method :render_partial_with_logging, :render_partial attr_accessor :render_without_logging # ugly hack to make a renderer where # we can turn logging on or off def render_partial(event) render_partial_with_logging(event) unless render_without_logging end end end subscriber.render_without_logging = true ret = super @window_options.merge(@options).merge :paginator => self subscriber.render_without_logging = false ret else super @window_options.merge(@options).merge :paginator => self end end |