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.
Files changed (95) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +362 -0
  4. data/Rakefile +23 -0
  5. data/app/assets/config/bootstrap4_rails_components_manifest.js +3 -0
  6. data/app/assets/javascripts/bootstrap4_rails_components/application.js +8 -0
  7. data/app/assets/javascripts/bootstrap4_rails_components/vendor/tooltips.js +42 -0
  8. data/app/assets/stylesheets/bootstrap4_rails_components/bootstrap/application.scss +2 -0
  9. data/app/controllers/bootstrap4_rails_components/application_controller.rb +5 -0
  10. data/app/helpers/bootstrap4_rails_components/application_helper.rb +38 -0
  11. data/app/models/bootstrap4_rails_components/application_record.rb +5 -0
  12. data/config/initializers/web_app_manifest.rb +3 -0
  13. data/config/locales/en.yml +63 -0
  14. data/config/routes.rb +2 -0
  15. data/config/spring.rb +1 -0
  16. data/lib/bootstrap4_rails_components.rb +75 -0
  17. data/lib/bootstrap4_rails_components/bootstrap/components/alert.rb +52 -0
  18. data/lib/bootstrap4_rails_components/bootstrap/components/badge.rb +39 -0
  19. data/lib/bootstrap4_rails_components/bootstrap/components/base.rb +151 -0
  20. data/lib/bootstrap4_rails_components/bootstrap/components/breadcrumb.rb +23 -0
  21. data/lib/bootstrap4_rails_components/bootstrap/components/breadcrumb_item.rb +28 -0
  22. data/lib/bootstrap4_rails_components/bootstrap/components/button.rb +74 -0
  23. data/lib/bootstrap4_rails_components/bootstrap/components/button_group.rb +36 -0
  24. data/lib/bootstrap4_rails_components/bootstrap/components/button_toolbar.rb +21 -0
  25. data/lib/bootstrap4_rails_components/bootstrap/components/card.rb +81 -0
  26. data/lib/bootstrap4_rails_components/bootstrap/components/card_body.rb +15 -0
  27. data/lib/bootstrap4_rails_components/bootstrap/components/card_footer.rb +15 -0
  28. data/lib/bootstrap4_rails_components/bootstrap/components/card_header.rb +35 -0
  29. data/lib/bootstrap4_rails_components/bootstrap/components/card_image.rb +33 -0
  30. data/lib/bootstrap4_rails_components/bootstrap/components/card_image_overlay.rb +46 -0
  31. data/lib/bootstrap4_rails_components/bootstrap/components/carousel.rb +57 -0
  32. data/lib/bootstrap4_rails_components/bootstrap/components/carousel_caption.rb +34 -0
  33. data/lib/bootstrap4_rails_components/bootstrap/components/carousel_control.rb +73 -0
  34. data/lib/bootstrap4_rails_components/bootstrap/components/carousel_indicators.rb +54 -0
  35. data/lib/bootstrap4_rails_components/bootstrap/components/carousel_item.rb +49 -0
  36. data/lib/bootstrap4_rails_components/bootstrap/components/collapse.rb +32 -0
  37. data/lib/bootstrap4_rails_components/bootstrap/components/dropdown.rb +51 -0
  38. data/lib/bootstrap4_rails_components/bootstrap/components/dropdown_divider.rb +19 -0
  39. data/lib/bootstrap4_rails_components/bootstrap/components/dropdown_header.rb +23 -0
  40. data/lib/bootstrap4_rails_components/bootstrap/components/dropdown_item.rb +41 -0
  41. data/lib/bootstrap4_rails_components/bootstrap/components/dropdown_menu.rb +32 -0
  42. data/lib/bootstrap4_rails_components/bootstrap/components/dropdown_toggle.rb +82 -0
  43. data/lib/bootstrap4_rails_components/bootstrap/components/embed.rb +80 -0
  44. data/lib/bootstrap4_rails_components/bootstrap/components/form.rb +13 -0
  45. data/lib/bootstrap4_rails_components/bootstrap/components/input_group.rb +13 -0
  46. data/lib/bootstrap4_rails_components/bootstrap/components/jumbotron.rb +13 -0
  47. data/lib/bootstrap4_rails_components/bootstrap/components/list_group.rb +39 -0
  48. data/lib/bootstrap4_rails_components/bootstrap/components/list_group_item.rb +69 -0
  49. data/lib/bootstrap4_rails_components/bootstrap/components/media.rb +15 -0
  50. data/lib/bootstrap4_rails_components/bootstrap/components/media_body.rb +15 -0
  51. data/lib/bootstrap4_rails_components/bootstrap/components/media_object.rb +23 -0
  52. data/lib/bootstrap4_rails_components/bootstrap/components/modal.rb +66 -0
  53. data/lib/bootstrap4_rails_components/bootstrap/components/modal_body.rb +16 -0
  54. data/lib/bootstrap4_rails_components/bootstrap/components/modal_footer.rb +16 -0
  55. data/lib/bootstrap4_rails_components/bootstrap/components/modal_header.rb +37 -0
  56. data/lib/bootstrap4_rails_components/bootstrap/components/nav.rb +71 -0
  57. data/lib/bootstrap4_rails_components/bootstrap/components/nav_item.rb +103 -0
  58. data/lib/bootstrap4_rails_components/bootstrap/components/nav_link.rb +62 -0
  59. data/lib/bootstrap4_rails_components/bootstrap/components/navbar.rb +97 -0
  60. data/lib/bootstrap4_rails_components/bootstrap/components/navbar_brand.rb +25 -0
  61. data/lib/bootstrap4_rails_components/bootstrap/components/navbar_nav.rb +48 -0
  62. data/lib/bootstrap4_rails_components/bootstrap/components/navbar_text.rb +21 -0
  63. data/lib/bootstrap4_rails_components/bootstrap/components/navbar_toggler.rb +38 -0
  64. data/lib/bootstrap4_rails_components/bootstrap/components/page_item.rb +66 -0
  65. data/lib/bootstrap4_rails_components/bootstrap/components/pagination.rb +30 -0
  66. data/lib/bootstrap4_rails_components/bootstrap/components/popover.rb +12 -0
  67. data/lib/bootstrap4_rails_components/bootstrap/components/progress.rb +44 -0
  68. data/lib/bootstrap4_rails_components/bootstrap/components/progress_bar.rb +51 -0
  69. data/lib/bootstrap4_rails_components/bootstrap/components/tab_content.rb +15 -0
  70. data/lib/bootstrap4_rails_components/bootstrap/components/tab_pane.rb +49 -0
  71. data/lib/bootstrap4_rails_components/bootstrap/components/table.rb +17 -0
  72. data/lib/bootstrap4_rails_components/bootstrap/readme.md +1 -0
  73. data/lib/bootstrap4_rails_components/bootstrap/utilities/activatable.rb +32 -0
  74. data/lib/bootstrap4_rails_components/bootstrap/utilities/alignable.rb +33 -0
  75. data/lib/bootstrap4_rails_components/bootstrap/utilities/collapse_toggleable.rb +35 -0
  76. data/lib/bootstrap4_rails_components/bootstrap/utilities/collapsible.rb +42 -0
  77. data/lib/bootstrap4_rails_components/bootstrap/utilities/disableable.rb +49 -0
  78. data/lib/bootstrap4_rails_components/bootstrap/utilities/dismissible.rb +24 -0
  79. data/lib/bootstrap4_rails_components/bootstrap/utilities/dropdown_directionable.rb +40 -0
  80. data/lib/bootstrap4_rails_components/bootstrap/utilities/headable.rb +20 -0
  81. data/lib/bootstrap4_rails_components/bootstrap/utilities/modalable.rb +104 -0
  82. data/lib/bootstrap4_rails_components/bootstrap/utilities/progressable.rb +42 -0
  83. data/lib/bootstrap4_rails_components/bootstrap/utilities/remotable.rb +24 -0
  84. data/lib/bootstrap4_rails_components/bootstrap/utilities/sizable.rb +40 -0
  85. data/lib/bootstrap4_rails_components/bootstrap/utilities/themeable.rb +51 -0
  86. data/lib/bootstrap4_rails_components/bootstrap/utilities/titleable.rb +20 -0
  87. data/lib/bootstrap4_rails_components/bootstrap/utilities/tooltipable.rb +95 -0
  88. data/lib/bootstrap4_rails_components/bootstrap/utilities/wrappable.rb +48 -0
  89. data/lib/bootstrap4_rails_components/engine.rb +38 -0
  90. data/lib/bootstrap4_rails_components/ui/base.rb +42 -0
  91. data/lib/bootstrap4_rails_components/ui/bootstrap.rb +44 -0
  92. data/lib/bootstrap4_rails_components/ui/utilities.rb +10 -0
  93. data/lib/bootstrap4_rails_components/ui/utilities/initializer.rb +88 -0
  94. data/lib/bootstrap4_rails_components/version.rb +5 -0
  95. metadata +372 -0
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bootstrap4RailsComponents
4
+ module Bootstrap
5
+ module Components
6
+ # Bootstrap Breadcrumb Component
7
+ # https://getbootstrap.com/docs/4.1/components/breadcrumb/
8
+ class Breadcrumb < Bootstrap4RailsComponents::Bootstrap::Components::Base
9
+ def component_family
10
+ :breadcrumb
11
+ end
12
+
13
+ def render
14
+ content_tag(:nav, aria: { label: 'breadcrumb' }) do
15
+ content_tag(:ol, html_options) do
16
+ (block_given? ? yield : body)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bootstrap4RailsComponents
4
+ module Bootstrap
5
+ module Components
6
+ # Bootstrap Breadcrumb Item
7
+ # Subcomponent of Breadcrumb
8
+ # https://getbootstrap.com/docs/4.1/components/breadcrumb/
9
+ class BreadcrumbItem < Bootstrap4RailsComponents::Bootstrap::Components::Base
10
+ include Bootstrap::Utilities::Activatable
11
+
12
+ def component_family
13
+ :breadcrumb
14
+ end
15
+
16
+ private
17
+
18
+ def base_element
19
+ :li
20
+ end
21
+
22
+ def assistive_html_attributes
23
+ active ? super.merge!(aria: { current: 'page' }) : super
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bootstrap4RailsComponents
4
+ module Bootstrap
5
+ module Components
6
+ # Bootstrap Button Component
7
+ # https://getbootstrap.com/docs/4.1/components/buttons/
8
+ class Button < Bootstrap4RailsComponents::Bootstrap::Components::Base
9
+ include Bootstrap::Utilities::Activatable
10
+ include Bootstrap::Utilities::CollapseToggleable
11
+ include Bootstrap::Utilities::Disableable
12
+ include Bootstrap::Utilities::Remotable
13
+ include Bootstrap::Utilities::Sizable
14
+ include Bootstrap::Utilities::Modalable
15
+ include Bootstrap::Utilities::Themeable
16
+ include Bootstrap::Utilities::Tooltipable
17
+ include Bootstrap::Utilities::Wrappable
18
+
19
+ def render
20
+ if tooltip && disabled
21
+ content_tag(:span, disabled_component_tooltip_wrapper_html_options) do
22
+ content_tag(as, html_options) do
23
+ (block_given? ? yield : body)
24
+ end
25
+ end
26
+ else
27
+ content_tag(as, html_options) do
28
+ (block_given? ? yield : body)
29
+ end
30
+ end
31
+ end
32
+
33
+ def block
34
+ options.fetch(:block, false)
35
+ end
36
+
37
+ def href
38
+ return if as != :a
39
+ collapse ? collapse : (options[:href] || '#')
40
+ end
41
+
42
+ def remove_component_css_classes
43
+ options.fetch(:remove_component_css_classes, false)
44
+ end
45
+
46
+ private
47
+
48
+ def assistive_html_attributes
49
+ active ? super.merge(aria: { pressed: true }) : super
50
+ end
51
+
52
+ def css_classes
53
+ block ? super + " #{component_css_class}-block" : super
54
+ end
55
+
56
+ def collapse_data_attributes
57
+ as == :a ? super.except!(:target) : super
58
+ end
59
+
60
+ def component_css_class
61
+ remove_component_css_classes ? '' : 'btn'
62
+ end
63
+
64
+ def default_html_wrapper_element
65
+ :a
66
+ end
67
+
68
+ def non_html_attribute_options
69
+ super.push(:block, :remove_component_css_classes)
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bootstrap4RailsComponents
4
+ module Bootstrap
5
+ module Components
6
+ # Bootstrap Button Group Component
7
+ # An optional parent of the Button component
8
+ # https://getbootstrap.com/docs/4.1/components/breadcrumb/
9
+ class ButtonGroup < Bootstrap4RailsComponents::Bootstrap::Components::Base
10
+ include Bootstrap::Utilities::DropdownDirectionable
11
+ include Bootstrap::Utilities::Sizable
12
+
13
+ def vertical
14
+ options.fetch(:vertical, false)
15
+ end
16
+
17
+ private
18
+
19
+ def assistive_html_attributes
20
+ super.merge!(role: 'group', aria: { label: 'action buttons' })
21
+ end
22
+
23
+ def component_css_class
24
+ 'btn-group'
25
+ end
26
+
27
+ def css_classes
28
+ [
29
+ super,
30
+ ("#{component_css_class}-vertical" if vertical)
31
+ ].join(' ').squish
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bootstrap4RailsComponents
4
+ module Bootstrap
5
+ module Components
6
+ # Bootstrap Button Toolbar Component
7
+ # https://getbootstrap.com/docs/4.1/components/button-group/#button-toolbar
8
+ class ButtonToolbar < Bootstrap4RailsComponents::Bootstrap::Components::Base
9
+ private
10
+
11
+ def component_css_class
12
+ 'btn-toolbar'
13
+ end
14
+
15
+ def assistive_html_attributes
16
+ super.merge!(role: 'toolbar')
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bootstrap4RailsComponents
4
+ module Bootstrap
5
+ module Components
6
+ # Bootstrap Card Component
7
+ # https://getbootstrap.com/docs/4.1/components/cards/
8
+ class Card < Bootstrap4RailsComponents::Bootstrap::Components::Base
9
+ include Bootstrap::Utilities::Themeable
10
+
11
+ def component_family
12
+ :card
13
+ end
14
+
15
+ def footer
16
+ options.fetch(:footer, '')
17
+ end
18
+
19
+ def heading
20
+ options.fetch(:heading, '')
21
+ end
22
+
23
+ def subtitle
24
+ options.fetch(:subtitle, '')
25
+ end
26
+
27
+ def title
28
+ options.fetch(:title, '')
29
+ end
30
+
31
+ def render
32
+ content_tag(:div, html_options) do
33
+ capture do
34
+ if heading.present?
35
+ concat(Bootstrap4RailsComponents::Bootstrap::Components::CardHeader.new({ heading: heading }, view_context).render)
36
+ end
37
+
38
+ concat(Bootstrap4RailsComponents::Bootstrap::Components::CardBody.new({}, view_context).render {
39
+ capture do
40
+ concat(content_tag(:h5, title, class: 'card-title')) if title.present?
41
+ concat(content_tag(:h6, subtitle, class: 'card-subtitle')) if subtitle.present?
42
+ concat(block_given? ? yield : body)
43
+ end
44
+ })
45
+
46
+ if footer.present?
47
+ concat(Bootstrap4RailsComponents::Bootstrap::Components::CardFooter.new({ body: footer }, view_context).render)
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ private
54
+
55
+ def css_classes
56
+ return super unless theme.presence && theme != :light
57
+ [
58
+ super,
59
+ (outlined ? "text-#{theme}" : 'text-white')
60
+ ].join(' ').squish
61
+ end
62
+
63
+ def default_theme
64
+ nil
65
+ end
66
+
67
+ def non_html_attribute_options
68
+ super.push(:footer, :heading, :subtitle, :title)
69
+ end
70
+
71
+ def outlined_css_class_prefix
72
+ 'border-'
73
+ end
74
+
75
+ def theme_css_class_prefix
76
+ outlined ? '' : 'bg-'
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bootstrap4RailsComponents
4
+ module Bootstrap
5
+ module Components
6
+ # Bootstrap Card Header
7
+ # https://getbootstrap.com/docs/4.1/components/card/#header-and-footer
8
+ class CardBody < Bootstrap4RailsComponents::Bootstrap::Components::Base
9
+ def component_family
10
+ :card
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bootstrap4RailsComponents
4
+ module Bootstrap
5
+ module Components
6
+ # Bootstrap Card Header
7
+ # https://getbootstrap.com/docs/4.1/components/card/#header-and-footer
8
+ class CardFooter < Bootstrap4RailsComponents::Bootstrap::Components::Base
9
+ def component_family
10
+ :card
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bootstrap4RailsComponents
4
+ module Bootstrap
5
+ module Components
6
+ # Bootstrap Card Header
7
+ # https://getbootstrap.com/docs/4.1/components/card/#header-and-footer
8
+ class CardHeader < Bootstrap4RailsComponents::Bootstrap::Components::Base
9
+ def component_family
10
+ :card
11
+ end
12
+
13
+ def heading
14
+ options.fetch(:heading, nil)
15
+ end
16
+
17
+ def render
18
+ super do
19
+ if heading.present?
20
+ heading
21
+ else
22
+ (block_given? ? yield : body)
23
+ end
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ def non_html_attribute_options
30
+ super.push(:heading)
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bootstrap4RailsComponents
4
+ module Bootstrap
5
+ module Components
6
+ # Bootstrap Card Header
7
+ # https://getbootstrap.com/docs/4.1/components/card/#header-and-footer
8
+ class CardImage < Bootstrap4RailsComponents::Bootstrap::Components::Base
9
+ def component_family
10
+ :card
11
+ end
12
+
13
+ def image
14
+ options.fetch(:image, '')
15
+ end
16
+
17
+ def render
18
+ image_tag image, **html_options
19
+ end
20
+
21
+ private
22
+
23
+ def component_css_class
24
+ 'card-img'
25
+ end
26
+
27
+ def non_html_attribute_options
28
+ super.push(:image)
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bootstrap4RailsComponents
4
+ module Bootstrap
5
+ module Components
6
+ # Bootstrap Card Header
7
+ # https://getbootstrap.com/docs/4.1/components/card/#header-and-footer
8
+ class CardImageOverlay < Bootstrap4RailsComponents::Bootstrap::Components::Base
9
+ include Bootstrap4RailsComponents::Bootstrap::Utilities::Titleable
10
+
11
+ def component_family
12
+ :card
13
+ end
14
+
15
+ def image
16
+ options.fetch(:image, '')
17
+ end
18
+
19
+ def render
20
+ capture do
21
+ if image
22
+ concat(Bootstrap4RailsComponents::Bootstrap::Components::CardImage.new({ image: image }, view_context).render)
23
+ end
24
+
25
+ concat(content_tag(:div, html_options) {
26
+ capture do
27
+ concat(content_tag(:h5, title, class: 'card-title')) if title
28
+ concat(block_given? ? yield : body)
29
+ end
30
+ })
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def component_css_class
37
+ 'card-img-overlay'
38
+ end
39
+
40
+ def non_html_attribute_options
41
+ super.push(:image)
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bootstrap4RailsComponents
4
+ module Bootstrap
5
+ module Components
6
+ # Bootstrap Carousel Component
7
+ # https://getbootstrap.com/docs/4.1/components/carousel/
8
+ class Carousel < Bootstrap4RailsComponents::Bootstrap::Components::Base
9
+ def component_family
10
+ :carousel
11
+ end
12
+
13
+ def controls
14
+ options.fetch(:controls, false)
15
+ end
16
+
17
+ def data
18
+ super.merge!(ride: 'carousel')
19
+ end
20
+
21
+ def indicators
22
+ options[:indicators] || 0 # return 0 on nil
23
+ end
24
+
25
+ def render
26
+ super do
27
+ capture do
28
+ content_tag(:div, class: 'carousel-inner') do
29
+ if indicators > 0
30
+ concat(Bootstrap4RailsComponents::Bootstrap::Components::CarouselIndicators.new({ count: indicators, carousel: "##{id}" }, view_context).render)
31
+ end
32
+ concat(block_given? ? yield : body)
33
+ if controls
34
+ concat(Bootstrap4RailsComponents::Bootstrap::Components::CarouselControl.new({ control: :next, carousel: "##{id}" }, view_context).render)
35
+ concat(Bootstrap4RailsComponents::Bootstrap::Components::CarouselControl.new({ control: :prev, carousel: "##{id}" }, view_context).render)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ private
43
+
44
+ def css_classes
45
+ [
46
+ super,
47
+ 'slide'
48
+ ].join(' ').squish
49
+ end
50
+
51
+ def non_html_attribute_options
52
+ super.push(:indicators, :controls)
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end