bootstrap5_helper 1.1.0 → 1.1.2

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: 7ab8982347a3e4e8f5b3f295df1d32c1436c96f6a0e6ed7ebe49be9cb2030acf
4
- data.tar.gz: 1f0e37c6a736272b748fab3c8c00107d58d232f177d4fcbb812d212085670d6c
3
+ metadata.gz: 50b1e83426c0845570591efbaaf2c7071a528039ec8c5a051304784ab13e7f91
4
+ data.tar.gz: 2a543eca14020820fa8fcbfdbe208a97b925a4ca5371483d98249914ee9a4c06
5
5
  SHA512:
6
- metadata.gz: 81a56bd544a7aaa270adbde0e361e2c1bf206e9e39980eca8ad8af45295a430c2cb1b21d76af32eb320013715ca5545ba99c784f881786e1df967f9a6df1aad8
7
- data.tar.gz: 5aedd70cae3d0fce44b2457a1be9918b4e8c5cf95440970f6eb1dee8c4abb3be40af7b345a6312b7504f42f958304cf1be833fdde375a1bd21f9888888b1351f
6
+ metadata.gz: fa6a248942c919c442e4602781401de5b383394733c4a89eeba5fc5cfe50f066a58711d7f70411a708f84570d0b3ef07cd1b6bfebaa2638d1cc48ee15d9483f4
7
+ data.tar.gz: e2b0deb1b20740897688cb60d9a31c9e17477d57d93dbd0ddf19a586eb8b1cd967268c7db15ba3f5cd88dd07506cab8c58bad35696a2bd9ad0740e74cd18e024
data/README.md CHANGED
@@ -49,11 +49,10 @@ end
49
49
  # @option opts [Hash] :data
50
50
  # @option opts [Boolean] :always_open
51
51
  # @option opts [Boolean] :flush
52
+ # @yield [Accordion]
52
53
  # @return [Accordion]
53
54
  #
54
- def accordion_helper(opts = {}, &block)
55
- Accordion.new(self, opts, &block)
56
- end
55
+ accordion_helper(opts = {}, &block)
57
56
  ```
58
57
 
59
58
  #### Example:
@@ -99,9 +98,7 @@ Alerts use the context helper, where you can pass the context of the object and
99
98
  #
100
99
  # @return [String]
101
100
  #
102
- def alert_helper(*args, &block)
103
- Alert.new(self, *args, &block)
104
- end
101
+ alert_helper(*args, &block)
105
102
  ```
106
103
 
107
104
  #### Example:
@@ -132,9 +129,7 @@ The badge helper will build badges realitively quickly. If you are just passing
132
129
  #
133
130
  # @return [String]
134
131
  #
135
- def badge_helper(*args, &block)
136
- Badge.new(self, *args, &block)
137
- end
132
+ badge_helper(*args, &block)
138
133
  ```
139
134
 
140
135
  #### Example
@@ -164,18 +159,15 @@ Cards support a few methods that make building them easier:
164
159
  - `text`
165
160
  - `title`
166
161
 
167
- For usage on various card sub components, @see https://getbootstrap.com/docs/4.0/components/card/
168
-
169
162
  ```ruby
170
163
  # @param [Hash] opts
171
164
  # @option opts [String] :id
172
165
  # @option opts [String] :class
173
166
  # @option opts [Hash] :data
174
- # @return [String]
167
+ # @yield [Card]
168
+ # @return [Card]
175
169
  #
176
- def card_helper(opts = {}, &block)
177
- Card.new(self, opts, &block)
178
- end
170
+ card_helper(opts = {}, &block)
179
171
  ```
180
172
 
181
173
  #### Example
@@ -236,79 +228,70 @@ Dropdowns support the following methods:
236
228
  - `divider` - A dividing element
237
229
 
238
230
  ```ruby
