Class: CadmusNavbar::Renderer

Inherits:
Object
  • Object
show all
Includes:
ActionView::Helpers::OutputSafetyHelper
Defined in:
lib/cadmus_navbar/renderer.rb

Direct Known Subclasses

CadmusNavbar::Renderers::Bootstrap4

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(request:, url_for_page:, items_by_section_id: nil, root_items: nil) ⇒ Renderer

Returns a new instance of Renderer.



7
8
9
10
11
12
13
14
15
16
17
# File 'lib/cadmus_navbar/renderer.rb', line 7

def initialize(request:, url_for_page:, items_by_section_id: nil, root_items: nil)
  @_url_for_page = url_for_page
  @request = request
  @current_uri = URI.parse(request.url)
  @items_by_section_id = items_by_section_id

  if !items_by_section_id && root_items
    @items_by_section_id = root_items.flat_map { |item| [item, *item.navigation_links] }
      .group_by(&:navigation_section_id)
  end
end

Instance Attribute Details

#current_uriObject

Returns the value of attribute current_uri.



5
6
7
# File 'lib/cadmus_navbar/renderer.rb', line 5

def current_uri
  @current_uri
end

#items_by_section_idObject

Returns the value of attribute items_by_section_id.



5
6
7
# File 'lib/cadmus_navbar/renderer.rb', line 5

def items_by_section_id
  @items_by_section_id
end

#requestObject

Returns the value of attribute request.



5
6
7
# File 'lib/cadmus_navbar/renderer.rb', line 5

def request
  @request
end

#root_itemsObject

Returns the value of attribute root_items.



5
6
7
# File 'lib/cadmus_navbar/renderer.rb', line 5

def root_items
  @root_items
end

Class Method Details

.from_parent(parent:, **args) ⇒ Object



19
20
21
22
23
24
25
# File 'lib/cadmus_navbar/renderer.rb', line 19

def self.from_parent(parent:, **args)
  items = CadmusNavbar.navigation_item_model.where(
    parent_id: parent.id,
    parent_type: parent.class.base_class.name
  ).root.includes(:page).group_by(&:navigation_section_id)
  self.new(items_by_section_id: items.to_a, **args)
end

Instance Method Details

Returns:

  • (Boolean)


53
54
55
56
57
58
# File 'lib/cadmus_navbar/renderer.rb', line 53

def navigation_link_is_active?(item)
  return false unless item && item.page

  page_uri = URI.parse(url_for_page(item.page))
  page_uri.path == current_uri.path
end

#render_navigation_item(item) ⇒ Object



36
37
38
39
40
41
42
43
# File 'lib/cadmus_navbar/renderer.rb', line 36

def render_navigation_item(item)
  case item.item_type
  when 'section'
    render_navigation_section(item, (items_by_section_id[item.id] || []).sort_by(&:position))
  when 'link'
    render_navigation_link(item, root: true)
  end
end

#render_navigation_itemsObject



31
32
33
34
# File 'lib/cadmus_navbar/renderer.rb', line 31

def render_navigation_items
  rendered_items = root_items.sort_by(&:position).map { |item| render_navigation_item(item) }
  safe_join(rendered_items)
end


49
50
51
# File 'lib/cadmus_navbar/renderer.rb', line 49

def render_navigation_link(item, root:)
  raise '#render_navigation_link must be implemented by subclasses'
end

#render_navigation_section(item) ⇒ Object



45
46
47
# File 'lib/cadmus_navbar/renderer.rb', line 45

def render_navigation_section(item)
  raise '#render_navigation_section must be implemented by subclasses'
end

#url_for_page(page) ⇒ Object



60
61
62
# File 'lib/cadmus_navbar/renderer.rb', line 60

def url_for_page(page)
  @_url_for_page.call(page)
end