roda-tags 0.1.1 → 0.2.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.
data/README.md CHANGED
@@ -1,26 +1,37 @@
1
+ <!-- markdownlint-disable MD013 MD033 -->
2
+
1
3
  # Roda::Tags
2
4
 
3
- A [Roda](http://roda.jeremyevans.net/) plugin providing easy creation of flexible HTML tags within Roda apps or Roda plugins.
5
+ [![Ruby](https://github.com/kematzy/roda-tags/actions/workflows/ruby.yml/badge.svg?branch=master)](https://github.com/kematzy/roda-tags/actions/workflows/ruby.yml) - [![Gem Version](https://badge.fury.io/rb/roda-tags.svg)](https://badge.fury.io/rb/roda-tags) - [![Minitest Style Guide](https://img.shields.io/badge/code_style-rubocop-brightgreen.svg)](https://github.com/rubocop/rubocop-minitest)
4
6
 
5
- Extensively tested and with 100% code test coverage.
7
+ Coverage: **100%**
6
8
 
9
+ A [Roda](http://roda.jeremyevans.net/) plugin providing easy creation of flexible HTML tags within
10
+ Roda apps or Roda plugins.
11
+
12
+ Extensively tested and with 100% code test coverage.
7
13
 
8
14
  ## Installation
9
15
 
10
- To use this gem, just do
16
+ Add this line to your application's Gemfile:
11
17
 
12
- ```bash
13
- $ (sudo) gem install roda-tags
18
+ ```ruby
19
+ gem 'roda-tags'
14
20
  ```
15
21
 
16
- or preferably add this to your Gemfile for Bundler
22
+ And then execute:
23
+
24
+ ```bash
25
+ bundle
26
+ ```
17
27
 
28
+ Or install it yourself as:
18
29
 
19
- ```ruby
20
- gem 'roda-tags'
30
+ ```bash
31
+ gem install roda-tags
21
32
  ```
22
33
 
23
- <br>
34
+ ---
24
35
 
25
36
  ## Getting Started
26
37
 
@@ -30,12 +41,12 @@ To use Roda::Tags just ensure the gem is included in the Gemfile and then...
30
41
 
31
42
  ```bash
32
43
  class MyApp < Roda
33
-
44
+
34
45
  plugin :tags # see Configurations below for options
35
46
  # or
36
47
  plugin :tag_helpers # , options
37
-
38
- # <snip...>
48
+
49
+ # <snip...>
39
50
  end
40
51
  ```
41
52
 
@@ -45,47 +56,41 @@ end
45
56
  class Roda
46
57
  module RodaPlugins
47
58
  module YourPlugin
48
-
59
+
49
60
  def self.load_dependencies(app, opts={})
50
61
  app.plugin :tags, opts
51
62
  # or
52
63
  app.plugin :tag_helpers, opts
53
64
  end
54
-
65
+
55
66
  # <snip...>
56
67
  end
57
68
  end
58
69
  end
59
70
  ```
60
- <br>
61
-
62
- ## Usage
63
71
 
72
+ ---
64
73
 
74
+ ## Usage
65
75
 
66
- <br>
76
+ TODO: add usage notes here...
67
77
 
68
78
  ## Key Methods / Functionality
69
79
 
70
-
71
- <br>
72
-
73
-
74
- Roda::Tags contains two plugins - [`:tags`, `:tag_helpers`] - that can be used independently or together.
80
+ Roda::Tags contains two plugins - [`:tags`, `:tag_helpers`] - that can be
81
+ used independently or together.
75
82
 
76
83
  **Note!** The `:tags` plugin is loaded by the `:tag_helpers` plugin.
77
84
 
78
- <br>
85
+ ---
79
86
 
80
87
  ## 1. `:tags` Plugin
81
88
 
82
-
83
- This plugin have one **key public method** - `tag()`, which supports this **dynamic** syntax:
84
-
89
+ This plugin have one **key public method** - `tag()`, which supports this
90
+ **dynamic** syntax:
85
91
 
86
92
  ### -- `tag(*args, &block)`
87
93
 
88
-
89
94
  ```ruby
90
95
  tag(name)
91
96
  tag(name, &block)
@@ -100,7 +105,6 @@ tag(name, attributes, &block)
100
105
 
101
106
  This makes the method very flexible as can be seen below.
102
107
 
103
-
104
108
  #### Self closing tags
105
109
 
106
110
  ```ruby
@@ -114,21 +118,20 @@ tag(:hr, class: :divider) #=> <hr class="divider">
114
118
  ```ruby
115
119
  tag(:div) #=> <div></div>
116
120
 
117
- tag(:div, 'content')
121
+ tag(:div, 'content')
118
122
  # <div>
119
123
  # content
120
124
  # </div>
121
125
 
122
- tag(:div, 'content', id: 'comment')
126
+ tag(:div, 'content', id: 'comment')
123
127
  # <div id="comment">
124
128
  # content
125
129
  # </div>
126
-
127
130
 
128
131
  # NB! no content
129
- tag(:div, id: :comment)
132
+ tag(:div, id: :comment)
130
133
  #=> <div id="comment"></div>
131
-
134
+
132
135
  ```
133
136
 
134
137
  #### Single line tags
@@ -149,7 +152,6 @@ end
149
152
  # <p>Hello World</p>
150
153
  # </div>
151
154
 
152
-
153
155
  <% tag(:ul) do %>
154
156
  <li>item 1</li>
155
157
  <%= tag(:li, 'item 2') %>
@@ -161,7 +163,6 @@ end
161
163
  # <li>item 3</li>
162
164
  # </ul>
163
165
 
164
-
165
166
  # NOTE: ignores tag contents when given a block
166
167
  <% tag(:div, 'ignored tag-content') do %>
167
168
  <%= tag(:label, 'Comments:', for: :comments) %>
@@ -175,7 +176,6 @@ end
175
176
  # </div>
176
177
  ```
177
178
 
178
-
179
179
  #### Boolean attributes
180
180
 
181
181
  ```ruby
@@ -184,63 +184,58 @@ tag(:input, type: :checkbox, checked: true)
184
184
 
185
185
  tag(:option, 'Roda', value: "1" selected: true)
186
186
  #=> <option selected="selected" value="1">Roda</option>
187
-
187
+
188
188
  tag(:option, 'PHP', value: "0" selected: false)
189
189
  #=> <option value="0">PHP</option>
190
190
  ```
191
191
 
192
- <br>
192
+ ---
193
193
 
194
194
  The plugin also have a few other public helper methods:
195
195
 
196
-
197
196
  ### -- `merge_attr_classes(attr, *classes)`
198
197
 
199
198
  Updates `attr[:class]` in the hash with the given `classes` and returns `attr`.
200
-
199
+
201
200
  ```ruby
202
201
  attr = { class: 'alert', id: :idval }
203
-
204
- merge_attr_classes(attr, 'alert-info')
202
+
203
+ merge_attr_classes(attr, 'alert-info')
205
204
  #=> { class: 'alert alert-info', id: :idval }
206
-
207
- merge_attr_classes(attr, [:alert, 'alert-info'])
205
+
206
+ merge_attr_classes(attr, [:alert, 'alert-info'])
208
207
  #=> { class: 'alert alert-info', id: :idval }
209
208
  ```
210
-
211
- <br>
212
-
213
209
 
210
+ ---
214
211
 
215
212
  ### -- `merge_classes(*classes)`
216
-
213
+
217
214
  Returns an alphabetised string from all given class values.
218
215
 
219
- The method correctly handles a combination of `arrays`, `strings` & `symbols` being passed in.
220
-
216
+ The method correctly handles a combination of `arrays`, `strings` & `symbols`
217
+ being passed in.
218
+
221
219
  ```ruby
222
220
  attr = { class: 'alert', id: :idval }
223
-
221
+
224
222
  merge_classes(attr[:class], ['alert', 'alert-info']) #=> 'alert alert-info'
225
-
223
+
226
224
  merge_classes(attr[:class], :text) #=> 'alert text'
227
-
225
+
228
226
  merge_classes(attr[:class], [:text, :'alert-info']) #=> 'alert alert-info text'
229
227
  ```
230
228
 
231
- <br>
232
-
233
- ### Included Helper methods
229
+ ---
234
230
 
235
- The `:tags` plugin also includes a few useful public helper methods for use within other methods or gems.
231
+ ### Included Helper methods
236
232
 
233
+ The `:tags` plugin also includes a few useful public helper methods for use
234
+ within other methods or gems.
237
235
 
238
236
  ### -- `capture(block='')`
239
237
 
240
238
  Captures and returns a captured `ERB` block and restores the buffer afterwards.
241
-
242
- <br>
243
-
244
239
 
245
240
  ### -- `capture_html(*args, &block)`
246
241
 
@@ -253,49 +248,44 @@ def some_method(*args, &block)
253
248
  # <snip...>
254
249
  end
255
250
  ```
256
-
257
- <br>
258
251
 
252
+ ---
259
253
 
260
254
  ### -- `concat_content(text="")`
261
255
 
262
256
  Outputs the given content to the buffer directly.
263
-
257
+
264
258
  ```ruby
265
259
  concat_content("This will be concatenated to the buffer")
266
260
  ```
267
-
268
- <br>
269
-
270
261
 
271
- ### -- `block_is_template?(block)`
262
+ ---
272
263
 
273
- Returns `true` if the block is from an `ERB` or `HAML` template; `false` otherwise. Used to determine if contents should be returned or concatenated to output.
264
+ ### -- `block_is_template?(block)`
274
265
 
275
- <br>
266
+ Returns `true` if the block is from an `ERB` or `HAML` template; `false`
267
+ otherwise. Used to determine if contents should be returned or concatenated
268
+ to output.
276
269
 
277
270
  ---
278
271
 
279
- <br>
280
-
281
-
282
272
  ## 2. `:tag_helpers` Plugin
283
273
 
284
- <br>
285
-
286
- #### -- `form_tag(action, attrs={}, &block)`
274
+ ### -- `form_tag(action, attrs={}, &block)`
287
275
 
288
276
  Constructs a `<form>` without an object based on options passed.
289
277
 
290
278
  ```ruby
291
- form_tag('/register') do
292
- ...
279
+ form_tag('/register') do
280
+ ...
293
281
  end
294
282
  # <form action="/register" id="register-form" method="post">
295
283
  # ...
296
284
  # </form>
297
285
  ```
298
- Automatically adds a hidden *faux method* when `:method` is NOT either `POST` or `GET`.
286
+
287
+ Automatically adds a hidden _faux method_ when `:method` is NOT either `POST`
288
+ or `GET`.
299
289
 
300
290
  ```ruby
301
291
  form_tag('/user/1/profile', method: :put, id: 'profile-form')
@@ -320,25 +310,23 @@ form_tag('/upload', enctype: 'multipart/form-data')
320
310
  # </form>
321
311
  ```
322
312
 
323
- <br>
324
313
  ---
325
314
 
326
-
327
315
  ### -- `label_tag(field, attrs={}, &block)`
328
-
329
- Constructs a `<label>` tag from the given options.
330
316
 
317
+ Constructs a `<label>` tag from the given options.
331
318
 
332
- By default appends `':'` to the label name, based upon the plugin config `:tags_label_append ` value.
319
+ By default appends `':'` to the label name, based upon the plugin config
320
+ `:tags_label_append` value.
333
321
 
334
322
  ```ruby
335
323
  label_tag(:name)
336
324
  #=> <label for="name">Name:</label>
337
-
325
+
338
326
  label_tag(:name, label: 'Custom label', class: 'sr-only')
339
327
  #=> <label class="sr-only" for="name">Custom label:</label>
340
328
 
341
- # uses a humanized version of the label name if { label: nil }
329
+ # uses a humanized version of the label name if { label: nil }
342
330
  label_tag(:name, label: nil)
343
331
  #=> <label for="name">Name:</label>
344
332
 
@@ -347,8 +335,8 @@ label_tag(:name, label: false)
347
335
  #=> <label for="name"></label>
348
336
  ```
349
337
 
350
- By default adds `'<span>*</span>'` to the label name when `{ required: true }` is passed. Based upon the plugin config `:tags_label_required_str ` value.
351
-
338
+ By default adds `'<span>*</span>'` to the label name when `{ required: true }`
339
+ is passed. Based upon the plugin config `:tags_label_required_str` value.
352
340
 
353
341
  ```ruby
354
342
  label_tag(:name, required: true)
@@ -362,19 +350,22 @@ Label tags also supports passing blocks.
362
350
  <%= checkbox_tag :remember_me %>
363
351
  <% end %>
364
352
  # <label for="remember_me">Remember Me:
365
- # <input class="checkbox" id="remember_me" name="remember_me" type="checkbox" value="1">
353
+ # <input
354
+ # class="checkbox"
355
+ # id="remember_me"
356
+ # name="remember_me"
357
+ # type="checkbox"
358
+ # value="1"
359
+ # >
366
360
  # </label>
367
361
  ```
368
362
 
369
-
370
- <br>
371
363
  ---
372
364
 
373
365
  ### -- `hidden_field_tag(name, attrs={})`
374
366
 
375
-
376
- Constructs a hidden input field from the given options. Only `[:value, :id, :name]` attributes are allowed.
377
-
367
+ Constructs a hidden input field from the given options. Only
368
+ `[:value, :id, :name]` attributes are allowed.
378
369
 
379
370
  ```ruby
380
371
  hidden_field_tag(:snippet_name)
@@ -389,14 +380,14 @@ hidden_field_tag(:snippet_id, id: 'some-id')
389
380
  # removing the `:id` attribute completely.
390
381
  hidden_field_tag(:snippet_name, id: false)
391
382
  #=> <input name="snippet_name" type="hidden">
392
- ```
383
+ ```
393
384
 
394
- <br>
395
385
  ---
396
386
 
397
- ### -- `text_field_tag(name, attrs={}) `
398
- &nbsp; - *also aliased as* `textfield_tag()`
399
-
387
+ ### -- `text_field_tag(name, attrs={})`
388
+
389
+ &nbsp; - _also aliased as_ `textfield_tag()`
390
+
400
391
  Creates a standard `<input type="text"...>` field from the given options.
401
392
 
402
393
  ```ruby
@@ -434,12 +425,12 @@ text_field_tag(:name, readonly: true)
434
425
  #=> <input class="text" id="name" name="name" readonly="readonly" type="text">
435
426
  ```
436
427
 
437
- <br>
438
428
  ---
439
429
 
440
430
  ### -- `password_field_tag(name, attrs={})`
441
- &nbsp; - *also aliased as* `passwordfield_tag()`
442
-
431
+
432
+ &nbsp; - _also aliased as_ `passwordfield_tag()`
433
+
443
434
  Constructs a `<input type="password"...>` field from the given options.
444
435
 
445
436
  ```ruby
@@ -447,7 +438,12 @@ password_field_tag(:snippet_name)
447
438
  #=> <input class="text" id="snippet_name" name="snippet_name" type="password">
448
439
 
449
440
  password_field_tag(:snippet_name, value: 'some-value')
450
- #=> <input class="text" id="snippet_name" name="snippet_name" type="password" value="some-value">
441
+ #=> <input
442
+ # class="text"
443
+ # id="snippet_name"
444
+ # name="snippet_name"
445
+ # type="password"
446
+ # value="some-value">
451
447
 
452
448
  password_field_tag(:snippet_name, id: 'some-id')
453
449
  #=> <input class="text" id="some-id" name="snippet_name" type="password">
@@ -465,7 +461,13 @@ password_field_tag(:name, ui_hint: 'a user hint')
465
461
 
466
462
  # supports `:maxlength` & `:size` attributes
467
463
  password_field_tag(:ip_address, maxlength: 15, size: 20)
468
- #=> <input class="text" id="ip_address" maxlength="15" name="ip_address" size="20" type="password">
464
+ #=> <input
465
+ # class="text"
466
+ # id="ip_address"
467
+ # maxlength="15"
468
+ # name="ip_address"
469
+ # size="20"
470
+ # type="password">
469
471
 
470
472
  # `disabled` attribute
471
473
  password_field_tag(:name, disabled: true)
@@ -473,16 +475,16 @@ password_field_tag(:name, disabled: :disabled)
473
475
  #=> <input class="text" id="name" disabled="disabled" name="name" type="password">
474
476
  ```
475
477
 
476
- <br>
477
478
  ---
478
479
 
479
-
480
480
  ### -- `file_field_tag(name, attrs={})`
481
- &nbsp; - *also aliased as* `filefield_tag()`
482
481
 
483
- Creates an `<input type="file"...>` field from given options.
482
+ &nbsp; - _also aliased as_ `filefield_tag()`
484
483
 
485
- **NOTE!** If you are using file uploads then you will also need to set the multipart option for the form tag, like this:
484
+ Creates an `<input type="file"...>` field from given options.
485
+
486
+ **NOTE!** If you are using file uploads then you will also need to set the
487
+ multipart option for the form tag, like this:
486
488
 
487
489
  ```ruby
488
490
  <% form_tag('/upload', multipart: true) do %>
@@ -492,8 +494,8 @@ Creates an `<input type="file"...>` field from given options.
492
494
  <% end %>
493
495
  ```
494
496
 
495
- The specified URL will then be passed a File object containing the selected file, or if the field was left blank, a StringIO object.
496
-
497
+ The specified URL will then be passed a File object containing the selected file,
498
+ or if the field was left blank, a StringIO object.
497
499
 
498
500
  ```ruby
499
501
  file_field_tag('attachment')
@@ -524,22 +526,26 @@ file_field_tag(:photo, disabled: true)
524
526
 
525
527
  # `:accept` attribute is subject to actual browser support.
526
528
  file_field_tag(:photo, accept: 'image/png,image/jpeg' )
527
- #=> <input accept="image/png,image/jpeg" class="file" id="photo" name="photo" type="file">
529
+ #=> <input
530
+ # accept="image/png,image/jpeg"
531
+ # class="file"
532
+ # id="photo"
533
+ # name="photo"
534
+ # type="file">
528
535
  ```
529
536
 
530
- <br>
531
537
  ---
532
538
 
533
-
534
539
  ### -- `textarea_tag(name, attrs={})`
535
- &nbsp; - *also aliased as* `text_area_tag()`
540
+
541
+ &nbsp; - _also aliased as_ `text_area_tag()`
536
542
 
537
543
  Constructs a textarea input from the given options.
538
544
 
539
545
  **TODO:** enable :escape functionality. How??
540
546
 
541
- * `:escape` - By default, the contents of the text input are HTML escaped. If you need unescaped contents, set this to false.
542
-
547
+ - `:escape` - By default, the contents of the text input are HTML escaped.
548
+ If you need unescaped contents, set this to false.
543
549
 
544
550
  ```ruby
545
551
  textarea_tag('post')
@@ -565,25 +571,29 @@ textarea_tag(:body, ui_hint: 'a user hint')
565
571
  textarea_tag('body', rows: 10, cols: 25)
566
572
  #=> <textarea cols="25" id="body" name="body" rows="10">...</textarea>
567
573
 
568
- # alternative `:size` shortcut to set `:rows` & `:cols`
574
+ # alternative `:size` shortcut to set `:rows` & `:cols`
569
575
  textarea_tag('body', size: "25x10")
570
576
  #=> <textarea cols="25" id="body" name="body" rows="10">...</textarea>
571
577
 
572
578
  # `:disabled` attribute
573
579
  textarea_tag(:description, disabled: true)
574
- #=> <textarea disabled="disabled" id="description" name="description">...</textarea>
575
-
580
+ #=> <textarea disabled="disabled" id="description" name="description">
581
+ # ...
582
+ # </textarea>
583
+
576
584
  # `:readonly` attribute
577
585
  textarea_tag(:description, readonly: true)
578
- #=> <textarea id="description" name="description" readonly="readonly">...</textarea>
579
- ```
586
+ #=> <textarea id="description" name="description" readonly="readonly">
587
+ # ...
588
+ # </textarea>
589
+ ```
580
590
 
581
- <br>
582
591
  ---
583
592
 
584
593
  ### -- `field_set_tag(*args, &block)`
585
- &nbsp; - *also aliased as* `fieldset_tag()`
586
-
594
+
595
+ &nbsp; - _also aliased as_ `fieldset_tag()`
596
+
587
597
  Creates a `<fieldset..>` tag for grouping HTML form elements.
588
598
 
589
599
  ```ruby
@@ -631,13 +641,11 @@ field_set_tag('Users', id: false)
631
641
  # <snip...>
632
642
  ```
633
643
 
634
- <br>
635
644
  ---
636
645
 
637
646
  ### -- `legend_tag(contents, attrs={})`
638
-
639
- Return a legend with _contents_ from the given options.
640
647
 
648
+ Return a legend with _contents_ from the given options.
641
649
 
642
650
  ```ruby
643
651
  legend_tag('User Details')
@@ -652,15 +660,13 @@ legend_tag('User', class: 'some-class')
652
660
  #=> <legend class="some-class">User</legend>
653
661
  ```
654
662
 
655
- <br>
656
663
  ---
657
664
 
658
-
659
665
  ### -- `check_box_tag(name, attrs={})`
666
+
660
667
  &nbsp; - also aliased as `checkbox_tag()`
661
-
662
- Creates an `<input type="checkbox"...>` tag from the given options.
663
668
 
669
+ Creates an `<input type="checkbox"...>` tag from the given options.
664
670
 
665
671
  ```ruby
666
672
  check_box_tag(:accept) || checkbox_tag(:accept)
@@ -680,27 +686,45 @@ check_box_tag(:rock, class: 'small')
680
686
 
681
687
  # adds a `:title` attribute when passed `:ui_hint`
682
688
  check_box_tag(:rock, ui_hint: 'a user hint')
683
- #=> <input class="checkbox" id="rock" name="rock" title="a user hint" type="checkbox" value="1">
689
+ #=> <input
690
+ # class="checkbox"
691
+ # id="rock"
692
+ # name="rock"
693
+ # title="a user hint"
694
+ # type="checkbox"
695
+ # value="1">
684
696
 
685
697
  # `checked` attribute
686
698
  check_box_tag(:rock, checked: true)
687
- #=> <input checked="checked" class="checkbox" id="rock" name="rock" type="checkbox" value="1">
699
+ #=> <input
700
+ # checked="checked"
701
+ # class="checkbox"
702
+ # id="rock"
703
+ # name="rock"
704
+ # type="checkbox"
705
+ # value="1">
688
706
 
689
707
  # `disabled` attribute
690
708
  check_box_tag(:rock, disabled: true)
691
- #=> <input class="checkbox" disabled="disabled" id="rock" name="rock" type="checkbox" value="1">
709
+ #=> <input
710
+ # class="checkbox"
711
+ # disabled="disabled"
712
+ # id="rock"
713
+ # name="rock"
714
+ # type="checkbox"
715
+ # value="1">
692
716
  ```
693
717
 
694
- <br>
695
718
  ---
696
719
 
697
720
  ### -- `radio_button_tag(name, attrs={})`
698
- &nbsp; - *also aliased as* `radiobutton_tag()`
699
-
700
- Creates a `<input type="radio"...>` tag from the given options.
701
721
 
702
- **NOTE!** use groups of radio buttons named the same to allow users to select from a group of options.
722
+ &nbsp; - _also aliased as_ `radiobutton_tag()`
703
723
 
724
+ Creates a `<input type="radio"...>` tag from the given options.
725
+
726
+ **NOTE!** use groups of radio buttons named the same to allow users to select
727
+ from a group of options.
704
728
 
705
729
  ```ruby
706
730
  radio_button_tag(:accept) || radiobutton_tag(:accept)
@@ -710,15 +734,15 @@ radio_button_tag(:rock, value:'rock music')
710
734
  #=> <input class="radio" id="rock_rock-music" name="rock" type="radio" value="rock music">
711
735
 
712
736
  # setting a different :id.
713
- radio_button_tag(:rock, id: 'some-id')
737
+ radio_button_tag(:rock, id: 'some-id')
714
738
  #=> <input class="radio" id="some-id_1" name="rock" type="radio" value="1">
715
739
 
716
740
  # append a CSS class. NB! default class: '.radio'
717
- radio_button_tag(:rock, class: 'big')
741
+ radio_button_tag(:rock, class: 'big')
718
742
  #=> <input class="big radio" id="rock_1" name="rock" type="radio" value="1">
719
743
 
720
744
  # adds a `:title` attribute when passed `:ui_hint`
721
- radio_button_tag(:rock, ui_hint: 'a user hint')
745
+ radio_button_tag(:rock, ui_hint: 'a user hint')
722
746
  #=> <input class="radio" id="rock_1" value="1" name="rock" title="a user hint" type="radio">
723
747
 
724
748
  # `checked` attribute
@@ -730,13 +754,12 @@ radio_button_tag(:yes, disabled: true)
730
754
  #=> <input disabled="disabled" class="radio" id="yes_1" name="yes" type="radio" value="1">
731
755
  ```
732
756
 
733
- <br>
734
757
  ---
735
758
 
759
+ ### -- `submit_tag(value="Save Form", attrs={})`
760
+
761
+ &nbsp; - _also aliased as_ **`submit_button()`**
736
762
 
737
- ### -- `submit_tag(value="Save Form", attrs={})`
738
- &nbsp; - *also aliased as* **`submit_button()`**
739
-
740
763
  Creates a submit button with the text value as the caption.
741
764
 
742
765
  ```ruby
@@ -745,7 +768,7 @@ submit_tag() || submit_button()
745
768
 
746
769
  submit_tag(nil)
747
770
  #=> <input name="submit" type="submit" value="">
748
-
771
+
749
772
  submit_tag('Custom Value')
750
773
  #=> <input name="submit" type="submit" value="Custom Value">
751
774
 
@@ -762,13 +785,11 @@ submit_tag(ui_hint: 'a user hint')
762
785
  #=> <input name="submit" title="a user hint" type="submit" value="Save Form">
763
786
  ```
764
787
 
765
- <br>
766
788
  ---
767
789
 
768
790
  ### -- `image_submit_tag(src, attrs={})`
769
791
 
770
792
  Adds a `<input src=""...>` tag which displays an image.
771
-
772
793
 
773
794
  ```ruby
774
795
  @img = '/img/btn.png'
@@ -783,11 +804,11 @@ image_submit_tag(@img, class 'search-button')
783
804
  #=> <input class="search-button" src="/img/btn.png" type="image">
784
805
  ```
785
806
 
786
- <br>
787
807
  ---
788
808
 
789
809
  ### -- `reset_tag(value='Reset Form', attrs={})`
790
- &nbsp; - *also aliased as* **`reset_button()`**
810
+
811
+ &nbsp; - _also aliased as_ **`reset_button()`**
791
812
 
792
813
  Creates a reset button with the text value as the caption.
793
814
 
@@ -807,20 +828,18 @@ reset_tag(class: 'some-class')
807
828
 
808
829
  # supports the `:disabled` attribute
809
830
  reset_tag(disabled: true)
810
- #=> <input disabled="disabled" name="reset" type="reset" value="Reset Form">
831
+ #=> <input disabled="disabled" name="reset" type="reset" value="Reset Form">
811
832
 
812
833
  # adds a `:title` attribute when passed `:ui_hint`
813
834
  reset_tag(ui_hint: 'a user hint')
814
835
  #=> <input name="reset" title="a user hint" type="submit" value="Reset Form">
815
836
  ```
816
837
 
817
- <br>
818
838
  ---
819
839
 
820
840
  ### -- `select_tag(name, options, attrs={})`
821
-
822
- Creates a `<select..>` tag (dropdown menu), including the various select options.
823
841
 
842
+ Creates a `<select..>` tag (dropdown menu), including the various select options.
824
843
 
825
844
  **Note!** the format for the options values must be `[value, key]`.
826
845
 
@@ -887,8 +906,9 @@ select_tag(:letters, @letters, selected: :a)
887
906
  # <snip...>
888
907
  ```
889
908
 
890
-
891
- When passing multiple items to `:selected` option or setting the `{ multiple: true }` option, the select menu automatically becomes a multiple select box.
909
+ When passing multiple items to `:selected` option or setting the
910
+ `{ multiple: true }` option, the select menu automatically becomes
911
+ a multiple select box.
892
912
 
893
913
  **NOTE!** the `name="letters[]"` attribute.
894
914
 
@@ -904,10 +924,9 @@ select_tag(:letters, @letters, multiple: true)
904
924
  # <snip...>
905
925
  ```
906
926
 
907
- <br>
908
927
  ---
909
928
 
910
- ### -- `select_option(value, key, attrs={})`
929
+ ### -- `select_option(value, key, attrs={})`
911
930
 
912
931
  Creates an `<option...>` tag for `<select...>` menus.
913
932
 
@@ -917,7 +936,7 @@ select_option('a', 'Letter A')
917
936
 
918
937
  select_option('on', '') # , nil)
919
938
  #=> <option value="on">On</option>
920
-
939
+
921
940
  # handling selected options
922
941
  select_option('a', 'Letter A', selected: true)
923
942
  #=> <option selected="selected" value="a">Letter A</option>
@@ -926,60 +945,59 @@ select_option('a', 'Letter A', selected: false)
926
945
  #=> <option value="a">Letter A</option>
927
946
  ```
928
947
 
929
- <br>
930
948
  ---
931
949
 
932
950
  ### -- `faux_method(method='PUT')`
933
951
 
934
-
935
952
  ```ruby
936
953
  faux_method() #=> <input name="_method" type="hidden" value="PUT">
937
954
 
938
955
  # handling DELETE requests
939
956
  faux_method(:delete) #=> <input name="_method" type="hidden" value="DELETE">
940
-
941
- ```
942
957
 
943
- <br>
958
+ ```
959
+
944
960
  ---
945
961
 
946
962
  ## Plugin Configurations
947
963
 
948
- The default settings should help you get moving quickly, and are fairly common sense based.
964
+ The default settings should help you get moving quickly, and are fairly common
965
+ sense based.
949
966
 
950
967
  However the `:tags` plugin supports these config options:
951
968
 
952
- #### `:tag_output_format_is_xhtml`
953
-
954
- Sets the HTML output format, toggling between `HTML 5` (`false`) and `XHTML` (`true`). Default is: `false`.
969
+ ### `:tag_output_format_is_xhtml`
955
970
 
956
- This option is retained for legacy support and in memory of the *"good old days"* ;-).
971
+ Sets the HTML output format, toggling between `HTML 5` (`false`) and `XHTML`
972
+ (`true`). Default is: `false`.
957
973
 
958
- #### `:tag_add_newlines_after_tags`
974
+ This option is retained for legacy support and in memory of the
975
+ _"good old days"_ ;-).
959
976
 
960
- Sets the formatting of the HTML output, whether it should be more compact in nature or slightly better formatted. Default is: `true`.
977
+ ### `:tag_add_newlines_after_tags`
961
978
 
979
+ Sets the formatting of the HTML output, whether it should be more compact in
980
+ nature or slightly better formatted. Default is: `true`.
962
981
 
963
982
  The `:tag_helpers` plugin supports these config options:
964
983
 
965
-
966
984
  #### `:tags_label_required_str`
967
985
 
968
- Sets the formatting of the string appended to required `<label...>` tags. Default is: `'<span>*</span>'`.
986
+ Sets the formatting of the string appended to required `<label...>` tags.
987
+ Default is: `'<span>*</span>'`.
969
988
 
970
989
  #### `:tags_label_append_str`
971
990
 
972
991
  Sets the formatting of the string appended to `<label...>` tags. Default is: `':'`.
973
992
 
974
-
975
993
  #### `:tags_forms_default_class`
976
994
 
977
995
  Sets the default class value for form tags. Default is: `''` (empty).
978
996
 
979
- This is a shortcut to automatically add something like [Bootstrap](https://getbootstrap.com/) support with `'form-control'`
980
-
997
+ This is a shortcut to automatically add something like
998
+ [Bootstrap](https://getbootstrap.com/) support with `'form-control'`
981
999
 
982
- **NOTE!**
1000
+ **NOTE!**
983
1001
 
984
1002
  Config options set in `:tag_helpers` are passed on to the `:tags` plugin.
985
1003
 
@@ -990,94 +1008,74 @@ plugin :tag_helpers, { tag_output_format_is_xhtml: true, ... }
990
1008
  # <snip...>
991
1009
  ```
992
1010
 
993
-
994
-
995
1011
  ## RTFM
996
1012
 
997
- If the above is not clear enough, please check the specs for a better understanding.
998
-
999
- <br>
1013
+ If the above is not clear enough, please check the specs for a better
1014
+ understanding.
1000
1015
 
1001
1016
  ## Errors / Bugs
1002
1017
 
1003
1018
  If something is not behaving intuitively, it is a bug, and should be reported.
1004
- Report it here: http://github.com/kematzy/roda-tags/issues
1019
+ Report [Issues here](http://github.com/kematzy/roda-tags/issues)
1005
1020
 
1006
- <br>
1021
+ ---
1007
1022
 
1008
1023
  ## TODOs
1009
1024
 
1010
- * Keep it up to date with any changes in `Roda` or `HTML`.
1011
-
1012
- * Decide on if it's worth it to do validity checks on all attributes passed to tags
1013
- ie: reject attributes based upon what is allowed for the tag.
1014
-
1015
- ```ruby
1016
- tag(:base, href: 'url', target: '_self', id: 'is-ignored')
1017
- #=> <base href="url", target="_self">
1018
- ```
1025
+ - Keep it up to date with any changes in `Roda` or `HTML`.
1019
1026
 
1020
- * Decide on whether to add a number of convenience tags (methods), such as:
1021
-
1022
- - ```meta(name, contents)```
1023
-
1024
- - ```img(src, attrs={})```
1025
-
1027
+ - Decide on if it's worth it to do validity checks on all attributes passed to tags
1028
+ ie: reject attributes based upon what is allowed for the tag.
1026
1029
 
1027
- * Any other improvements we may think of.
1030
+ ```ruby
1031
+ tag(:base, href: 'url', target: '_self', id: 'is-ignored')
1032
+ #=> <base href="url", target="_self">
1033
+ ```
1028
1034
 
1035
+ - Decide on whether to add a number of convenience tags (methods), such as:
1029
1036
 
1030
- <br>
1037
+ - `meta(name, contents)`
1038
+ - `img(src, attrs={})`
1031
1039
 
1032
- ## Dependencies
1040
+ - Any other improvements we may think of.
1033
1041
 
1034
- This Gem depends upon the following:
1042
+ ---
1035
1043
 
1036
- ### Runtime:
1044
+ ## Acknowledgements
1037
1045
 
1038
- * roda (>= 2.5.0)
1039
- * tilt
1040
- * erubis
1046
+ Inspiration for this gem was taken from the ActiveSupport gem by DHH & Rails Core Team released
1047
+ under the MIT license.
1041
1048
 
1049
+ ---
1042
1050
 
1043
- ### Development & Tests:
1051
+ ## Development
1044
1052
 
1045
- * bundler (~> 1.10)
1046
- * rake (~> 10.0)
1047
- * minitest
1048
- * minitest-hooks
1049
- * minitest-rg
1050
- * rack-test
1051
- * nokogiri => for the `assert_have_tag()` tests
1053
+ After checking out the repo, run `bundle install` to install dependencies.
1054
+ Then, run `bundle exec rake spec` to run the tests.
1052
1055
 
1053
- * simplecov
1056
+ To install this gem onto your local machine, run `bundle exec rake install`.
1054
1057
 
1058
+ To release a new version:
1055
1059
 
1056
- <br>
1060
+ 1. update the version number in `version.rb`
1061
+ 2. run `bundle exec rake release`, which will create a git tag for the version
1062
+ 3. push git commits and tags
1063
+ 4. push the `.gem` file to [rubygems.org](https://rubygems.org).
1057
1064
 
1058
- ## Note on Patches/Pull Requests
1059
-
1060
- * Fork the project.
1061
- * Make your feature addition or bug fix.
1062
- * Add tests for it. This is important so I don't break it in a future version unintentionally.
1063
- * Commit, do not mess with Rakefile, version, or history.
1064
- * (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
1065
- * Send me a pull request. Bonus points for topic branches.
1065
+ ## Contributing
1066
1066
 
1067
+ Bug reports and pull requests are welcome on [GitHub](https://github.com/kematzy/roda-tags).
1067
1068
 
1068
- <br>
1069
+ This project is intended to be a safe, welcoming space for collaboration, and contributors are
1070
+ expected to adhere to the [Contributor Covenant](contributor-covenant.org) code of conduct.
1069
1071
 
1070
1072
  ## Copyright
1071
1073
 
1072
- Copyright (c) 2010-2015 Kematzy
1074
+ Copyright (c) 2010 - 2024 Kematzy
1073
1075
 
1074
1076
  Released under the MIT License. See LICENSE for further details.
1075
1077
 
1076
- <br>
1077
-
1078
- ## Code Inspirations:
1079
-
1080
- * The ActiveSupport gem by DHH & Rails Core Team
1081
-
1082
-
1078
+ ## License
1083
1079
 
1080
+ The gem is available as open source under the terms of the
1081
+ [MIT License](http://opensource.org/licenses/MIT).