239
- # @overload dropdown_helper(type, opts)
240
- # @param [Symbol|String] type - :dropdown, :dropup, :dropstart, :dropend
241
- # @param [Hash] opts
231
+ # @overload dropdown_helper(tag, opts)
232
+ # @param [Symbol|String] tag - The HTML element to use to wrap the component.
233
+ # @param [Hash] opts
242
234
  # @option opts [String] :id
243
235
  # @option opts [String] :class
244
236
  # @option opts [Hash] :data
245
- # @option opts [Boolean] :split
237
+ # @option opts [Boolean] :centered
246
238
  #
247
- # @overload dropdown(opts)
248
- # @param [Hash] opts
239
+ # @overload dropdown_helper(opts)
240
+ # @param [Hash] opts
249
241
  # @option opts [String] :id
250
242
  # @option opts [String] :class
251
243
  # @option opts [Hash] :data
252
- # @option opts [Boolean] :split
244
+ # @option opts [Boolean] :centered
253
245
  #
254
- # @return [String]
246
+ # @yield [Dropdown]
247
+ # @return [Dropdown]
255
248
  #
256
- def dropdown_helper(*args, &block)
257
- Dropdown.new(self, *args, &block)
258
- end
249
+ dropdown_helper(*args, &block)
259
250
  ```
260
251
 
261
252
  #### Example
262
253
 
263
254
  ```erb
264
- <%= dropdown_helper do |dropdown| %>
265
- <%= dropdown.button(:primary) { "Action" } %>
266
- <%= dropdown.menu do |menu| %>
267
- <%= menu.link 'Edit', '#' %>
268
- <%= menu.link 'Delete', '#' %>
269
- <%= menu.text 'Static text' %>
270
- <% end %>
255
+ <%= dropdown_helper class: "btn-group" do |dropdown| %>
256
+ <button type="button" class="btn btn-primary">Dropdown</button>
257
+ <%= dropdown.caret :primary >
258
+ <%= dropdown.menu do |menu| %>
259
+ <%= menu.link 'Dropdown Link', '#' %>
260
+ <%= menu.link 'Dropdown Link', '#' %>
261
+ <% end %>
271
262
  <% end %>
272
263
 
273
- <%= dropdown_helper :group, class: 'dropright' do |dropdown| %>
274
- <button type="button" class="btn btn-danger">Action 2</button>
275
- <%= dropdown.button(:danger, split: true) %>
276
- <%= dropdown.menu do |menu| %>
277
- <%= menu.header "Crud operations" %>
278
- <%= menu.divider %>
279
- <%= menu.link 'Edit', 'SOME-URL' %>
280
- <%= menu.link 'Delete', 'SOME-URL' %>
281
- <% end %>
282
- <% end %>
264
+
265
+ // Dropdown menu with a login form inside the menu
283
266
 
284
267
  <%= dropdown_helper do |dropdown| %>
