decko-commons/decko

View on GitHub
mod/bar_and_box/set/all/bar.rb

Summary

Maintainability
A
0 mins
Test Coverage
format :html do
  setting :bar_cols
  setting :mini_bar_cols

  bar_cols 9, 3
  mini_bar_cols 9, 3

  # drops bar-middle in small viewports
  view :bar, unknown: :mini_bar do
    cols = bar_cols.size == 3 ? [mini_bar_cols, bar_cols] : [bar_cols]
    prepare_bar(*cols)
    build_bar
  end

  view :mini_bar, unknown: true do
    prepare_bar mini_bar_cols
    build_bar
  end

  view :full_bar, unknown: :mini_bar do
    class_up "bar", full_page_card.safe_set_keys
    class_up_cols %w[bar-left bar-middle bar-right], bar_cols
    build_bar
  end

  view(:bar_left, unknown: true) { render_title }
  view(:bar_middle, unknown: :blank) { "" }
  view(:bar_right, unknown: :blank) { "" }

  view :bar_bottom do
    view = nest_mode == :edit ? :edit : :content
    render view, home_view: view
  end

  view :bar_menu, unknown: true, template: :haml
  view :bar_body, unknown: true, template: :haml

  view :accordion_bar, unknown: :mini_bar do
    build_accordion_bar
  end
  view :closed_bar, :accordion_bar
  view :closed, :accordion_bar

  view :open_bar do
    build_accordion_bar open: true
  end
  view :expanded_bar, :open_bar
  view :open, :open_bar

  def build_accordion_bar open: false
    prepare_bar mini_bar_cols
    class_up "accordion-item", "bar #{classy 'bar'}"
    wrap do
      accordion_item render_bar_body,
                     subheader: render_menu,
                     body: render_bar_bottom,
                     open: open,
                     context: :accordion_bar
    end
  end

  def build_bar
    wrap { haml :bar }
  end

  def bar_menu_items
    [
      full_page_link(text: "page"),
      modal_page_link(text: "modal"),
      edit_link(:edit, text: card.new? ? "create" : "edit"),
      board_link(text: "advanced")
    ]
  end

  # NOTE: currently bar always turns to mini-bar at md
  def prepare_bar two_cols, three_cols=nil
    class_up "bar", full_page_card.safe_set_keys
    class_up_cols %w[bar-left bar-right], two_cols
    class_up "bar-middle", "d-none d-md-flex"
    if three_cols
      class_up_cols %w[bar-left bar-middle bar-right], three_cols, "md"
    else
      voo.hide :bar_middle
    end
  end

  def class_up_cols classes, cols, context=nil
    classes.each_with_index do |cls, i|
      class_up cls, ["col", context, cols[i]].compact.join("-")
    end
  end

  def bar_wrap_data
    full_page_card == card ? wrap_data : full_page_card.format.wrap_data
  end
end