bootstrap_form 5.0.0 → 5.1.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.
Files changed (114) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +14 -12
  3. data/.gitignore +12 -2
  4. data/.rubocop.yml +2 -1
  5. data/CHANGELOG.md +45 -2
  6. data/CONTRIBUTING.md +17 -16
  7. data/Dangerfile +1 -1
  8. data/Dockerfile +2 -7
  9. data/Gemfile +5 -7
  10. data/README.md +756 -52
  11. data/RELEASING.md +5 -10
  12. data/bootstrap_form.gemspec +2 -3
  13. data/demo/.ruby-version +1 -0
  14. data/demo/Gemfile +80 -0
  15. data/demo/Gemfile.lock +261 -0
  16. data/demo/Procfile.dev +2 -0
  17. data/demo/app/assets/builds/.keep +0 -0
  18. data/demo/app/assets/builds/application.js.LICENSE.txt +9 -0
  19. data/demo/app/assets/config/manifest.js +1 -0
  20. data/demo/app/assets/stylesheets/actiontext.css +31 -0
  21. data/demo/app/assets/stylesheets/application.scss +1 -1
  22. data/demo/app/controllers/bootstrap_controller.rb +17 -2
  23. data/demo/app/controllers/users_controller.rb +9 -0
  24. data/demo/app/helpers/bootstrap_helper.rb +1 -1
  25. data/demo/app/javascript/application.js +3 -0
  26. data/demo/app/models/skill.rb +15 -0
  27. data/demo/app/models/user.rb +14 -0
  28. data/demo/app/views/active_storage/blobs/_blob.html.erb +1 -1
  29. data/demo/app/views/layouts/action_text/contents/_content.html.erb +3 -0
  30. data/demo/app/views/layouts/application.html.erb +28 -20
  31. data/demo/bin/dev +9 -0
  32. data/demo/config/environments/development.rb +3 -3
  33. data/demo/config/routes.rb +1 -0
  34. data/demo/db/schema.rb +29 -14
  35. data/demo/doc/screenshots/bootstrap/index/00_horizontal_form.png +0 -0
  36. data/demo/doc/screenshots/bootstrap/index/01_with_validation_error.png +0 -0
  37. data/demo/doc/screenshots/bootstrap/index/02_inline_form.png +0 -0
  38. data/demo/doc/screenshots/bootstrap/index/03_simple_action_text_example.png +0 -0
  39. data/demo/doc/screenshots/bootstrap/index/04_floating_labels.png +0 -0
  40. data/demo/doc/screenshots/bootstrap/readme/00_example.png +0 -0
  41. data/demo/doc/screenshots/bootstrap/readme/01_example.png +0 -0
  42. data/demo/doc/screenshots/bootstrap/readme/02_example.png +0 -0
  43. data/demo/doc/screenshots/bootstrap/readme/03_example.png +0 -0
  44. data/demo/doc/screenshots/bootstrap/readme/04_example.png +0 -0
  45. data/demo/doc/screenshots/bootstrap/readme/05_example.png +0 -0
  46. data/demo/doc/screenshots/bootstrap/readme/06_example.png +0 -0
  47. data/demo/doc/screenshots/bootstrap/readme/07_example.png +0 -0
  48. data/demo/doc/screenshots/bootstrap/readme/08_example.png +0 -0
  49. data/demo/doc/screenshots/bootstrap/readme/09_example.png +0 -0
  50. data/demo/doc/screenshots/bootstrap/readme/10_example.png +0 -0
  51. data/demo/doc/screenshots/bootstrap/readme/11_example.png +0 -0
  52. data/demo/doc/screenshots/bootstrap/readme/12_example.png +0 -0
  53. data/demo/doc/screenshots/bootstrap/readme/13_example.png +0 -0
  54. data/demo/doc/screenshots/bootstrap/readme/14_example.png +0 -0
  55. data/demo/doc/screenshots/bootstrap/readme/15_example.png +0 -0
  56. data/demo/doc/screenshots/bootstrap/readme/16_example.png +0 -0
  57. data/demo/doc/screenshots/bootstrap/readme/17_example.png +0 -0
  58. data/demo/doc/screenshots/bootstrap/readme/18_example.png +0 -0
  59. data/demo/doc/screenshots/bootstrap/readme/19_example.png +0 -0
  60. data/demo/doc/screenshots/bootstrap/readme/20_example.png +0 -0
  61. data/demo/doc/screenshots/bootstrap/readme/21_example.png +0 -0
  62. data/demo/doc/screenshots/bootstrap/readme/22_example.png +0 -0
  63. data/demo/doc/screenshots/bootstrap/readme/23_example.png +0 -0
  64. data/demo/doc/screenshots/bootstrap/readme/24_example.png +0 -0
  65. data/demo/doc/screenshots/bootstrap/readme/25_example.png +0 -0
  66. data/demo/doc/screenshots/bootstrap/readme/26_example.png +0 -0
  67. data/demo/doc/screenshots/bootstrap/readme/27_example.png +0 -0
  68. data/demo/doc/screenshots/bootstrap/readme/28_example.png +0 -0
  69. data/demo/doc/screenshots/bootstrap/readme/29_example.png +0 -0
  70. data/demo/doc/screenshots/bootstrap/readme/30_example.png +0 -0
  71. data/demo/doc/screenshots/bootstrap/readme/31_example.png +0 -0
  72. data/demo/doc/screenshots/bootstrap/readme/32_example.png +0 -0
  73. data/demo/doc/screenshots/bootstrap/readme/33_example.png +0 -0
  74. data/demo/doc/screenshots/bootstrap/readme/34_example.png +0 -0
  75. data/demo/doc/screenshots/bootstrap/readme/35_example.png +0 -0
  76. data/demo/doc/screenshots/bootstrap/readme/36_example.png +0 -0
  77. data/demo/doc/screenshots/bootstrap/readme/37_example.png +0 -0
  78. data/demo/doc/screenshots/bootstrap/readme/38_example.png +0 -0
  79. data/demo/doc/screenshots/bootstrap/readme/39_example.png +0 -0
  80. data/demo/doc/screenshots/bootstrap/readme/40_example.png +0 -0
  81. data/demo/doc/screenshots/bootstrap/readme/41_example.png +0 -0
  82. data/demo/doc/screenshots/bootstrap/readme/42_example.png +0 -0
  83. data/demo/doc/screenshots/bootstrap/readme/43_example.png +0 -0
  84. data/demo/doc/screenshots/bootstrap/readme/44_example.png +0 -0
  85. data/demo/doc/screenshots/bootstrap/readme/45_example.png +0 -0
  86. data/demo/doc/screenshots/bootstrap/readme/46_example.png +0 -0
  87. data/demo/doc/screenshots/bootstrap/readme/47_example.png +0 -0
  88. data/demo/doc/screenshots/bootstrap/readme/48_example.png +0 -0
  89. data/demo/doc/screenshots/bootstrap/readme/49_example.png +0 -0
  90. data/demo/doc/screenshots/bootstrap/readme/50_example.png +0 -0
  91. data/demo/package.json +10 -6
  92. data/demo/test/application_system_test_case.rb +8 -0
  93. data/demo/test/controllers/bootstrap_controller_test.rb +8 -0
  94. data/demo/test/controllers/users_controller_test.rb +13 -0
  95. data/demo/test/fixtures/users.yml +2 -0
  96. data/demo/test/system/bootstrap_test.rb +84 -0
  97. data/demo/test/test_helper.rb +10 -0
  98. data/demo/webpack.config.js +20 -0
  99. data/demo/yarn.lock +4063 -3144
  100. data/docker-compose.yml +22 -43
  101. data/gemfiles/7.0.gemfile +6 -0
  102. data/lib/bootstrap_form/components/hints.rb +13 -4
  103. data/lib/bootstrap_form/components/labels.rb +1 -1
  104. data/lib/bootstrap_form/form_builder.rb +6 -6
  105. data/lib/bootstrap_form/form_group.rb +6 -2
  106. data/lib/bootstrap_form/helpers/bootstrap.rb +7 -3
  107. data/lib/bootstrap_form/inputs/check_box.rb +5 -3
  108. data/lib/bootstrap_form/inputs/collection_check_boxes.rb +5 -1
  109. data/lib/bootstrap_form/inputs/collection_select.rb +1 -1
  110. data/lib/bootstrap_form/inputs/grouped_collection_select.rb +1 -1
  111. data/lib/bootstrap_form/inputs/radio_button.rb +13 -8
  112. data/lib/bootstrap_form/version.rb +1 -1
  113. metadata +82 -21
  114. data/demo/config/initializers/assets.rb +0 -14
