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,103 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bootstrap4RailsComponents
4
+ module Bootstrap
5
+ module Components
6
+ # Bootstrap Nav Component
7
+ # https://getbootstrap.com/docs/4.1/components/navs/
8
+ class NavItem < Bootstrap4RailsComponents::Bootstrap::Components::Base
9
+ include Bootstrap::Utilities::Wrappable
10
+
11
+ # For passing through to nav_link
12
+ # bypass module since active / disabled is applied
13
+ # on the nav_link
14
+ def active
15
+ options.fetch(:active, false)
16
+ end
17
+
18
+ def button
19
+ options.fetch(:button, nil)
20
+ end
21
+
22
+ def component_family
23
+ :nav
24
+ end
25
+
26
+ def remote
27
+ options.fetch(:remote, nil)
28
+ end
29
+
30
+ # For passing through to nav_link
31
+ def disabled
32
+ options.fetch(:disabled, false)
33
+ end
34
+
35
+ def dropdown
36
+ options.fetch(:dropdown, false)
37
+ end
38
+
39
+ def include_nav_link?
40
+ href.present? || dropdown || tab
41
+ end
42
+
43
+ def tab
44
+ options.fetch(:tab, nil)
45
+ end
46
+
47
+ # href gets passed to the nav_link when present.
48
+ # Removes :href from nav_item's html_options so we don't end up with
49
+ # <li class='nav-item' href='#href'><a class='nav-link' href='#href'...
50
+ def html_options
51
+ super.except!(:href)
52
+ end
53
+
54
+ def render
55
+ super do
56
+ capture do
57
+ if include_nav_link?
58
+ concat(Bootstrap4RailsComponents::Bootstrap::Components::NavLink.new({ body: (button ? button : (block_given? ? yield : body)), active: active, disabled: disabled, dropdown: dropdown, tab: tab, remote: remote, href: (tab || href) }, view_context).render)
59
+ concat(block_given? ? yield : body) if dropdown
60
+ else
61
+ (block_given? ? yield : body)
62
+ end
63
+ end
64
+ end
65
+ end
66
+
67
+ private
68
+
69
+ def base_element
70
+ as
71
+ end
72
+
73
+ def component_css_class
74
+ 'nav-item'
75
+ end
76
+
77
+ def automatic_as
78
+ include_nav_link? ? :li : super
79
+ end
80
+
81
+ def css_classes
82
+ [
83
+ super,
84
+ ('dropdown' if dropdown)
85
+ ].join(' ').squish
86
+ end
87
+
88
+ def default_html_wrapper_element
89
+ :li
90
+ end
91
+
92
+ def non_html_attribute_options
93
+ super.push(:active,
94
+ :disabled,
95
+ :dropdown,
96
+ :button,
97
+ :tab,
98
+ :remote)
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bootstrap4RailsComponents
4
+ module Bootstrap
5
+ module Components
6
+ # Bootstrap Nav Component
7
+ # https://getbootstrap.com/docs/4.1/components/navs/
8
+ class NavLink < Bootstrap4RailsComponents::Bootstrap::Components::Base
9
+ include Bootstrap::Utilities::Activatable
10
+ include Bootstrap::Utilities::Disableable
11
+ include Bootstrap::Utilities::Remotable
12
+
13
+ def component_family
14
+ :nav
15
+ end
16
+
17
+ def dropdown
18
+ options.fetch(:dropdown, false)
19
+ end
20
+
21
+ def href
22
+ options.fetch(:href, nil)
23
+ end
24
+
25
+ def tab
26
+ options.fetch(:tab, nil)
27
+ end
28
+
29
+ def data
30
+ tab ? super.merge!(toggle: 'tab') : super
31
+ end
32
+
33
+ def render
34
+ if dropdown
35
+ Bootstrap4RailsComponents::Bootstrap::Components::DropdownToggle.new({ body: (block_given? ? yield : body), as: :a, **html_options, theme: nil, nav_link: true }, view_context).render
36
+ else
37
+ super
38
+ end
39
+ end
40
+
41
+ private
42
+
43
+ def base_element
44
+ :a
45
+ end
46
+
47
+ def component_css_class
48
+ 'nav-link'
49
+ end
50
+
51
+ def non_html_attribute_options
52
+ super.push(:tab, :dropdown)
53
+ end
54
+
55
+ def assistive_html_attributes
56
+ return super unless tab
57
+ { role: 'tab', aria: { controls: tab.tr('#', ''), selected: active } }
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,97 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bootstrap4RailsComponents
4
+ module Bootstrap
5
+ module Components
6
+ # Bootstrap Navbar Component
7
+ # https://getbootstrap.com/docs/4.1/components/navbar/
8
+ class Navbar < Bootstrap4RailsComponents::Bootstrap::Components::Base
9
+ include Bootstrap::Utilities::Wrappable
10
+ include Bootstrap::Utilities::Themeable
11
+
12
+ def component_family
13
+ :navbar
14
+ end
15
+
16
+ def expand
17
+ options.fetch(:expand, :lg)
18
+ end
19
+
20
+ def light
21
+ options.fetch(:light, nil)
22
+ end
23
+
24
+ def dark
25
+ options.fetch(:dark, nil)
26
+ end
27
+
28
+ def sticky
29
+ options.fetch(:sticky, nil)
30
+ end
31
+
32
+ def fixed
33
+ options.fetch(:fixed, nil)
34
+ end
35
+
36
+ private
37
+
38
+ def base_element
39
+ as
40
+ end
41
+
42
+ def css_classes
43
+ [
44
+ super,
45
+ ("#{component_css_class}-expand-#{expand}" unless expand.nil?),
46
+ dark_or_light_navbar_css_class,
47
+ ('sticky-top' if sticky == :top),
48
+ ('fixed-bottom' if fixed == :bottom),
49
+ ('fixed-top' if fixed == :top),
50
+ ].join(' ').squish
51
+ end
52
+
53
+ def assistive_html_attributes
54
+ as == :nav ? super : super.merge!(role: 'navigation')
55
+ end
56
+
57
+ def default_html_wrapper_element
58
+ :nav
59
+ end
60
+
61
+ def theme_css_class_prefix
62
+ 'bg-'
63
+ end
64
+
65
+ def dark_or_light_navbar_css_class
66
+ if dark
67
+ 'navbar-dark'
68
+ elsif light
69
+ 'navbar-light'
70
+ else
71
+ dark_themes.include?(theme) ? 'navbar-dark' : 'navbar-light'
72
+ end
73
+ end
74
+
75
+ def default_theme
76
+ :light
77
+ end
78
+
79
+ def non_html_attribute_options
80
+ super.push(:dark,
81
+ :expand,
82
+ :right,
83
+ :left,
84
+ :light)
85
+ end
86
+
87
+ def dark_themes
88
+ %i[primary secondary success danger warning info dark]
89
+ end
90
+
91
+ def outlineable?
92
+ false
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bootstrap4RailsComponents
4
+ module Bootstrap
5
+ module Components
6
+ # Bootstrap Navbar Component
7
+ # https://getbootstrap.com/docs/4.1/components/navbar/
8
+ class NavbarBrand < Bootstrap4RailsComponents::Bootstrap::Components::Base
9
+ def component_family
10
+ :navbar
11
+ end
12
+
13
+ def href
14
+ options.fetch(:href, '#')
15
+ end
16
+
17
+ private
18
+
19
+ def base_element
20
+ :a
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bootstrap4RailsComponents
4
+ module Bootstrap
5
+ module Components
6
+ # Bootstrap Navbar Component
7
+ # https://getbootstrap.com/docs/4.1/components/navbar/
8
+ class NavbarNav < Bootstrap4RailsComponents::Bootstrap::Components::Base
9
+ include Bootstrap::Utilities::Wrappable
10
+
11
+ def component_family
12
+ :navbar
13
+ end
14
+
15
+ def right
16
+ options.fetch(:right, false)
17
+ end
18
+
19
+ # Left by default
20
+ def left
21
+ options.fetch(:left, default_left)
22
+ end
23
+
24
+ private
25
+
26
+ def base_element
27
+ as
28
+ end
29
+
30
+ def css_classes
31
+ [
32
+ super,
33
+ ('ml-auto' if right),
34
+ ('mr-auto' if left)
35
+ ].join(' ').squish
36
+ end
37
+
38
+ def default_html_wrapper_element
39
+ :ul
40
+ end
41
+
42
+ def default_left
43
+ right ? false : true
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bootstrap4RailsComponents
4
+ module Bootstrap
5
+ module Components
6
+ # Bootstrap Navbar Component
7
+ # https://getbootstrap.com/docs/4.1/components/navbar/
8
+ class NavbarText < Bootstrap4RailsComponents::Bootstrap::Components::Base
9
+ def component_family
10
+ :navbar
11
+ end
12
+
13
+ private
14
+
15
+ def base_element
16
+ :span
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bootstrap4RailsComponents
4
+ module Bootstrap
5
+ module Components
6
+ # Bootstrap Navbar Component
7
+ # https://getbootstrap.com/docs/4.1/components/navbar/
8
+ class NavbarToggler < Bootstrap4RailsComponents::Bootstrap::Components::Base
9
+ include Bootstrap::Utilities::CollapseToggleable
10
+
11
+ # Pass through to collapse component
12
+ # def collapse
13
+ # options.fetch(:collapse, nil)
14
+ # end
15
+
16
+ def component_family
17
+ :navbar
18
+ end
19
+
20
+ def render
21
+ super do
22
+ if body
23
+ (block_given? ? yield : body)
24
+ else
25
+ content_tag(:span, nil, class: 'navbar-toggler-icon')
26
+ end
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ def base_element
33
+ :button
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bootstrap4RailsComponents
4
+ module Bootstrap
5
+ module Components
6
+ # Bootstrap Pagination - Page Item Component
7
+ # https://getbootstrap.com/docs/4.1/components/pagination/
8
+ class PageItem < Bootstrap4RailsComponents::Bootstrap::Components::Base
9
+ # include Bootstrap::Utilities::Disableable
10
+ include Bootstrap::Utilities::Activatable
11
+
12
+ def component_family
13
+ :pagination
14
+ end
15
+
16
+ def disabled
17
+ options.fetch(:disabled, false)
18
+ end
19
+
20
+ def href
21
+ options[:href] || '#' # return # when nil
22
+ end
23
+
24
+ # Send href through to the "page link" that's embedded within
25
+ # the page item component
26
+ def html_options
27
+ super.except!(:href)
28
+ end
29
+
30
+ def page_link_html_options
31
+ { class: 'page-link',
32
+ **(disabled ? { tabindex: '-1' } : {}),
33
+ href: href }
34
+ end
35
+
36
+ def render
37
+ super do
38
+ content_tag(:a, page_link_html_options) do
39
+ capture do
40
+ concat(block_given? ? yield : body)
41
+ concat(content_tag(:span, '(current)', class: 'sr-only')) if active
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ private
48
+
49
+ def base_element
50
+ :li
51
+ end
52
+
53
+ def css_classes
54
+ [
55
+ super,
56
+ ('disabled' if disabled)
57
+ ].join(' ').squish
58
+ end
59
+
60
+ def non_html_attribute_options
61
+ super.push(:disabled)
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end