bootstrap_form 5.0.0 → 5.1.0

Sign up to get free protection for your applications and to get access to all the features.
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 )