data/docker-compose.yml CHANGED
@@ -1,70 +1,49 @@
1
- version: '2.4'
1
+ version: '3.3'
2
2
 
3
3
  services:
4
4
  app: &app
5
5
  build:
6
6
  context: .
7
7
  args:
8
- RUBY_VERSION: '2.7.1'
9
8
  NODE_MAJOR: '12'
10
9
  YARN_VERSION: '1.22.4'
11
- BUNDLER_VERSION: '2.1.4'
12
10
  image: bootstrap-form:0.0.1
13
11
  tmpfs:
14
12
  - /tmp
15
13
 
16
- backend: &backend
14
+ shell: &shell
17
15
  <<: *app
18
16
  stdin_open: true
19
17
  tty: true
20
18
  volumes:
21
19
  - .:/app:cached
22
- - rails_cache:/app/tmp/cache
23
- - bundle:/usr/local/bundle
24
- - node_modules:/app/node_modules
25
- - packs:/app/public/packs
20
+ # - rails_cache:/app/tmp/cache
21
+ # - bundle:/app/vendor/bundle
22
+ # - node_modules:/app/node_modules
23
+ # - packs:/app/public/packs
24
+ - /etc/passwd:/etc/passwd:ro
25
+ # One or the other of the following lines might be redundant, or one might be
26
+ # better than the other.
27
+ - ~/.ssh:${HOME}/.ssh
28
+ - ${SSH_AUTH_SOCK}:/ssh-agent
26
29
  environment:
30
+ - SSH_AUTH_SOCK=/ssh-agent
27
31
  - NODE_ENV=development
28
32
  - RAILS_ENV=${RAILS_ENV:-development}
29
33
  - BOOTSNAP_CACHE_DIR=/usr/local/bundle/_bootsnap
30
34
  - WEBPACKER_DEV_SERVER_HOST=webpacker
31
35
  - WEB_CONCURRENCY=1
32
36
  - HISTFILE=/app/.bash_history
33
- - EDITOR=vi
34
-
35
- shell:
36
- <<: *backend
37
37
  command: /bin/bash
38
- ports:
39
- - '3000:3000'
40
-
41
- server:
42
- <<: *backend
43
- command: sh -c "cd demo/app && bundle exec rails server -b 0.0.0.0"
44
- ports:
45
- - '3000:3000'
46
38
 
47
- test:
48
- <<: *backend
49
- command: rake test
50
-
51
- webpacker:
52
- <<: *app
53
- command: ./bin/webpack-dev-server
54
- ports:
55
- - '3035:3035'
56
- volumes:
57
- - .:/app:cached
58
- - bundle:/usr/local/bundle
59
- - node_modules:/app/node_modules
60
- - packs:/app/public/packs
61
- environment:
62
- - NODE_ENV=${NODE_ENV:-development}
63
- - RAILS_ENV=${RAILS_ENV:-development}
64
- - WEBPACKER_DEV_SERVER_HOST=0.0.0.0
39
+ # server:
40
+ # <<: *shell
41
+ # command: sh -c "cd demo/app && bundle exec rails server -b 0.0.0.0"
42
+ # ports:
43
+ # - '3000:3000'
65
44
 
66
- volumes:
67
- bundle:
68
- node_modules:
69
- rails_cache:
70
- packs:
45
+ # volumes:
46
+ # bundle:
47
+ # node_modules:
48
+ # rails_cache:
49
+ # packs:
@@ -0,0 +1,6 @@
1
+ gems = "#{File.dirname __dir__}/Gemfile"
2
+ eval File.read(gems), binding, gems # rubocop: disable Security/Eval
3
+
4
+ # 7.0.0 has an issue with Ruby 3.1.
5
+ # And a test case has an issue with 7.0.1
6
+ gem "rails", "~> 7.0.2"
@@ -8,7 +8,7 @@ module BootstrapForm
8
8
  private
9
9
 
10
10
  def generate_help(name, help_text)
11
- return if help_text == false || inline_error?(name)
11
+ return if help_text == false
12
12
 
13
13
  help_klass ||= "form-text text-muted"
14
14
  help_text ||= get_help_text_by_i18n_key(name)
