rails_bootstrap_form 0.5.3 → 0.6.1

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.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +111 -2
  3. data/Gemfile.lock +9 -3
  4. data/README.md +68 -0
  5. data/Rakefile +2 -0
  6. data/app/assets/stylesheets/rails_bootstrap_form.css +3 -0
  7. data/demo/app/views/users/_form.html.erb +2 -0
  8. data/demo/app/views/users/_horizontal_form.html.erb +32 -0
  9. data/demo/app/views/users/_vertical_form.html.erb +8 -8
  10. data/demo/config/database.yml +7 -15
  11. data/demo/db/schema.rb +8 -5
  12. data/gemfiles/common.gemfile +10 -2
  13. data/lib/rails_bootstrap_form/bootstrap_form_builder.rb +1 -1
  14. data/lib/rails_bootstrap_form/bootstrap_form_options.rb +21 -3
  15. data/lib/rails_bootstrap_form/field_wrapper_builder.rb +31 -17
  16. data/lib/rails_bootstrap_form/{components → helpers}/check_box.rb +10 -3
  17. data/lib/rails_bootstrap_form/{components → helpers}/errors.rb +1 -1
  18. data/lib/rails_bootstrap_form/{components → helpers}/help_text.rb +1 -1
  19. data/lib/rails_bootstrap_form/{components → helpers}/labels.rb +8 -2
  20. data/lib/rails_bootstrap_form/{components → helpers}/radio_button.rb +10 -3
  21. data/lib/rails_bootstrap_form/{components → helpers}/required_field.rb +1 -1
  22. data/lib/rails_bootstrap_form/helpers.rb +45 -0
  23. data/lib/rails_bootstrap_form/inputs/base.rb +16 -11
  24. data/lib/rails_bootstrap_form/inputs/check_box.rb +45 -0
  25. data/lib/rails_bootstrap_form/inputs/collection_check_boxes.rb +41 -0
  26. data/lib/rails_bootstrap_form/inputs/collection_radio_buttons.rb +39 -0
  27. data/lib/rails_bootstrap_form/inputs/collection_select.rb +21 -0
  28. data/lib/rails_bootstrap_form/inputs/color_field.rb +21 -0
  29. data/lib/rails_bootstrap_form/inputs/date_field.rb +15 -0
  30. data/lib/rails_bootstrap_form/inputs/date_select.rb +15 -0
  31. data/lib/rails_bootstrap_form/inputs/datetime_field.rb +15 -0
  32. data/lib/rails_bootstrap_form/inputs/datetime_local_field.rb +15 -0
  33. data/lib/rails_bootstrap_form/inputs/datetime_select.rb +15 -0
  34. data/lib/rails_bootstrap_form/inputs/email_field.rb +15 -0
  35. data/lib/rails_bootstrap_form/inputs/file_field.rb +15 -0
  36. data/lib/rails_bootstrap_form/inputs/grouped_collection_select.rb +21 -0
  37. data/lib/rails_bootstrap_form/inputs/hidden_field.rb +19 -0
  38. data/lib/rails_bootstrap_form/inputs/month_field.rb +15 -0
  39. data/lib/rails_bootstrap_form/inputs/number_field.rb +15 -0
  40. data/lib/rails_bootstrap_form/inputs/password_field.rb +15 -0
  41. data/lib/rails_bootstrap_form/inputs/phone_field.rb +15 -0
  42. data/lib/rails_bootstrap_form/inputs/radio_button.rb +45 -0
  43. data/lib/rails_bootstrap_form/inputs/range_field.rb +21 -0
  44. data/lib/rails_bootstrap_form/inputs/search_field.rb +15 -0
  45. data/lib/rails_bootstrap_form/inputs/select.rb +21 -0
  46. data/lib/rails_bootstrap_form/inputs/static_field.rb +30 -0
  47. data/lib/rails_bootstrap_form/inputs/telephone_field.rb +15 -0
  48. data/lib/rails_bootstrap_form/inputs/text_area.rb +15 -0
  49. data/lib/rails_bootstrap_form/inputs/text_field.rb +15 -0
  50. data/lib/rails_bootstrap_form/inputs/time_field.rb +15 -0
  51. data/lib/rails_bootstrap_form/inputs/time_select.rb +15 -0
  52. data/lib/rails_bootstrap_form/inputs/time_zone_select.rb +21 -0
  53. data/lib/rails_bootstrap_form/inputs/url_field.rb +15 -0
  54. data/lib/rails_bootstrap_form/inputs/week_field.rb +15 -0
  55. data/lib/rails_bootstrap_form/inputs.rb +62 -209
  56. data/lib/rails_bootstrap_form/version.rb +1 -1
  57. data/lib/rails_bootstrap_form.rb +3 -2
  58. metadata +70 -10
  59. data/lib/rails_bootstrap_form/components.rb +0 -23
