bs5 0.0.10 → 0.0.11

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 (32) hide show
  1. checksums.yaml +4 -4
  2. data/app/components/bs5/button_tag_component.rb +1 -5
  3. data/app/components/bs5/button_to_component.rb +106 -0
  4. data/app/helpers/bs5/components_helper.rb +1 -1
  5. data/app/views/bs5/examples/_buttons.html.erb +10 -6
  6. data/app/views/bs5/examples/buttons/button_tag/block_buttons/_example.html.erb +5 -0
  7. data/app/views/bs5/examples/buttons/{block_buttons → button_tag/block_buttons}/block_buttons.html.erb +0 -0
  8. data/app/views/bs5/examples/buttons/{block_buttons → button_tag/block_buttons}/responsive_block_buttons_1.html.erb +0 -0
  9. data/app/views/bs5/examples/buttons/{block_buttons → button_tag/block_buttons}/responsive_block_buttons_2.html.erb +0 -0
  10. data/app/views/bs5/examples/buttons/{block_buttons → button_tag/block_buttons}/responsive_block_buttons_3.html.erb +0 -0
  11. data/app/views/bs5/examples/buttons/button_tag/default/_example.html.erb +2 -0
  12. data/app/views/bs5/examples/buttons/{default → button_tag/default}/snippet.html.erb +0 -0
  13. data/app/views/bs5/examples/buttons/button_tag/outline/_example.html.erb +2 -0
  14. data/app/views/bs5/examples/buttons/{outline → button_tag/outline}/snippet.html.erb +0 -0
  15. data/app/views/bs5/examples/buttons/button_tag/size/_example.html.erb +3 -0
  16. data/app/views/bs5/examples/buttons/{size → button_tag/size}/large.html.erb +0 -0
  17. data/app/views/bs5/examples/buttons/{size → button_tag/size}/small.html.erb +0 -0
  18. data/app/views/bs5/examples/buttons/button_tag/style/_example.html.erb +2 -0
  19. data/app/views/bs5/examples/buttons/{style → button_tag/style}/snippet.html.erb +0 -0
  20. data/app/views/bs5/examples/buttons/button_tag/toggle_states/_example.html.erb +2 -0
  21. data/app/views/bs5/examples/buttons/{toggle_states → button_tag/toggle_states}/snippet.html.erb +0 -0
  22. data/app/views/bs5/examples/buttons/button_to/default/_example.html.erb +2 -0
  23. data/app/views/bs5/examples/buttons/button_to/default/snippet.html.erb +11 -0
  24. data/config/locales/en.yml +6 -0
  25. data/lib/bs5/version.rb +1 -1
  26. metadata +20 -17
  27. data/app/views/bs5/examples/buttons/block_buttons/_example.html.erb +0 -5
  28. data/app/views/bs5/examples/buttons/default/_example.html.erb +0 -2
  29. data/app/views/bs5/examples/buttons/outline/_example.html.erb +0 -2
  30. data/app/views/bs5/examples/buttons/size/_example.html.erb +0 -3
  31. data/app/views/bs5/examples/buttons/style/_example.html.erb +0 -2
  32. data/app/views/bs5/examples/buttons/toggle_states/_example.html.erb +0 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ecb9af880ad8e465272d743689c0c470af8c322affb3e77be49bdb360f8b0022
4
- data.tar.gz: 3b1517ef64015fa58510b9123cd625735d79e2e7fbbccda4eb161f1f4671e038
3
+ metadata.gz: 5d45e3e9d6c5303c22f72e3637abc45b8302a2834956d9213a3cbe3300320658
4
+ data.tar.gz: 0c9d8ed8656a427932ba2fae5a49bb6f8110bd0a86d7af8a0f95020ae0cafd6f
5
5
  SHA512:
6
- metadata.gz: b638dd6760619921caaa399a585a53040501cdb796712c5bf118cc281f5ba65f16637dde70df784adff66839c2b71b91488c64bcd46a0045cc949e82cf8ba995
7
- data.tar.gz: f5b36b7a285aad9a6eb2e803d182d5e4126398ae410c9cb2a6dd66674de9474da84ba1db4f6c2202730a6f0b255a3df71762074fb8315c74711f457d3a9331a2
6
+ metadata.gz: 149b6ad2c77ad23fcef6c02d0a6e6b147dd32e0d1299807484233b207dc7280c90d3bf2fce397c02b64376478ace48bcc30aea57de654fa9ce0a6c4a715ccc7d
7
+ data.tar.gz: 59471a7a2b75588e27d203e982ae52f1b1e54498ca0e26c6776bf7b5ef34166cbd7f644a80302f6ec1034b747b34f5b144d03bca836c07f84ba5808f3dbfa999
@@ -30,11 +30,7 @@ module Bs5
30
30
  end
31
31
 
32
32
  def call
33
- if content
34
- button_tag(content_or_options, options) { content }
35
- else
36
- button_tag(content_or_options, options)
37
- end
33
+ button_tag(content || content_or_options, options)
38
34
  end
39
35
 
40
36
  private
@@ -0,0 +1,106 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bs5
4
+ class ButtonToComponent < ViewComponent::Base
5
+ STYLES = %i[primary secondary success danger warning info light dark link].freeze
6
+ DEFAULT_STYLE = :primary
7
+ SIZES = { small: :sm, large: :lg }.freeze
8
+ CLASS_PREFIX = 'btn'
9
+
10
+ attr_reader :size
11
+
12
+ include ActiveModel::Validations
13
+ validates :style, style: true
14
+ validates :size, inclusion: { in: SIZES.keys, valid_sizes: SIZES.keys.to_sentence, allow_nil: true }
15
+
16
+ def initialize(name = nil, options = nil, html_options = nil)
17
+ @name = name
18
+ @options = options
19
+ @html_options = html_options
20
+
21
+ if @name.is_a? Hash
22
+ self.button_to_options = @name
23
+ elsif @options.is_a? Hash
24
+ self.button_to_options = @options
25
+ else
26
+ @html_options ||= {}
27
+ self.button_to_options = @html_options
28
+ end
29
+
30
+ extract_custom_options
31
+ merge_default_options
32
+ end
33
+
34
+ def before_render
35
+ raise errors.full_messages.to_sentence if invalid?
36
+ end
37
+
38
+ def call
39
+ if content
40
+ button_to(@name, @options, @html_options) { content }
41
+ else
42
+ button_to(@name, @options, @html_options)
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ def button_to_options=(hash)
49
+ @button_to_options = hash.symbolize_keys!
50
+ end
51
+
52
+ def extract_custom_options
53
+ extract_style
54
+ extract_outline
55
+ extract_size
56
+ end
57
+
58
+ def extract_style
59
+ @style = @button_to_options.delete(:style)
60
+ end
61
+
62
+ def extract_outline
63
+ @outline = @button_to_options.delete(:outline)
64
+ end
65
+
66
+ def extract_size
67
+ @size = @button_to_options.delete(:size)
68
+ end
69
+
70
+ def merge_default_options
71
+ @button_to_options.deep_merge!(default_options) do |_key, this_val, other_val|
72
+ [this_val, other_val].join(' ').strip
73
+ end
74
+ end
75
+
76
+ def default_options
77
+ { class: button_class }
78
+ end
79
+
80
+ def button_class
81
+ [CLASS_PREFIX, contextual_class, size_class].compact.join(' ')
82
+ end
83
+
84
+ def contextual_class
85
+ [CLASS_PREFIX, outline? ? 'outline' : nil, style].compact.join('-')
86
+ end
87
+
88
+ def size_class
89
+ return unless size?
90
+
91
+ [CLASS_PREFIX, SIZES[size]].join('-')
92
+ end
93
+
94
+ def style
95
+ (@style || DEFAULT_STYLE).to_sym
96
+ end
97
+
98
+ def outline?
99
+ !!@outline
100
+ end
101
+
102
+ def size?
103
+ !!size
104
+ end
105
+ end
106
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Bs5
4
4
  module ComponentsHelper
5
- COMPONENTS = %w[accordion alert badge close_button breadcrumb button_tag].freeze
5
+ COMPONENTS = %w[accordion alert badge close_button breadcrumb button_tag button_to].freeze
6
6
 
7
7
  COMPONENTS.each do |name|
8
8
  define_method("bs5_#{name}") do |*args, &block|
@@ -1,7 +1,11 @@
1
1
  <h2>Buttons</h2>
2
- <%= render 'bs5/examples/buttons/default/example' %>
3
- <%= render 'bs5/examples/buttons/style/example' %>
4
- <%= render 'bs5/examples/buttons/outline/example' %>
5
- <%= render 'bs5/examples/buttons/size/example' %>
6
- <%= render 'bs5/examples/buttons/block_buttons/example' %>
7
- <%= render 'bs5/examples/buttons/toggle_states/example' %>
2
+ <h3>Decorating Rails' <code>button_tag</code></h3>
3
+ <%= render 'bs5/examples/buttons/button_tag/default/example' %>
4
+ <%= render 'bs5/examples/buttons/button_tag/style/example' %>
5
+ <%= render 'bs5/examples/buttons/button_tag/outline/example' %>
6
+ <%= render 'bs5/examples/buttons/button_tag/size/example' %>
7
+ <%= render 'bs5/examples/buttons/button_tag/block_buttons/example' %>
8
+ <%= render 'bs5/examples/buttons/button_tag/toggle_states/example' %>
9
+
10
+ <h3>Decorating Rails' <code>button_to</code></h3>
11
+ <%= render 'bs5/examples/buttons/button_to/default/example' %>
@@ -0,0 +1,5 @@
1
+ <h3>Block buttons</h3>
2
+ <%= bs5_example(snippet: 'buttons/button_tag/block_buttons/block_buttons') %>
3
+ <%= bs5_example(snippet: 'buttons/button_tag/block_buttons/responsive_block_buttons_1') %>
4
+ <%= bs5_example(snippet: 'buttons/button_tag/block_buttons/responsive_block_buttons_2') %>
5
+ <%= bs5_example(snippet: 'buttons/button_tag/block_buttons/responsive_block_buttons_3') %>
@@ -0,0 +1,2 @@
1
+ <h3>Example</h3>
2
+ <%= bs5_example(snippet: 'buttons/button_tag/default/snippet') %>
@@ -0,0 +1,2 @@
1
+ <h3>Outline</h3>
2
+ <%= bs5_example(snippet: 'buttons/button_tag/outline/snippet') %>
@@ -0,0 +1,3 @@
1
+ <h3>Sizes</h3>
2
+ <%= bs5_example(snippet: 'buttons/button_tag/size/large') %>
3
+ <%= bs5_example(snippet: 'buttons/button_tag/size/small') %>
@@ -0,0 +1,2 @@
1
+ <h3>Style</h3>
2
+ <%= bs5_example(snippet: 'buttons/button_tag/style/snippet') %>
@@ -0,0 +1,2 @@
1
+ <h3>Toggle states</h3>
2
+ <%= bs5_example(snippet: 'buttons/button_tag/toggle_states/snippet') %>
@@ -0,0 +1,2 @@
1
+ <h3>Example</h3>
2
+ <%= bs5_example(snippet: 'buttons/button_to/default/snippet') %>
@@ -0,0 +1,11 @@
1
+ <div class="d-grid gap-2 d-md-flex">
2
+ <%= bs5_button_to('New', 'http://www.example.com') %>
3
+
4
+ <%= bs5_button_to('http://www.example.com', style: :success) do %>
5
+ Make happy <strong>John Doe</strong>
6
+ <%- end %>
7
+
8
+ <%= bs5_button_to('New', 'http://www.example.com', style: :dark, outline: true, size: :large, form_class: 'new-thing') %>
9
+
10
+ <%= bs5_button_to('Destroy', 'http://www.example.com', style: :danger, method: "delete", remote: true, data: { confirm: 'Are you sure?', disable_with: 'loading...' }) %>
11
+ </div>
@@ -12,3 +12,9 @@ en:
12
12
  inclusion: "is not included in the list: %{valid_styles}."
13
13
  size:
14
14
  inclusion: "is not included in the list: %{valid_sizes}."
15
+ bs5/button_to_component:
16
+ attributes:
17
+ style:
18
+ inclusion: "is not included in the list: %{valid_styles}."
19
+ size:
20
+ inclusion: "is not included in the list: %{valid_sizes}."
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bs5
4
- VERSION = '0.0.10'
4
+ VERSION = '0.0.11'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bs5
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patrick Baselier
@@ -135,6 +135,7 @@ files:
135
135
  - app/components/bs5/breadcrumb_component.html.erb
136
136
  - app/components/bs5/breadcrumb_component.rb
137
137
  - app/components/bs5/button_tag_component.rb
138
+ - app/components/bs5/button_to_component.rb
138
139
  - app/components/bs5/close_button_component.html.erb
139
140
  - app/components/bs5/close_button_component.rb
140
141
  - app/components/bs5/example_component.html.erb
@@ -172,22 +173,24 @@ files:
172
173
  - app/views/bs5/examples/badge/style/snippet.html.erb
173
174
  - app/views/bs5/examples/breadcrumb/default/_example.html.erb
174
175
  - app/views/bs5/examples/breadcrumb/default/snippet.html.erb
175
- - app/views/bs5/examples/buttons/block_buttons/_example.html.erb
176
- - app/views/bs5/examples/buttons/block_buttons/block_buttons.html.erb
177
- - app/views/bs5/examples/buttons/block_buttons/responsive_block_buttons_1.html.erb
178
- - app/views/bs5/examples/buttons/block_buttons/responsive_block_buttons_2.html.erb
179
- - app/views/bs5/examples/buttons/block_buttons/responsive_block_buttons_3.html.erb
180
- - app/views/bs5/examples/buttons/default/_example.html.erb
181
- - app/views/bs5/examples/buttons/default/snippet.html.erb
182
- - app/views/bs5/examples/buttons/outline/_example.html.erb
183
- - app/views/bs5/examples/buttons/outline/snippet.html.erb
184
- - app/views/bs5/examples/buttons/size/_example.html.erb
185
- - app/views/bs5/examples/buttons/size/large.html.erb
186
- - app/views/bs5/examples/buttons/size/small.html.erb
187
- - app/views/bs5/examples/buttons/style/_example.html.erb
188
- - app/views/bs5/examples/buttons/style/snippet.html.erb
189
- - app/views/bs5/examples/buttons/toggle_states/_example.html.erb
190
- - app/views/bs5/examples/buttons/toggle_states/snippet.html.erb
176
+ - app/views/bs5/examples/buttons/button_tag/block_buttons/_example.html.erb
177
+ - app/views/bs5/examples/buttons/button_tag/block_buttons/block_buttons.html.erb
178
+ - app/views/bs5/examples/buttons/button_tag/block_buttons/responsive_block_buttons_1.html.erb
179
+ - app/views/bs5/examples/buttons/button_tag/block_buttons/responsive_block_buttons_2.html.erb
180
+ - app/views/bs5/examples/buttons/button_tag/block_buttons/responsive_block_buttons_3.html.erb
181
+ - app/views/bs5/examples/buttons/button_tag/default/_example.html.erb
182
+ - app/views/bs5/examples/buttons/button_tag/default/snippet.html.erb
183
+ - app/views/bs5/examples/buttons/button_tag/outline/_example.html.erb
184
+ - app/views/bs5/examples/buttons/button_tag/outline/snippet.html.erb
185
+ - app/views/bs5/examples/buttons/button_tag/size/_example.html.erb
186
+ - app/views/bs5/examples/buttons/button_tag/size/large.html.erb
187
+ - app/views/bs5/examples/buttons/button_tag/size/small.html.erb
188
+ - app/views/bs5/examples/buttons/button_tag/style/_example.html.erb
189
+ - app/views/bs5/examples/buttons/button_tag/style/snippet.html.erb
190
+ - app/views/bs5/examples/buttons/button_tag/toggle_states/_example.html.erb
191
+ - app/views/bs5/examples/buttons/button_tag/toggle_states/snippet.html.erb
192
+ - app/views/bs5/examples/buttons/button_to/default/_example.html.erb
193
+ - app/views/bs5/examples/buttons/button_to/default/snippet.html.erb
191
194
  - app/views/bs5/examples/close_button/default/_example.html.erb
192
195
  - app/views/bs5/examples/close_button/default/snippet.html.erb
193
196
  - app/views/bs5/examples/close_button/disabled/_example.html.erb
@@ -1,5 +0,0 @@
1
- <h3>Block buttons</h3>
2
- <%= bs5_example(snippet: 'buttons/block_buttons/block_buttons') %>
3
- <%= bs5_example(snippet: 'buttons/block_buttons/responsive_block_buttons_1') %>
4
- <%= bs5_example(snippet: 'buttons/block_buttons/responsive_block_buttons_2') %>
5
- <%= bs5_example(snippet: 'buttons/block_buttons/responsive_block_buttons_3') %>
@@ -1,2 +0,0 @@
1
- <h3>Example</h3>
2
- <%= bs5_example(snippet: 'buttons/default/snippet') %>
@@ -1,2 +0,0 @@
1
- <h3>Outline</h3>
2
- <%= bs5_example(snippet: 'buttons/outline/snippet') %>
@@ -1,3 +0,0 @@
1
- <h3>Sizes</h3>
2
- <%= bs5_example(snippet: 'buttons/size/large') %>
3
- <%= bs5_example(snippet: 'buttons/size/small') %>
@@ -1,2 +0,0 @@
1
- <h3>Style</h3>
2
- <%= bs5_example(snippet: 'buttons/style/snippet') %>
@@ -1,2 +0,0 @@
1
- <h3>Toggle states</h3>
2
- <%= bs5_example(snippet: 'buttons/toggle_states/snippet') %>