@@ -20,10 +20,10 @@ module BootstrapForm
20
20
  def get_help_text_by_i18n_key(name)
21
21
  return unless object
22
22
 
23
- partial_scope = if object.class.respond_to?(:model_name)
24
- object.class.model_name.name
23
+ partial_scope = if object_class.respond_to?(:model_name)
24
+ object_class.model_name.name
25
25
  else
26
- object.class.name
26
+ object_class.name
27
27
  end
28
28
 
29
29
  # First check for a subkey :html, as it is also accepted by i18n, and the
@@ -38,6 +38,15 @@ module BootstrapForm
38
38
  help_text
39
39
  end
40
40
 
41
+ def object_class
42
+ if !object.class.is_a?(ActiveModel::Naming) &&
43
+ object.respond_to?(:klass) && object.klass.is_a?(ActiveModel::Naming)
44
+ object.klass
45
+ else
46
+ object.class
47
+ end
48
+ end
49
+
41
50
  def scoped_help_text(name, partial_scope)
42
51
  underscored_scope = "activerecord.help.#{partial_scope.underscore}"
43
52
  downcased_scope = "activerecord.help.#{partial_scope.downcase}"
@@ -48,7 +48,7 @@ module BootstrapForm
48
48
  if label_errors && error?(name)
49
49
  (options[:text] || object.class.human_attribute_name(name)).to_s.concat(" #{get_error_messages(name)}")
50
50
  else
51
- options[:text]
51
+ options[:text] || object&.class.try(:human_attribute_name, name)
52
52
  end
53
53
  end
54
54
  end
@@ -67,13 +67,14 @@ module BootstrapForm
67
67
 
68
68
  return unless options[:layout] == :inline
69
69
 
70
- options[:html][:class] = [options[:html][:class], "col-auto", "g-3"].compact.join(" ")
70
+ options[:html][:class] =
71
+ ([*options[:html][:class]&.split(/\s+/)] + %w[row row-cols-auto g-3 align-items-center])
72
+ .compact.uniq.join(" ")
71
73
  end
72
74
 
73
75
  def fields_for_with_bootstrap(record_name, record_object=nil, fields_options={}, &block)
74
76
  fields_options = fields_for_options(record_object, fields_options)
75
- record_object.is_a?(Hash) && record_object.extractable_options? &&
76
- record_object = nil
77
+ record_object = nil if record_object.is_a?(Hash) && record_object.extractable_options?
77
78
  fields_for_without_bootstrap(record_name, record_object, fields_options, &block)
78
79
  end
79
80
 
@@ -87,8 +88,7 @@ module BootstrapForm
87
88
 
88
89
  def fields_for_options(record_object, fields_options)
89
90
  field_options = fields_options
90
- record_object.is_a?(Hash) && record_object.extractable_options? &&
91
- field_options = record_object
91
+ field_options = record_object if record_object.is_a?(Hash) && record_object.extractable_options?
92
92
  %i[layout control_col inline_errors label_errors].each do |option|
93
93
  field_options[option] ||= options[option]
94
94
  end
@@ -114,7 +114,7 @@ module BootstrapForm
114
114
  end
115
115
 
116
116
  def hide_class
117
- "sr-only" # still accessible for screen readers
117
+ "visually-hidden" # still accessible for screen readers
118
118
  end
119
119
 
120
120
  def control_class
@@ -52,12 +52,16 @@ module BootstrapForm
52
52
  end
53
53
 
54
54
  def form_group_classes(options)
55
- classes = ["mb-3", options[:class].try(:split)].flatten.compact
55
+ classes = options[:class] == false ? [] : (options[:class] || form_group_default_class).split
56
56
  classes << "row" if horizontal_group_with_gutters?(options[:layout], classes)
57
57
  classes << "col-auto g-3" if field_inline_override?(options[:layout])
58
58
  classes << feedback_class if options[:icon]
59
59
  classes << "form-floating" if options[:floating]
60
- classes
60
+ classes.presence
61
+ end
62
+
63
+ def form_group_default_class
64
+ (layout == :inline ? "col" : "mb-3")
61
65
  end
62
66
 
63
67
  def horizontal_group_with_gutters?(layout, classes)
@@ -8,7 +8,7 @@ module BootstrapForm
8
8
 
9
9
  def submit(name=nil, options={})
10
10
  setup_css_class "btn btn-secondary", options
11
- super
11
+ layout == :inline ? form_group { super } : super
12
12
  end
13
13
 
14
14
  def primary(name=nil, options={}, &block)
@@ -27,8 +27,12 @@ module BootstrapForm
27
27
  return unless object.respond_to?(:errors) && object.errors.full_messages.any?
28
28
 
29
29
  tag.div class: css do
30
- concat tag.p title
31
- concat error_summary unless options[:error_summary] == false
30
+ if options[:error_summary] == false
31
+ title
32
+ else
33
+ concat tag.p title
34
+ concat error_summary
35
+ end
32
36
  end
33
37
  end
34
38
 
@@ -10,10 +10,10 @@ module BootstrapForm
10
10
  def check_box_with_bootstrap(name, options={}, checked_value="1", unchecked_value="0", &block)
11
11
  options = options.symbolize_keys!
12
12
  check_box_options = options.except(:class, :label, :label_class, :error_message, :help,
13
- :inline, :hide_label, :skip_label, :wrapper_class, :switch)
13
+ :inline, :hide_label, :skip_label, :wrapper, :wrapper_class, :switch)
14
14
  check_box_options[:class] = check_box_classes(name, options)
15
15
 
16
- tag.div(class: check_box_wrapper_class(options)) do
16
+ tag.div(class: check_box_wrapper_class(options), **options[:wrapper].to_h.except(:class)) do
17
17
  html = check_box_without_bootstrap(name, check_box_options, checked_value, unchecked_value)
18
18
  html.concat(check_box_label(name, options, checked_value, &block)) unless options[:skip_label]
19
19
  html.concat(generate_error(name)) if options[:error_message]
@@ -66,8 +66,10 @@ module BootstrapForm
66
66
  def check_box_wrapper_class(options)
67
67
  classes = ["form-check"]
68
68
  classes << "form-check-inline" if layout_inline?(options[:inline])
69
+ classes << "mb-3" unless options[:multiple] || layout == :horizontal
69
70
  classes << "form-switch" if options[:switch]
70
- classes << options[:wrapper_class] if options[:wrapper_class].present?
71
+ classes << options.dig(:wrapper, :class).presence
72
+ classes << options[:wrapper_class].presence
71
73
  classes.flatten.compact
72
74
  end
73
75
  end
@@ -13,7 +13,11 @@ module BootstrapForm
13
13
  options[:multiple] = true
14
14
  check_box(name, options, value, nil)
15
15
  end
16
- hidden_field(args.first, value: "", multiple: true).concat(html)
16
+
17
+ if args.extract_options!.symbolize_keys!.delete(:include_hidden) { true }
18
+ html.prepend hidden_field(args.first, value: "", multiple: true)
19
+ end
20
+ html
17
21
  end
18
22
 
19
23
  bootstrap_alias :collection_check_boxes
@@ -12,7 +12,7 @@ module BootstrapForm
12
12
  def collection_select_with_bootstrap(method, collection, value_method, text_method, options={}, html_options={})
13
13
  html_options = html_options.reverse_merge(control_class: "form-select")
14
14
  form_group_builder(method, options, html_options) do
15
- input_with_error(method) do
15
+ prepend_and_append_input(method, options) do
16
16
  collection_select_without_bootstrap(method, collection, value_method, text_method, options, html_options)
17
17
  end
18
18
  end
@@ -14,7 +14,7 @@ module BootstrapForm
14
14
  option_value_method, options={}, html_options={})
15
15
  html_options = html_options.reverse_merge(control_class: "form-select")
16
16
  form_group_builder(method, options, html_options) do
17
- input_with_error(method) do
17
+ prepend_and_append_input(method, options) do
18
18
  grouped_collection_select_without_bootstrap(method, collection, group_method,
19
19
  group_label_method, option_key_method,
20
20
  option_value_method, options, html_options)
@@ -9,13 +9,10 @@ module BootstrapForm
9
9
  included do
10
10
  def radio_button_with_bootstrap(name, value, *args)
11
11
  options = args.extract_options!.symbolize_keys!
