bootstrap_form 5.1.0 → 5.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.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +21 -8
- data/.gitignore +4 -2
- data/.rubocop.yml +2 -1
- data/.yarnrc +5 -0
- data/CHANGELOG.md +11 -3
- data/CONTRIBUTING.md +101 -14
- data/Dangerfile +4 -4
- data/Dockerfile +5 -5
- data/Gemfile +5 -21
- data/README.md +68 -21
- data/RELEASING.md +12 -1
- data/Rakefile +7 -6
- data/bootstrap_form.gemspec +6 -8
- data/docker-compose.yml +6 -24
- data/gemfiles/6.0.gemfile +1 -1
- data/gemfiles/6.1.gemfile +1 -1
- data/gemfiles/7.0.gemfile +2 -3
- data/gemfiles/common.gemfile +28 -0
- data/gemfiles/edge.gemfile +3 -2
- data/lib/bootstrap_form/components/labels.rb +3 -9
- data/lib/bootstrap_form/components/validation.rb +36 -19
- data/lib/bootstrap_form/form_builder.rb +3 -0
- data/lib/bootstrap_form/form_group.rb +9 -6
- data/lib/bootstrap_form/form_group_builder.rb +10 -7
- data/lib/bootstrap_form/helpers/bootstrap.rb +7 -8
- data/lib/bootstrap_form/helpers/field.rb +26 -0
- data/lib/bootstrap_form/helpers.rb +1 -0
- data/lib/bootstrap_form/inputs/check_box.rb +22 -6
- data/lib/bootstrap_form/inputs/radio_button.rb +3 -3
- data/lib/bootstrap_form/version.rb +2 -1
- data/lib/bootstrap_form.rb +1 -1
- metadata +14 -146
- data/demo/.postcssrc.yml +0 -3
- data/demo/.ruby-version +0 -1
- data/demo/Gemfile +0 -80
- data/demo/Gemfile.lock +0 -261
- data/demo/Procfile.dev +0 -2
- data/demo/README.md +0 -17
- data/demo/Rakefile +0 -6
- data/demo/app/assets/builds/.keep +0 -0
- data/demo/app/assets/builds/application.js.LICENSE.txt +0 -9
- data/demo/app/assets/config/manifest.js +0 -2
- data/demo/app/assets/stylesheets/actiontext.css +0 -31
- data/demo/app/assets/stylesheets/actiontext.scss +0 -38
- data/demo/app/assets/stylesheets/application.scss +0 -1
- data/demo/app/controllers/application_controller.rb +0 -2
- data/demo/app/controllers/bootstrap_controller.rb +0 -29
- data/demo/app/controllers/users_controller.rb +0 -9
- data/demo/app/helpers/bootstrap_helper.rb +0 -27
- data/demo/app/javascript/application.js +0 -3
- data/demo/app/javascript/channels/consumer.js +0 -6
- data/demo/app/javascript/channels/index.js +0 -5
- data/demo/app/javascript/packs/application.js +0 -11
- data/demo/app/models/address.rb +0 -3
- data/demo/app/models/application_record.rb +0 -3
- data/demo/app/models/faux_user.rb +0 -9
- data/demo/app/models/skill.rb +0 -15
- data/demo/app/models/super_user.rb +0 -2
- data/demo/app/models/user.rb +0 -25
- data/demo/app/views/active_storage/blobs/_blob.html.erb +0 -14
- data/demo/app/views/bootstrap/form.html.erb +0 -67
- data/demo/app/views/layouts/action_text/contents/_content.html.erb +0 -3
- data/demo/app/views/layouts/application.html.erb +0 -76
- data/demo/bin/bundle +0 -3
- data/demo/bin/dev +0 -9
- data/demo/bin/rails +0 -4
- data/demo/bin/rake +0 -4
- data/demo/bin/setup +0 -36
- data/demo/bin/update +0 -31
- data/demo/bin/webpack +0 -15
- data/demo/bin/webpack-dev-server +0 -15
- data/demo/bin/yarn +0 -11
- data/demo/config/application.rb +0 -21
- data/demo/config/boot.rb +0 -5
- data/demo/config/database.yml +0 -21
- data/demo/config/environment.rb +0 -5
- data/demo/config/environments/development.rb +0 -60
- data/demo/config/environments/production.rb +0 -48
- data/demo/config/environments/test.rb +0 -46
- data/demo/config/initializers/application_controller_renderer.rb +0 -8
- data/demo/config/initializers/backtrace_silencers.rb +0 -7
- data/demo/config/initializers/cookies_serializer.rb +0 -5
- data/demo/config/initializers/filter_parameter_logging.rb +0 -4
- data/demo/config/initializers/inflections.rb +0 -16
- data/demo/config/initializers/mime_types.rb +0 -4
- data/demo/config/initializers/wrap_parameters.rb +0 -14
- data/demo/config/locales/en.yml +0 -33
- data/demo/config/puma.rb +0 -56
- data/demo/config/routes.rb +0 -6
- data/demo/config/spring.rb +0 -6
- data/demo/config/storage.yml +0 -35
- data/demo/config/webpack/development.js +0 -5
- data/demo/config/webpack/environment.js +0 -3
- data/demo/config/webpack/production.js +0 -5
- data/demo/config/webpack/test.js +0 -5
- data/demo/config/webpacker.yml +0 -92
- data/demo/config.ru +0 -5
- data/demo/db/schema.rb +0 -84
- data/demo/doc/screenshots/bootstrap/index/00_horizontal_form.png +0 -0
- data/demo/doc/screenshots/bootstrap/index/01_with_validation_error.png +0 -0
- data/demo/doc/screenshots/bootstrap/index/02_inline_form.png +0 -0
- data/demo/doc/screenshots/bootstrap/index/03_simple_action_text_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/index/04_floating_labels.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/00_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/01_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/02_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/03_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/04_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/05_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/06_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/07_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/08_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/09_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/10_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/11_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/12_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/13_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/14_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/15_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/16_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/17_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/18_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/19_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/20_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/21_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/22_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/23_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/24_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/25_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/26_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/27_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/28_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/29_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/30_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/31_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/32_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/33_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/34_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/35_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/36_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/37_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/38_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/39_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/40_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/41_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/42_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/43_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/44_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/45_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/46_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/47_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/48_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/49_example.png +0 -0
- data/demo/doc/screenshots/bootstrap/readme/50_example.png +0 -0
- data/demo/log/.keep +0 -0
- data/demo/package.json +0 -21
- data/demo/public/favicon.ico +0 -0
- data/demo/test/application_system_test_case.rb +0 -8
- data/demo/test/controllers/bootstrap_controller_test.rb +0 -8
- data/demo/test/controllers/users_controller_test.rb +0 -13
- data/demo/test/fixtures/action_text/rich_texts.yml +0 -4
- data/demo/test/fixtures/users.yml +0 -2
- data/demo/test/system/bootstrap_test.rb +0 -84
- data/demo/test/test_helper.rb +0 -10
- data/demo/webpack.config.js +0 -20
- data/demo/yarn.lock +0 -7176
- data/gemfiles/5.2.gemfile +0 -4
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
data/demo/log/.keep
DELETED
|
File without changes
|
data/demo/package.json
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "dummy",
|
|
3
|
-
"private": true,
|
|
4
|
-
"dependencies": {
|
|
5
|
-
"@rails/actioncable": "^6.1.0",
|
|
6
|
-
"@rails/actiontext": "^6.1.0",
|
|
7
|
-
"@rails/activestorage": "^6.1.0",
|
|
8
|
-
"@rails/ujs": "^6.1.0",
|
|
9
|
-
"@rails/webpacker": "^5.0.0",
|
|
10
|
-
"trix": "^1.0.0",
|
|
11
|
-
"turbolinks": "^5.2.0"
|
|
12
|
-
},
|
|
13
|
-
"version": "0.1.0",
|
|
14
|
-
"devDependencies": {
|
|
15
|
-
"webpack-dev-server": "^4.0.0"
|
|
16
|
-
},
|
|
17
|
-
"scripts": {
|
|
18
|
-
"build": "webpack --config webpack.config.js",
|
|
19
|
-
"build:css": "webpack --config webpack.config.js"
|
|
20
|
-
}
|
|
21
|
-
}
|
data/demo/public/favicon.ico
DELETED
|
File without changes
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
require "test_helper"
|
|
2
|
-
|
|
3
|
-
class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
|
|
4
|
-
include Capybara::Screenshot::Diff
|
|
5
|
-
driven_by :selenium, using: :headless_chrome, screen_size: [960, 720] do |capabilities|
|
|
6
|
-
capabilities.add_argument "force-device-scale-factor=1"
|
|
7
|
-
end
|
|
8
|
-
end
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
require "test_helper"
|
|
2
|
-
|
|
3
|
-
class UsersControllerTest < ActionDispatch::IntegrationTest
|
|
4
|
-
test "should post create" do
|
|
5
|
-
post users_url
|
|
6
|
-
assert_redirected_to root_path
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
test "should patch update" do
|
|
10
|
-
patch user_url(users(:one))
|
|
11
|
-
assert_redirected_to root_path
|
|
12
|
-
end
|
|
13
|
-
end
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
require "application_system_test_case"
|
|
2
|
-
|
|
3
|
-
class BootstrapTest < ApplicationSystemTestCase
|
|
4
|
-
setup { screenshot_section :bootstrap }
|
|
5
|
-
|
|
6
|
-
test "visiting the index" do
|
|
7
|
-
screenshot_group :index
|
|
8
|
-
visit root_url
|
|
9
|
-
|
|
10
|
-
all(".toggle").each { |btn| execute_script "arguments[0].remove()", btn }
|
|
11
|
-
|
|
12
|
-
all("h3").each do |header|
|
|
13
|
-
example = header.first(:xpath, "./following-sibling::div")
|
|
14
|
-
scroll_to example
|
|
15
|
-
sleep 0.5
|
|
16
|
-
screenshot header.text.downcase.tr(" ", "_"), crop: bounds(example), color_distance_limit: 2
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
HEADERS = ["Generated HTML", "This generates", "Which outputs", "will be rendered as"].join("|").freeze
|
|
21
|
-
REGEXP =
|
|
22
|
-
/(?:!\[[^\]]*\]\([^)]+\)\s*)?```erb\n(.*?)\n```\s*((?:#{HEADERS}).*?$)?\s*(```html\n(?:.*?)\n```\s*)?/mi
|
|
23
|
-
.freeze
|
|
24
|
-
test "readme examples" do
|
|
25
|
-
screenshot_group :readme
|
|
26
|
-
|
|
27
|
-
readme = File.read(File.expand_path("../../../README.md", __dir__))
|
|
28
|
-
augmented_readme = readme.gsub(REGEXP) do |_|
|
|
29
|
-
erb = Regexp.last_match(1)
|
|
30
|
-
header = Regexp.last_match(2)
|
|
31
|
-
unless /\A<%= bootstrap[^>]*>\n\s*...\s*<% end %>\z/.match? erb
|
|
32
|
-
wrapped_erb = erb.starts_with?("<%= bootstrap") ? erb : <<~ERB
|
|
33
|
-
<%= bootstrap_form_with model: @user do |f| %>
|
|
34
|
-
#{erb}
|
|
35
|
-
<% end %>
|
|
36
|
-
ERB
|
|
37
|
-
|
|
38
|
-
visit fragment_path erb: wrapped_erb
|
|
39
|
-
wrapper = find(".p-3")
|
|
40
|
-
i = @screenshot_counter
|
|
41
|
-
screenshot :example, crop: bounds(wrapper)
|
|
42
|
-
wrapper = wrapper.find("form") if wrapped_erb != erb
|
|
43
|
-
html = wrapper["innerHTML"].strip.gsub("><", ">\n<")
|
|
44
|
-
assert html.present?, erb
|
|
45
|
-
doc = Nokogiri::HTML.fragment(html)
|
|
46
|
-
doc.traverse do |node|
|
|
47
|
-
if node.is_a?(Nokogiri::XML::Element)
|
|
48
|
-
node.attributes.sort_by(&:first).each do |name, value|
|
|
49
|
-
node.delete(name)
|
|
50
|
-
node[name] = value
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
html = doc.to_html
|
|
55
|
-
image = <<~MD
|
|
56
|
-
}_example.png "Example #{i}")
|
|
57
|
-
MD
|
|
58
|
-
html = <<~MD
|
|
59
|
-
|
|
60
|
-
#{header || 'Generated HTML:'}
|
|
61
|
-
|
|
62
|
-
```html
|
|
63
|
-
#{HtmlBeautifier.beautify(html)}
|
|
64
|
-
```
|
|
65
|
-
MD
|
|
66
|
-
end
|
|
67
|
-
<<~MD
|
|
68
|
-
#{image}```erb
|
|
69
|
-
#{erb}
|
|
70
|
-
```
|
|
71
|
-
#{html}
|
|
72
|
-
MD
|
|
73
|
-
end
|
|
74
|
-
augmented_readme.gsub!(/127.0.0.1:\d+/, "test.host")
|
|
75
|
-
File.write(File.expand_path("../../../README.md", __dir__), augmented_readme)
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
private
|
|
79
|
-
|
|
80
|
-
def bounds(node)
|
|
81
|
-
client_rect = evaluate_script("arguments[0].getBoundingClientRect()", node.native)
|
|
82
|
-
[client_rect["left"].floor, client_rect["top"].floor, client_rect["right"].ceil, client_rect["bottom"].ceil]
|
|
83
|
-
end
|
|
84
|
-
end
|
data/demo/test/test_helper.rb
DELETED
data/demo/webpack.config.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
const path = require("path")
|
|
2
|
-
const webpack = require("webpack")
|
|
3
|
-
|
|
4
|
-
module.exports = {
|
|
5
|
-
mode: "production",
|
|
6
|
-
devtool: "source-map",
|
|
7
|
-
entry: {
|
|
8
|
-
application: "./app/javascript/application.js"
|
|
9
|
-
},
|
|
10
|
-
output: {
|
|
11
|
-
filename: "[name].js",
|
|
12
|
-
sourceMapFilename: "[name].js.map",
|
|
13
|
-
path: path.resolve(__dirname, "app/assets/builds"),
|
|
14
|
-
},
|
|
15
|
-
plugins: [
|
|
16
|
-
new webpack.optimize.LimitChunkCountPlugin({
|
|
17
|
-
maxChunks: 1
|
|
18
|
-
})
|
|
19
|
-
]
|
|
20
|
-
}
|