bs5_expandable_list_group 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a25801cb5cccc05129ddee20be6d7613b6861725540fc35762abeb9533da688e
4
- data.tar.gz: 8404505ce4e166979bacd59621d8354e40db54c7a9e582c0187a31d5e9101625
3
+ metadata.gz: 53968aced77ec5891c98c1ecbcdfc9a7011a88b1d04893fdddc51f296eb6b4c5
4
+ data.tar.gz: 79820d54b461d866e1f12f1896942d8e7f27bcd2e04251da3df8d0bc178d5f4d
5
5
  SHA512:
6
- metadata.gz: 92876de97894c46e95299f40bc5ea069d1a0c8151da69c399c350e59573f71986e5a0534fe36308d651e0fb00f9b744b6b26a101a6f8f0e66b59a781e2144223
7
- data.tar.gz: 807dbe554e7fb82bf8f29e6b69212f8afb2952110b23828703a5f0ce1b8dcf66a48a0dacd499bec41f2e5dcae97dafd9cd8b5342d8313af9623e2467cc492499
6
+ metadata.gz: d9659802b3e4619a59bcc748ec5a5ded01e46ecae3b158ba304baf8837385ffdfa089792a8ec5632f7e009c6f223c19930609be6eff770c7015c4fb1bc15cf0d
7
+ data.tar.gz: 1d0771ec4518307e8b5b6ee7e28aec4fbd3f398d13f93537ddc5334a53beb82942a90423e99592e79967db262f430afc50c698f2a74705fc3c4b865260460618
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Bootstrap 5 expandable list group
2
2
 
