format :html do # Options # header: { content: String, brand: ( String | {name: , href: } ) } def navbar id, opts={} nav_opts = opts[:navbar_opts] || {} nav_opts[:class] ||= opts[:class] add_class nav_opts, "navbar navbar-#{opts.delete(:navbar_type) || 'default'}" header_opts = opts[:header] || {} if opts[:toggle_align] == :left opts[:toggle] = :hide opts[:collapsed_content] ||= "" opts[:collapsed_content] += navbar_toggle( id, opts[:toggle], "pull-left navbar-link" ).html_safe end wrap_with :nav, nav_opts do [ navbar_header(id, header_opts.delete(:content), header_opts.reverse_merge(toggle: opts[:toggle])), navbar_collapsed_content(opts[:collapsed_content]), wrap_with(:div, class: "collapse navbar-collapse", id: "navbar-collapse-#{id}") { yield } ] end end def navbar_collapsed_content content wrap_with(:div, content, class: "container-fluid") if content end def navbar_header id, content="", opts={} brand = if opts[:brand] if opts[:brand].is_a? String "#{opts[:brand]}" else link = opts[:brand][:href] || "#" "#{opts[:brand][:name]}" end end wrap_with :div, class: "navbar-header" do [ (navbar_toggle(id, opts[:toggle]) unless opts[:toggle] == :hide), brand, (content if content) ] end end def navbar_toggle id, content=nil, css_class="" content ||= %( ) <<-HTML HTML end def breadcrumb items wrap_with :ol, class: "breadcrumb" do items.map do |item| wrap_with :li, item, class: "breadcrumb-item" end.join end end end