twitter-bootstrap-rails 5.3.0 → 5.4.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 +4 -4
- data/CHANGELOG.md +81 -0
- data/README.md +128 -628
- data/app/assets/javascripts/twitter/bootstrap/bootstrap.min.js +3 -3
- data/app/assets/stylesheets/twitter-bootstrap-static/bootstrap.css +3 -3
- data/lib/generators/bootstrap/badge/badge_generator.rb +13 -0
- data/lib/generators/bootstrap/breadcrumb/breadcrumb_generator.rb +13 -0
- data/lib/generators/bootstrap/button/button_generator.rb +13 -0
- data/lib/generators/bootstrap/cdn/cdn_generator.rb +39 -0
- data/lib/generators/bootstrap/cdn_tags.rb +43 -0
- data/lib/generators/bootstrap/dropdown/dropdown_generator.rb +13 -0
- data/lib/generators/bootstrap/features/features_generator.rb +13 -0
- data/lib/generators/bootstrap/footer/footer_generator.rb +13 -0
- data/lib/generators/bootstrap/header/header_generator.rb +13 -0
- data/lib/generators/bootstrap/hero/hero_generator.rb +13 -0
- data/lib/generators/bootstrap/install/install_generator.rb +120 -61
- data/lib/generators/bootstrap/install/templates/application.js +1 -1
- data/lib/generators/bootstrap/install/templates/bootstrap.js +10 -3
- data/lib/generators/bootstrap/install/templates/bootstrap_and_overrides.css +2 -2
- data/lib/generators/bootstrap/jumbotron/jumbotron_generator.rb +13 -0
- data/lib/generators/bootstrap/layout/layout_generator.rb +65 -1
- data/lib/generators/bootstrap/layout/templates/layout.html.erb +14 -9
- data/lib/generators/bootstrap/layout/templates/layout.html.haml +28 -43
- data/lib/generators/bootstrap/layout/templates/layout.html.slim +25 -40
- data/lib/generators/bootstrap/list_group/list_group_generator.rb +13 -0
- data/lib/generators/bootstrap/modal/modal_generator.rb +13 -0
- data/lib/generators/bootstrap/sidebar/sidebar_generator.rb +13 -0
- data/lib/generators/bootstrap/snippets/snippet_base.rb +126 -0
- data/lib/generators/bootstrap/snippets/snippet_catalog.rb +134 -0
- data/lib/generators/bootstrap/snippets/templates/badges/pills.html.erb +10 -0
- data/lib/generators/bootstrap/snippets/templates/badges/subtle.html.erb +10 -0
- data/lib/generators/bootstrap/snippets/templates/badges/subtle_bordered.html.erb +20 -0
- data/lib/generators/bootstrap/snippets/templates/badges/with_avatar.html.erb +34 -0
- data/lib/generators/bootstrap/snippets/templates/badges/with_avatar_divider.html.erb +66 -0
- data/lib/generators/bootstrap/snippets/templates/badges/with_icons.html.erb +26 -0
- data/lib/generators/bootstrap/snippets/templates/breadcrumbs/basic.html.erb +9 -0
- data/lib/generators/bootstrap/snippets/templates/breadcrumbs/chevron.html.erb +18 -0
- data/lib/generators/bootstrap/snippets/templates/breadcrumbs/custom.html.erb +18 -0
- data/lib/generators/bootstrap/snippets/templates/breadcrumbs/with_icons.html.erb +18 -0
- data/lib/generators/bootstrap/snippets/templates/buttons/circle.html.erb +20 -0
- data/lib/generators/bootstrap/snippets/templates/buttons/grid.html.erb +6 -0
- data/lib/generators/bootstrap/snippets/templates/buttons/loading.html.erb +10 -0
- data/lib/generators/bootstrap/snippets/templates/buttons/pills.html.erb +11 -0
- data/lib/generators/bootstrap/snippets/templates/buttons/with_icons.html.erb +14 -0
- data/lib/generators/bootstrap/snippets/templates/dropdowns/calendar.html.erb +156 -0
- data/lib/generators/bootstrap/snippets/templates/dropdowns/mega_menu.html.erb +140 -0
- data/lib/generators/bootstrap/snippets/templates/dropdowns/simple.html.erb +20 -0
- data/lib/generators/bootstrap/snippets/templates/dropdowns/with_icons.html.erb +88 -0
- data/lib/generators/bootstrap/snippets/templates/dropdowns/with_search.html.erb +64 -0
- data/lib/generators/bootstrap/snippets/templates/features/columns_with_icons.html.erb +46 -0
- data/lib/generators/bootstrap/snippets/templates/features/custom_cards.html.erb +79 -0
- data/lib/generators/bootstrap/snippets/templates/features/hanging_icons.html.erb +41 -0
- data/lib/generators/bootstrap/snippets/templates/features/icon_grid.html.erb +77 -0
- data/lib/generators/bootstrap/snippets/templates/features/with_title.html.erb +50 -0
- data/lib/generators/bootstrap/snippets/templates/footers/columns.html.erb +43 -0
- data/lib/generators/bootstrap/snippets/templates/footers/simple.html.erb +15 -0
- data/lib/generators/bootstrap/snippets/templates/footers/with_brand.html.erb +22 -0
- data/lib/generators/bootstrap/snippets/templates/footers/with_nav.html.erb +12 -0
- data/lib/generators/bootstrap/snippets/templates/footers/with_newsletter.html.erb +62 -0
- data/lib/generators/bootstrap/snippets/templates/headers/centered.html.erb +15 -0
- data/lib/generators/bootstrap/snippets/templates/headers/dark_double.html.erb +66 -0
- data/lib/generators/bootstrap/snippets/templates/headers/dark_search.html.erb +25 -0
- data/lib/generators/bootstrap/snippets/templates/headers/double.html.erb +28 -0
- data/lib/generators/bootstrap/snippets/templates/headers/grid_dropdown.html.erb +47 -0
- data/lib/generators/bootstrap/snippets/templates/headers/light_search.html.erb +34 -0
- data/lib/generators/bootstrap/snippets/templates/headers/nav_pills.html.erb +11 -0
- data/lib/generators/bootstrap/snippets/templates/headers/with_auth_buttons.html.erb +22 -0
- data/lib/generators/bootstrap/snippets/templates/heroes/centered.html.erb +13 -0
- data/lib/generators/bootstrap/snippets/templates/heroes/centered_screenshot.html.erb +17 -0
- data/lib/generators/bootstrap/snippets/templates/heroes/cropped_image.html.erb +17 -0
- data/lib/generators/bootstrap/snippets/templates/heroes/dark.html.erb +14 -0
- data/lib/generators/bootstrap/snippets/templates/heroes/signup_form.html.erb +26 -0
- data/lib/generators/bootstrap/snippets/templates/heroes/with_image.html.erb +17 -0
- data/lib/generators/bootstrap/snippets/templates/icons/_bootstrap_icons.html.erb +134 -0
- data/lib/generators/bootstrap/snippets/templates/jumbotrons/basic.html.erb +10 -0
- data/lib/generators/bootstrap/snippets/templates/jumbotrons/full_width.html.erb +12 -0
- data/lib/generators/bootstrap/snippets/templates/jumbotrons/placeholder.html.erb +13 -0
- data/lib/generators/bootstrap/snippets/templates/jumbotrons/with_icon.html.erb +22 -0
- data/lib/generators/bootstrap/snippets/templates/list-groups/checkable.html.erb +24 -0
- data/lib/generators/bootstrap/snippets/templates/list-groups/checkboxes.html.erb +45 -0
- data/lib/generators/bootstrap/snippets/templates/list-groups/checkboxes_expanded.html.erb +52 -0
- data/lib/generators/bootstrap/snippets/templates/list-groups/radios.html.erb +32 -0
- data/lib/generators/bootstrap/snippets/templates/list-groups/with_avatars.html.erb +36 -0
- data/lib/generators/bootstrap/snippets/templates/modals/confirm.html.erb +18 -0
- data/lib/generators/bootstrap/snippets/templates/modals/sheet.html.erb +19 -0
- data/lib/generators/bootstrap/snippets/templates/modals/signup.html.erb +44 -0
- data/lib/generators/bootstrap/snippets/templates/modals/whats_new.html.erb +41 -0
- data/lib/generators/bootstrap/snippets/templates/sidebars/collapsible.html.erb +90 -0
- data/lib/generators/bootstrap/snippets/templates/sidebars/dark.html.erb +67 -0
- data/lib/generators/bootstrap/snippets/templates/sidebars/icon_only.html.erb +59 -0
- data/lib/generators/bootstrap/snippets/templates/sidebars/light.html.erb +67 -0
- data/lib/generators/bootstrap/snippets/templates/sidebars/list_group.html.erb +94 -0
- data/lib/generators/bootstrap/starter/starter_generator.rb +37 -0
- data/lib/generators/bootstrap/starter/templates/starter.html.erb +13 -0
- data/lib/twitter/bootstrap/rails/bootstrap.rb +1 -0
- data/lib/twitter/bootstrap/rails/config.rb +54 -0
- data/lib/twitter/bootstrap/rails/engine.rb +0 -8
- data/lib/twitter/bootstrap/rails/version.rb +28 -1
- data/lib/twitter-bootstrap-rails.rb +0 -1
- data/spec/lib/generators/cdn_generator_spec.rb +42 -0
- data/spec/lib/generators/install_generator_spec.rb +148 -0
- data/spec/lib/generators/layout_generator_spec.rb +124 -0
- data/spec/lib/generators/no_hardcoded_versions_spec.rb +45 -0
- data/spec/lib/generators/snippet_generators_spec.rb +201 -0
- data/spec/lib/generators/starter_generator_spec.rb +54 -0
- data/spec/spec_helper.rb +5 -0
- data/spec/support/generator_spec_helper.rb +87 -0
- data/vendor/assets/javascripts/twitter/bootstrap/bootstrap.bundle.min.js +3 -3
- data/vendor/assets/stylesheets/twitter/bootstrap/bootstrap.min.css +3 -3
- metadata +99 -123
- data/app/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/app/assets/fonts/glyphicons-halflings-regular.svg +0 -288
- data/app/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/app/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/app/assets/fonts/glyphicons-halflings-regular.woff2 +0 -0
- data/app/helpers/glyph_helper.rb +0 -23
- data/lib/generators/bootstrap/install/templates/bootstrap.coffee +0 -3
- data/lib/generators/bootstrap/install/templates/bootstrap_and_overrides.less +0 -21
- data/spec/lib/twitter_bootstrap_rails/glyph_helper_spec.rb +0 -24
- data/vendor/assets/stylesheets/twitter-bootstrap-static/bootstrap.css.erb +0 -6684
- data/vendor/static-source/bootstrap.less +0 -1
- data/vendor/static-source/sprites.less +0 -6
- data/vendor/toolkit/twitter/bootstrap/alerts.less +0 -73
- data/vendor/toolkit/twitter/bootstrap/badges.less +0 -66
- data/vendor/toolkit/twitter/bootstrap/bootstrap.less +0 -55
- data/vendor/toolkit/twitter/bootstrap/breadcrumbs.less +0 -26
- data/vendor/toolkit/twitter/bootstrap/button-groups.less +0 -244
- data/vendor/toolkit/twitter/bootstrap/buttons.less +0 -166
- data/vendor/toolkit/twitter/bootstrap/carousel.less +0 -270
- data/vendor/toolkit/twitter/bootstrap/close.less +0 -34
- data/vendor/toolkit/twitter/bootstrap/code.less +0 -69
- data/vendor/toolkit/twitter/bootstrap/component-animations.less +0 -33
- data/vendor/toolkit/twitter/bootstrap/dropdowns.less +0 -216
- data/vendor/toolkit/twitter/bootstrap/forms.less +0 -613
- data/vendor/toolkit/twitter/bootstrap/glyphicons.less +0 -305
- data/vendor/toolkit/twitter/bootstrap/grid.less +0 -84
- data/vendor/toolkit/twitter/bootstrap/input-groups.less +0 -171
- data/vendor/toolkit/twitter/bootstrap/jumbotron.less +0 -54
- data/vendor/toolkit/twitter/bootstrap/labels.less +0 -64
- data/vendor/toolkit/twitter/bootstrap/list-group.less +0 -130
- data/vendor/toolkit/twitter/bootstrap/media.less +0 -66
- data/vendor/toolkit/twitter/bootstrap/mixins/alerts.less +0 -14
- data/vendor/toolkit/twitter/bootstrap/mixins/background-variant.less +0 -9
- data/vendor/toolkit/twitter/bootstrap/mixins/border-radius.less +0 -18
- data/vendor/toolkit/twitter/bootstrap/mixins/buttons.less +0 -65
- data/vendor/toolkit/twitter/bootstrap/mixins/center-block.less +0 -7
- data/vendor/toolkit/twitter/bootstrap/mixins/clearfix.less +0 -22
- data/vendor/toolkit/twitter/bootstrap/mixins/forms.less +0 -85
- data/vendor/toolkit/twitter/bootstrap/mixins/gradients.less +0 -59
- data/vendor/toolkit/twitter/bootstrap/mixins/grid-framework.less +0 -91
- data/vendor/toolkit/twitter/bootstrap/mixins/grid.less +0 -122
- data/vendor/toolkit/twitter/bootstrap/mixins/hide-text.less +0 -21
- data/vendor/toolkit/twitter/bootstrap/mixins/image.less +0 -33
- data/vendor/toolkit/twitter/bootstrap/mixins/labels.less +0 -12
- data/vendor/toolkit/twitter/bootstrap/mixins/list-group.less +0 -30
- data/vendor/toolkit/twitter/bootstrap/mixins/nav-divider.less +0 -10
- data/vendor/toolkit/twitter/bootstrap/mixins/nav-vertical-align.less +0 -9
- data/vendor/toolkit/twitter/bootstrap/mixins/opacity.less +0 -8
- data/vendor/toolkit/twitter/bootstrap/mixins/pagination.less +0 -24
- data/vendor/toolkit/twitter/bootstrap/mixins/panels.less +0 -24
- data/vendor/toolkit/twitter/bootstrap/mixins/progress-bar.less +0 -10
- data/vendor/toolkit/twitter/bootstrap/mixins/reset-filter.less +0 -8
- data/vendor/toolkit/twitter/bootstrap/mixins/reset-text.less +0 -18
- data/vendor/toolkit/twitter/bootstrap/mixins/resize.less +0 -6
- data/vendor/toolkit/twitter/bootstrap/mixins/responsive-visibility.less +0 -15
- data/vendor/toolkit/twitter/bootstrap/mixins/size.less +0 -10
- data/vendor/toolkit/twitter/bootstrap/mixins/tab-focus.less +0 -9
- data/vendor/toolkit/twitter/bootstrap/mixins/table-row.less +0 -28
- data/vendor/toolkit/twitter/bootstrap/mixins/text-emphasis.less +0 -9
- data/vendor/toolkit/twitter/bootstrap/mixins/text-overflow.less +0 -8
- data/vendor/toolkit/twitter/bootstrap/mixins/vendor-prefixes.less +0 -227
- data/vendor/toolkit/twitter/bootstrap/mixins.less +0 -40
- data/vendor/toolkit/twitter/bootstrap/modals.less +0 -150
- data/vendor/toolkit/twitter/bootstrap/navbar.less +0 -660
- data/vendor/toolkit/twitter/bootstrap/navs.less +0 -242
- data/vendor/toolkit/twitter/bootstrap/normalize.less +0 -424
- data/vendor/toolkit/twitter/bootstrap/pager.less +0 -54
- data/vendor/toolkit/twitter/bootstrap/pagination.less +0 -89
- data/vendor/toolkit/twitter/bootstrap/panels.less +0 -271
- data/vendor/toolkit/twitter/bootstrap/popovers.less +0 -131
- data/vendor/toolkit/twitter/bootstrap/print.less +0 -101
- data/vendor/toolkit/twitter/bootstrap/progress-bars.less +0 -87
- data/vendor/toolkit/twitter/bootstrap/responsive-embed.less +0 -35
- data/vendor/toolkit/twitter/bootstrap/responsive-utilities.less +0 -194
- data/vendor/toolkit/twitter/bootstrap/scaffolding.less +0 -161
- data/vendor/toolkit/twitter/bootstrap/tables.less +0 -234
- data/vendor/toolkit/twitter/bootstrap/theme.less +0 -291
- data/vendor/toolkit/twitter/bootstrap/thumbnails.less +0 -36
- data/vendor/toolkit/twitter/bootstrap/tooltip.less +0 -101
- data/vendor/toolkit/twitter/bootstrap/type.less +0 -302
- data/vendor/toolkit/twitter/bootstrap/utilities.less +0 -55
- data/vendor/toolkit/twitter/bootstrap/variables.less +0 -1751
- data/vendor/toolkit/twitter/bootstrap/wells.less +0 -29
- data/vendor/toolkit/twitter/bootstrap_base.less +0 -2
|
@@ -1,50 +1,35 @@
|
|
|
1
|
-
!!!
|
|
2
|
-
%html
|
|
1
|
+
!!!
|
|
2
|
+
%html{:lang => "en"}
|
|
3
3
|
%head
|
|
4
|
-
%meta
|
|
5
|
-
%meta
|
|
6
|
-
%meta(name="viewport" content="width=device-width, initial-scale=1.0")
|
|
4
|
+
%meta{:charset => "utf-8"}
|
|
5
|
+
%meta{:name => "viewport", :content => "width=device-width, initial-scale=1"}
|
|
7
6
|
%title= content_for?(:title) ? yield(:title) : "<%= app_name %>"
|
|
8
7
|
= csrf_meta_tags
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
=
|
|
13
|
-
|
|
14
|
-
= favicon_link_tag 'favicon.ico', :rel => 'shortcut icon'
|
|
15
|
-
= javascript_include_tag "application"
|
|
16
|
-
/ Le HTML5 shim, for IE6-8 support of HTML elements
|
|
17
|
-
/[if lt IE 9]
|
|
18
|
-
= javascript_include_tag "//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js"
|
|
19
|
-
|
|
8
|
+
<% if cdn? -%>
|
|
9
|
+
<%= indent_tags(css_tag, " ") %>
|
|
10
|
+
<% else -%>
|
|
11
|
+
= stylesheet_link_tag <%= stylesheet_arguments %>, :media => "all"
|
|
12
|
+
<% end -%>
|
|
20
13
|
|
|
21
14
|
%body
|
|
22
|
-
.navbar.navbar-
|
|
15
|
+
%nav.navbar.navbar-expand-lg.navbar-dark.bg-primary
|
|
23
16
|
.container
|
|
24
|
-
%
|
|
25
|
-
|
|
26
|
-
%span.icon
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
17
|
+
%a.navbar-brand{:href => "/"} <%= app_name %>
|
|
18
|
+
%button.navbar-toggler{:type => "button", "data-bs-toggle" => "collapse", "data-bs-target" => "#navbarNav", "aria-controls" => "navbarNav", "aria-expanded" => "false", "aria-label" => "Toggle navigation"}
|
|
19
|
+
%span.navbar-toggler-icon
|
|
20
|
+
#navbarNav.collapse.navbar-collapse
|
|
21
|
+
%ul.navbar-nav
|
|
22
|
+
%li.nav-item= link_to "Home", "/", :class => "nav-link"
|
|
23
|
+
|
|
24
|
+
.container.mt-4
|
|
25
|
+
= bootstrap_flash
|
|
26
|
+
= yield
|
|
27
|
+
|
|
28
|
+
%footer.mt-5.py-3.border-top
|
|
29
|
+
%p.text-body-secondary © Company #{Time.current.year}
|
|
35
30
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
.col-lg-3
|
|
42
|
-
.well.sidebar-nav
|
|
43
|
-
%h3 Sidebar
|
|
44
|
-
%ul.nav.nav-list
|
|
45
|
-
%li.nav-header Sidebar
|
|
46
|
-
%li= link_to "Link 1", "/path1"
|
|
47
|
-
%li= link_to "Link 2", "/path2"
|
|
48
|
-
%li= link_to "Link 3", "/path3"
|
|
49
|
-
%footer
|
|
50
|
-
%p © Company <%= Date.today.year %>
|
|
31
|
+
<% if cdn? -%>
|
|
32
|
+
<%= indent_tags(script_tags, " ") %>
|
|
33
|
+
<% else -%>
|
|
34
|
+
= javascript_include_tag <%= javascript_arguments %>
|
|
35
|
+
<% end -%>
|
|
@@ -2,49 +2,34 @@ doctype html
|
|
|
2
2
|
html lang="en"
|
|
3
3
|
head
|
|
4
4
|
meta charset="utf-8"
|
|
5
|
-
meta
|
|
6
|
-
meta name="viewport" content="width=device-width, initial-scale=1.0"
|
|
5
|
+
meta name="viewport" content="width=device-width, initial-scale=1"
|
|
7
6
|
title= content_for?(:title) ? yield(:title) : "<%= app_name %>"
|
|
8
7
|
= csrf_meta_tags
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
=
|
|
13
|
-
|
|
14
|
-
= favicon_link_tag 'favicon.ico', :rel => 'shortcut icon'
|
|
15
|
-
= javascript_include_tag "application"
|
|
16
|
-
/! Le HTML5 shim, for IE6-8 support of HTML elements
|
|
17
|
-
/[if lt IE 9]
|
|
18
|
-
= javascript_include_tag "//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js"
|
|
19
|
-
|
|
8
|
+
<% if cdn? -%>
|
|
9
|
+
<%= slim_tags(css_tag, " ") %>
|
|
10
|
+
<% else -%>
|
|
11
|
+
= stylesheet_link_tag <%= stylesheet_arguments %>, :media => "all"
|
|
12
|
+
<% end -%>
|
|
20
13
|
|
|
21
14
|
body
|
|
22
|
-
.navbar.navbar-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
15
|
+
nav.navbar.navbar-expand-lg.navbar-dark.bg-primary
|
|
16
|
+
.container
|
|
17
|
+
a.navbar-brand href="/" <%= app_name %>
|
|
18
|
+
button.navbar-toggler type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"
|
|
19
|
+
span.navbar-toggler-icon
|
|
20
|
+
#navbarNav.collapse.navbar-collapse
|
|
21
|
+
ul.navbar-nav
|
|
22
|
+
li.nav-item= link_to "Home", "/", class: "nav-link"
|
|
23
|
+
|
|
24
|
+
.container.mt-4
|
|
25
|
+
= bootstrap_flash
|
|
26
|
+
= yield
|
|
34
27
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
.col-lg-9
|
|
38
|
-
= bootstrap_flash
|
|
39
|
-
= yield
|
|
40
|
-
.col-lg-3
|
|
41
|
-
.well.sidebar-nav
|
|
42
|
-
h3 Sidebar
|
|
43
|
-
ul.nav.nav-list
|
|
44
|
-
li.nav-header Sidebar
|
|
45
|
-
li= link_to "Link 1", "/path1"
|
|
46
|
-
li= link_to "Link 2", "/path2"
|
|
47
|
-
li= link_to "Link 3", "/path3"
|
|
28
|
+
footer.mt-5.py-3.border-top
|
|
29
|
+
p.text-body-secondary © Company #{Time.current.year}
|
|
48
30
|
|
|
49
|
-
|
|
50
|
-
|
|
31
|
+
<% if cdn? -%>
|
|
32
|
+
<%= slim_tags(script_tags, " ") %>
|
|
33
|
+
<% else -%>
|
|
34
|
+
= javascript_include_tag <%= javascript_arguments %>
|
|
35
|
+
<% end -%>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'generators/bootstrap/snippets/snippet_base'
|
|
2
|
+
|
|
3
|
+
module Bootstrap
|
|
4
|
+
module Generators
|
|
5
|
+
# List groups from https://getbootstrap.com/docs/5.3/examples/list-groups/
|
|
6
|
+
class ListGroupGenerator < SnippetBase
|
|
7
|
+
snippet_category "list-groups"
|
|
8
|
+
|
|
9
|
+
desc "Copies a Bootstrap list groups snippet into your views. " \
|
|
10
|
+
"Run with --list to see the variants."
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'generators/bootstrap/snippets/snippet_base'
|
|
2
|
+
|
|
3
|
+
module Bootstrap
|
|
4
|
+
module Generators
|
|
5
|
+
# Modals from https://getbootstrap.com/docs/5.3/examples/modals/
|
|
6
|
+
class ModalGenerator < SnippetBase
|
|
7
|
+
snippet_category "modals"
|
|
8
|
+
|
|
9
|
+
desc "Copies a Bootstrap modals snippet into your views. " \
|
|
10
|
+
"Run with --list to see the variants."
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'generators/bootstrap/snippets/snippet_base'
|
|
2
|
+
|
|
3
|
+
module Bootstrap
|
|
4
|
+
module Generators
|
|
5
|
+
# Sidebars from https://getbootstrap.com/docs/5.3/examples/sidebars/
|
|
6
|
+
class SidebarGenerator < SnippetBase
|
|
7
|
+
snippet_category "sidebars"
|
|
8
|
+
|
|
9
|
+
desc "Copies a Bootstrap sidebars snippet into your views. " \
|
|
10
|
+
"Run with --list to see the variants."
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
require 'rails/generators'
|
|
2
|
+
require 'twitter/bootstrap/rails/version'
|
|
3
|
+
require 'generators/bootstrap/snippets/snippet_catalog'
|
|
4
|
+
|
|
5
|
+
module Bootstrap
|
|
6
|
+
module Generators
|
|
7
|
+
# Shared behaviour for the per-category snippet generators (bootstrap:header,
|
|
8
|
+
# bootstrap:hero, ...). Each subclass only declares which docs category it
|
|
9
|
+
# serves; everything else lives here.
|
|
10
|
+
class SnippetBase < ::Rails::Generators::Base
|
|
11
|
+
ICONS_PARTIAL = 'bootstrap_icons'.freeze
|
|
12
|
+
|
|
13
|
+
argument :requested_variant, :type => :string, :required => false,
|
|
14
|
+
:default => nil, :banner => 'VARIANT'
|
|
15
|
+
|
|
16
|
+
class_option :as, :type => :string,
|
|
17
|
+
:desc => 'Partial name to write (defaults to the generator name)'
|
|
18
|
+
class_option :path, :type => :string, :default => 'app/views/shared',
|
|
19
|
+
:desc => 'Directory to write the partial into'
|
|
20
|
+
class_option :list, :type => :boolean, :default => false,
|
|
21
|
+
:desc => 'List the available variants and exit'
|
|
22
|
+
class_option :icons, :type => :boolean, :default => true,
|
|
23
|
+
:desc => 'Also install the shared Bootstrap Icons sprite when the snippet needs it'
|
|
24
|
+
|
|
25
|
+
# Subclasses call `snippet_category "headers"`.
|
|
26
|
+
def self.snippet_category(category = nil)
|
|
27
|
+
@snippet_category = category if category
|
|
28
|
+
@snippet_category
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def self.source_root
|
|
32
|
+
File.expand_path("../templates", __FILE__)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.banner
|
|
36
|
+
"rails generate #{namespace} [VARIANT] [options]"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def list_variants
|
|
40
|
+
return unless options[:list]
|
|
41
|
+
|
|
42
|
+
say "#{category} variants:\n\n"
|
|
43
|
+
SnippetCatalog.variants(category).each do |v|
|
|
44
|
+
say format(" %-22s %s%s", v[:name], v[:description], v[:icons] ? " (uses icons)" : "")
|
|
45
|
+
end
|
|
46
|
+
say "\nDefault: #{SnippetCatalog.default_variant(category)}"
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def copy_snippet
|
|
50
|
+
return if options[:list]
|
|
51
|
+
|
|
52
|
+
copy_file "#{category}/#{variant_name}.html.erb", partial_path
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def copy_icons
|
|
56
|
+
return if options[:list]
|
|
57
|
+
return unless variant[:icons] && options[:icons]
|
|
58
|
+
|
|
59
|
+
copy_file "icons/_#{ICONS_PARTIAL}.html.erb",
|
|
60
|
+
File.join(options[:path], "_#{ICONS_PARTIAL}.html.erb")
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def report
|
|
64
|
+
return if options[:list]
|
|
65
|
+
|
|
66
|
+
say "\nRender it with: <%= render \"#{render_path}\" %>"
|
|
67
|
+
if variant[:icons] && options[:icons]
|
|
68
|
+
say "The snippet uses Bootstrap Icons; render the sprite once in your layout:"
|
|
69
|
+
say " <%= render \"#{icons_render_path}\" %>"
|
|
70
|
+
end
|
|
71
|
+
if variant[:images]
|
|
72
|
+
say_status :warn,
|
|
73
|
+
"This snippet references placeholder images from the Bootstrap docs site " \
|
|
74
|
+
"(e.g. bootstrap-docs.png). They will 404 until you point them at your own assets.",
|
|
75
|
+
:yellow
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
private
|
|
80
|
+
|
|
81
|
+
def category
|
|
82
|
+
self.class.snippet_category
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# The variant argument, or the category's first variant.
|
|
86
|
+
def variant_name
|
|
87
|
+
name = (requested_variant || SnippetCatalog.default_variant(category)).to_s.tr('-', '_')
|
|
88
|
+
|
|
89
|
+
unless SnippetCatalog.variant(category, name)
|
|
90
|
+
raise ::Rails::Generators::Error,
|
|
91
|
+
"Unknown #{category} variant #{name.inspect}. Available: " \
|
|
92
|
+
"#{SnippetCatalog.variant_names(category).join(', ')}. " \
|
|
93
|
+
"Run `rails g #{self.class.namespace} --list` for descriptions."
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
name
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def variant
|
|
100
|
+
SnippetCatalog.variant(category, variant_name)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def partial_name
|
|
104
|
+
options[:as] || self.class.generator_name
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def partial_path
|
|
108
|
+
File.join(options[:path], "_#{partial_name}.html.erb")
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# "app/views/shared/_header.html.erb" -> "shared/header"
|
|
112
|
+
def render_path
|
|
113
|
+
strip_view_path(partial_name)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def icons_render_path
|
|
117
|
+
strip_view_path(ICONS_PARTIAL)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def strip_view_path(name)
|
|
121
|
+
dir = options[:path].sub(%r{\Aapp/views/}, '')
|
|
122
|
+
dir.empty? ? name : File.join(dir, name)
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
module Bootstrap
|
|
2
|
+
module Generators
|
|
3
|
+
# Every snippet published at https://getbootstrap.com/docs/5.3/examples/
|
|
4
|
+
# Variants are listed in the order they appear on each docs page.
|
|
5
|
+
module SnippetCatalog
|
|
6
|
+
# generator name => docs category
|
|
7
|
+
GENERATORS = {
|
|
8
|
+
"header" => "headers",
|
|
9
|
+
"hero" => "heroes",
|
|
10
|
+
"features" => "features",
|
|
11
|
+
"sidebar" => "sidebars",
|
|
12
|
+
"footer" => "footers",
|
|
13
|
+
"dropdown" => "dropdowns",
|
|
14
|
+
"list_group" => "list-groups",
|
|
15
|
+
"modal" => "modals",
|
|
16
|
+
"badge" => "badges",
|
|
17
|
+
"breadcrumb" => "breadcrumbs",
|
|
18
|
+
"button" => "buttons",
|
|
19
|
+
"jumbotron" => "jumbotrons",
|
|
20
|
+
}.freeze
|
|
21
|
+
|
|
22
|
+
VARIANTS = {
|
|
23
|
+
"headers" => [
|
|
24
|
+
{ :name => "centered", :description => "Brand and centered nav pills with a bottom border", :icons => true, :images => false },
|
|
25
|
+
{ :name => "nav_pills", :description => "Bare centered nav pills", :icons => false, :images => false },
|
|
26
|
+
{ :name => "with_auth_buttons", :description => "Brand, nav, and Login / Sign-up buttons", :icons => true, :images => false },
|
|
27
|
+
{ :name => "dark_search", :description => "Dark bar with search box and user dropdown", :icons => true, :images => false },
|
|
28
|
+
{ :name => "light_search", :description => "Light bar with search box and user dropdown", :icons => true, :images => false },
|
|
29
|
+
{ :name => "grid_dropdown", :description => "Full-width grid header with a brand dropdown and search", :icons => true, :images => false },
|
|
30
|
+
{ :name => "double", :description => "Two-row header: utility links above, brand and nav below", :icons => true, :images => false },
|
|
31
|
+
{ :name => "dark_double", :description => "Dark two-row header with nav and search", :icons => true, :images => false },
|
|
32
|
+
],
|
|
33
|
+
"heroes" => [
|
|
34
|
+
{ :name => "centered", :description => "Centered hero with heading, lead text, and buttons", :icons => false, :images => true },
|
|
35
|
+
{ :name => "centered_screenshot", :description => "Centered hero with a screenshot below the fold", :icons => false, :images => true },
|
|
36
|
+
{ :name => "with_image", :description => "Responsive left-aligned hero with an image", :icons => false, :images => true },
|
|
37
|
+
{ :name => "signup_form", :description => "Vertically centered hero with a sign-up form", :icons => false, :images => false },
|
|
38
|
+
{ :name => "cropped_image", :description => "Bordered hero with a cropped image and shadows", :icons => false, :images => true },
|
|
39
|
+
{ :name => "dark", :description => "Dark colour hero", :icons => false, :images => false },
|
|
40
|
+
],
|
|
41
|
+
"features" => [
|
|
42
|
+
{ :name => "columns_with_icons", :description => "Three columns each led by an icon", :icons => true, :images => false },
|
|
43
|
+
{ :name => "hanging_icons", :description => "Rows with icons hanging to the left of the text", :icons => true, :images => false },
|
|
44
|
+
{ :name => "custom_cards", :description => "Feature cards with background images", :icons => true, :images => true },
|
|
45
|
+
{ :name => "icon_grid", :description => "Compact grid of icons with short descriptions", :icons => true, :images => false },
|
|
46
|
+
{ :name => "with_title", :description => "Left-aligned section title beside a feature grid", :icons => true, :images => false },
|
|
47
|
+
],
|
|
48
|
+
"sidebars" => [
|
|
49
|
+
{ :name => "dark", :description => "Dark sidebar with nav and a user dropdown", :icons => true, :images => false },
|
|
50
|
+
{ :name => "light", :description => "Light sidebar with nav and a user dropdown", :icons => true, :images => false },
|
|
51
|
+
{ :name => "icon_only", :description => "Narrow icon-only sidebar", :icons => true, :images => false },
|
|
52
|
+
{ :name => "collapsible", :description => "Sidebar with collapsible nav sections", :icons => true, :images => false },
|
|
53
|
+
{ :name => "list_group", :description => "Sidebar built from a scrollable list group", :icons => true, :images => false },
|
|
54
|
+
],
|
|
55
|
+
"footers" => [
|
|
56
|
+
{ :name => "simple", :description => "Copyright on the left, nav links on the right", :icons => true, :images => false },
|
|
57
|
+
{ :name => "with_brand", :description => "Brand mark, copyright, and social icons", :icons => true, :images => false },
|
|
58
|
+
{ :name => "with_nav", :description => "Centered nav above a centered copyright line", :icons => false, :images => false },
|
|
59
|
+
{ :name => "columns", :description => "Five columns of links with a brand column", :icons => true, :images => false },
|
|
60
|
+
{ :name => "with_newsletter", :description => "Link columns plus a newsletter sign-up form", :icons => true, :images => false },
|
|
61
|
+
],
|
|
62
|
+
"dropdowns" => [
|
|
63
|
+
{ :name => "simple", :description => "Menu of plain items with a divider", :icons => false, :images => false },
|
|
64
|
+
{ :name => "with_search", :description => "Menu with a dark header and a search field", :icons => false, :images => false },
|
|
65
|
+
{ :name => "with_icons", :description => "Menu items each led by an icon", :icons => true, :images => false },
|
|
66
|
+
{ :name => "calendar", :description => "Date picker rendered inside a dropdown", :icons => true, :images => false },
|
|
67
|
+
{ :name => "mega_menu", :description => "Wide multi-column menu with descriptions", :icons => true, :images => false },
|
|
68
|
+
],
|
|
69
|
+
"list-groups" => [
|
|
70
|
+
{ :name => "with_avatars", :description => "Items with an avatar, heading, text, and timestamp", :icons => false, :images => false },
|
|
71
|
+
{ :name => "checkboxes", :description => "Checkbox items with supporting text", :icons => false, :images => false },
|
|
72
|
+
{ :name => "checkboxes_expanded", :description => "Checkbox items that reveal more content when checked", :icons => true, :images => false },
|
|
73
|
+
{ :name => "checkable", :description => "Borderless checkable cards", :icons => false, :images => false },
|
|
74
|
+
{ :name => "radios", :description => "Radio cards with a selected state", :icons => false, :images => false },
|
|
75
|
+
],
|
|
76
|
+
"modals" => [
|
|
77
|
+
{ :name => "sheet", :description => "Bottom-docked modal sheet with a list of actions", :icons => false, :images => false },
|
|
78
|
+
{ :name => "confirm", :description => "Small confirmation dialog with two buttons", :icons => false, :images => false },
|
|
79
|
+
{ :name => "whats_new", :description => "\"What's new\" dialog listing recent features", :icons => true, :images => false },
|
|
80
|
+
{ :name => "signup", :description => "Sign-up dialog with a form and third-party buttons", :icons => true, :images => false },
|
|
81
|
+
],
|
|
82
|
+
"badges" => [
|
|
83
|
+
{ :name => "pills", :description => "Solid pill badges in every theme colour", :icons => false, :images => false },
|
|
84
|
+
{ :name => "subtle", :description => "Subtle background pill badges", :icons => false, :images => false },
|
|
85
|
+
{ :name => "subtle_bordered", :description => "Subtle pill badges with a matching border", :icons => false, :images => false },
|
|
86
|
+
{ :name => "with_avatar", :description => "Badges leading with a small round avatar", :icons => false, :images => false },
|
|
87
|
+
{ :name => "with_icons", :description => "Badges with a trailing icon", :icons => true, :images => false },
|
|
88
|
+
{ :name => "with_avatar_divider", :description => "Avatar badges split by a vertical divider", :icons => true, :images => false },
|
|
89
|
+
],
|
|
90
|
+
"breadcrumbs" => [
|
|
91
|
+
{ :name => "basic", :description => "Breadcrumb on a tinted, rounded background", :icons => false, :images => false },
|
|
92
|
+
{ :name => "with_icons", :description => "Breadcrumb whose first crumb is a home icon", :icons => true, :images => false },
|
|
93
|
+
{ :name => "chevron", :description => "Chevron separators instead of slashes", :icons => true, :images => false },
|
|
94
|
+
{ :name => "custom", :description => "Arrow-shaped crumbs joined edge to edge", :icons => true, :images => false },
|
|
95
|
+
],
|
|
96
|
+
"buttons" => [
|
|
97
|
+
{ :name => "pills", :description => "Pill buttons in every theme colour", :icons => false, :images => false },
|
|
98
|
+
{ :name => "grid", :description => "Full-width stacked buttons in a grid", :icons => false, :images => false },
|
|
99
|
+
{ :name => "with_icons", :description => "Buttons with a trailing icon", :icons => true, :images => false },
|
|
100
|
+
{ :name => "loading", :description => "Buttons with a spinner in the loading state", :icons => false, :images => false },
|
|
101
|
+
{ :name => "circle", :description => "Round icon-only buttons", :icons => true, :images => false },
|
|
102
|
+
],
|
|
103
|
+
"jumbotrons" => [
|
|
104
|
+
{ :name => "with_icon", :description => "Jumbotron led by a large SVG icon", :icons => true, :images => false },
|
|
105
|
+
{ :name => "placeholder", :description => "Faded jumbotron for placeholder content", :icons => true, :images => false },
|
|
106
|
+
{ :name => "full_width", :description => "Edge-to-edge jumbotron with a contained body", :icons => false, :images => false },
|
|
107
|
+
{ :name => "basic", :description => "Simple jumbotron inside a container", :icons => false, :images => false },
|
|
108
|
+
],
|
|
109
|
+
}.freeze
|
|
110
|
+
|
|
111
|
+
module_function
|
|
112
|
+
|
|
113
|
+
def category_for(generator_name)
|
|
114
|
+
GENERATORS.fetch(generator_name)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def variants(category)
|
|
118
|
+
VARIANTS.fetch(category)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def variant(category, name)
|
|
122
|
+
variants(category).find { |v| v[:name] == name }
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def variant_names(category)
|
|
126
|
+
variants(category).map { |v| v[:name] }
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def default_variant(category)
|
|
130
|
+
variants(category).first[:name]
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<div class="d-flex gap-2 justify-content-center py-5">
|
|
2
|
+
<span class="badge text-bg-primary rounded-pill">Primary</span>
|
|
3
|
+
<span class="badge text-bg-secondary rounded-pill">Secondary</span>
|
|
4
|
+
<span class="badge text-bg-success rounded-pill">Success</span>
|
|
5
|
+
<span class="badge text-bg-danger rounded-pill">Danger</span>
|
|
6
|
+
<span class="badge text-bg-warning rounded-pill">Warning</span>
|
|
7
|
+
<span class="badge text-bg-info rounded-pill">Info</span>
|
|
8
|
+
<span class="badge text-bg-light rounded-pill">Light</span>
|
|
9
|
+
<span class="badge text-bg-dark rounded-pill">Dark</span>
|
|
10
|
+
</div>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<div class="d-flex gap-2 justify-content-center py-5">
|
|
2
|
+
<span class="badge bg-primary-subtle text-primary-emphasis rounded-pill">Primary</span>
|
|
3
|
+
<span class="badge bg-secondary-subtle text-secondary-emphasis rounded-pill">Secondary</span>
|
|
4
|
+
<span class="badge bg-success-subtle text-success-emphasis rounded-pill">Success</span>
|
|
5
|
+
<span class="badge bg-danger-subtle text-danger-emphasis rounded-pill">Danger</span>
|
|
6
|
+
<span class="badge bg-warning-subtle text-warning-emphasis rounded-pill">Warning</span>
|
|
7
|
+
<span class="badge bg-info-subtle text-info-emphasis rounded-pill">Info</span>
|
|
8
|
+
<span class="badge bg-light-subtle text-light-emphasis rounded-pill">Light</span>
|
|
9
|
+
<span class="badge bg-dark-subtle text-dark-emphasis rounded-pill">Dark</span>
|
|
10
|
+
</div>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<div class="d-flex gap-2 justify-content-center py-5">
|
|
2
|
+
<span class="badge bg-primary-subtle border border-primary-subtle text-primary-emphasis rounded-pill">
|
|
3
|
+
Primary
|
|
4
|
+
</span>
|
|
5
|
+
<span class="badge bg-secondary-subtle border border-secondary-subtle text-secondary-emphasis rounded-pill">
|
|
6
|
+
Secondary
|
|
7
|
+
</span>
|
|
8
|
+
<span class="badge bg-success-subtle border border-success-subtle text-success-emphasis rounded-pill">
|
|
9
|
+
Success
|
|
10
|
+
</span>
|
|
11
|
+
<span class="badge bg-danger-subtle border border-danger-subtle text-danger-emphasis rounded-pill">
|
|
12
|
+
Danger
|
|
13
|
+
</span>
|
|
14
|
+
<span class="badge bg-warning-subtle border border-warning-subtle text-warning-emphasis rounded-pill">
|
|
15
|
+
Warning
|
|
16
|
+
</span>
|
|
17
|
+
<span class="badge bg-info-subtle border border-info-subtle text-info-emphasis rounded-pill">Info</span>
|
|
18
|
+
<span class="badge bg-light-subtle border border-light-subtle text-light-emphasis rounded-pill">Light</span>
|
|
19
|
+
<span class="badge bg-dark-subtle border border-dark-subtle text-dark-emphasis rounded-pill">Dark</span>
|
|
20
|
+
</div>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<div class="d-flex gap-2 justify-content-center py-5">
|
|
2
|
+
<span class="badge d-flex align-items-center p-1 pe-2 text-primary-emphasis bg-primary-subtle border border-primary-subtle rounded-pill">
|
|
3
|
+
<img class="rounded-circle me-1" width="24" height="24" src="https://github.com/mdo.png" alt="">
|
|
4
|
+
Primary
|
|
5
|
+
</span>
|
|
6
|
+
<span class="badge d-flex align-items-center p-1 pe-2 text-secondary-emphasis bg-secondary-subtle border border-secondary-subtle rounded-pill">
|
|
7
|
+
<img class="rounded-circle me-1" width="24" height="24" src="https://github.com/mdo.png" alt="">
|
|
8
|
+
Secondary
|
|
9
|
+
</span>
|
|
10
|
+
<span class="badge d-flex align-items-center p-1 pe-2 text-success-emphasis bg-success-subtle border border-success-subtle rounded-pill">
|
|
11
|
+
<img class="rounded-circle me-1" width="24" height="24" src="https://github.com/mdo.png" alt="">
|
|
12
|
+
Success
|
|
13
|
+
</span>
|
|
14
|
+
<span class="badge d-flex align-items-center p-1 pe-2 text-danger-emphasis bg-danger-subtle border border-danger-subtle rounded-pill">
|
|
15
|
+
<img class="rounded-circle me-1" width="24" height="24" src="https://github.com/mdo.png" alt="">
|
|
16
|
+
Danger
|
|
17
|
+
</span>
|
|
18
|
+
<span class="badge d-flex align-items-center p-1 pe-2 text-warning-emphasis bg-warning-subtle border border-warning-subtle rounded-pill">
|
|
19
|
+
<img class="rounded-circle me-1" width="24" height="24" src="https://github.com/mdo.png" alt="">
|
|
20
|
+
Warning
|
|
21
|
+
</span>
|
|
22
|
+
<span class="badge d-flex align-items-center p-1 pe-2 text-info-emphasis bg-info-subtle border border-info-subtle rounded-pill">
|
|
23
|
+
<img class="rounded-circle me-1" width="24" height="24" src="https://github.com/mdo.png" alt="">
|
|
24
|
+
Info
|
|
25
|
+
</span>
|
|
26
|
+
<span class="badge d-flex align-items-center p-1 pe-2 text-dark-emphasis bg-light-subtle border border-dark-subtle rounded-pill">
|
|
27
|
+
<img class="rounded-circle me-1" width="24" height="24" src="https://github.com/mdo.png" alt="">
|
|
28
|
+
Light
|
|
29
|
+
</span>
|
|
30
|
+
<span class="badge d-flex align-items-center p-1 pe-2 text-dark-emphasis bg-dark-subtle border border-dark-subtle rounded-pill">
|
|
31
|
+
<img class="rounded-circle me-1" width="24" height="24" src="https://github.com/mdo.png" alt="">
|
|
32
|
+
Dark
|
|
33
|
+
</span>
|
|
34
|
+
</div>
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
<div class="d-flex gap-2 justify-content-center py-5">
|
|
2
|
+
<span class="badge d-flex align-items-center p-1 pe-2 text-primary-emphasis bg-primary-subtle border border-primary-subtle rounded-pill">
|
|
3
|
+
<img class="rounded-circle me-1" width="24" height="24" src="https://github.com/mdo.png" alt="">
|
|
4
|
+
Primary
|
|
5
|
+
<span class="vr mx-2"></span>
|
|
6
|
+
<a href="#" aria-label="Delete primary">
|
|
7
|
+
<svg class="bi" width="16" height="16" aria-hidden="true"><use xlink:href="#x-circle-fill"></use></svg>
|
|
8
|
+
</a>
|
|
9
|
+
</span>
|
|
10
|
+
<span class="badge d-flex align-items-center p-1 pe-2 text-secondary-emphasis bg-secondary-subtle border border-secondary-subtle rounded-pill">
|
|
11
|
+
<img class="rounded-circle me-1" width="24" height="24" src="https://github.com/mdo.png" alt="">
|
|
12
|
+
Secondary
|
|
13
|
+
<span class="vr mx-2"></span>
|
|
14
|
+
<a href="#" aria-label="Delete secondary">
|
|
15
|
+
<svg class="bi" width="16" height="16" aria-hidden="true"><use xlink:href="#x-circle-fill"></use></svg>
|
|
16
|
+
</a>
|
|
17
|
+
</span>
|
|
18
|
+
<span class="badge d-flex align-items-center p-1 pe-2 text-success-emphasis bg-success-subtle border border-success-subtle rounded-pill">
|
|
19
|
+
<img class="rounded-circle me-1" width="24" height="24" src="https://github.com/mdo.png" alt="">
|
|
20
|
+
Success
|
|
21
|
+
<span class="vr mx-2"></span>
|
|
22
|
+
<a href="#" aria-label="Delete success">
|
|
23
|
+
<svg class="bi" width="16" height="16" aria-hidden="true"><use xlink:href="#x-circle-fill"></use></svg>
|
|
24
|
+
</a>
|
|
25
|
+
</span>
|
|
26
|
+
<span class="badge d-flex align-items-center p-1 pe-2 text-danger-emphasis bg-danger-subtle border border-danger-subtle rounded-pill">
|
|
27
|
+
<img class="rounded-circle me-1" width="24" height="24" src="https://github.com/mdo.png" alt="">
|
|
28
|
+
Danger
|
|
29
|
+
<span class="vr mx-2"></span>
|
|
30
|
+
<a href="#" aria-label="Delete danger">
|
|
31
|
+
<svg class="bi" width="16" height="16" aria-hidden="true"><use xlink:href="#x-circle-fill"></use></svg>
|
|
32
|
+
</a>
|
|
33
|
+
</span>
|
|
34
|
+
<span class="badge d-flex align-items-center p-1 pe-2 text-warning-emphasis bg-warning-subtle border border-warning-subtle rounded-pill">
|
|
35
|
+
<img class="rounded-circle me-1" width="24" height="24" src="https://github.com/mdo.png" alt="">
|
|
36
|
+
Warning
|
|
37
|
+
<span class="vr mx-2"></span>
|
|
38
|
+
<a href="#" aria-label="Delete warning">
|
|
39
|
+
<svg class="bi" width="16" height="16" aria-hidden="true"><use xlink:href="#x-circle-fill"></use></svg>
|
|
40
|
+
</a>
|
|
41
|
+
</span>
|
|
42
|
+
<span class="badge d-flex align-items-center p-1 pe-2 text-info-emphasis bg-info-subtle border border-info-subtle rounded-pill">
|
|
43
|
+
<img class="rounded-circle me-1" width="24" height="24" src="https://github.com/mdo.png" alt="">
|
|
44
|
+
Info
|
|
45
|
+
<span class="vr mx-2"></span>
|
|
46
|
+
<a href="#" aria-label="Delete info">
|
|
47
|
+
<svg class="bi" width="16" height="16" aria-hidden="true"><use xlink:href="#x-circle-fill"></use></svg>
|
|
48
|
+
</a>
|
|
49
|
+
</span>
|
|
50
|
+
<span class="badge d-flex align-items-center p-1 pe-2 text-light-emphasis bg-light-subtle border border-dark-subtle rounded-pill">
|
|
51
|
+
<img class="rounded-circle me-1" width="24" height="24" src="https://github.com/mdo.png" alt="">
|
|
52
|
+
Light
|
|
53
|
+
<span class="vr mx-2"></span>
|
|
54
|
+
<a href="#" aria-label="Delete light">
|
|
55
|
+
<svg class="bi" width="16" height="16" aria-hidden="true"><use xlink:href="#x-circle-fill"></use></svg>
|
|
56
|
+
</a>
|
|
57
|
+
</span>
|
|
58
|
+
<span class="badge d-flex align-items-center p-1 pe-2 text-dark-emphasis bg-dark-subtle border border-dark-subtle rounded-pill">
|
|
59
|
+
<img class="rounded-circle me-1" width="24" height="24" src="https://github.com/mdo.png" alt="">
|
|
60
|
+
Dark
|
|
61
|
+
<span class="vr mx-2"></span>
|
|
62
|
+
<a href="#" aria-label="Delete dark">
|
|
63
|
+
<svg class="bi" width="16" height="16" aria-hidden="true"><use xlink:href="#x-circle-fill"></use></svg>
|
|
64
|
+
</a>
|
|
65
|
+
</span>
|
|
66
|
+
</div>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<div class="d-flex gap-2 justify-content-center py-5">
|
|
2
|
+
<span class="badge d-flex p-2 align-items-center text-bg-primary rounded-pill">
|
|
3
|
+
<span class="px-1">Primary 1</span>
|
|
4
|
+
<a href="#" aria-label="Delete primary 1">
|
|
5
|
+
<svg class="bi ms-1" width="16" height="16" aria-hidden="true">
|
|
6
|
+
<use xlink:href="#x-circle-fill"></use>
|
|
7
|
+
</svg>
|
|
8
|
+
</a>
|
|
9
|
+
</span>
|
|
10
|
+
<span class="badge d-flex p-2 align-items-center text-primary-emphasis bg-primary-subtle rounded-pill">
|
|
11
|
+
<span class="px-1">Primary 2</span>
|
|
12
|
+
<a href="#" aria-label="Delete primary 2">
|
|
13
|
+
<svg class="bi ms-1" width="16" height="16" aria-hidden="true">
|
|
14
|
+
<use xlink:href="#x-circle-fill"></use>
|
|
15
|
+
</svg>
|
|
16
|
+
</a>
|
|
17
|
+
</span>
|
|
18
|
+
<span class="badge d-flex p-2 align-items-center text-primary-emphasis bg-primary-subtle border border-primary-subtle rounded-pill">
|
|
19
|
+
<span class="px-1">Primary 3</span>
|
|
20
|
+
<a href="#" aria-label="Delete primary 3">
|
|
21
|
+
<svg class="bi ms-1" width="16" height="16" aria-hidden="true">
|
|
22
|
+
<use xlink:href="#x-circle-fill"></use>
|
|
23
|
+
</svg>
|
|
24
|
+
</a>
|
|
25
|
+
</span>
|
|
26
|
+
</div>
|