Class: Bridgetown::Paginate::Paginator
- Inherits:
-
Object
- Object
- Bridgetown::Paginate::Paginator
- Defined in:
- lib/bridgetown-paginate/paginator.rb
Overview
Handles the preparation of all the documents based on the current page index
Instance Attribute Summary collapse
-
#documents ⇒ Object
readonly
Returns the value of attribute documents.
-
#first_page ⇒ Object
readonly
Returns the value of attribute first_page.
-
#first_page_path ⇒ Object
readonly
Returns the value of attribute first_page_path.
-
#last_page ⇒ Object
readonly
Returns the value of attribute last_page.
-
#last_page_path ⇒ Object
readonly
Returns the value of attribute last_page_path.
-
#next_page ⇒ Object
readonly
Returns the value of attribute next_page.
-
#next_page_path ⇒ Object
readonly
Returns the value of attribute next_page_path.
-
#page ⇒ Object
readonly
Returns the value of attribute page.
-
#page_path ⇒ Object
readonly
Returns the value of attribute page_path.
-
#page_trail ⇒ Object
Returns the value of attribute page_trail.
-
#per_page ⇒ Object
readonly
Returns the value of attribute per_page.
-
#previous_page ⇒ Object
readonly
Returns the value of attribute previous_page.
-
#previous_page_path ⇒ Object
readonly
Returns the value of attribute previous_page_path.
-
#total_documents ⇒ Object
readonly
Returns the value of attribute total_documents.
-
#total_pages ⇒ Object
readonly
Returns the value of attribute total_pages.
Instance Method Summary collapse
-
#initialize(config_per_page, first_index_page_url, paginated_page_url, documents, cur_page_nr, num_pages, default_indexpage, default_ext) ⇒ Paginator
constructor
Initialize a new Paginator.
-
#resources ⇒ Object
TODO: eventually deprecate documents and only have resources.
-
#to_liquid ⇒ Object
Convert this Paginator’s data to a Hash suitable for use by Liquid.
- #total_resources ⇒ Object
Constructor Details
#initialize(config_per_page, first_index_page_url, paginated_page_url, documents, cur_page_nr, num_pages, default_indexpage, default_ext) ⇒ Paginator
Initialize a new Paginator.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/bridgetown-paginate/paginator.rb', line 16 def initialize( # rubocop:todo Metrics/AbcSize config_per_page, first_index_page_url, paginated_page_url, documents, cur_page_nr, num_pages, default_indexpage, default_ext ) @page = cur_page_nr @per_page = config_per_page.to_i @total_pages = num_pages if @page > @total_pages raise "page number can't be greater than total pages: " \ "#{@page} > #{@total_pages}" end init = (@page - 1) * @per_page offset = [init + @per_page - 1, documents.size].min # Ensure that the current page has correct extensions if needed this_page_url = Utils.ensure_full_path( @page == 1 ? first_index_page_url : paginated_page_url, default_indexpage || "", default_ext || "" ) # To support customizable pagination pages we attempt to explicitly # append the page name to the url incase the user is using extensionless permalinks. if default_indexpage&.length&.positive? # Adjust first page url first_index_page_url = Utils.ensure_full_path( first_index_page_url, default_indexpage, default_ext ) # Adjust the paginated pages as well paginated_page_url = Utils.ensure_full_path( paginated_page_url, default_indexpage, default_ext ) end @total_documents = documents.size @documents = documents[init..offset] @page_path = Utils.format_page_number(this_page_url, cur_page_nr, @total_pages) @previous_page = @page == 1 ? nil : @page - 1 @previous_page_path = unless @page == 1 if @page == 2 Utils.format_page_number( first_index_page_url, 1, @total_pages ) else Utils.format_page_number( paginated_page_url, @previous_page, @total_pages ) end end @next_page = @page == @total_pages ? nil : @page + 1 @next_page_path = if @page != @total_pages Utils.format_page_number( paginated_page_url, @next_page, @total_pages ) end @first_page = 1 @first_page_path = Utils.format_page_number(first_index_page_url, 1, @total_pages) @last_page = @total_pages @last_page_path = Utils.format_page_number(paginated_page_url, @total_pages, @total_pages) end |
Instance Attribute Details
#documents ⇒ Object (readonly)
Returns the value of attribute documents.
9 10 11 |
# File 'lib/bridgetown-paginate/paginator.rb', line 9 def documents @documents end |
#first_page ⇒ Object (readonly)
Returns the value of attribute first_page.
9 10 11 |
# File 'lib/bridgetown-paginate/paginator.rb', line 9 def first_page @first_page end |
#first_page_path ⇒ Object (readonly)
Returns the value of attribute first_page_path.
9 10 11 |
# File 'lib/bridgetown-paginate/paginator.rb', line 9 def first_page_path @first_page_path end |
#last_page ⇒ Object (readonly)
Returns the value of attribute last_page.
9 10 11 |
# File 'lib/bridgetown-paginate/paginator.rb', line 9 def last_page @last_page end |
#last_page_path ⇒ Object (readonly)
Returns the value of attribute last_page_path.
9 10 11 |
# File 'lib/bridgetown-paginate/paginator.rb', line 9 def last_page_path @last_page_path end |
#next_page ⇒ Object (readonly)
Returns the value of attribute next_page.
9 10 11 |
# File 'lib/bridgetown-paginate/paginator.rb', line 9 def next_page @next_page end |
#next_page_path ⇒ Object (readonly)
Returns the value of attribute next_page_path.
9 10 11 |
# File 'lib/bridgetown-paginate/paginator.rb', line 9 def next_page_path @next_page_path end |
#page ⇒ Object (readonly)
Returns the value of attribute page.
9 10 11 |
# File 'lib/bridgetown-paginate/paginator.rb', line 9 def page @page end |
#page_path ⇒ Object (readonly)
Returns the value of attribute page_path.
9 10 11 |
# File 'lib/bridgetown-paginate/paginator.rb', line 9 def page_path @page_path end |
#page_trail ⇒ Object
Returns the value of attribute page_trail.
12 13 14 |
# File 'lib/bridgetown-paginate/paginator.rb', line 12 def page_trail @page_trail end |
#per_page ⇒ Object (readonly)
Returns the value of attribute per_page.
9 10 11 |
# File 'lib/bridgetown-paginate/paginator.rb', line 9 def per_page @per_page end |
#previous_page ⇒ Object (readonly)
Returns the value of attribute previous_page.
9 10 11 |
# File 'lib/bridgetown-paginate/paginator.rb', line 9 def previous_page @previous_page end |
#previous_page_path ⇒ Object (readonly)
Returns the value of attribute previous_page_path.
9 10 11 |
# File 'lib/bridgetown-paginate/paginator.rb', line 9 def previous_page_path @previous_page_path end |
#total_documents ⇒ Object (readonly)
Returns the value of attribute total_documents.
9 10 11 |
# File 'lib/bridgetown-paginate/paginator.rb', line 9 def total_documents @total_documents end |
#total_pages ⇒ Object (readonly)
Returns the value of attribute total_pages.
9 10 11 |
# File 'lib/bridgetown-paginate/paginator.rb', line 9 def total_pages @total_pages end |
Instance Method Details
#resources ⇒ Object
TODO: eventually deprecate documents and only have resources
90 91 92 |
# File 'lib/bridgetown-paginate/paginator.rb', line 90 def resources documents end |
#to_liquid ⇒ Object
Convert this Paginator’s data to a Hash suitable for use by Liquid.
Returns the Hash representation of this Paginator.
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/bridgetown-paginate/paginator.rb', line 101 def to_liquid { "per_page" => per_page, "documents" => documents, "resources" => documents, "total_documents" => total_documents, "total_resources" => total_resources, "total_pages" => total_pages, "page" => page, "page_path" => page_path, "previous_page" => previous_page, "previous_page_path" => previous_page_path, "next_page" => next_page, "next_page_path" => next_page_path, "first_page" => first_page, "first_page_path" => first_page_path, "last_page" => last_page, "last_page_path" => last_page_path, "page_trail" => page_trail, } end |
#total_resources ⇒ Object
94 95 96 |
# File 'lib/bridgetown-paginate/paginator.rb', line 94 def total_resources total_documents end |