Sha256: de753762c43f1210a6fe7897dbca5737fcbf2a5cd4cc9f161c898d1ac49c5ed7

Contents?: true

Size: 1.36 KB

Versions: 1

Compression:

Stored size: 1.36 KB

Contents

module NavGenerator
  class Generator < Jekyll::Generator
    # Generate a sorted page heirarchy based on parent / grand_parent
    # TODO: If a new page is added to the site, need to hook into incremental rebuild and flush nav.html cache
    def generate(site)
      nav = nav_for_parent(site.pages, nil, nil)
      
      # Attach nav data to the default layout
      site.layouts['default'].data['nav'] = nav
    end

    def nav_for_parent(page_list, parentPage, grandParentPage)
      parentPageTitle = parentPage && parentPage.data['title']
      pages = page_list
        .filter { |page| page.data['parent'] == parentPageTitle && page.data['title'] != nil && page.data['nav_exclude'] != true }
        .sort_by { |page| [page.data['nav_order'] || 999, page.data['title']] }  

      nav = pages.map { |page|
        children = page.data['has_children'] && nav_for_parent(page_list, page, parentPage)

        # Attach the child data to the page itself, used to render the footer Table of Contents
        page.data['children'] = children
        
        # Attach parent/grandparent URLs for rendering breadcrumb
        page.data['parent_url'] = parentPage&.url
        page.data['grand_parent_url'] = grandParentPage&.url
        
        {
          'title' => page.data['title'],
          'url' => page.url,
          'children' => children
        }
      }
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fni-docs-theme-0.6.0 lib/generators/nav-generator.rb