class Navtastic::Renderer
Generate HTML based on a menu.
This base renderer only generates a structure and no css classes.
The actual HTML generation is done using the [Arbre](github.com/activeadmin/arbre) gem.
Calling `#to_s` will return the HTML.
Public Class Methods
render(menu, options = {})
click to toggle source
Create a new renderer
@param menu [Menu] @param options [Hash]
@return [Self]
# File lib/navtastic/renderer.rb, line 19 def self.render(menu, options = {}) new(root: menu, options: options) do render_menu(root) end end
Public Instance Methods
item_content(item)
click to toggle source
The item itself (e.g. `<a>` tag for links or `<span>` for text)
@param item [Item] @return [Arbre::HTML::Tag]
# File lib/navtastic/renderer.rb, line 45 def item_content(item) if item.url a(href: item.url) { item.name } else span { item.name } end end
item_tag(item) { || ... }
click to toggle source
The container for every menu item (e.g. `<li>` tags)
@param item [Item] @return [Arbre::HTML::Tag]
# File lib/navtastic/renderer.rb, line 37 def item_tag(item) # rubocop:disable Lint/UnusedMethodArgument li { yield } end
Private Instance Methods
render_item(item)
click to toggle source
Render the item structure
@param item [Item] @return [Arbre::HTML::Tag]
# File lib/navtastic/renderer.rb, line 82 def render_item(item) element = item_tag(item) do render_item_content(item) end # Add custom css classes to the element element.class_list << item.options[:class] if item.options[:class] return unless item.submenu? && !menu_inside_container?(item) render_menu(item.submenu) end
render_item_content(item)
click to toggle source
Render the item content
@param item [Item] @return [Arbre::HTML::Tag]
# File lib/navtastic/renderer.rb, line 98 def render_item_content(item) element = item_content(item) # Add custom css classes to the element if item.options[:content_class] && element.respond_to?(:class_list) element.class_list << item.options[:content_class] end return unless item.submenu? && menu_inside_container?(item) render_menu(item.submenu) end