3
3
  [![Build Status](https://travis-ci.org/bazzel/Bs5ExpandableListGroup.svg?branch=main)](https://travis-ci.org/bazzel/Bs5ExpandableListGroup)
4
+ [![Gem Version](https://badge.fury.io/rb/bs5_expandable_list_group.svg)](https://badge.fury.io/rb/bs5_expandable_list_group)
4
5
 
5
6
  **Bootstrap 5 expandable list group** is a Ruby on Rails engine and gives you a simple API for creating expandable and stretchable list groups. A bit like [Bootstrap 5](https://getbootstrap.com/)'s [Accordion](https://getbootstrap.com/docs/5.0/components/accordion/), [Collapse](https://getbootstrap.com/docs/5.0/components/collapse/) and [List group](https://getbootstrap.com/docs/5.0/components/list-group/) components combined.
6
7
 
@@ -172,7 +173,7 @@ This will render just a [list group item](https://getbootstrap.com/docs/5.0/comp
172
173
  <%= i.body { post.text } %>
173
174
  <% end %>
174
175
  <% end %>
175
- <% if @companies.next_page %>
176
+ <% if @posts.next_page %>
176
177
  <% c.item %>
177
178
  <%= link_to_next_page @posts "Load more" %>
178
179
  <% end %>
@@ -180,6 +181,27 @@ This will render just a [list group item](https://getbootstrap.com/docs/5.0/comp
180
181
  <% end %>
181
182
  ```
182
183
 
184
+ ### Wrap an item in an extra element
185
+
186
+ Every list item is a `div` with one or more CSS classes and, dependent on block passed, some `data` attributes and is not customizable (yet).
187
+ However, you can wrap a list item in a extra element by passing a `wrapper_html` option to the `item` method:
188
+
189
+ ```erb
190
+ ...
191
+ <% c.item(wrapper_html: { tag: :turbo_frame, id: dom_id(post) }) do |i| %>
192
+ <%= i.title do |t| %>
193
+ <%= t.collapsed { 'Collapsed title' } %>
194
+ <%= t.expanded { 'Expanded title' } %>
195
+ <% end %>
196
+ <%= i.body { ... } %>
197
+ <% end %>
198
+ ```
199
+
200
+ All options passed to the item method are used as HTML attributes of the wrapper, expect for the following:
201
+
202
+ | name | default | description |
203
+ |---|---|---|
204
+ | `tag` | `:div` | A symbol or string of a valid HTML tag that is used for the tag of the wrapper |
183
205
 
184
206
  ### Passing options
185
207
 
@@ -187,12 +209,12 @@ The following options can be passed to `Bs5::ExpandableListGroupComponent.new`:
187
209
 
188
210
  | name | default | description |
189
211
  |---|---|---|
212
+ | `tag` | `:div` | A symbol or string of a valid HTML tag that is used for the tag of the list group |
190
213
  | `id` | | is used to assign an id HTML attribute to the rendered container |
191
214
  | `class` | | is added to the class attribute of the rendered container |
192
215
  | `accordion` | `false` | Behaves as an Bootstrap [accordion](https://getbootstrap.com/docs/5.0/components/accordion/) by having only 1 item expanded |
193
216
  | `expandable` | `false` | Expanded items are shown a little bit bigger as if they come out a bit|
194
217
 
195
-
196
218
  Example:
197
219
 
198
220
  ```erb
@@ -201,6 +223,9 @@ Example:
201
223
  <% end %>
202
224
  ```
203
225
 
226
+ Other options are used as HTML attributes of the list group element.
227
+
228
+
204
229
  ## Running tests
205
230
 
206
231
  ```bash
@@ -1,4 +1,4 @@
1
- <%= tag.div(id: accordion? && id, class: component_class) do %>
1
+ <%= tag.send(tag_name, **component_attributes) do %>
2
2
  <% items.each do |item| %>
3
3
  <%= item %>
4
4
  <% end %>
@@ -2,23 +2,27 @@
2
2
 
3
3
  module Bs5
4
4
  class ExpandableListGroupComponent < ViewComponent::Base
5
- renders_many :items, lambda {
6
- ExpandableListItemComponent.new(parent_id: accordion? && id, stretchable: stretchable?)
5
+ renders_many :items, lambda { |options = {}|
6
+ options.merge!(parent_id: id, stretchable: stretchable?)
7
+ ExpandableListItemComponent.new(**options)
7
8
  }
8
9
 
9
- attr_reader :accordion, :stretchable
10
+ attr_reader :options, :accordion, :stretchable, :tag_name
11
+
12
+ DEFAULT_TAG_NAME = :div
10
13
 
11
14
  def initialize(options = {})
12
15
  @accordion = options.delete(:accordion)
13
16
  @stretchable = options.delete(:stretchable)
14
- @id = options[:id]
17
+ @id = options.delete(:id)
18
+ @tag_name = options.delete(:tag) || DEFAULT_TAG_NAME
15
19
  @options = options
16
20
  end
17
21
 
18
22
  private
19
23
 
20
24
  def id
21
- @id || "list-group-#{object_id}"
25
+ @id || (accordion? && "list-group-#{object_id}")
22
26
  end
23
27
 
24
28
  def component_class
@@ -27,6 +31,10 @@ module Bs5
27
31
  class_names
28
32
  end
29
33
 
34
+ def component_attributes
35
+ options.merge(id: id, class: component_class)
36
+ end
37
+
30
38
  alias accordion? accordion
31
39
  alias stretchable? stretchable
32
40
  end
@@ -1,15 +1,15 @@
1
-
2
- <% if simple_content? %>
3
- <%= tag.div(content, class: "list-group-item") %>
4
- <% else %>
5
- <%= tag.div(class: "list-group-item expandable-item", data: component_data_options) do %>
6
- <div class="expandable-item-header">
7
- <%= title %>
8
- <%= actions %>
9
- </div>
10
- <%= tag.div(id: target_id, class: "expandable-item-body collapse", data: body_data_options) do %>
11
- <%= body %>
1
+ <%= wrapper do %>
2
+ <% if simple_content? %>
3
+ <%= tag.div(content, class: "list-group-item") %>
4
+ <% else %>
5
+ <%= tag.div(class: "list-group-item expandable-item", data: component_data_options) do %>
6
+ <div class="expandable-item-header">
7
+ <%= title %>
8
+ <%= actions %>
9
+ </div>
10
+ <%= tag.div(id: target_id, class: "expandable-item-body collapse", data: body_data_options) do %>
11
+ <%= body %>
12
+ <% end %>
12
13
  <% end %>
13
14
  <% end %>
14
15
  <% end %>
15
-
@@ -2,24 +2,42 @@
2
2
 
3
3
  module Bs5
4
4
  class ExpandableListItemComponent < ViewComponent::Base
5
+ DEFAULT_WRAPPER_TAG = :div
5
6
  renders_one :title, lambda {
6
7
  ExpandableListItemHeaderTitleComponent.new(target_id: target_id)
7
8
  }
8
9
  renders_one :actions, ExpandableListItemHeaderActionsComponent
9
10
  renders_one :body
10
11
 
11
- attr_reader :parent_id, :stretchable
12
+ attr_reader :parent_id, :stretchable, :wrapper_html
12
13
 
13
14
  def initialize(options = {})
14
15
  @parent_id = options.delete(:parent_id)
15
16
  @stretchable = options.delete(:stretchable)
17
+ @wrapper_html = options.delete(:wrapper_html)
16
18
  @options = options
17
19
  end
18
20
 
19
21
  private
20
22
 
23
+ def wrapper_html?
24
+ @wrapper_html.present?
25
+ end
26
+
27
+ def wrapper_tag
28
+ @wrapper_html.delete(:tag) || DEFAULT_WRAPPER_TAG
29
+ end
30
+
31
+ def wrapper(&block)
32
+ if wrapper_html?
33
+ tag.send(wrapper_tag, **wrapper_html, &block)
34
+ else
35
+ yield
36
+ end
37
+ end
38
+
21
39
  def simple_content?
22
- title.nil? && body.nil? && actions.nil?
40
+ title.blank? && body.blank? && actions.blank?
23
41
  end
24
42
 
25
43
  def target_id
@@ -1,3 +1,3 @@
1
1
  module Bs5ExpandableListGroup
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bs5_expandable_list_group
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patrick Baselier
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-02 00:00:00.000000000 Z
11
+ date: 2021-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails