class JekyllIndexPages::Generator

Public Instance Methods

generate(site) click to toggle source
# File lib/jekyll-index-pages/generator.rb, line 5
def generate(site)
  config = site.config["index_pages"] || {}
  config.each do |kind, item|
    permalink = item["permalink"] || "/:label/"
    per_page = item['per_page'] || 10
    layout = item["layout"] || "#{kind}"
    collection = item["collection"]

    next if !site.layouts.key? layout

    doc_group =
      case kind
      when "posts"
        { "posts" => site.posts.docs }
      when "categories"
        site.categories
      when "tags"
        site.tags
      when "archive"
        site.data["archive"]
      when "authors"
        site.data["authors"]
      else
        { collection => site.data["collectionz"][collection] } if collection
      end

    doc_group.each do |label, docs|
      sorted_docs = docs.sort { |x, y| y.date <=> x.date }
      pagination = Pagination.new(sorted_docs, per_page)

      (0...pagination.total).each do |current|
        pagination.paginate(current)

        pager = pagination.pager

        label_slug =
          I18n.transliterate(
            Jekyll::Utils.slugify(label),
            :locale => I18n.locale
          )
        dir =
          File.join(
            permalink.sub(":label", label_slug),
            (pager.current_page > 1) ? pager.current_page.to_s : ""
          )

        site.pages <<
          IndexPage.new(site, site.source, dir, item, label, pager)
      end
    end
  end
end