class Weaver::TopNavPage

Public Class Methods

new(title, global_settings, options, &block) click to toggle source
Calls superclass method Weaver::NavPage::new
# File lib/weaver/page_types/topnav_page.rb, line 6
def initialize(title, global_settings, options, &block)
  super
end

Public Instance Methods

generate(level) click to toggle source
Calls superclass method
# File lib/weaver/page_types/topnav_page.rb, line 10
    def generate(level)
      instance_eval &@block
      rows = @rows.map do |row|
        <<~ENDROW
                <div class="row #{row.extra_classes}" style="#{row.style}">
          #{row.generate}
                </div>
        ENDROW
      end.join

      @body_class = 'top-navigation'
      @loading_bar_visible = true

      menu = @menu

      navigation = Elements.new(self, @anchors)
      navigation.instance_eval do
        menu.items.each do |item|
          next unless item[:options][:position] != :right

          li item[:options] do
            if item.key? :menu

              li class: 'dropdown' do
                a "aria-expanded": 'false',
                  role: 'button',
                  href: '#',
                  class: 'dropdown-toggle',
                  "data-toggle": 'dropdown' do
                  icon item[:icon]
                  text item[:name]
                  span class: 'caret' do
                    text ''
                  end
                end
                ul role: 'menu', class: 'dropdown-menu' do
                  item[:menu].items.each do |inneritem|
                    li inneritem[:options] do
                      if inneritem.key?(:menu)
                        raise 'Second level menu not supported'
                      else
                        hyperlink inneritem[:link], inneritem[:name]
                      end
                    end
                  end
                end
              end
            elsif
              hyperlink (item[:link]).to_s do
                span class: 'nav-label' do
                  icon item[:icon]
                  text item[:name]
                end
              end
            end
          end
        end
      end

      navigation_right = Elements.new(self, @anchors)
      navigation_right.instance_eval do
        menu.items.each do |item|
          next unless item[:options][:position] == :right

          li item[:options] do
            if item.key? :menu

              li class: 'dropdown' do
                a "aria-expanded": 'false',
                  role: 'button',
                  href: '#',
                  class: 'dropdown-toggle',
                  "data-toggle": 'dropdown' do
                  icon item[:icon]
                  text item[:name]
                  span class: 'caret' do
                    text ''
                  end
                end
                ul role: 'menu', class: 'dropdown-menu' do
                  item[:menu].items.each do |inneritem|
                    li inneritem[:options] do
                      if inneritem.key?(:menu)
                        raise 'Second level menu not supported'
                      else
                        hyperlink inneritem[:link], inneritem[:name]
                      end
                    end
                  end
                end
              end
            elsif
              hyperlink (item[:link]).to_s do
                span class: 'nav-label' do
                  icon item[:icon]
                  text item[:name]
                end
              end
            end
          end
        end
      end

      brand_content = ''

      if @brand
        brand_content = <<-BRAND_CONTENT

                                    <div class="navbar-header">

                                                <a href="#{root}" class="navbar-brand">#{@brand}</a>
                            </div>
        BRAND_CONTENT
      end

      @content =
        <<~ENDBODY
                <div id="wrapper">

                  <div id="page-wrapper" class="gray-bg">
                        <div class="row border-bottom white-bg">

                                        <nav class="navbar navbar-static-top" role="navigation">
                                <button aria-controls="navbar" aria-expanded="false" data-target="#navbar" data-toggle="collapse" class="navbar-toggle collapsed" type="button">
                                    <i class="fa fa-reorder"></i>
                                </button>
          #{brand_content}

                                    <div class="navbar-collapse collapse" id="navbar">
                                        <ul class="nav navbar-nav">
          #{navigation.generate}
                                        </ul>
                                        <ul class="nav navbar-top-links navbar-right">
          #{navigation_right.generate}
                                        </ul>
                                    </div>



                                        </nav>
                                </div>


                        <div class="wrapper-content">
                            <div class="container">
          #{rows}
                            </div>
                                </div>
                        </div>
                </div>
        ENDBODY

      super
    end