12
- radio_button_options = options.except(:class, :label, :label_class, :error_message, :help,
13
- :inline, :hide_label, :skip_label, :wrapper_class)
14
-
15
- radio_button_options[:class] = radio_button_classes(name, options)
16
-
17
- tag.div(class: radio_button_wrapper_class(options)) do
18
- html = radio_button_without_bootstrap(name, value, radio_button_options)
12
+ wrapper_attributes = options[:wrapper] || {}
13
+ wrapper_attributes[:class] = radio_button_wrapper_class(options)
14
+ tag.div(**wrapper_attributes) do
15
+ html = radio_button_without_bootstrap(name, value, radio_button_options(name, options))
19
16
  html.concat(radio_button_label(name, value, options)) unless options[:skip_label]
20
17
  html.concat(generate_error(name)) if options[:error_message]
21
18
  html
@@ -27,6 +24,13 @@ module BootstrapForm
27
24
 
28
25
  private
29
26
 
27
+ def radio_button_options(name, options)
28
+ radio_button_options = options.except(:class, :label, :label_class, :error_message, :help,
29
+ :inline, :hide_label, :skip_label, :wrapper, :wrapper_class)
30
+ radio_button_options[:class] = radio_button_classes(name, options)
31
+ radio_button_options
32
+ end
33
+
30
34
  def radio_button_label(name, value, options)
31
35
  label_options = { value: value, class: radio_button_label_class(options) }
32
36
  label_options[:for] = options[:id] if options[:id].present?
@@ -51,7 +55,8 @@ module BootstrapForm
51
55
  classes = ["form-check"]
52
56
  classes << "form-check-inline" if layout_inline?(options[:inline])
53
57
  classes << "disabled" if options[:disabled]
54
- classes << options[:wrapper_class] if options[:wrapper_class].present?
58
+ classes << options.dig(:wrapper, :class).presence
59
+ classes << options[:wrapper_class].presence
55
60
  classes.flatten.compact
56
61
  end
57
62
  end
@@ -1,3 +1,3 @@
1
1
  module BootstrapForm
2
- VERSION = "5.0.0".freeze
2
+ VERSION = "5.1.0".freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bootstrap_form
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.0
4
+ version: 5.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen Potenza
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2021-11-12 00:00:00.000000000 Z
12
+ date: 2022-06-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
@@ -39,20 +39,6 @@ dependencies:
39
39
  - - ">="
40
40
  - !ruby/object:Gem::Version
41
41
  version: '5.2'
42
- - !ruby/object:Gem::Dependency
43
- name: rails
44
- requirement: !ruby/object:Gem::Requirement
45
- requirements:
46
- - - ">="
47
- - !ruby/object:Gem::Version
48
- version: '5.2'
49
- type: :development
50
- prerelease: false
51
- version_requirements: !ruby/object:Gem::Requirement
52
- requirements:
53
- - - ">="
54
- - !ruby/object:Gem::Version
55
- version: '5.2'
56
42
  description: bootstrap_form is a rails form builder that makes it super easy to create
57
43
  beautiful-looking forms using Bootstrap 5
58
44
  email:
@@ -82,26 +68,38 @@ files:
82
68
  - app/assets/stylesheets/rails_bootstrap_forms.css
83
69
  - bootstrap_form.gemspec
84
70
  - demo/.postcssrc.yml
71
+ - demo/.ruby-version
72
+ - demo/Gemfile
73
+ - demo/Gemfile.lock
74
+ - demo/Procfile.dev
85
75
  - demo/README.md
86
76
  - demo/Rakefile
77
+ - demo/app/assets/builds/.keep
78
+ - demo/app/assets/builds/application.js.LICENSE.txt
87
79
  - demo/app/assets/config/manifest.js
80
+ - demo/app/assets/stylesheets/actiontext.css
88
81
  - demo/app/assets/stylesheets/actiontext.scss
89
82
  - demo/app/assets/stylesheets/application.scss
90
83
  - demo/app/controllers/application_controller.rb
91
84
  - demo/app/controllers/bootstrap_controller.rb
85
+ - demo/app/controllers/users_controller.rb
92
86
  - demo/app/helpers/bootstrap_helper.rb
87
+ - demo/app/javascript/application.js
93
88
  - demo/app/javascript/channels/consumer.js
94
89
  - demo/app/javascript/channels/index.js
95
90
  - demo/app/javascript/packs/application.js
96
91
  - demo/app/models/address.rb