@@ -3,7 +3,7 @@
3
3
  # -*- warn_indent: true -*-
4
4
 
5
5
  module RailsBootstrapForm
6
- module Components
6
+ module Helpers
7
7
  module RadioButton
8
8
  extend ActiveSupport::Concern
9
9
 
@@ -58,11 +58,18 @@ module RailsBootstrapForm
58
58
  def radio_button_wrapper_class(bootstrap_options)
59
59
  classes = Array("form-check")
60
60
  classes << "form-check-inline" if bootstrap_options.inline?
61
- classes << "mb-3"
61
+ classes << "mb-3" unless (bootstrap_options.layout_horizontal? || bootstrap_options.inline?)
62
62
  classes.flatten.compact
63
63
  end
64
64
 
65
- private :radio_button_label, :radio_button_classes, :radio_button_label_class, :radio_button_wrapper_class
65
+ def radio_button_container_classes(bootstrap_options)
66
+ classes = Array(bootstrap_options.field_col_wrapper_class)
67
+ classes << field_offset_class(bootstrap_options.label_col_wrapper_class)
68
+ classes.flatten.compact
69
+ end
70
+
71
+ private :radio_button_label, :radio_button_classes, :radio_button_label_class,
72
+ :radio_button_wrapper_class, :radio_button_container_classes
66
73
  end
67
74
  end
68
75
  end
@@ -3,7 +3,7 @@
3
3
  # -*- warn_indent: true -*-
4
4
 
5
5
  module RailsBootstrapForm
6
- module Components
6
+ module Helpers
7
7
  module RequiredField
8
8
  extend ActiveSupport::Concern
9
9
 
@@ -0,0 +1,45 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module RailsBootstrapForm
6
+ module Helpers
7
+ extend ActiveSupport::Concern
8
+ extend ActiveSupport::Autoload
9
+
10
+ autoload :HelpText
11
+ autoload :Labels
12
+ autoload :RequiredField
13
+ autoload :Errors
14
+ autoload :CheckBox
15
+ autoload :RadioButton
16
+
17
+ include HelpText
18
+ include Labels
19
+ include RequiredField
20
+ include Errors
21
+ include CheckBox
22
+ include RadioButton
23
+
24
+ def self.included(base_class)
25
+ def collection_input_checked?(checked, obj, input_value)
26
+ checked == input_value || Array(checked).try(:include?, input_value) ||
27
+ checked == obj || Array(checked).try(:include?, obj)
28
+ end
29
+
30
+ def control_specific_class(field_tag_name)
31
+ "rails-bootstrap-forms-#{field_tag_name.to_s.tr("_", "-")}"
32
+ end
33
+
34
+ def is_size_valid?(bootstrap_options)
35
+ bootstrap_options.size && %i(sm lg).include?(bootstrap_options.size)
36
+ end
37
+
38
+ def field_offset_class(label_col_wrapper_class)
39
+ label_col_wrapper_class.gsub(/\bcol-(\w+)-(\d)\b/, 'offset-\1-\2')
40
+ end
41
+
42
+ private :collection_input_checked?, :control_specific_class, :is_size_valid?
43
+ end
44
+ end
45
+ end
@@ -7,21 +7,26 @@ module RailsBootstrapForm
7
7
  module Base
8
8
  extend ActiveSupport::Concern
9
9
 
10
- def self.included(base_class)
11
- def collection_input_checked?(checked, obj, input_value)
12
- checked == input_value || Array(checked).try(:include?, input_value) ||
13
- checked == obj || Array(checked).try(:include?, obj)
10
+ class_methods do
11
+ def bootstrap_field(field_name)
12
+ define_method(field_name) do |attribute, options = {}|
13
+ field_wrapper_builder(attribute, options) do
14
+ super(attribute, options)
15
+ end
16
+ end
14
17
  end
15
18
 
16
- def control_specific_class(field_tag_name)
17
- "rails-bootstrap-forms-#{field_tag_name.to_s.tr("_", "-")}"
18
- end
19
+ def bootstrap_select_group(field_name)
20
+ define_method(field_name) do |attribute, options = {}, html_options = {}|
21
+ options = {bootstrap_form: {field_class: "form-select"}}.deep_merge!(options)
19
22
 
20
- def is_size_valid?(bootstrap_options)
21
- bootstrap_options.size && %i(sm lg).include?(bootstrap_options.size)
23
+ field_wrapper_builder(attribute, options, html_options) do
24
+ tag.div(class: control_specific_class(field_name)) do
25
+ super(attribute, options, html_options)
26
+ end
27
+ end
28
+ end
22
29
  end
23
-
24
- private :collection_input_checked?, :control_specific_class, :is_size_valid?
25
30
  end
26
31
  end
27
32
  end
