Class: CadmusNavbar::Renderer
- Inherits:
-
Object
- Object
- CadmusNavbar::Renderer
show all
- Includes:
- ActionView::Helpers::OutputSafetyHelper
- Defined in:
- lib/cadmus_navbar/renderer.rb
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_uri ⇒ Object
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_id ⇒ Object
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
|
#request ⇒ Object
Returns the value of attribute request.
5
6
7
|
# File 'lib/cadmus_navbar/renderer.rb', line 5
def request
@request
end
|
#root_items ⇒ Object
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
#navigation_link_is_active?(item) ⇒ 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_items ⇒ Object
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
|
#render_navigation_link(item, root:) ⇒ Object
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
|