97
92
  - demo/app/models/application_record.rb
98
93
  - demo/app/models/faux_user.rb
94
+ - demo/app/models/skill.rb
99
95
  - demo/app/models/super_user.rb
100
96
  - demo/app/models/user.rb
101
97
  - demo/app/views/active_storage/blobs/_blob.html.erb
102
98
  - demo/app/views/bootstrap/form.html.erb
99
+ - demo/app/views/layouts/action_text/contents/_content.html.erb
103
100
  - demo/app/views/layouts/application.html.erb
104
101
  - demo/bin/bundle
102
+ - demo/bin/dev
105
103
  - demo/bin/rails
106
104
  - demo/bin/rake
107
105
  - demo/bin/setup
@@ -118,7 +116,6 @@ files:
118
116
  - demo/config/environments/production.rb
119
117
  - demo/config/environments/test.rb
120
118
  - demo/config/initializers/application_controller_renderer.rb
121
- - demo/config/initializers/assets.rb
122
119
  - demo/config/initializers/backtrace_silencers.rb
123
120
  - demo/config/initializers/cookies_serializer.rb
124
121
  - demo/config/initializers/filter_parameter_logging.rb
@@ -136,15 +133,79 @@ files:
136
133
  - demo/config/webpack/test.js
137
134
  - demo/config/webpacker.yml
138
135
  - demo/db/schema.rb
136
+ - demo/doc/screenshots/bootstrap/index/00_horizontal_form.png
137
+ - demo/doc/screenshots/bootstrap/index/01_with_validation_error.png
138
+ - demo/doc/screenshots/bootstrap/index/02_inline_form.png
139
+ - demo/doc/screenshots/bootstrap/index/03_simple_action_text_example.png
140
+ - demo/doc/screenshots/bootstrap/index/04_floating_labels.png
141
+ - demo/doc/screenshots/bootstrap/readme/00_example.png
142
+ - demo/doc/screenshots/bootstrap/readme/01_example.png
143
+ - demo/doc/screenshots/bootstrap/readme/02_example.png
144
+ - demo/doc/screenshots/bootstrap/readme/03_example.png
145
+ - demo/doc/screenshots/bootstrap/readme/04_example.png
146
+ - demo/doc/screenshots/bootstrap/readme/05_example.png
147
+ - demo/doc/screenshots/bootstrap/readme/06_example.png
148
+ - demo/doc/screenshots/bootstrap/readme/07_example.png
149
+ - demo/doc/screenshots/bootstrap/readme/08_example.png
150
+ - demo/doc/screenshots/bootstrap/readme/09_example.png
151
+ - demo/doc/screenshots/bootstrap/readme/10_example.png
152
+ - demo/doc/screenshots/bootstrap/readme/11_example.png
153
+ - demo/doc/screenshots/bootstrap/readme/12_example.png
154
+ - demo/doc/screenshots/bootstrap/readme/13_example.png
155
+ - demo/doc/screenshots/bootstrap/readme/14_example.png
156
+ - demo/doc/screenshots/bootstrap/readme/15_example.png
157
+ - demo/doc/screenshots/bootstrap/readme/16_example.png
158
+ - demo/doc/screenshots/bootstrap/readme/17_example.png
159
+ - demo/doc/screenshots/bootstrap/readme/18_example.png
160
+ - demo/doc/screenshots/bootstrap/readme/19_example.png
161
+ - demo/doc/screenshots/bootstrap/readme/20_example.png
162
+ - demo/doc/screenshots/bootstrap/readme/21_example.png
163
+ - demo/doc/screenshots/bootstrap/readme/22_example.png
164
+ - demo/doc/screenshots/bootstrap/readme/23_example.png
165
+ - demo/doc/screenshots/bootstrap/readme/24_example.png
166
+ - demo/doc/screenshots/bootstrap/readme/25_example.png
167
+ - demo/doc/screenshots/bootstrap/readme/26_example.png
168
+ - demo/doc/screenshots/bootstrap/readme/27_example.png
169
+ - demo/doc/screenshots/bootstrap/readme/28_example.png
170
+ - demo/doc/screenshots/bootstrap/readme/29_example.png
171
+ - demo/doc/screenshots/bootstrap/readme/30_example.png
172
+ - demo/doc/screenshots/bootstrap/readme/31_example.png
173
+ - demo/doc/screenshots/bootstrap/readme/32_example.png
174
+ - demo/doc/screenshots/bootstrap/readme/33_example.png
175
+ - demo/doc/screenshots/bootstrap/readme/34_example.png
176
+ - demo/doc/screenshots/bootstrap/readme/35_example.png
177
+ - demo/doc/screenshots/bootstrap/readme/36_example.png
178
+ - demo/doc/screenshots/bootstrap/readme/37_example.png
179
+ - demo/doc/screenshots/bootstrap/readme/38_example.png
180
+ - demo/doc/screenshots/bootstrap/readme/39_example.png
181
+ - demo/doc/screenshots/bootstrap/readme/40_example.png
182
+ - demo/doc/screenshots/bootstrap/readme/41_example.png
183
+ - demo/doc/screenshots/bootstrap/readme/42_example.png
184
+ - demo/doc/screenshots/bootstrap/readme/43_example.png
185
+ - demo/doc/screenshots/bootstrap/readme/44_example.png
186
+ - demo/doc/screenshots/bootstrap/readme/45_example.png
187
+ - demo/doc/screenshots/bootstrap/readme/46_example.png
188
+ - demo/doc/screenshots/bootstrap/readme/47_example.png
189
+ - demo/doc/screenshots/bootstrap/readme/48_example.png
190
+ - demo/doc/screenshots/bootstrap/readme/49_example.png
191
+ - demo/doc/screenshots/bootstrap/readme/50_example.png
139
192
  - demo/log/.keep