@@ -0,0 +1,45 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module RailsBootstrapForm
6
+ module Inputs
7
+ module CheckBox
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ def check_box(attribute, options = {}, checked_value = "1", unchecked_value = "0", &block)
12
+ bootstrap_options = bootstrap_form_options.scoped(options.delete(:bootstrap_form))
13
+
14
+ options[:class] = check_box_classes(attribute, options)
15
+
16
+ check_box_field = super(attribute, options, checked_value, unchecked_value)
17
+ check_box_help_text = help_text(attribute, bootstrap_options)
18
+
19
+ check_box_label = check_box_label(attribute, checked_value, options, bootstrap_options, &block)
20
+
21
+ check_box_html = tag.div(**check_box_wrapper_options(bootstrap_options)) do
22
+ concat(check_box_field)
23
+ concat(check_box_label)
24
+ concat(check_box_help_text) unless bootstrap_options.inline?
25
+ concat(generate_error(attribute)) if (is_invalid?(attribute) && !bootstrap_options.inline?)
26
+ end
27
+
28
+ if bootstrap_options.inline?
29
+ check_box_html
30
+ else
31
+ if bootstrap_options.layout_horizontal?
32
+ tag.div(class: field_wrapper_classes(bootstrap_options)) do
33
+ tag.div(class: check_box_container_classes(bootstrap_options)) do
34
+ check_box_html
35
+ end
36
+ end
37
+ else
38
+ check_box_html
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,41 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module RailsBootstrapForm
6
+ module Inputs
7
+ module CollectionCheckBoxes
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ def collection_check_boxes(attribute, collection, value_method, text_method, options = {}, html_options = {}, &block)
12
+ options[:multiple] = true
13
+
14
+ inputs = ActiveSupport::SafeBuffer.new
15
+
16
+ collection.each do |object|
17
+ input_value = value_method.respond_to?(:call) ? value_method.call(object) : object.send(value_method)
18
+ input_options = {
19
+ bootstrap_form: {
20
+ label_text: text_method.respond_to?(:call) ? text_method.call(object) : object.send(text_method),
21
+ inline: true
22
+ }
23
+ }.deep_merge!(options)
24
+
25
+ inputs << check_box(attribute, input_options, input_value, nil)
26
+ end
27
+
28
+ if options.delete(:include_hidden) { true }
29
+ inputs.prepend(hidden_field(attribute, value: "", multiple: options[:multiple]))
30
+ end
31
+
32
+ field_wrapper_builder(attribute, options, html_options) do
33
+ concat(tag.div(class: control_specific_class(:collection_check_boxes)) do
34
+ concat(inputs)
35
+ end)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,39 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module RailsBootstrapForm
6
+ module Inputs
7
+ module CollectionRadioButtons
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ def collection_radio_buttons(attribute, collection, value_method, text_method, options = {}, html_options = {}, &block)
12
+ inputs = ActiveSupport::SafeBuffer.new
13
+
14
+ collection.each do |object|
15
+ input_value = value_method.respond_to?(:call) ? value_method.call(object) : object.send(value_method)
16
+ input_options = {
17
+ bootstrap_form: {
18
+ label_text: text_method.respond_to?(:call) ? text_method.call(object) : object.send(text_method),
19
+ inline: true
20
+ }
21
+ }.deep_merge!(options)
22
+
23
+ if (checked = input_options[:checked])
24
+ input_options[:checked] = collection_input_checked?(checked, object, object.send(value_method))
25
+ end
26
+
27
+ inputs << radio_button(attribute, input_value, input_options)
28
+ end
29
+
30
+ field_wrapper_builder(attribute, options, html_options) do
31
+ concat(tag.div(class: control_specific_class(:collection_radio_buttons)) do
32
+ concat(inputs)
33
+ end)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module RailsBootstrapForm
6
+ module Inputs
7
+ module CollectionSelect
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ def collection_select(attribute, collection, value_method, text_method, options = {}, html_options = {})
12
+ options = {bootstrap_form: {field_class: "form-select"}}.deep_merge!(options)
13
+
14
+ field_wrapper_builder(attribute, options, html_options) do
15
+ super(attribute, collection, value_method, text_method, options, html_options)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module RailsBootstrapForm
6
+ module Inputs
7
+ module ColorField
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ def color_field(attribute, options = {})
12
+ options = {bootstrap_form: {field_class: "form-control form-control-color"}}.deep_merge!(options)
13
+
14
+ field_wrapper_builder(attribute, options) do
15
+ super(attribute, options)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,15 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module RailsBootstrapForm
6
+ module Inputs
7
+ module DateField
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ bootstrap_field :date_field
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module RailsBootstrapForm
6
+ module Inputs
7
+ module DateSelect
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ bootstrap_select_group :date_select
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module RailsBootstrapForm
6
+ module Inputs
7
+ module DatetimeField
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ bootstrap_field :datetime_field
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module RailsBootstrapForm
6
+ module Inputs
7
+ module DatetimeLocalField
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ bootstrap_field :datetime_local_field
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module RailsBootstrapForm
6
+ module Inputs
7
+ module DatetimeSelect
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ bootstrap_select_group :datetime_select
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module RailsBootstrapForm
6
+ module Inputs
7
+ module EmailField
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ bootstrap_field :email_field
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module RailsBootstrapForm
6
+ module Inputs
7
+ module FileField
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ bootstrap_field :file_field
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module RailsBootstrapForm
6
+ module Inputs
7
+ module GroupedCollectionSelect
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ def grouped_collection_select(attribute, collection, group_method, group_label_method, option_key_method, option_value_method, options = {}, html_options = {})
12
+ options = {bootstrap_form: {field_class: "form-select"}}.deep_merge!(options)
13
+
14
+ field_wrapper_builder(attribute, options, html_options) do
15
+ super(attribute, collection, group_method, group_label_method, option_key_method, option_value_method, options, html_options)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,19 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module RailsBootstrapForm
6
+ module Inputs
7
+ module HiddenField
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ def hidden_field(attribute, options = {})
12
+ options[:value] = object.send(attribute) unless options.key?(:value)
13
+
14
+ super(attribute, options)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,15 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module RailsBootstrapForm
6
+ module Inputs
7
+ module MonthField
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ bootstrap_field :month_field
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module RailsBootstrapForm
6
+ module Inputs
7
+ module NumberField
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ bootstrap_field :number_field
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module RailsBootstrapForm
6
+ module Inputs
7
+ module PasswordField
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ bootstrap_field :password_field
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module RailsBootstrapForm
6
+ module Inputs
7
+ module PhoneField
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ bootstrap_field :phone_field
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,45 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module RailsBootstrapForm
6
+ module Inputs
7
+ module RadioButton
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ def radio_button(attribute, value, options = {})
12
+ bootstrap_options = bootstrap_form_options.scoped(options.delete(:bootstrap_form))
13
+
14
+ options[:class] = radio_button_classes(attribute, options)
15
+
16
+ radio_button_field = super(attribute, value, options)
17
+ radio_button_help_text = help_text(attribute, bootstrap_options)
18
+
19
+ radio_button_label = radio_button_label(attribute, value, options, bootstrap_options)
20
+
21
+ radio_button_html = tag.div(**radio_button_wrapper_options(bootstrap_options)) do
22
+ concat(radio_button_field)
23
+ concat(radio_button_label)
24
+ concat(radio_button_help_text) unless bootstrap_options.inline?
25
+ concat(generate_error(attribute)) if (is_invalid?(attribute) && !bootstrap_options.inline?)
26
+ end
27
+
28
+ if bootstrap_options.inline?
29
+ radio_button_html
30
+ else
31
+ if bootstrap_options.layout_horizontal?
32
+ tag.div(class: field_wrapper_classes(bootstrap_options)) do
33
+ tag.div(class: radio_button_container_classes(bootstrap_options)) do
34
+ radio_button_html
35
+ end
36
+ end
37
+ else
38
+ radio_button_html
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module RailsBootstrapForm
6
+ module Inputs
7
+ module RangeField
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ def range_field(attribute, options = {})
12
+ options = {bootstrap_form: {field_class: "form-range"}}.deep_merge!(options)
13
+
14
+ field_wrapper_builder(attribute, options) do
15
+ super(attribute, options)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,15 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module RailsBootstrapForm
6
+ module Inputs
7
+ module SearchField
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ bootstrap_field :search_field
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module RailsBootstrapForm
6
+ module Inputs
7
+ module Select
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ def select(attribute, choices = nil, options = {}, html_options = {}, &block)
12
+ options = {bootstrap_form: {field_class: "form-select"}}.deep_merge!(options)
13
+
14
+ field_wrapper_builder(attribute, options, html_options) do
15
+ super(attribute, choices, options, html_options, &block)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,30 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module RailsBootstrapForm
6
+ module Inputs
7
+ module StaticField
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ def static_field(*args)
12
+ options = args.extract_options!
13
+ attribute = args.first
14
+
15
+ static_options = options.merge(
16
+ readonly: true,
17
+ disabled: true,
18
+ bootstrap_form: {
19
+ field_class: bootstrap_form_options.static_field_class
20
+ }
21
+ )
22
+
23
+ static_options[:value] = object.send(attribute) unless options.key?(:value)
24
+
25
+ text_field(attribute, static_options)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,15 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module RailsBootstrapForm
6
+ module Inputs
7
+ module TelephoneField
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ bootstrap_field :telephone_field
12
+ end
13
+ end
14
+ end
15
+ end