class Navigator::Menu
Renders a HTML menu.
Constants
- ALLOWED_ELEMENTS
Public Class Methods
Source
# File lib/navigator/menu.rb, line 34 def initialize template, tag: "ul", attributes: {}, activator: Navigator::TagActivator.new, &block @template = template @tag = Navigator::Tag.new(tag, attributes:, activator:) @menu_activator = activator @items = [] instance_eval(&block) if block end
Public Instance Methods
Source
# File lib/navigator/menu.rb, line 101 def activate_item_attributes! attributes, url, activator return unless url == activator.search_value key = [attributes[activator.target_key], activator.target_value].compact.join " " attributes[activator.target_key] = key end
Source
# File lib/navigator/menu.rb, line 46 def add name, content = nil, attributes: {}, activator: menu_activator, &block tag = Navigator::Tag.new(name, content, attributes:, activator:) return items << tag.render unless block items << tag.prefix items << tag.content instance_eval(&block) items << tag.suffix end
Source
# File lib/navigator/menu.rb, line 60 def image url, alt = nil, attributes: {}, activator: menu_activator modified_attributes = attributes.merge(src: url, alt:) .delete_if { |_, value| !value.present? } add "img", attributes: modified_attributes, activator: end
Source
# File lib/navigator/menu.rb, line 67 def item content = nil, url, item_attributes: {}, link_attributes: {}, activator: menu_activator, &block modified_item_attributes = item_attributes.clone activate_item_attributes! modified_item_attributes, url, activator add "li", attributes: modified_item_attributes, activator: do link content, url, attributes: link_attributes, activator: Navigator::TagActivator.new, &block end end
Source
# File lib/navigator/menu.rb, line 56 def link content = nil, url, attributes: {}, activator: menu_activator, &block add "a", content, attributes: attributes.merge(href: url), activator:, &block end
Source
# File lib/navigator/menu.rb, line 85 def method_missing(name, *positionals, **keywords, &) if respond_to_missing? name add(name, *positionals, **keywords, &) else template.public_send(name, *positionals, **keywords) || super end end
Calls superclass method
Source
# File lib/navigator/menu.rb, line 93 def render = [tag.prefix, tag.content, items.compact.join, tag.suffix].compact.join private attr_accessor :template, :tag, :menu_activator, :items def respond_to_missing?(name, include_private = false) = ALLOWED_ELEMENTS.match?(name) || super def activate_item_attributes! attributes, url, activator return unless url == activator.search_value key = [attributes[activator.target_key], activator.target_value].compact.join " " attributes[activator.target_key] = key end end end
Source
# File lib/navigator/menu.rb, line 99 def respond_to_missing?(name, include_private = false) = ALLOWED_ELEMENTS.match?(name) || super def activate_item_attributes! attributes, url, activator return unless url == activator.search_value key = [attributes[activator.target_key], activator.target_value].compact.join " " attributes[activator.target_key] = key end end
Calls superclass method