bs5 0.0.27 → 0.0.28

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: 5bd6c6c2f823f5b4ba980c7ef01db9381fe5fa6c02e4b82dc101a6765b8bfc22
4
- data.tar.gz: 16c43758c937dab60f50f331f56e31dd75aa2df4f982c803c340fe449302a346
3
+ metadata.gz: 215200d1f6820e7e163cbd6b214f9952645e225f535c45a34254ef53f445480a
4
+ data.tar.gz: cc2f9daf0107719ee613670620ddb42e42a08b995bb32a7348003f9b74761584
5
5
  SHA512:
6
- metadata.gz: e55c062be7d27cbe65efa1dd098b5ae1e26f4a5fc919ac22e5e8267a4d7c269cfc29fa15077444d3be082ccb9d7211fa27d3b1fbaa63c26e847665fcb0a30279
7
- data.tar.gz: 13300ddc486bed84d11bae9d30cc2078fc60951a833ace82e07828228865bc3858f416e41dea9ff4e459b7df0912d1c04b0336596bacff8553b941dc8e660854
6
+ metadata.gz: 8361ad156b1c5aa5a2e8d2e85482a891792fe28693aff0ab0de36a7acc258d1818934512a7b9c76d4be17de2e96f0c6207affa1f5765add53cff6bc83e999b74
7
+ data.tar.gz: 978c438199e216476b87a1eef92dcab0b9b8d828daca289c4eb7cc8b97fa802f75ef4620c06541870caeca578845303eb874fde87988036bea462918e5d0fc97
@@ -0,0 +1,3 @@
1
+ <div class="carousel-caption d-none d-md-block">
2
+ <%= content %>
3
+ </div>
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bs5
4
+ module Carousel
5
+ class CaptionComponent < ViewComponent::Base
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,4 @@
1
+ <%= tag.div(component_attributes) do %>
2
+ <%= content %>
3
+ <%= caption %>
4
+ <% end %>
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bs5
4
+ module Carousel
5
+ class ItemComponent < ViewComponent::Base
6
+ include ViewComponent::SlotableV2
7
+ using HashRefinement
8
+
9
+ COMPONENT_OPTIONS = %i[interval].freeze
10
+
11
+ renders_one :caption, Bs5::Carousel::CaptionComponent
12
+
13
+ attr_accessor :active
14
+
15
+ def initialize(options = {})
16
+ @options = options.symbolize_keys
17
+ extract_options
18
+ end
19
+
20
+ def active?
21
+ active
22
+ end
23
+
24
+ private
25
+
26
+ def extract_options
27
+ extract_component_options
28
+ end
29
+
30
+ def extract_component_options
31
+ @component_options = @options.extract!(*COMPONENT_OPTIONS)
32
+ end
33
+
34
+ def component_attributes
35
+ { class: component_classes,
36
+ data: @component_options.prefix_keys_with_bs }
37
+ end
38
+
39
+ def component_classes
40
+ class_names = %w[carousel-item]
41
+ class_names << 'active' if active?
42
+
43
+ class_names
44
+ end
45
+
46
+ def content
47
+ set_element_class_names
48
+ element.to_html.html_safe # rubocop:disable Rails/OutputSafety
49
+ end
50
+
51
+ def set_element_class_names
52
+ class_names = Array(element[:class])
53
+ class_names << element_classes
54
+ element[:class] = class_names.join(' ')
55
+ end
56
+
57
+ def element_classes
58
+ %w[d-block w-100]
59
+ end
60
+
61
+ def element
62
+ @element ||= begin
63
+ if (elements = Nokogiri::HTML::DocumentFragment.parse(@content).elements).one?
64
+ elements.first
65
+ end
66
+ end
67
+ end
68
+
69
+ def element?
70
+ !!element
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,30 @@
1
+ <%= tag.div(component_attributes) do %>
2
+ <% items.each_with_index do |item, index| %>
3
+ <% item.active = index.zero? %>
4
+ <% end %>
5
+
6
+ <% if indicators? %>
7
+ <ol class="carousel-indicators">
8
+ <% items.each_with_index do |item, index| %>
9
+ <li data-bs-target="#<%= id %>" data-bs-slide-to="<%= index %>" class="<%= item.active? ? 'active' : '' %>"></li>
10
+ <% end %>
11
+ </ol>
12
+ <% end %>
13
+
14
+ <div class="carousel-inner">
15
+ <% items.each_with_index do |item, index| %>
16
+ <%= item %>
17
+ <% end %>
18
+ </div>
19
+
20
+ <% if controls? %>
21
+ <a class="carousel-control-prev" href="#<%= id %>" role="button" data-bs-slide="prev">
22
+ <span class="carousel-control-prev-icon" aria-hidden="true"></span>
23
+ <span class="visually-hidden">Previous</span>
24
+ </a>
25
+ <a class="carousel-control-next" href="#<%= id %>" role="button" data-bs-slide="next">
26
+ <span class="carousel-control-next-icon" aria-hidden="true"></span>
27
+ <span class="visually-hidden">Next</span>
28
+ </a>
29
+ <% end %>
30
+ <% end %>
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bs5
4
+ class CarouselComponent < ViewComponent::Base
5
+ include ComponentsHelper
6
+ include ViewComponent::SlotableV2
7
+ using HashRefinement
8
+
9
+ CAROUSEL_OPTIONS = %i[interval keyboard pause slide wrap touch].freeze
10
+
11
+ renders_many :items, Bs5::Carousel::ItemComponent
12
+
13
+ def initialize(options = {})
14
+ @options = options.symbolize_keys
15
+ extract_options
16
+ end
17
+
18
+ private
19
+
20
+ def extract_options
21
+ @controls = @options.delete(:controls)
22
+ @indicators = @options.delete(:indicators)
23
+ @crossfade = @options.delete(:crossfade)
24
+ @dark = @options.delete(:dark)
25
+
26
+ extract_carousel_options
27
+ end
28
+
29
+ def extract_carousel_options
30
+ @carousel_options = @options.extract!(*CAROUSEL_OPTIONS)
31
+ end
32
+
33
+ def id
34
+ "carousel-#{object_id}"
35
+ end
36
+
37
+ def items_count
38
+ items.size
39
+ end
40
+
41
+ def component_attributes
42
+ { class: component_class,
43
+ id: id,
44
+ data: @carousel_options.merge(ride: :carousel).prefix_keys_with_bs }
45
+ end
46
+
47
+ def component_class
48
+ class_names = %w[carousel slide]
49
+ class_names << %w[carousel-fade] if crossfade?
50
+ class_names << %w[carousel-dark] if dark?
51
+ class_names.join(' ')
52
+ end
53
+
54
+ %i[controls indicators crossfade dark].each do |name|
55
+ define_method("#{name}?") do
56
+ !instance_variable_get("@#{name}").nil?
57
+ end
58
+ end
59
+ end
60
+ end
@@ -2,7 +2,8 @@
2
2
 
