module BootstrapNavbar::Helpers::Bootstrap2 def navbar(options = {}, wrapper_options = {}, &block) wrapper options, wrapper_options do inner_wrapper do container options[:brand], options[:brand_link], options[:responsive], options[:fluid], &block end end end def navbar_group(options = {}, &block) options = options.dup css_classes = %w(nav).tap do |css_classes| css_classes << "pull-#{options.delete(:pull)}" if options.key?(:pull) css_classes << options.delete(:class) if options.key?(:class) end attributes = attributes_for_tag({ class: css_classes.join(' ') }.merge(options)) prepare_html <<-HTML.chomp! <ul#{attributes}> #{capture(&block) if block_given?} </ul> HTML end def navbar_item(name = nil, path = nil, list_item_options = nil, link_options = nil, &block) name, path, list_item_options, link_options = capture(&block), name, path, list_item_options if block_given? path ||= '#' list_item_options = list_item_options.nil? ? {} : list_item_options.dup link_options = link_options.nil? ? {} : link_options.dup list_item_css_classes = [].tap do |css_classes| css_classes << 'active' if current_url_or_sub_url?(path) css_classes << list_item_options.delete(:class) if list_item_options.key?(:class) end list_item_attributes = attributes_for_tag( { class: list_item_css_classes.join(' ') } .delete_if { |k, v| v.empty? } .merge(list_item_options) ) link_attributes = attributes_for_tag(link_options) prepare_html <<-HTML.chomp! <li#{list_item_attributes}> <a href="#{path}"#{link_attributes}> #{name} </a> </li> HTML end def navbar_dropdown(name, &block) prepare_html <<-HTML.chomp! <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown"> #{name} <b class="caret"></b> </a> #{dropdown_menu(&block)} </li> HTML end def navbar_sub_dropdown(name, list_item_options = {}, link_options = {}, &block) list_item_options, link_options = list_item_options.dup, link_options.dup list_item_css_classes = %w(dropdown-submenu).tap do |css_classes| css_classes << list_item_options.delete(:class) if list_item_options.key?(:class) end list_item_attributes = attributes_for_tag({ class: list_item_css_classes.join(' ') }.merge(list_item_options)) link_attributes = attributes_for_tag(link_options) prepare_html <<-HTML.chomp! <li#{list_item_attributes}> <a href="#"#{link_attributes}> #{name} </a> #{dropdown_menu(&block)} </li> HTML end def navbar_dropdown_divider prepare_html %(<li class="divider"></li>) end def navbar_dropdown_header(text) prepare_html %(<li class="nav-header">#{text}</li>) end def navbar_divider prepare_html %(<li class="divider-vertical"></li>) end def navbar_text(text = nil, pull = nil, &block) css_classes = %w(navbar-text).tap do |css_classes| css_classes << "pull-#{pull}" if pull end prepare_html <<-HTML.chomp! <p class="#{css_classes.join(' ')}"> #{block_given? ? capture(&block) : text} </p> HTML end def navbar_brand_link(name, url = nil) prepare_html %(<a href="#{url || '/'}" class="brand">#{name}</a>) end private def wrapper(options, html_options, &block) options, html_options = options.dup, html_options.dup position = case when options.key?(:static) "static-#{options[:static]}" when options.key?(:fixed) "fixed-#{options[:fixed]}" end css_classes = %w(navbar).tap do |css_classes| css_classes << "navbar-#{position}" if position css_classes << 'navbar-inverse' if options[:inverse] css_classes << html_options.delete(:class) end attribute_hash = { class: css_classes.join(' ') }.merge(html_options) attributes = attributes_for_tag(attribute_hash) prepare_html <<-HTML.chomp! <div#{attributes}> #{capture(&block) if block_given?} </div> HTML end def inner_wrapper(&block) prepare_html <<-HTML.chomp! <div class="navbar-inner"> #{capture(&block) if block_given?} </div> HTML end def container(brand, brand_link, responsive, fluid, &block) css_class = fluid ? 'container-fluid' : 'container' content = [].tap do |content| content << responsive_button if responsive content << navbar_brand_link(brand, brand_link) if brand || brand_link content << if responsive responsive_wrapper(&block) else capture(&block) if block_given? end end prepare_html <<-HTML.chomp! <div class="#{css_class}"> #{content.join("\n")} </div> HTML end def responsive_wrapper(&block) css_classes = %w(nav-collapse).tap do |css_classes| css_classes << 'collapse' if BootstrapNavbar.configuration.bootstrap_version >= '2.2.0' end attributes = attributes_for_tag({ class: css_classes.join(' ') }) prepare_html <<-HTML.chomp! <div#{attributes}> #{capture(&block) if block_given?} </div> HTML end def responsive_button prepare_html <<-HTML.chomp! <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class='icon-bar'></span> <span class='icon-bar'></span> <span class='icon-bar'></span> </a> HTML end def dropdown_menu(&block) prepare_html <<-HTML.chomp! <ul class="dropdown-menu"> #{capture(&block) if block_given?} </ul> HTML end end