Class: Jekyll::J1Paginator::Generator::Paginator

Inherits:
Object
  • Object
show all
Defined in:
lib/j1-paginator/generator/paginator.rb

Overview

Handles the preparation of all the posts based on the current page index

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config_per_page, first_index_page_url, paginated_page_url, posts, cur_page_nr, num_pages, default_indexpage, default_ext) ⇒ Paginator

Initialize a new Paginator.



15
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
# File 'lib/j1-paginator/generator/paginator.rb', line 15

def initialize(config_per_page, first_index_page_url, paginated_page_url, posts, 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 RuntimeError, "page number can't be greater than total pages: #{@page} > #{@total_pages}"
  end

  init = (@page - 1) * @per_page
  offset = (init + @per_page - 1) >= posts.size ? posts.size : (init + @per_page - 1)

  # 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_indexpage.length == 0 ? 'index' : default_indexpage,
                                         !default_ext || default_ext.length == 0 ? '.html' : 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 && default_indexpage.length > 0
    # 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_posts = posts.size
  @posts = posts[init..offset]
  @page_path = Utils.format_page_number(this_page_url, cur_page_nr, @total_pages)

  @previous_page = @page != 1 ? @page - 1 : nil
  @previous_page_path = @page == 1 ? nil : 
                        @page == 2 ? Utils.format_page_number(first_index_page_url, 1, @total_pages) : 
                        Utils.format_page_number(paginated_page_url, @previous_page, @total_pages)
  @next_page = @page != @total_pages ? @page + 1 : nil
  @next_page_path = @page != @total_pages ? Utils.format_page_number(paginated_page_url, @next_page, @total_pages) : nil

  @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

#first_pageObject (readonly)

Returns the value of attribute first_page.



6
7
8
# File 'lib/j1-paginator/generator/paginator.rb', line 6

def first_page
  @first_page
end

#first_page_pathObject (readonly)

Returns the value of attribute first_page_path.



6
7
8
# File 'lib/j1-paginator/generator/paginator.rb', line 6

def first_page_path
  @first_page_path
end

#last_pageObject (readonly)

Returns the value of attribute last_page.



6
7
8
# File 'lib/j1-paginator/generator/paginator.rb', line 6

def last_page
  @last_page
end

#last_page_pathObject (readonly)

Returns the value of attribute last_page_path.



6
7
8
# File 'lib/j1-paginator/generator/paginator.rb', line 6

def last_page_path
  @last_page_path
end

#next_pageObject (readonly)

Returns the value of attribute next_page.



6
7
8
# File 'lib/j1-paginator/generator/paginator.rb', line 6

def next_page
  @next_page
end

#next_page_pathObject (readonly)

Returns the value of attribute next_page_path.



6
7
8
# File 'lib/j1-paginator/generator/paginator.rb', line 6

def next_page_path
  @next_page_path
end

#pageObject (readonly)

Returns the value of attribute page.



6
7
8
# File 'lib/j1-paginator/generator/paginator.rb', line 6

def page
  @page
end

#page_pathObject (readonly)

Returns the value of attribute page_path.



6
7
8
# File 'lib/j1-paginator/generator/paginator.rb', line 6

def page_path
  @page_path
end

#page_trailObject

Returns the value of attribute page_trail.



6
7
8
# File 'lib/j1-paginator/generator/paginator.rb', line 6

def page_trail
  @page_trail
end

#per_pageObject (readonly)

Returns the value of attribute per_page.



6
7
8
# File 'lib/j1-paginator/generator/paginator.rb', line 6

def per_page
  @per_page
end

#postsObject (readonly)

Returns the value of attribute posts.



6
7
8
# File 'lib/j1-paginator/generator/paginator.rb', line 6

def posts
  @posts
end

#previous_pageObject (readonly)

Returns the value of attribute previous_page.



6
7
8
# File 'lib/j1-paginator/generator/paginator.rb', line 6

def previous_page
  @previous_page
end

#previous_page_pathObject (readonly)

Returns the value of attribute previous_page_path.



6
7
8
# File 'lib/j1-paginator/generator/paginator.rb', line 6

def previous_page_path
  @previous_page_path
end

#total_pagesObject (readonly)

Returns the value of attribute total_pages.



6
7
8
# File 'lib/j1-paginator/generator/paginator.rb', line 6

def total_pages
  @total_pages
end

#total_postsObject (readonly)

Returns the value of attribute total_posts.



6
7
8
# File 'lib/j1-paginator/generator/paginator.rb', line 6

def total_posts
  @total_posts
end

Instance Method Details

#to_liquidObject

Convert this Paginator’s data to a Hash suitable for use by Liquid. Returns the Hash representation of this Paginator.



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/j1-paginator/generator/paginator.rb', line 61

def to_liquid
  {
    'per_page' => per_page,
    'posts' => posts,
    'total_posts' => total_posts,
    '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