140
193
  - demo/package.json
141
194
  - demo/public/favicon.ico
195
+ - demo/test/application_system_test_case.rb
196
+ - demo/test/controllers/bootstrap_controller_test.rb
197
+ - demo/test/controllers/users_controller_test.rb
142
198
  - demo/test/fixtures/action_text/rich_texts.yml
199
+ - demo/test/fixtures/users.yml
200
+ - demo/test/system/bootstrap_test.rb
201
+ - demo/test/test_helper.rb
202
+ - demo/webpack.config.js
143
203
  - demo/yarn.lock
144
204
  - docker-compose.yml
145
205
  - gemfiles/5.2.gemfile
146
206
  - gemfiles/6.0.gemfile
147
207
  - gemfiles/6.1.gemfile
208
+ - gemfiles/7.0.gemfile
148
209
  - gemfiles/edge.gemfile
149
210
  - lib/bootstrap_form.rb
150
211
  - lib/bootstrap_form/action_view_extensions/form_helper.rb
@@ -197,7 +258,8 @@ files:
197
258
  homepage: https://github.com/bootstrap-ruby/bootstrap_form
198
259
  licenses:
199
260
  - MIT
200
- metadata: {}
261
+ metadata:
262
+ rubygems_mfa_required: 'true'
201
263
  post_install_message:
202
264
  rdoc_options: []
203
265
  require_paths:
@@ -206,15 +268,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
206
268
  requirements:
207
269
  - - ">="
208
270
  - !ruby/object:Gem::Version
209
- version: '2.5'
271
+ version: '2.7'
210
272
  required_rubygems_version: !ruby/object:Gem::Requirement
211
273
  requirements:
212
274
  - - ">="
213
275
  - !ruby/object:Gem::Version
214
276
  version: '0'
215
277
  requirements: []
216
- rubyforge_project:
217
- rubygems_version: 2.7.6
278
+ rubygems_version: 3.1.2
218
279
  signing_key:
219
280
  specification_version: 4
220
281
  summary: Rails form builder that makes it easy to style forms using Bootstrap 5
@@ -1,14 +0,0 @@
1
- # Be sure to restart your server when you modify this file.
2
-
3
- # Version of your assets, change this if you want to expire all your assets.
4
- Rails.application.config.assets.version = "1.0"
5
-
6
- # Add additional assets to the asset load path.
7
- # Rails.application.config.assets.paths << Emoji.images_path
8
- # Add Yarn node_modules folder to the asset load path.
9
- Rails.application.config.assets.paths << Rails.root.join("node_modules")
10
-
11
- # Precompile additional assets.
12
- # application.js, application.css, and all non-JS/CSS in the app/assets
13
- # folder are already added.
14
- # Rails.application.config.assets.precompile += %w( admin.js admin.css )