bootstrap4_rails_components 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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