Class: NavGenerator::Generator

Inherits:
Jekyll::Generator
  • Object
show all
Defined in:
lib/generators/nav-generator.rb

Instance Method Summary collapse

Instance Method Details

#generate(site) ⇒ Object

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



5
6
7
8
9
10
# File 'lib/generators/nav-generator.rb', line 5

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


12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/generators/nav-generator.rb', line 12

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