Class: Jekyll::Paginate::Pagination

Inherits:
Generator
  • Object
show all
Defined in:
lib/jekyll-paginate/pagination.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.first_page_url(site) ⇒ Object

Static: Fetch the URL of the template page. Used to determine the

path to the first pager in the series.

site - the Jekyll::Site object

Returns the url of the template page



63
64
65
66
67
68
69
# File 'lib/jekyll-paginate/pagination.rb', line 63

def self.first_page_url(site)
  if page = Pagination.new.template_page(site)
    page.url
  else
    nil
  end
end

Instance Method Details

#generate(site) ⇒ Object

Generate paginated pages if necessary.

site - The Site.

Returns nothing.



15
16
17
18
19
20
21
22
23
24
# File 'lib/jekyll-paginate/pagination.rb', line 15

def generate(site)
  if Pager.pagination_enabled?(site)
    if template = template_page(site)
      paginate(site, template)
    else
      Jekyll.logger.warn "Pagination:", "Pagination is enabled, but I couldn't find " +
      "an index.html page to use as the pagination template. Skipping pagination."
    end
  end
end

#paginate(site, page) ⇒ Object

Paginates the blog’s posts. Renders the index.html file into paginated directories, e.g.: page2/index.html, page3/index.html, etc and adds more site-wide data.

site - The Site. page - The index.html Page that requires pagination.

=> { “page” => <Number>,

"per_page" => <Number>,
"posts" => [<Post>],
"total_posts" => <Number>,
"total_pages" => <Number>,
"previous_page" => <Number>,
"next_page" => <Number> }


40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/jekyll-paginate/pagination.rb', line 40

def paginate(site, page)
  all_posts = site.site_payload['site']['posts']
  all_posts = all_posts.reject { |p| p['hidden'] }
  pages = Pager.calculate_pages(all_posts, site.config['paginate'].to_i)
  (1..pages).each do |num_page|
    pager = Pager.new(site, num_page, all_posts, pages)
    if num_page > 1
      newpage = Page.new(site, site.source, page.dir, page.name)
      newpage.pager = pager
      newpage.dir = Pager.paginate_path(site, num_page)
      site.pages << newpage
    else
      page.pager = pager
    end
  end
end

#template_page(site) ⇒ Object

Public: Find the Jekyll::Page which will act as the pager template

site - the Jekyll::Site object

Returns the Jekyll::Page which will act as the pager template



76
77
78
79
80
81
82
# File 'lib/jekyll-paginate/pagination.rb', line 76

def template_page(site)
  site.pages.dup.select do |page|
    Pager.pagination_candidate?(site.config, page)
  end.sort do |one, two|
    two.path.size <=> one.path.size
  end.first
end