libertarian-party/partynest

View on GitHub
app/helpers/navs_helper.rb

Summary

Maintainability
A
1 hr
Test Coverage
# frozen_string_literal: true

module NavsHelper
  NAV_TABS_LIST_HTML_CLASS = {
    tabs: 'nav nav-tabs  d-none d-sm-flex',
    pills: 'nav nav-pills d-flex d-sm-none flex-column',
  }.freeze

  def nav_breadcrumb(*args, active_text)
    tag.nav 'aria-label': 'breadcrumb' do
      tag.ol class: 'breadcrumb' do
        args.each do |(text, url)|
          concat nav_breadcrumb_item text, url
        end
        concat nav_breadcrumb_item active_text
      end
    end
  end

  def nav_breadcrumb_item(text, url = nil)
    if url
      tag.li class: 'breadcrumb-item' do
        link_to text, url
      end
    else
      tag.li class: 'breadcrumb-item active', 'aria-current': 'page' do
        text
      end
    end
  end

  def nav_tabs(scope_name, active_tab_name, options)
    capture do
      concat nav_tabs_list scope_name, active_tab_name, :tabs, options
      concat nav_tabs_list scope_name, active_tab_name, :pills, options
    end
  end

  def nav_sidebar(scope_name, active_tab_name, options)
    tag.div class: 'list-group' do
      options.each do |(k, v)|
        concat nav_sidebar_item scope_name, active_tab_name, k, *v
      end
    end
  end

  def nav_tabs_list(scope_name, active_tab_name, format, options)
    tag.ul class: NAV_TABS_LIST_HTML_CLASS[format] do
      options.each do |(k, v)|
        concat nav_tabs_item scope_name, active_tab_name, k, *v
      end
    end
  end

  def nav_tabs_item(scope_name, active_tab_name, tab_name, policy, url)
    tag.li class: 'nav-item' do
      link_to translate(tab_name, scope: [:nav_tabs, scope_name]),
              url,
              nav_tab_link_options(policy, tab_name == active_tab_name)
    end
  end

  def nav_sidebar_item(scope_name, active_tab_name, tab_name, policy, url)
    link_to translate(tab_name, scope: [:nav_tabs, scope_name]),
            url,
            nav_sidebar_link_options(policy, tab_name == active_tab_name)
  end

  def nav_tab_link_options(policy, active)
    if policy
      { class: "nav-link #{:active if active}" }
    else
      { class: 'nav-link disabled', tabindex: -1, 'aria-disabled': true }
    end
  end

  def nav_sidebar_link_options(policy, active)
    if policy
      { class: "list-group-item list-group-item-action #{:active if active}" }
    else
      { class: 'list-group-item list-group-item-action disabled',
        'aria-disabled': true }
    end
  end
end