Class: NdrUi::Bootstrap::Accordion

Inherits:
Object
  • Object
show all
Defined in:
app/helpers/ndr_ui/bootstrap/accordion_helper.rb

Overview

Creates a plain or nested bootstrap accordion along with bootstrap_accordion_tag helper method. Produce the inner html code of an accordion item. Legacy styling recognised by jQuery UI and only fully supports one level accordion.

Signatures

bootstrap_accordion_tag(dom_id) do |accordion|
  accordion.bootstrap_accordion_group(heading, options) do
    #content or nested accordion
  end
end

Options

  • open: true - This will allow accordion item open by default

  • seamless: true - This omits the panel-body container so that tables and lists can be seamless

  • Accordion are using pre-defined html format, and options and html attributes are not accepted.

Examples

<%= bootstrap_accordion_tag :fruit do |fruit_accordion| %>
  <%= fruit_accordion.bootstrap_accordion_group "Apple" do %>
    This is an apple.
  <% end %>
  <%= fruit_accordion.bootstrap_accordion_group "Orange", open: true do %>
    This is an orange.
  <% end %>
<% end %>

# =>
<div id="fruit" class="accordion">
  <div class="panel panel-default">
    <div class="panel-heading">
      <a href="#fruit_1" data-bs-parent="#fruit" data-bs-toggle="collapse">Apple</a>
    </div>
    <div class="panel-collapse collapse" id="fruit_1">
      <div class="panel-body">
        This is an apple.
      </div>
    </div>
  </div>
  <div class="panel panel-default">
    <div class="panel-heading">
      <a href="#fruit_2" data-bs-parent="#fruit" data-bs-toggle="collapse">Orange</a>
    </div>
    <div class="panel-collapse collapse in" id="fruit_2">
      <div class="panel-body">
        This is an orange.
      </div>
    </div>
  </div>
</div>

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(accordion_id, template) ⇒ Accordion

rubocop:disable Rails/HelperInstanceVariable



91
92
93
94
95
# File 'app/helpers/ndr_ui/bootstrap/accordion_helper.rb', line 91

def initialize(accordion_id, template)
  @dom_id = accordion_id
  @template = template
  @index = 0
end

Instance Attribute Details

#dom_idObject

Returns the value of attribute dom_id.



88
89
90
# File 'app/helpers/ndr_ui/bootstrap/accordion_helper.rb', line 88

def dom_id
  @dom_id
end

#indexObject

Returns the value of attribute index.



88
89
90
# File 'app/helpers/ndr_ui/bootstrap/accordion_helper.rb', line 88

def index
  @index
end

Instance Method Details

#bootstrap_accordion_group(heading, options = {}, &block) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
108
# File 'app/helpers/ndr_ui/bootstrap/accordion_helper.rb', line 97

def bootstrap_accordion_group(heading, options = {}, &block)
  return unless block_given?

  options.stringify_keys!
  @index += 1
  content = @template.('div', class: 'accordion-body') do
    @template.capture(&block)
  end
  @template.('div', class: 'accordion-item') do
    accordion_header_tag(heading, options['open']) + accordion_collapse_tag(content, options['open'])
  end
end