Sha256: b4a0798cabcecf67852005236b78b707a18bc8662fdc875d3c827e7d00f169f6

Contents?: true

Size: 1.36 KB

Versions: 17

Compression:

Stored size: 1.36 KB

Contents

# frozen_string_literal: true

module Decidim
  # A presenter to render menus
  class MenuPresenter
    #
    # Initializes a menu for presentation
    #
    # @param name [Symbol] The name of the menu registry to be rendered
    # @param view [ActionView::Base] The view scope to render the menu
    # @param options [Hash] The rendering options for the menu entries
    #
    def initialize(name, view, options = {})
      @name = name
      @view = view
      @options = options
    end

    delegate :items, to: :evaluated_menu
    delegate :content_tag, :safe_join, to: :@view

    def evaluated_menu
      @evaluated_menu ||= begin
        menu = Menu.new(@name)
        menu.build_for(@view)
        menu
      end
    end

    def active_item
      presented_items.find(&:active?)
    end

    def render
      content_tag :nav, class: "main-nav", "aria-label": @options.fetch(:label, nil) do
        render_menu
      end
    end

    protected

    def render_menu(&block)
      content_tag :ul, @options.fetch(:container_options, {}) do
        elements = block_given? ? [block.call(@view)] : []
        safe_join(elements + menu_items)
      end
    end

    def presented_items
      @presented_items ||= items.map do |menu_item|
        MenuItemPresenter.new(menu_item, @view, @options)
      end
    end

    def menu_items
      presented_items.map(&:render)
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
decidim-core-0.30.0.rc2 app/presenters/decidim/menu_presenter.rb
decidim-core-0.30.0.rc1 app/presenters/decidim/menu_presenter.rb
decidim-core-0.29.2 app/presenters/decidim/menu_presenter.rb
decidim-core-0.28.5 app/presenters/decidim/menu_presenter.rb
decidim-core-0.29.1 app/presenters/decidim/menu_presenter.rb
decidim-core-0.28.4 app/presenters/decidim/menu_presenter.rb
decidim-core-0.29.0 app/presenters/decidim/menu_presenter.rb
decidim-core-0.28.3 app/presenters/decidim/menu_presenter.rb
decidim-core-0.29.0.rc4 app/presenters/decidim/menu_presenter.rb
decidim-core-0.29.0.rc3 app/presenters/decidim/menu_presenter.rb
decidim-core-0.29.0.rc2 app/presenters/decidim/menu_presenter.rb
decidim-core-0.29.0.rc1 app/presenters/decidim/menu_presenter.rb
decidim-core-0.28.2 app/presenters/decidim/menu_presenter.rb
decidim-core-0.28.1 app/presenters/decidim/menu_presenter.rb
decidim-core-0.28.0 app/presenters/decidim/menu_presenter.rb
decidim-core-0.28.0.rc5 app/presenters/decidim/menu_presenter.rb
decidim-core-0.28.0.rc4 app/presenters/decidim/menu_presenter.rb