comfy_bootstrap_form 4.0.1 → 4.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e1131134a470480c0db98c57088a09d3dc5875cdde69e2886c4ad58e56f85982
4
- data.tar.gz: eb630d1a2474b38262f778ec6a77dcb6adcfb359f15ac11064e32aa164efbd26
3
+ metadata.gz: cf622e9dea142e6cd18d422f30446995fabff88afb88d60b92a5e1604d684f48
4
+ data.tar.gz: 5f9679e1bdd4605e79a4d59c374d45c8511bc700ee689fd7c0d3245f26ae01a2
5
5
  SHA512:
6
- metadata.gz: 3159663372d2ce7266d3145ade1a927c7195e99df1954c4a535bfd402ffeaf2155df31277887d09dff6b561b3167226f7baab64605661e7d8a09950f12c65647
7
- data.tar.gz: de46cca64ea6c26c322336d544a6d4ac0c719067ae64d0b5d3dcbd77acff0570a1aa2440d343b0f87ba38abf611e7ea98c7d14cc3aa442a09b2444e880ef9cdc
6
+ metadata.gz: 5f01ad97aa7ec33468d219cf2ff492aba96bb8ea7d65d4a177db7b9d31a0207dfe183bed2b67b4702a646b310b2c756098331667769e788455e763d906dd78fb
7
+ data.tar.gz: 7d7dac488acd94aae48fba8acbf7cab0be698211ac721896a9425fd92ffc51a59d89f4e594a56b1296e0ba9f522764a0f750b4d5eb5e1b36ff131faee660e74b
data/Gemfile CHANGED
@@ -3,7 +3,7 @@ source "http://rubygems.org"
3
3
  gemspec
4
4
 
5
5
  # Uncomment and change rails version for testing purposes
6
- # gem "rails", "~> 5.1.0"
6
+ gem "rails", "~> 5.2.0.rc1"
7
7
 
8
8
  group :development do
9
9
  gem "rubocop", require: false
@@ -13,7 +13,6 @@ group :test do
13
13
  gem "coveralls", require: false
14
14
  gem "diffy"
15
15
  gem "equivalent-xml"
16
- # gem "minitest", "~> 5.10.3"
17
16
  gem "minitest"
18
17
  gem "sqlite3"
19
18
  end
data/README.md CHANGED
@@ -70,7 +70,7 @@ for all kinds of different form configurations you can have.
70
70
 
71
71
  ## Form helpers
72
72
 
73
- #### boostrap_form_with
73
+ #### bootstrap_form_with
74
74
 
75
75
  Wrapper around `form_with` helper that's available in Rails 5.1 and above.
76
76
  Here's an example:
@@ -286,6 +286,16 @@ If you want to use something like a button, or other html content do this:
286
286
  <%= form.text_field :value, bootstrap: {append: {html: button_html}} %>