285
- <%= dropdown.button :primary do %>
286
- <i class="fas fa-users"></i> User
287
- <% end %>
288
- <%= dropdown.menu do |menu| %>
289
- <form class="px-4 py-3">
290
- <div class="form-group">
291
- <label for="exampleDropdownFormEmail1">Email address</label>
292
- <input type="email" class="form-control" id="exampleDropdownFormEmail1" placeholder="email@example.com">
293
- </div>
294
- <div class="form-group">
295
- <label for="exampleDropdownFormPassword1">Password</label>
296
- <input type="password" class="form-control" id="exampleDropdownFormPassword1" placeholder="Password">
297
- </div>
298
- <div class="form-group">
299
- <div class="form-check">
300
- <input type="checkbox" class="form-check-input" id="dropdownCheck">
301
- <label class="form-check-label" for="dropdownCheck">
302
- Remember me
303
- </label>
304
- </div>
305
- </div>
306
- <button type="submit" class="btn btn-primary">Sign in</button>
307
- </form>
308
- <%= menu.divider %>
309
- <%= menu.link "New around here? Sign up", "#" %>
310
- <%= menu.link "Forgot password", "#" %>
311
- <% end %>
268
+ <%= dropdown.button :primary do %>
269
+ Login
270
+ <% end %>
271
+ <%= dropdown.menu do |menu| %>
272
+ <form class="px-4 py-3">
273
+ <div class="form-group">
274
+ <label for="exampleDropdownFormEmail1">Email address</label>
275
+ <input type="email" class="form-control" id="exampleDropdownFormEmail1" placeholder="email@example.com">
276
+ </div>
277
+ <div class="form-group">
278
+ <label for="exampleDropdownFormPassword1">Password</label>
279
+ <input type="password" class="form-control" id="exampleDropdownFormPassword1" placeholder="Password">
280
+ </div>
281
+ <div class="form-group">
282
+ <div class="form-check">
283
+ <input type="checkbox" class="form-check-input" id="dropdownCheck">
284
+ <label class="form-check-label" for="dropdownCheck">
285
+ Remember me
286
+ </label>
287
+ </div>
288
+ </div>
289
+ <button type="submit" class="btn btn-primary">Sign in</button>
290
+ </form>
291
+ <%= menu.divider %>
292
+ <%= menu.link "New around here? Sign up", "#" %>
293
+ <%= menu.link "Forgot password", "#" %>
294
+ <% end %>
312
295
  <% end %>
313
296
  ```
314
297
 
@@ -324,11 +307,10 @@ end
324
307
  # @option opts [Boolean] :static
325
308
  # @option opts [Boolean|Symbol] :fullscreen - true, :sm, :lg, :xl etc
326
309
  # @option opts [Symbol] :size - :sm, :md, :lg etc
327
- # @return [String]
310
+ # @yield [Modal]
311
+ # @return [Modal]
328
312
  #
329
- def modal_helper(opts = {}, &block)
330
- Modal.new(self, opts, &block)
331
- end
313
+ modal_helper(opts = {}, &block)
332
314
  ```
333
315
 
334
316
  > Note: When the `close_button` is not passed a block, it will default to the X icon.
@@ -381,9 +363,7 @@ The Nav component has the following methods:
381
363
  #
382
364
  # @return [String]
383
365
  #
384
- def nav_helper(*args, &block)
385
- Nav.new(self, *args, &block)
386
- end
366
+ nav_helper(*args, &block)
387
367
  ```
388
368
 
389
369
  #### Example
@@ -405,10 +385,60 @@ end
405
385
  <% end %>
406
386
  ```
407
387
 
388
+ ### Offcanvas
389
+
390
+ ```ruby
391
+ # @overload offcanvas_helper(position, options)
392
+ # @param [Symbol] position - :start, :end, :top, :bottom
393
+ # @param [Hash] opts
394
+ # @option opts [String] :id
395
+ # @option opts [String] :class
396
+ # @option opts [Hash] :data
397
+ # @option opts [Hash] :aria
398
+ # @option opts [Boolean] :scrollable
399
+ # @option opts [Boolean|String] :backdrop - true, false, 'static'
400
+ #
401
+ # @overload offcanvas_helper(options)
402
+ # @param [Hash] opts
403
+ # @option opts [String] :id
404
+ # @option opts [String] :class
405
+ # @option opts [Hash] :data
406
+ # @option opts [Hash] :aria
407
+ # @option opts [Boolean] :scrollable
408
+ # @option opts [Boolean|String] :backdrop - true, false, 'static'
409
+ #
410
+ # @yield [Offcanvas]
411
+ # @return [Offcanvas]
412
+ #
413
+ def offcanvas_helper(*args, &block)
414
+ ```
415
+
416
+ #### Example
417
+
418
+ ```erb
419
+ <%= offcanvas_helper scrollable: true do |off| %>
420
+ <%= off.link class: 'btn btn-danger' do %>
421
+ <strong>*</strong> Open sidebar
422
+ <% end %>
423
+
424
+ <%= off.content do |c| %>
425
+ <%= c.header do %>
426
+ <%= c.title { 'Sidebar content' } %>
427
+ <%= c.close_button class: 'btn btn-info' do %>
428
+ Close
429
+ <% end %>
430
+ <% end %>
431
+ <%= c.body do %>
432
+ <p>Some content in the sidebar!</p>
433
+ <% end %>
434
+ <% end %>
435
+ <% end %>
436
+ ```
437
+
408
438
  ### Tabs