3
3
  module Bs5
4
4
  module ComponentsHelper
5
- COMPONENTS = %w[accordion alert badge breadcrumb button_group button_tag button_to button_toolbar close_button
5
+ COMPONENTS = %w[accordion alert badge breadcrumb button_group button_tag button_to button_toolbar
6
+ carousel close_button
6
7
  dropdown list_group modal spinner toast toast_container].freeze
7
8
 
8
9
  COMPONENTS.each do |name|
@@ -0,0 +1,2 @@
1
+ <h2>Dark variant</h2>
2
+ <%= bs5_example(snippet: 'carousel/dark_variant/snippet1') %>
@@ -0,0 +1,13 @@
1
+ <h2>Examples</h2>
2
+ <h3>Slides only</h3>
3
+ <%= bs5_example(snippet: 'carousel/examples/snippet1') %>
4
+ <h3>With controls</h3>
5
+ <%= bs5_example(snippet: 'carousel/examples/snippet2') %>
6
+ <h3>With indicators</h3>
7
+ <%= bs5_example(snippet: 'carousel/examples/snippet3') %>
8
+ <h3>With captions</h3>
9
+ <%= bs5_example(snippet: 'carousel/examples/snippet4') %>
10
+ <h3>Crossfade</h3>
11
+ <%= bs5_example(snippet: 'carousel/examples/snippet5') %>
12
+ <h3>Individual <code>.carousel-item</code> interval</h3>
13
+ <%= bs5_example(snippet: 'carousel/examples/snippet6') %>
@@ -0,0 +1,25 @@
1
+ <%= bs5_carousel(controls: true, indicators: true, dark: true) do |c| %>
2
+ <% c.item do |i| %>
3
+ <%= image_tag 'https://picsum.photos/id/131/800/400?grayscale' %>
4
+ <%= i.caption do %>
5
+ <h5>First slide label</h5>
6
+ <p>Nulla vitae elit libero, a pharetra augue mollis interdum.</p>
7
+ <% end %>
8
+ <% end %>
9
+
10
+ <% c.item do |i| %>
11
+ <%= image_tag 'https://picsum.photos/id/383/800/400?grayscale' %>
12
+ <%= i.caption do %>
13
+ <h5>Second slide label</h5>
14
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
15
+ <% end %>
16
+ <% end %>
17
+
18
+ <% c.item do |i| %>
19
+ <%= image_tag 'https://picsum.photos/id/130/800/400' %>
20
+ <%= i.caption do %>
21
+ <h5>Third slide label</h5>
22
+ <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur.</p>
23
+ <% end %>
24
+ <% end %>
25
+ <% end %>
@@ -0,0 +1,13 @@
1
+ <%= bs5_carousel do |c| %>
2
+ <% c.item do %>
3
+ <%= image_tag 'https://picsum.photos/800/400?random=1' %>
4
+ <% end %>
5
+
6
+ <% c.item do %>
7
+ <%= image_tag 'https://picsum.photos/800/400?random=2' %>
8
+ <% end %>
9
+
10
+ <% c.item do %>
11
+ <%= image_tag 'https://picsum.photos/800/400?random=3' %>
12
+ <% end %>
13
+ <% end %>
@@ -0,0 +1,13 @@
1
+ <%= bs5_carousel(controls: true) do |c| %>
2
+ <% c.item do %>
3
+ <%= image_tag 'https://picsum.photos/800/400?random=1' %>
4
+ <% end %>
5
+
6
+ <% c.item do %>
7
+ <%= image_tag 'https://picsum.photos/800/400?random=2' %>
8
+ <% end %>
9
+
10
+ <% c.item do %>
11
+ <%= image_tag 'https://picsum.photos/800/400?random=3' %>
12
+ <% end %>
13
+ <% end %>
@@ -0,0 +1,13 @@
1
+ <%= bs5_carousel(controls: true, indicators: true) do |c| %>
2
+ <% c.item do %>
3
+ <%= image_tag 'https://picsum.photos/800/400?random=1' %>
4
+ <% end %>
5
+
6
+ <% c.item do %>
7
+ <%= image_tag 'https://picsum.photos/800/400?random=2' %>
8
+ <% end %>
9
+
10
+ <% c.item do %>
11
+ <%= image_tag 'https://picsum.photos/800/400?random=3' %>
12
+ <% end %>
13
+ <% end %>
@@ -0,0 +1,25 @@
1
+ <%= bs5_carousel(controls: true, indicators: true) do |c| %>
2
+ <% c.item do |i| %>
3
+ <%= image_tag 'https://picsum.photos/id/1042/800/400?blur=2' %>
4
+ <%= i.caption do %>
5
+ <h5>First slide label</h5>
6
+ <p>Nulla vitae elit libero, a pharetra augue mollis interdum.</p>
7
+ <% end %>
8
+ <% end %>
9
+
10
+ <% c.item do |i| %>
11
+ <%= image_tag 'https://picsum.photos/id/195/800/400?blur=2' %>
12
+ <%= i.caption do %>
13
+ <h5>Second slide label</h5>
14
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
15
+ <% end %>
16
+ <% end %>
17
+
18
+ <% c.item do |i| %>
19
+ <%= image_tag 'https://picsum.photos/id/960/800/400?blur=2' %>
20
+ <%= i.caption do %>
21
+ <h5>Third slide label</h5>
22
+ <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur.</p>
23
+ <% end %>
24
+ <% end %>
25
+ <% end %>
@@ -0,0 +1,13 @@
1
+ <%= bs5_carousel(controls: true, crossfade: true) do |c| %>
2
+ <% c.item do %>
3
+ <%= image_tag 'https://picsum.photos/800/400?random=1' %>
4
+ <% end %>
5
+
6
+ <% c.item do %>
7
+ <%= image_tag 'https://picsum.photos/800/400?random=2' %>
8
+ <% end %>
9
+
10
+ <% c.item do %>
11
+ <%= image_tag 'https://picsum.photos/800/400?random=3' %>
12
+ <% end %>
13
+ <% end %>
@@ -0,0 +1,13 @@
1
+ <%= bs5_carousel(controls: true, crossfade: true) do |c| %>
2
+ <% c.item(interval: 10_000) do %>
3
+ <%= image_tag 'https://picsum.photos/800/400?random=1' %>
4
+ <% end %>
5
+
6
+ <% c.item(interval: 2_000) do %>
7
+ <%= image_tag 'https://picsum.photos/800/400?random=2' %>
8
+ <% end %>
9
+
10
+ <% c.item do %>
11
+ <%= image_tag 'https://picsum.photos/800/400?random=3' %>
12
+ <% end %>
13
+ <% end %>
@@ -0,0 +1,3 @@
1
+ <h1>Carousel</h1>
2
+ <%= render 'bs5/examples/carousel/examples' %>
3
+ <%= render 'bs5/examples/carousel/dark_variant' %>
@@ -21,6 +21,7 @@
21
21
  <% lg.item(active: current_page?(pages_path('buttons'))) do %><%= link_to 'Buttons', pages_path('buttons') %><% end %>
22
22
  <% lg.item(active: current_page?(pages_path('button_group'))) do %><%= link_to 'Button group', pages_path('button_group') %><% end %>
23
23
  <% lg.item(active: current_page?(pages_path('close_button'))) do %><%= link_to 'Close button', pages_path('close_button') %><% end %>
24
+ <% lg.item(active: current_page?(pages_path('carousel'))) do %><%= link_to 'Carousel', pages_path('carousel') %><% end %>
24
25
  <% lg.item(active: current_page?(pages_path('collapse'))) do %><%= link_to 'Collapse', pages_path('collapse') %><% end %>
25
26
  <% lg.item(active: current_page?(pages_path('dropdowns'))) do %><%= link_to 'Dropdowns', pages_path('dropdowns') %><% end %>
26
27
  <% lg.item(active: current_page?(pages_path('list_group'))) do %><%= link_to 'List group', pages_path('list_group') %><% end %>
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bs5
4
- VERSION = '0.0.27'
4
+ VERSION = '0.0.28'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bs5
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.27
4
+ version: 0.0.28
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patrick Baselier
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-27 00:00:00.000000000 Z
11
+ date: 2020-12-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -141,6 +141,12 @@ files:
141
141
  - app/components/bs5/button_to_component.rb
142
142
  - app/components/bs5/button_toolbar_component.html.erb
143
143
  - app/components/bs5/button_toolbar_component.rb
144
+ - app/components/bs5/carousel/caption_component.html.erb
145
+ - app/components/bs5/carousel/caption_component.rb
146
+ - app/components/bs5/carousel/item_component.html.erb
147
+ - app/components/bs5/carousel/item_component.rb
148
+ - app/components/bs5/carousel_component.html.erb
149
+ - app/components/bs5/carousel_component.rb
144
150
  - app/components/bs5/close_button_component.html.erb
145
151
  - app/components/bs5/close_button_component.rb
146
152
  - app/components/bs5/dropdown/item_component.html.erb
@@ -229,6 +235,15 @@ files:
229
235
  - app/views/bs5/examples/buttons/button_tag/toggle_states/snippet.html.erb
230
236
  - app/views/bs5/examples/buttons/button_to/default/_example.html.erb
231
237
  - app/views/bs5/examples/buttons/button_to/default/snippet.html.erb
238
+ - app/views/bs5/examples/carousel/_dark_variant.html.erb
239
+ - app/views/bs5/examples/carousel/_examples.html.erb
240
+ - app/views/bs5/examples/carousel/dark_variant/snippet1.html.erb
241
+ - app/views/bs5/examples/carousel/examples/snippet1.html.erb
242
+ - app/views/bs5/examples/carousel/examples/snippet2.html.erb
243
+ - app/views/bs5/examples/carousel/examples/snippet3.html.erb
244
+ - app/views/bs5/examples/carousel/examples/snippet4.html.erb
245
+ - app/views/bs5/examples/carousel/examples/snippet5.html.erb
246
+ - app/views/bs5/examples/carousel/examples/snippet6.html.erb
232
247
  - app/views/bs5/examples/close_button/default/_example.html.erb
233
248
  - app/views/bs5/examples/close_button/default/snippet.html.erb
234
249
  - app/views/bs5/examples/close_button/disabled/_example.html.erb
@@ -350,6 +365,7 @@ files:
350
365
  - app/views/bs5/pages/breadcrumb.html.erb
351
366
  - app/views/bs5/pages/button_group.html.erb
352
367
  - app/views/bs5/pages/buttons.html.erb
368
+ - app/views/bs5/pages/carousel.html.erb
353
369
  - app/views/bs5/pages/close_button.html.erb
354
370
  - app/views/bs5/pages/collapse.html.erb
355
371
  - app/views/bs5/pages/dropdowns.html.erb