Class: Jekyll::AwesomeNav::NavResolver

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

Defined Under Namespace

Classes: ResolutionContext

Instance Method Summary collapse

Constructor Details

#initialize(root_dir:, nav_map:) ⇒ NavResolver

Returns a new instance of NavResolver.



8
9
10
11
12
13
# File 'lib/jekyll/awesome_nav/nav_resolver.rb', line 8

def initialize(root_dir:, nav_map:)
  @root_dir = root_dir
  @nav_map = nav_map
  @generated_by_dir = {}
  @generated_by_path = {}
end

Instance Method Details

#apply(items, current_dir = @root_dir, inherited_append_unmatched: false, inherited_sort_options: SortOptions.from(nil), inherited_ignore_patterns: []) ⇒ Object



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/nav_resolver.rb', line 15

def apply(
  items,
  current_dir = @root_dir,
  inherited_append_unmatched: false,
  inherited_sort_options: SortOptions.from(nil),
  inherited_ignore_patterns: []
)
  index_generated(items)
  generated_items = generated_children_for(current_dir, items)
  nav_file = @nav_map[current_dir]
  options = nav_file&.options || NavFileOptions.new
  override_items = nav_file&.items
  context = ResolutionContext.new(
    append_unmatched: options.append_unmatched_or(inherited_append_unmatched),
    sort_options: options.sort_options_or(inherited_sort_options),
    ignore_patterns: options.ignore_patterns_or(inherited_ignore_patterns)
  )

  return resolve_generated_items(generated_items, current_dir, context) unless override_items

  matched = {}
  resolved = expand_override_items(override_items, current_dir, generated_items, context, matched)
  return resolved.first.children if same_dir_wrapper?(resolved, current_dir)
  return resolved unless context.append_unmatched

  resolved + unmatched_items(generated_items, matched, context, current_dir)
end

#resolved_nav_dir(page_dir) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/jekyll/awesome_nav/nav_resolver.rb', line 43

def resolved_nav_dir(page_dir)
  current = page_dir

  loop do
    return current if @nav_map.key?(current)
    return @root_dir if current == @root_dir
    break if current.empty?

    current = Utils.parent_dir(current)
  end

  @root_dir
end