287
287
  ```
288
288
 
289
+ #### Custom Forms
290
+
291
+ Bootstrap can replace native browser form elements with custom ones for checkboxes,
292
+ radio buttons and file input field. Example usage:
293
+
294
+ ```erb
295
+ <%= form.file_field :photo, bootstrap: {custom_control: true} %>
296
+ <%= form.collection_radio_buttons :choice, %w[yes no], :to_s, :to_s, bootstrap: {custom_control: true} %>
297
+ ```
298
+
289
299
  ### Gotchas
290
300
 
291
301
  - In Rails 5.1 `form_with` does not generate ids for inputs. If you want them
@@ -314,4 +324,4 @@ If you want to use something like a button, or other html content do this:
314
324
 
315
325
  ---
316
326
 
317
- Copyright 2018 Oleg Khabarov, Released under the [MIT License](LICENCE.md)
327
+ Copyright 2018 Oleg Khabarov, Released under the [MIT License](LICENSE.md)
@@ -58,6 +58,12 @@ module BootstrapForm
58
58
  #
59
59
  attr_reader :check_inline
60
60
 
61
+ # Enables special input styling for file_field, radio and checkboxes. Example:
62
+ #
63
+ # form.file_file :photo, bootstrap: {custom_control: true}
64
+ #
65
+ attr_reader :custom_control
66
+
61
67
  def initialize(options = {})
62
68
  set_defaults
63
69
  set_options(options)
@@ -109,6 +115,7 @@ module BootstrapForm
109
115
  @prepend = nil
110
116
  @help = nil
111
117
  @check_inline = false
118
+ @custom_control = false
112
119
  end
113
120
 
114
121
  end
@@ -4,7 +4,7 @@ module BootstrapForm
4
4
  class FormBuilder < ActionView::Helpers::FormBuilder
5
5
 
6
6
  FIELD_HELPERS = %w[
7
- color_field date_field datetime_field email_field file_field month_field
7
+ color_field date_field datetime_field email_field month_field
8
8
  number_field password_field phone_field range_field search_field text_area
9
9
  text_field time_field url_field week_field
10
10
  ].freeze
@@ -49,6 +49,31 @@ module BootstrapForm
49
49
  end
50
50
  end
51
51
 
52
+ # Wrapper for file_field helper. It can accept `custom_control` option.
53
+ #
54
+ # file_field :photo, bootstrap: {custom_control: true}
55
+ #
56
+ def file_field(method, options = {})
57
+ bootstrap = form_bootstrap.scoped(options.delete(:bootstrap))
58
+
59
+ draw_form_group(bootstrap, method, options) do
60
+ if bootstrap.custom_control
61
+ content_tag(:div, class: "custom-file") do
62
+ add_css_class!(options, "custom-file-input")
63
+ remove_css_class!(options, "form-control")
64
+ label_text = options.delete(:placeholder)
65
+ concat super(method, options)
66
+
67
+ label_options = { class: "custom-file-label" }
68
+ label_options[:for] = options[:id] if options[:id].present?
69
+ concat label(method, label_text, label_options)
70
+ end
71
+ else
72
+ super(method, options)
73
+ end
74
+ end
75
+ end
76
+
52
77
  # Wrapper around checkbox. Example usage:
53
78
  #
54
79
  # checkbox :agree, bootstrap: {label: {text: "Do you agree?"}}
@@ -73,11 +98,22 @@ module BootstrapForm
73
98
 
74
99
  content_tag(:fieldset, class: fieldset_css_class) do
75
100
  draw_control_column(bootstrap, offset: true) do
76
- content_tag(:div, class: "form-check") do
77
- concat super(method, options, checked_value, unchecked_value)
78
- concat label(method, label_text, class: "form-check-label")
79
- concat errors if errors.present?
80
- concat help_text if help_text.present?
101
+ if bootstrap.custom_control
102
+ content_tag(:div, class: "custom-control custom-checkbox") do
103
+ add_css_class!(options, "custom-control-input")
104
+ remove_css_class!(options, "form-check-input")
105
+ concat super(method, options, checked_value, unchecked_value)
106
+ concat label(method, label_text, class: "custom-control-label")
107
+ concat errors if errors.present?
108
+ concat help_text if help_text.present?
109
+ end
110
+ else
111
+ content_tag(:div, class: "form-check") do
112
+ concat super(method, options, checked_value, unchecked_value)
113
+ concat label(method, label_text, class: "form-check-label")
114
+ concat errors if errors.present?
115
+ concat help_text if help_text.present?
116
+ end
81
117
  end
82
118
  end
83
119
  end
@@ -97,7 +133,7 @@ module BootstrapForm
97
133
  def collection_radio_buttons(method, collection, value_method, text_method, options = {}, html_options = {})
98
134
  bootstrap = form_bootstrap.scoped(options.delete(:bootstrap))
99
135
 
100
- args = [bootstrap, method, collection, value_method, text_method, options, html_options]
136
+ args = [bootstrap, :radio_button, method, collection, value_method, text_method, options, html_options]
101
137
  draw_choices(*args) do |m, v, opts|
102
138
  radio_button(m, v, opts)
103
139
  end
@@ -116,7 +152,7 @@ module BootstrapForm
116
152
  content << hidden_field(method, multiple: true, value: "")
117
153
  end
118
154
 
119
- args = [bootstrap, method, collection, value_method, text_method, options, html_options]
155
+ args = [bootstrap, :check_box, method, collection, value_method, text_method, options, html_options]
120
156
  content << draw_choices(*args) do |m, v, opts|
121
157
  opts[:multiple] = true
122
158
  opts[:include_hidden] = false
@@ -223,7 +259,7 @@ module BootstrapForm
223
259
 
224
260
  # form group wrapper for input fields
225
261
  def draw_form_group(bootstrap, method, options)
226
- label = draw_label(bootstrap, method)
262
+ label = draw_label(bootstrap, method, for_attr: options[:id])
227
263
  errors = draw_errors(method)
228
264
 
229
265
  control = draw_control(bootstrap, errors, method, options) do
@@ -258,16 +294,13 @@ module BootstrapForm
258
294
  #
259
295
  # text_field(:value, bootstrap: {label: {text: "Custom", class: "custom"}})
260
296
  #
261
- def draw_label(bootstrap, method)
262
- text = nil
263
- options = {}
297
+ def draw_label(bootstrap, method, for_attr: nil)
298
+ options = bootstrap.label.dup
299
+ text = options.delete(:text)
264
300
 
265
- if (custom_text = bootstrap.label[:text]).present?
266
- text = custom_text
267
- end
301
+ options[:for] = for_attr if for_attr.present?
268
302
 
269
- add_css_class!(options, bootstrap.label[:class])
270
- add_css_class!(options, "sr-only") if bootstrap.label[:hide]
303
+ add_css_class!(options, "sr-only") if options.delete(:hide)
271
304
  add_css_class!(options, bootstrap.inline_margin_class) if bootstrap.inline?
272
305
 
273
306
  if bootstrap.horizontal?
@@ -356,12 +389,30 @@ module BootstrapForm
356
389
  end
357
390
 
358
391
  # Rendering of choices for checkboxes and radio buttons
359
- def draw_choices(bootstrap, method, collection, value_method, text_method, _options, html_options)
360
- add_css_class!(html_options, "form-check-input")
392
+ def draw_choices(bootstrap, type, method, collection, value_method, text_method, _options, html_options)
393
+ draw_form_group_fieldset(bootstrap, method) do
394
+ if bootstrap.custom_control
395
+ label_css_class = "custom-control-label"
396
+
397
+ form_check_css_class = "custom-control"
398
+ form_check_css_class <<
399
+ case type
400
+ when :radio_button then " custom-radio"
401
+ when :check_box then " custom-checkbox"
402
+ end
361
403
 
362
- draw_form_group_fieldset(bootstrap, method, html_options) do
363
- form_check_css_class = "form-check"
364
- form_check_css_class << " form-check-inline" if bootstrap.check_inline
404
+ form_check_css_class << " custom-control-inline" if bootstrap.check_inline
405
+
406
+ add_css_class!(html_options, "custom-control-input")
407
+
408
+ else
409
+ label_css_class = "form-check-label"
410
+
411
+ form_check_css_class = "form-check"
412
+ form_check_css_class << " form-check-inline" if bootstrap.check_inline
413
+
414
+ add_css_class!(html_options, "form-check-input")
415
+ end
365
416
 
366
417
  errors = draw_errors(method)
367
418
  help_text = draw_help(bootstrap.help)
@@ -369,13 +420,13 @@ module BootstrapForm
369
420
  add_css_class!(html_options, "is-invalid") if errors.present?
370
421
 
371
422
  content = "".html_safe
372
- collection.each_with_index.map do |item, index|
423
+ collection.each_with_index do |item, index|
373
424
  item_value = item.send(value_method)
374
425
  item_text = item.send(text_method)
375
426
 
376
427
  content << content_tag(:div, class: form_check_css_class) do
377
428
  concat yield method, item_value, html_options
378
- concat label(method, item_text, value: item_value, class: "form-check-label")
429
+ concat label(method, item_text, value: item_value, class: label_css_class)
379
430
  if ((collection.count - 1) == index) && !bootstrap.check_inline
380
431
  concat errors if errors.present?
381
432
  concat help_text if help_text.present?
@@ -393,7 +444,7 @@ module BootstrapForm
393
444
  end
394
445
 
395
446
  # Wrapper for collections of radio buttons and checkboxes
396
- def draw_form_group_fieldset(bootstrap, method, _html_options)
447
+ def draw_form_group_fieldset(bootstrap, method)
397
448
  options = {}
398
449
 
399
450
  unless bootstrap.label[:hide]
@@ -1,5 +1,5 @@
1
1
  module BootstrapForm
2
2
 
3
- VERSION = "4.0.1".freeze
3
+ VERSION = "4.0.2".freeze
4
4
 
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: comfy_bootstrap_form
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.1
4
+ version: 4.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oleg Khabarov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-02-09 00:00:00.000000000 Z
11
+ date: 2018-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails