bootstrap4_rails_components 0.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.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +362 -0
- data/Rakefile +23 -0
- data/app/assets/config/bootstrap4_rails_components_manifest.js +3 -0
- data/app/assets/javascripts/bootstrap4_rails_components/application.js +8 -0
- data/app/assets/javascripts/bootstrap4_rails_components/vendor/tooltips.js +42 -0
- data/app/assets/stylesheets/bootstrap4_rails_components/bootstrap/application.scss +2 -0
- data/app/controllers/bootstrap4_rails_components/application_controller.rb +5 -0
- data/app/helpers/bootstrap4_rails_components/application_helper.rb +38 -0
- data/app/models/bootstrap4_rails_components/application_record.rb +5 -0
- data/config/initializers/web_app_manifest.rb +3 -0
- data/config/locales/en.yml +63 -0
- data/config/routes.rb +2 -0
- data/config/spring.rb +1 -0
- data/lib/bootstrap4_rails_components.rb +75 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/alert.rb +52 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/badge.rb +39 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/base.rb +151 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/breadcrumb.rb +23 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/breadcrumb_item.rb +28 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/button.rb +74 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/button_group.rb +36 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/button_toolbar.rb +21 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/card.rb +81 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/card_body.rb +15 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/card_footer.rb +15 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/card_header.rb +35 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/card_image.rb +33 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/card_image_overlay.rb +46 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/carousel.rb +57 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/carousel_caption.rb +34 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/carousel_control.rb +73 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/carousel_indicators.rb +54 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/carousel_item.rb +49 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/collapse.rb +32 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/dropdown.rb +51 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/dropdown_divider.rb +19 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/dropdown_header.rb +23 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/dropdown_item.rb +41 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/dropdown_menu.rb +32 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/dropdown_toggle.rb +82 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/embed.rb +80 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/form.rb +13 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/input_group.rb +13 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/jumbotron.rb +13 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/list_group.rb +39 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/list_group_item.rb +69 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/media.rb +15 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/media_body.rb +15 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/media_object.rb +23 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/modal.rb +66 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/modal_body.rb +16 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/modal_footer.rb +16 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/modal_header.rb +37 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/nav.rb +71 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/nav_item.rb +103 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/nav_link.rb +62 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/navbar.rb +97 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/navbar_brand.rb +25 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/navbar_nav.rb +48 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/navbar_text.rb +21 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/navbar_toggler.rb +38 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/page_item.rb +66 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/pagination.rb +30 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/popover.rb +12 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/progress.rb +44 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/progress_bar.rb +51 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/tab_content.rb +15 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/tab_pane.rb +49 -0
- data/lib/bootstrap4_rails_components/bootstrap/components/table.rb +17 -0
- data/lib/bootstrap4_rails_components/bootstrap/readme.md +1 -0
- data/lib/bootstrap4_rails_components/bootstrap/utilities/activatable.rb +32 -0
- data/lib/bootstrap4_rails_components/bootstrap/utilities/alignable.rb +33 -0
- data/lib/bootstrap4_rails_components/bootstrap/utilities/collapse_toggleable.rb +35 -0
- data/lib/bootstrap4_rails_components/bootstrap/utilities/collapsible.rb +42 -0
- data/lib/bootstrap4_rails_components/bootstrap/utilities/disableable.rb +49 -0
- data/lib/bootstrap4_rails_components/bootstrap/utilities/dismissible.rb +24 -0
- data/lib/bootstrap4_rails_components/bootstrap/utilities/dropdown_directionable.rb +40 -0
- data/lib/bootstrap4_rails_components/bootstrap/utilities/headable.rb +20 -0
- data/lib/bootstrap4_rails_components/bootstrap/utilities/modalable.rb +104 -0
- data/lib/bootstrap4_rails_components/bootstrap/utilities/progressable.rb +42 -0
- data/lib/bootstrap4_rails_components/bootstrap/utilities/remotable.rb +24 -0
- data/lib/bootstrap4_rails_components/bootstrap/utilities/sizable.rb +40 -0
- data/lib/bootstrap4_rails_components/bootstrap/utilities/themeable.rb +51 -0
- data/lib/bootstrap4_rails_components/bootstrap/utilities/titleable.rb +20 -0
- data/lib/bootstrap4_rails_components/bootstrap/utilities/tooltipable.rb +95 -0
- data/lib/bootstrap4_rails_components/bootstrap/utilities/wrappable.rb +48 -0
- data/lib/bootstrap4_rails_components/engine.rb +38 -0
- data/lib/bootstrap4_rails_components/ui/base.rb +42 -0
- data/lib/bootstrap4_rails_components/ui/bootstrap.rb +44 -0
- data/lib/bootstrap4_rails_components/ui/utilities.rb +10 -0
- data/lib/bootstrap4_rails_components/ui/utilities/initializer.rb +88 -0
- data/lib/bootstrap4_rails_components/version.rb +5 -0
- metadata +372 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bootstrap4RailsComponents
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Components
|
|
6
|
+
# Bootstrap Pagination Component
|
|
7
|
+
# https://getbootstrap.com/docs/4.1/components/pagination/
|
|
8
|
+
class Pagination < Bootstrap4RailsComponents::Bootstrap::Components::Base
|
|
9
|
+
include Bootstrap::Utilities::Alignable
|
|
10
|
+
include Bootstrap::Utilities::Sizable
|
|
11
|
+
|
|
12
|
+
def component_family
|
|
13
|
+
:pagination
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def render
|
|
17
|
+
content_tag(:nav) do
|
|
18
|
+
super
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
def base_element
|
|
25
|
+
:ul
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bootstrap4RailsComponents
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Components
|
|
6
|
+
# Bootstrap Popover Component
|
|
7
|
+
# https://getbootstrap.com/docs/4.1/components/popovers/
|
|
8
|
+
class Popover < Bootstrap4RailsComponents::Bootstrap::Components::Base
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bootstrap4RailsComponents
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Components
|
|
6
|
+
# Bootstrap Parent Progress Component
|
|
7
|
+
# https://getbootstrap.com/docs/4.1/components/progress/
|
|
8
|
+
class Progress < Bootstrap4RailsComponents::Bootstrap::Components::Base
|
|
9
|
+
include Bootstrap::Utilities::Progressable
|
|
10
|
+
|
|
11
|
+
def component_family
|
|
12
|
+
:progress
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def height
|
|
16
|
+
options.fetch(:height, nil)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def style
|
|
20
|
+
[
|
|
21
|
+
super,
|
|
22
|
+
("height: #{height}px;" if height)
|
|
23
|
+
].join(' ').squish
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def render
|
|
27
|
+
super do
|
|
28
|
+
if body
|
|
29
|
+
(block_given? ? yield : body)
|
|
30
|
+
else
|
|
31
|
+
Bootstrap4RailsComponents::Bootstrap::Components::ProgressBar.new({ theme: theme, label: label, progress: progress, striped: striped, animated: animated }, view_context).render
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
private
|
|
37
|
+
|
|
38
|
+
def non_html_attribute_options
|
|
39
|
+
super.push(:height)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bootstrap4RailsComponents
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Components
|
|
6
|
+
# Bootstrap Progress Bar Component
|
|
7
|
+
# https://getbootstrap.com/docs/4.1/components/progress/
|
|
8
|
+
class ProgressBar < Bootstrap4RailsComponents::Bootstrap::Components::Progress
|
|
9
|
+
include Bootstrap::Utilities::Progressable
|
|
10
|
+
include Bootstrap::Utilities::Themeable
|
|
11
|
+
|
|
12
|
+
def component_family
|
|
13
|
+
:progress
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def style
|
|
17
|
+
[
|
|
18
|
+
options[:style],
|
|
19
|
+
("width: #{progress.to_i}%;" if progress)
|
|
20
|
+
].join(' ').squish
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def render
|
|
24
|
+
content_tag(:div, label, html_options)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
def css_classes
|
|
30
|
+
[
|
|
31
|
+
super,
|
|
32
|
+
("#{component_css_class}-striped" if striped),
|
|
33
|
+
("#{component_css_class}-animated" if animated)
|
|
34
|
+
].join(' ').squish
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def assistive_html_attributes
|
|
38
|
+
super.merge!(role: 'progressbar', aria: { valuenow: progress, valuemin: 0, valuemax: 100 })
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def theme_css_class_prefix
|
|
42
|
+
'bg-'
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def outlineable?
|
|
46
|
+
false
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bootstrap4RailsComponents
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Components
|
|
6
|
+
# Bootstrap Progress Component
|
|
7
|
+
# https://getbootstrap.com/docs/4.1/components/progress/
|
|
8
|
+
class TabContent < Bootstrap4RailsComponents::Bootstrap::Components::Base
|
|
9
|
+
def component_family
|
|
10
|
+
:tab
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bootstrap4RailsComponents
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Components
|
|
6
|
+
# Bootstrap Progress Component
|
|
7
|
+
# https://getbootstrap.com/docs/4.1/components/progress/
|
|
8
|
+
class TabPane < Bootstrap4RailsComponents::Bootstrap::Components::Base
|
|
9
|
+
include Bootstrap::Utilities::Activatable
|
|
10
|
+
|
|
11
|
+
def component_family
|
|
12
|
+
:tab
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def tab
|
|
16
|
+
options.fetch(:tab, nil)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def id
|
|
20
|
+
tab ? tab.tr('#', '') : super
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Fade is turned on by default
|
|
24
|
+
# This should probably be a global setting
|
|
25
|
+
def fade
|
|
26
|
+
options.fetch(:fade, true)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
def css_classes
|
|
32
|
+
[
|
|
33
|
+
super,
|
|
34
|
+
('fade' if fade),
|
|
35
|
+
('show' if active)
|
|
36
|
+
].join(' ').squish
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def non_html_attribute_options
|
|
40
|
+
super.push(:tab)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def assistive_html_attributes
|
|
44
|
+
{ role: 'tabpanel' }
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bootstrap4RailsComponents
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Components
|
|
6
|
+
# Bootstrap Table Component
|
|
7
|
+
# https://getbootstrap.com/docs/4.1/content/tables/
|
|
8
|
+
class Table < Bootstrap4RailsComponents::Bootstrap::Components::Base
|
|
9
|
+
private
|
|
10
|
+
|
|
11
|
+
def base_element
|
|
12
|
+
:table
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Bootstrap4 code will be isolated into its own gem later.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bootstrap4RailsComponents
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Utilities
|
|
6
|
+
# Passes in necessary attributes to allow a component to have an active state
|
|
7
|
+
module Activatable
|
|
8
|
+
|
|
9
|
+
def active
|
|
10
|
+
options.fetch(:active, default_active)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
private
|
|
14
|
+
|
|
15
|
+
def css_classes
|
|
16
|
+
[
|
|
17
|
+
super,
|
|
18
|
+
('active' if active)
|
|
19
|
+
].join(' ').squish
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def non_html_attribute_options
|
|
23
|
+
super.push(:active)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def default_active
|
|
27
|
+
false
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bootstrap4RailsComponents
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Utilities
|
|
6
|
+
# Allow components to be right and center aligned
|
|
7
|
+
module Alignable
|
|
8
|
+
def center
|
|
9
|
+
options.fetch(:center, false)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def right
|
|
13
|
+
options.fetch(:right, false)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
def css_classes
|
|
19
|
+
[
|
|
20
|
+
super,
|
|
21
|
+
('justify-content-center' if center),
|
|
22
|
+
('justify-content-end' if right)
|
|
23
|
+
].join(' ').squish
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def non_html_attribute_options
|
|
27
|
+
super.push(:right,
|
|
28
|
+
:center)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bootstrap4RailsComponents
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Utilities
|
|
6
|
+
# Allows components to have a collapsed state when appropriate
|
|
7
|
+
module CollapseToggleable
|
|
8
|
+
include Bootstrap::Utilities::Collapsible
|
|
9
|
+
|
|
10
|
+
def data
|
|
11
|
+
collapse ? super.merge!(collapse_data_attributes) : super
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
# Buttons need to be able to to set a target on :buttons
|
|
17
|
+
# and an href on links -- so this attribute is customizable if needed
|
|
18
|
+
def collapse_data_attributes
|
|
19
|
+
@collapse_data_attributes ||= { toggle: 'collapse', target: collapse }
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# To do: currently collapsible doesn't control the actual collapse
|
|
23
|
+
# As such, there's no way to set aria-expanded on the button / toggle...
|
|
24
|
+
# based on whether or not the collapse component is expanded or not
|
|
25
|
+
#
|
|
26
|
+
# To solve: how to address aria-expanded to accurately reflect the expanded status
|
|
27
|
+
def assistive_html_attributes
|
|
28
|
+
return super unless collapse
|
|
29
|
+
super.merge!(aria: (options[:aria] || {}).merge!(expanded: 'false', controls: collapse.tr('#','')),
|
|
30
|
+
role: 'button')
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bootstrap4RailsComponents
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Utilities
|
|
6
|
+
# Allows components to carry collapse attributes
|
|
7
|
+
# to more easily pass collapse status to a collapsible target
|
|
8
|
+
#
|
|
9
|
+
# Example:
|
|
10
|
+
# Tile & TileHeader both include Collapsible
|
|
11
|
+
# because they both pass collapse attributes to
|
|
12
|
+
# a collapse button within TileHeader
|
|
13
|
+
#
|
|
14
|
+
# They do not, however need a collapse toggle
|
|
15
|
+
# unlike a NavbarToggle / Button, and thus they do not include
|
|
16
|
+
# The CollapseToggleable module
|
|
17
|
+
#
|
|
18
|
+
# CollapseToggleable components have this module included
|
|
19
|
+
# by default via the CollapseToggleable module.
|
|
20
|
+
module Collapsible
|
|
21
|
+
def collapse
|
|
22
|
+
options.fetch(:collapse, nil)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def collapsed
|
|
26
|
+
options.fetch(:collapsed, nil)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Collapsible checks if collapse is manually set true or false and thus, collapsible
|
|
30
|
+
def collapsible
|
|
31
|
+
options[:collapsible] || collapse || !collapsed.nil?
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
|
|
36
|
+
def non_html_attribute_options
|
|
37
|
+
super.push(:collapse, :collapsed, :collapsible)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bootstrap4RailsComponents
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Utilities
|
|
6
|
+
# Allows components to have a disabled state when appropriate
|
|
7
|
+
module Disableable
|
|
8
|
+
attr_reader :as
|
|
9
|
+
|
|
10
|
+
def disabled
|
|
11
|
+
options.fetch(:disabled, false)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def css_classes
|
|
17
|
+
# when the tag does not take a disabled attribute we
|
|
18
|
+
# assigne the disabled class
|
|
19
|
+
[
|
|
20
|
+
super,
|
|
21
|
+
('disabled' if disabled && !tag_allows_for_disable_attribute?)
|
|
22
|
+
].join(' ').squish
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def non_html_attribute_options
|
|
26
|
+
# if tag accepts the disabled attribute
|
|
27
|
+
# push it through, otherwise remove it from the
|
|
28
|
+
# html options. We do this regardless of whether or not
|
|
29
|
+
# disabled was actually set to ensure that those
|
|
30
|
+
# tags that can't take a disabled option never receive it
|
|
31
|
+
tag_allows_for_disable_attribute? ? super : super.push(:disabled)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def assistive_html_attributes
|
|
35
|
+
if disabled
|
|
36
|
+
super.merge!(tabindex: '-1',
|
|
37
|
+
**(tag_allows_for_disable_attribute?) ? { disabled: true } : {})
|
|
38
|
+
else
|
|
39
|
+
super
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def tag_allows_for_disable_attribute?
|
|
44
|
+
[:button, :input, :fieldset, :optgroup, :option, :select, :textarea].include?(as)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bootstrap4RailsComponents
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Utilities
|
|
6
|
+
# Delivers the dismissibility of the component to the HAML partial
|
|
7
|
+
module Dismissible
|
|
8
|
+
def dismissible
|
|
9
|
+
options.fetch(:dismissible, default_dismissible)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
def non_html_attribute_options
|
|
15
|
+
super.push(:dismissible)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def default_dismissible
|
|
19
|
+
true
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|