409
439
 
410
440
  ```ruby
411
- # @overload tab_helper(type, opts)
441
+ # @overload tab_helper(type, opts)
412
442
  # @param [Symbol|String] type - :tabs, :pills
413
443
  # @param [Hash] opts
414
444
  # @option opts [String] :id
@@ -421,11 +451,10 @@ end
421
451
  # @option opts [String] :class
422
452
  # @option opts [Hash] :data
423
453
  #
424
- # @return [String]
454
+ # @yield [Tab]
455
+ # @return [Tab]
425
456
  #
426
457
  def tab_helper(*args, &block)
427
- Tab.new(self, *args, &block)
428
- end
429
458
  ```
430
459
 
431
460
  #### Example
@@ -478,14 +507,13 @@ end
478
507
  ```ruby
479
508
  # @param [Hash] args
480
509
  # @option opts [Symbol] :type - :border, :grow
510
+ # @option opts [Symbol] :size - :sm
481
511
  # @option opts [String] :id
482
512
  # @option opts [String] :class
483
513
  # @option opts [Hash] :data
484
- # @return [String]
514
+ # @return [Spinner]
485
515
  #
486
- def spinner_helper(opts = {}, &block)
487
- Spinner.new(self, opts, &block)
488
- end
516
+ spinner_helper(opts = {}, &block)
489
517
  ```
490
518
 
491
519
  #### Example
@@ -2,12 +2,20 @@ module Bootstrap5Helper
2
2
  class CardWithNavTab < Component # :nodoc:
3
3
  # Class constructor
4
4
  #
5
- # @param [ActionView] template
6
- # @param [Symbol|String|Hash] type_or_options
7
- # @param [Hash] opts
8
- # @option opts [String] :id
9
- # @option opts [String] :class
10
- # @option opts [Hash] :data
5
+ # @overload initialize(template, context, opts)
6
+ # @param [ActionView] template
7
+ # @param [Symbol|String] context
8
+ # @param [Hash] opts
9
+ # @option opts [String] :id
10
+ # @option opts [String] :class
11
+ # @option opts [Hash] :data
12
+ #
13
+ # @overload initialize(template, opts)
14
+ # @param [ActionView] template
15
+ # @param [Hash] opts
16
+ # @option opts [String] :id
17
+ # @option opts [String] :class
18
+ # @option opts [Hash] :data
11
19
  #
12
20
  def initialize(template, *context_or_options, &block)
13
21
  super(template)
@@ -42,12 +50,12 @@ module Bootstrap5Helper
42
50
  tag, args = parse_tag_or_options(*tag_or_options, {})
43
51
  args[:class] = (args[:class] || '') << 'nav-tabs card-header-tabs'
44
52
  args[:data] = (args[:data] || {}).merge('bs-toggle' => 'tab')
45
- args[:child] = {
53
+ args[:child] = (args[:child] || {}).merge(
46
54
  data: {
47
55
  'bs-toggle' => 'tab',
48
56
  'bs-display' => 'static'
49
57
  }
50
- }
58
+ )
51
59
 
52
60
  content_tag :div, class: 'card-header' do
53
61
  Nav.new(@template, tag, args, &block).to_s
@@ -146,12 +146,15 @@ module Bootstrap5Helper
146
146
 
147
147
  # Renders the component as a String, but only to the output bugger.
148
148
  #
149
- # @return [NilClass]
149
+ # @note Was updated to return an empty string opposed to nil.
150
+ # @see changelog.md
151
+ #
152
+ # @return [String]
150
153
  #
151
154
  def to_s
