Class: Jekyll::AwesomeNav::Generator

Inherits:
Generator
  • Object
show all
Defined in:
lib/jekyll/awesome_nav/generator.rb

Instance Method Summary collapse

Instance Method Details

#generate(site) ⇒ Object



9
10
11
12
13
14
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
# File 'lib/jekyll/awesome_nav/generator.rb', line 9

def generate(site)
  config = Config.new(site.config["awesome_nav"])
  return unless config.enabled?

  pages = PageSet.new(site, config)
  return if pages.empty?

  tree = TreeBuilder.new(pages: pages, root_dir: config.root_dir).build
  nav_map = NavFileLoader.new(site: site, config: config).load
  resolved_tree = NavResolver.new(root_dir: config.root_dir, nav_map: nav_map).apply(tree, config.root_dir)
  result = NavigationResult.new(
    tree: resolved_tree,
    root_dir: config.root_dir,
    root_page: pages.root_page,
    nav_map: nav_map
  )

  pages.each do |page|
    page_dir = Utils.source_dir_for(page)
    nav_dir = result.nav_dir_for(page_dir)
    page_url = Utils.normalize_url(page.url)
    page.data["awesome_nav"] = deep_copy(result.serialized_tree)
    page.data["awesome_nav_local"] = deep_copy(result.local_nav_for(nav_dir))
    page.data["awesome_nav_dir"] = nav_dir
    page.data["breadcrumbs"] = result.breadcrumbs_for(page)
    page.data["awesome_nav_previous"] = deep_copy(result.nav_entry_for(page_url)&.fetch("previous", nil))
    page.data["awesome_nav_next"] = deep_copy(result.nav_entry_for(page_url)&.fetch("next", nil))
  end

  site.config["awesome_nav_tree"] = deep_copy(result.serialized_tree)
  site.config["awesome_nav_local_map"] = deep_copy(result.serialized_local_nav_map)
  site.config["awesome_nav_files"] = deep_copy(result.serialized_nav_files)
end