module SimpleNavigation module Renderer class Materialize < SimpleNavigation::Renderer::Base def render(item_container) return '' if respond_to?(:skip_if_empty?) && skip_if_empty? && item_container.empty? config_selected_class = SimpleNavigation.config.selected_class SimpleNavigation.config.selected_class = 'active' type = options[:type] ? options[:type] : :navbar hide_icons = options[:hide_icons] list_content = item_container.items.inject([]) do |list, item| li_options = item.html_options.reject {|k, v| k == :link} if hide_icons li_options.delete(:icon) icon = nil else icon = li_options.delete(:icon) end li_content = tag_for(item, item.name, icon, type) if include_sub_navigation?(item) item.sub_navigation.dom_class = [item.sub_navigation.dom_class, type == :navbar ? 'dropdown-content' : nil].flatten.compact.join(' ') if type == :navbar item.sub_navigation.dom_id = "#{item.key.to_s}-dropdown" else item.sub_navigation.dom_id = nil end li_content << render_sub_navigation_for(item) li_options[:class] = [li_options[:class]].flatten.compact.join(' ') end list << content_tag(:li, li_content, li_options) end.join SimpleNavigation.config.selected_class = config_selected_class dom_id = item_container.dom_id ? item_container.dom_id : options[:dom_attributes][:id] dom_class = item_container.dom_class ? item_container.dom_class : options[:dom_attributes][:class] dom_attributes = {id: dom_id, class: dom_class} content_tag(:ul, list_content, dom_attributes) end protected def tag_for(item, name = '', icon = nil, type = :navbar) unless item.url or include_sub_navigation?(item) return item.name end url = item.url link = Array.new link << content_tag(:i, icon, :class => ['material-icons', 'left'].flatten.compact.join(' ')) unless icon.nil? link << name if include_sub_navigation?(item) item_options = item.html_options item_options[:link] = Hash.new if item_options[:link].nil? item_options[:link][:class] = Array.new if item_options[:link][:class].nil? if type == :navbar item_options[:link][:class] << 'dropdown-trigger' item_options[:link][:'data-target'] = "#{item.key.to_s}-dropdown" end item.html_options = item_options end link_to(link.join(" ").html_safe, url, options_for(item)) end end end end