152
155
  @content.call(self)
153
156
 
154
- nil
157
+ ''
155
158
  end
156
159
 
157
160
  private
@@ -10,6 +10,7 @@ module Bootstrap5Helper
10
10
  # @param [ActionView] template
11
11
  # @param [Hash] opts
12
12
  # @option opts [Symbol] :type
13
+ # @option opts [Symbol] :size
13
14
  # @option opts [String] :id
14
15
  # @option opts [String] :class
15
16
  # @option opts [Hash] :data
@@ -18,6 +19,7 @@ module Bootstrap5Helper
18
19
  super(template)
19
20
 
20
21
  @type = opts.fetch(:type, :border)
22
+ @size = opts.fetch(:size, nil)
21
23
  @id = opts.fetch(:id, uuid)
22
24
  @class = opts.fetch(:class, '')
23
25
  @data = opts.fetch(:data, {})
@@ -32,7 +34,7 @@ module Bootstrap5Helper
32
34
  content_tag(
33
35
  :span,
34
36
  id: @id,
35
- class: "spinner-#{@type} #{@class}",
37
+ class: component_classes,
36
38
  role: 'status',
37
39
  aria: { hidden: true },
38
40
  data: @data
@@ -40,5 +42,18 @@ module Bootstrap5Helper
40
42
  content_tag :span, 'Loading', class: 'visually-hidden'
41
43
  end
42
44
  end
45
+
46
+ private
47
+
48
+ # Cleaner way of getting the base component classes.
49
+ #
50
+ # @return [String]
51
+ #
52
+ def component_classes
53
+ string = "spinner-#{@type} #{@class}"
54
+ string << " spinner-#{@type}-#{@size}" if @size.present?
55
+
56
+ string
57
+ end
43
58
  end
44
59
  end
@@ -68,13 +68,13 @@ module Bootstrap5Helper
68
68
  # string or DOM element, we want to return nil, so that only the output buffer on the sub components are
69
69
  # returned.
70
70
  #
71
- # If we return the return value of the block, we will get the last element added to the input
72
- # buffer as an unescaped string.
71
+ # @note Was updated to return an empty string opposed to nil.
72
+ # @see changelog.md
73
73
  #
74
74
  def to_s
75
75
  @content.call(self)
76
76
 
77
- nil
77
+ ''
78
78
  end
79
79
 
80
80
  def type_or_options(*args)
@@ -1,3 +1,3 @@
1
1
  module Bootstrap5Helper
2
- VERSION = '1.1.0'.freeze
2
+ VERSION = '1.1.2'.freeze
3
3
  end
@@ -165,15 +165,15 @@ module Bootstrap5Helper
165
165
  Card.new(self, opts, &block)
166
166
  end
167
167
 
168
- # @overload card_with_nav_tab_helper(type, opts)
169
- # @param [Symbol|String] type - :tabs, :pills
170
- # @param [Hash] opts
168
+ # @overload card_with_nav_tab_helper(context, opts)
169
+ # @param [Symbol|String] context
170
+ # @param [Hash] opts
171
171
  # @option opts [String] :id
172
172
  # @option opts [String] :class
173
173
  # @option opts [Hash] :data
174
174
  #
175
175
  # @overload card_with_nav_tab_helper(opts)
176
- # @param [Hash] opts
176
+ # @param [Hash] opts
177
177
  # @option opts [String] :id
178
178
  # @option opts [String] :class
179
179
  # @option opts [Hash] :data
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bootstrap5_helper
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert David
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-11 00:00:00.000000000 Z
11
+ date: 2024-05-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bootstrap
@@ -150,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
150
150
  - !ruby/object:Gem::Version
151
151
  version: '0'
152
152
  requirements: []
153
- rubygems_version: 3.1.6
153
+ rubygems_version: 3.3.26
154
154
  signing_key:
155
155
  specification_version: 4
156
156
  summary: Rails helpers for generating Bootstrap 5 components.