]> git.ipfire.org Git - thirdparty/bootstrap.git/commitdiff
Switch to Hugo
authorXhmikosR <xhmikosr@gmail.com>
Wed, 4 Nov 2020 14:39:29 +0000 (16:39 +0200)
committerXhmikosR <xhmikosr@gmail.com>
Thu, 19 Nov 2020 09:22:22 +0000 (11:22 +0200)
This commit includes all the needed workarounds and most changes from the main branch for everything to work, like:

* removing empty lines in raw HTML that break output
* read .browserslistrc, CSS variables from disk instead of duplicating it
* using Hugo mounts
* using Hugo for the docs CSS/JS
* move ToC Sass code to a separate file while adapting it for Hugo

Thus, this patch makes our npm scripts faster since lint runs on one step and there's no separate docs assets processing.

325 files changed:
.eslintignore
.github/CONTRIBUTING.md
.github/workflows/docs.yml
.gitignore
.stylelintignore
Gemfile [deleted file]
Gemfile.lock [deleted file]
README.md
_config.yml [deleted file]
build/generate-sri.js
config.yml [new file with mode: 0644]
package-lock.json
package.json
scss/_root.scss
site/_data/docs-versions.yml [deleted file]
site/_includes/bugify.html [deleted file]
site/_includes/callout-info-prefersreducedmotion.md [deleted file]
site/_includes/callout.html [deleted file]
site/_includes/docs-navbar.html [deleted file]
site/_includes/docs-sidebar.html [deleted file]
site/_includes/example.html [deleted file]
site/_includes/favicons.html [deleted file]
site/_includes/footer.html [deleted file]
site/_includes/header.html [deleted file]
site/_includes/icons/bootstrap-stack.svg [deleted file]
site/_includes/icons/bootstrap.svg [deleted file]
site/_includes/icons/circle-square.svg [deleted file]
site/_includes/icons/cloud-fill.svg [deleted file]
site/_includes/icons/droplet-fill.svg [deleted file]
site/_includes/icons/github.svg [deleted file]
site/_includes/icons/menu.svg [deleted file]
site/_includes/icons/opencollective.svg [deleted file]
site/_includes/icons/placeholder.svg [deleted file]
site/_includes/icons/slack.svg [deleted file]
site/_includes/icons/twitter.svg [deleted file]
site/_includes/scripts.html [deleted file]
site/_includes/social.html [deleted file]
site/_includes/stylesheet.html [deleted file]
site/_layouts/default.html [deleted file]
site/_layouts/docs.html [deleted file]
site/_layouts/examples.html [deleted file]
site/_layouts/home.html [deleted file]
site/_layouts/simple.html [deleted file]
site/assets/js/application.js [moved from site/docs/4.5/assets/js/src/application.js with 98% similarity]
site/assets/js/ie-emulation-modes-warning.js [moved from site/docs/4.5/assets/js/src/ie-emulation-modes-warning.js with 100% similarity]
site/assets/js/search.js [moved from site/docs/4.5/assets/js/src/search.js with 100% similarity]
site/assets/js/vendor/anchor.min.js [moved from site/docs/4.5/assets/js/vendor/anchor.min.js with 100% similarity]
site/assets/js/vendor/bs-custom-file-input.min.js [moved from site/docs/4.5/assets/js/vendor/bs-custom-file-input.min.js with 100% similarity]
site/assets/js/vendor/clipboard.min.js [moved from site/docs/4.5/assets/js/vendor/clipboard.min.js with 100% similarity]
site/assets/scss/_ads.scss [moved from site/docs/4.5/assets/scss/_ads.scss with 100% similarity]
site/assets/scss/_algolia.scss [moved from site/docs/4.5/assets/scss/_algolia.scss with 100% similarity]
site/assets/scss/_anchor.scss [moved from site/docs/4.5/assets/scss/_anchor.scss with 100% similarity]
site/assets/scss/_brand.scss [moved from site/docs/4.5/assets/scss/_brand.scss with 100% similarity]
site/assets/scss/_browser-bugs.scss [moved from site/docs/4.5/assets/scss/_browser-bugs.scss with 100% similarity]
site/assets/scss/_buttons.scss [moved from site/docs/4.5/assets/scss/_buttons.scss with 100% similarity]
site/assets/scss/_callouts.scss [moved from site/docs/4.5/assets/scss/_callouts.scss with 100% similarity]
site/assets/scss/_clipboard-js.scss [moved from site/docs/4.5/assets/scss/_clipboard-js.scss with 100% similarity]
site/assets/scss/_colors.scss [moved from site/docs/4.5/assets/scss/_colors.scss with 100% similarity]
site/assets/scss/_component-examples.scss [moved from site/docs/4.5/assets/scss/_component-examples.scss with 100% similarity]
site/assets/scss/_content.scss [moved from site/docs/4.5/assets/scss/_content.scss with 100% similarity]
site/assets/scss/_footer.scss [moved from site/docs/4.5/assets/scss/_footer.scss with 100% similarity]
site/assets/scss/_masthead.scss [moved from site/docs/4.5/assets/scss/_masthead.scss with 100% similarity]
site/assets/scss/_nav.scss [moved from site/docs/4.5/assets/scss/_nav.scss with 100% similarity]
site/assets/scss/_placeholder-img.scss [moved from site/docs/4.5/assets/scss/_placeholder-img.scss with 100% similarity]
site/assets/scss/_sidebar.scss [moved from site/docs/4.5/assets/scss/_sidebar.scss with 76% similarity]
site/assets/scss/_skippy.scss [moved from site/docs/4.5/assets/scss/_skippy.scss with 100% similarity]
site/assets/scss/_syntax.scss [new file with mode: 0644]
site/assets/scss/_toc.scss [new file with mode: 0644]
site/assets/scss/_variables.scss [moved from site/docs/4.5/assets/scss/_variables.scss with 100% similarity]
site/assets/scss/docs.scss [moved from site/docs/4.5/assets/scss/docs.scss with 92% similarity]
site/content/docs/4.5/_index.html [new file with mode: 0644]
site/content/docs/4.5/about/brand.md [moved from site/docs/4.5/about/brand.md with 73% similarity]
site/content/docs/4.5/about/license.md [moved from site/docs/4.5/about/license.md with 84% similarity]
site/content/docs/4.5/about/overview.md [moved from site/docs/4.5/about/overview.md with 78% similarity]
site/content/docs/4.5/about/team.md [new file with mode: 0644]
site/content/docs/4.5/about/translations.md [moved from site/docs/4.5/about/translations.md with 69% similarity]
site/content/docs/4.5/browser-bugs.md [moved from site/docs/4.5/browser-bugs.md with 61% similarity]
site/content/docs/4.5/components/alerts.md [moved from site/docs/4.5/components/alerts.md with 75% similarity]
site/content/docs/4.5/components/badge.md [moved from site/docs/4.5/components/badge.md with 68% similarity]
site/content/docs/4.5/components/breadcrumb.md [moved from site/docs/4.5/components/breadcrumb.md with 96% similarity]
site/content/docs/4.5/components/button-group.md [moved from site/docs/4.5/components/button-group.md with 93% similarity]
site/content/docs/4.5/components/buttons.md [moved from site/docs/4.5/components/buttons.md with 81% similarity]
site/content/docs/4.5/components/card.md [moved from site/docs/4.5/components/card.md with 77% similarity]
site/content/docs/4.5/components/carousel.md [moved from site/docs/4.5/components/carousel.md with 76% similarity]
site/content/docs/4.5/components/collapse.md [moved from site/docs/4.5/components/collapse.md with 94% similarity]
site/content/docs/4.5/components/dropdowns.md [moved from site/docs/4.5/components/dropdowns.md with 93% similarity]
site/content/docs/4.5/components/forms.md [moved from site/docs/4.5/components/forms.md with 89% similarity]
site/content/docs/4.5/components/input-group.md [moved from site/docs/4.5/components/input-group.md with 94% similarity]
site/content/docs/4.5/components/jumbotron.md [moved from site/docs/4.5/components/jumbotron.md with 87% similarity]
site/content/docs/4.5/components/list-group.md [moved from site/docs/4.5/components/list-group.md with 90% similarity]
site/content/docs/4.5/components/media-object.md [moved from site/docs/4.5/components/media-object.md with 79% similarity]
site/content/docs/4.5/components/modal.md [moved from site/docs/4.5/components/modal.md with 96% similarity]
site/content/docs/4.5/components/navbar.md [moved from site/docs/4.5/components/navbar.md with 86% similarity]
site/content/docs/4.5/components/navs.md [moved from site/docs/4.5/components/navs.md with 93% similarity]
site/content/docs/4.5/components/pagination.md [moved from site/docs/4.5/components/pagination.md with 88% similarity]
site/content/docs/4.5/components/popovers.md [moved from site/docs/4.5/components/popovers.md with 87% similarity]
site/content/docs/4.5/components/progress.md [moved from site/docs/4.5/components/progress.md with 88% similarity]
site/content/docs/4.5/components/scrollspy.md [moved from site/docs/4.5/components/scrollspy.md with 95% similarity]
site/content/docs/4.5/components/spinners.md [moved from site/docs/4.5/components/spinners.md with 69% similarity]
site/content/docs/4.5/components/toasts.md [moved from site/docs/4.5/components/toasts.md with 81% similarity]
site/content/docs/4.5/components/tooltips.md [moved from site/docs/4.5/components/tooltips.md with 89% similarity]
site/content/docs/4.5/content/code.md [moved from site/docs/4.5/content/code.md with 75% similarity]
site/content/docs/4.5/content/figures.md [moved from site/docs/4.5/content/figures.md with 66% similarity]
site/content/docs/4.5/content/images.md [moved from site/docs/4.5/content/images.md with 51% similarity]
site/content/docs/4.5/content/reboot.md [moved from site/docs/4.5/content/reboot.md with 94% similarity]
site/content/docs/4.5/content/tables.md [moved from site/docs/4.5/content/tables.md with 87% similarity]
site/content/docs/4.5/content/typography.md [moved from site/docs/4.5/content/typography.md with 84% similarity]
site/content/docs/4.5/examples/.stylelintrc [moved from site/docs/4.5/examples/.stylelintrc with 100% similarity]
site/content/docs/4.5/examples/_index.md [new file with mode: 0644]
site/content/docs/4.5/examples/album/album.css [moved from site/docs/4.5/examples/album/album.css with 100% similarity]
site/content/docs/4.5/examples/album/index.html [moved from site/docs/4.5/examples/album/index.html with 85% similarity]
site/content/docs/4.5/examples/blog/blog.css [moved from site/docs/4.5/examples/blog/blog.css with 100% similarity]
site/content/docs/4.5/examples/blog/index.html [moved from site/docs/4.5/examples/blog/index.html with 97% similarity]
site/content/docs/4.5/examples/carousel/carousel.css [moved from site/docs/4.5/examples/carousel/carousel.css with 100% similarity]
site/content/docs/4.5/examples/carousel/index.html [moved from site/docs/4.5/examples/carousel/index.html with 83% similarity]
site/content/docs/4.5/examples/checkout/form-validation.css [moved from site/docs/4.5/examples/checkout/form-validation.css with 100% similarity]
site/content/docs/4.5/examples/checkout/form-validation.js [moved from site/docs/4.5/examples/checkout/form-validation.js with 100% similarity]
site/content/docs/4.5/examples/checkout/index.html [moved from site/docs/4.5/examples/checkout/index.html with 96% similarity]
site/content/docs/4.5/examples/cover/cover.css [moved from site/docs/4.5/examples/cover/cover.css with 100% similarity]
site/content/docs/4.5/examples/cover/index.html [moved from site/docs/4.5/examples/cover/index.html with 97% similarity]
site/content/docs/4.5/examples/dashboard/dashboard.css [moved from site/docs/4.5/examples/dashboard/dashboard.css with 100% similarity]
site/content/docs/4.5/examples/dashboard/dashboard.js [moved from site/docs/4.5/examples/dashboard/dashboard.js with 100% similarity]
site/content/docs/4.5/examples/dashboard/index.html [moved from site/docs/4.5/examples/dashboard/index.html with 99% similarity]
site/content/docs/4.5/examples/floating-labels/floating-labels.css [moved from site/docs/4.5/examples/floating-labels/floating-labels.css with 100% similarity]
site/content/docs/4.5/examples/floating-labels/index.html [moved from site/docs/4.5/examples/floating-labels/index.html with 79% similarity]
site/content/docs/4.5/examples/grid/grid.css [moved from site/docs/4.5/examples/grid/grid.css with 100% similarity]
site/content/docs/4.5/examples/grid/index.html [moved from site/docs/4.5/examples/grid/index.html with 99% similarity]
site/content/docs/4.5/examples/jumbotron/index.html [moved from site/docs/4.5/examples/jumbotron/index.html with 97% similarity]
site/content/docs/4.5/examples/jumbotron/jumbotron.css [moved from site/docs/4.5/examples/jumbotron/jumbotron.css with 100% similarity]
site/content/docs/4.5/examples/navbar-bottom/index.html [moved from site/docs/4.5/examples/navbar-bottom/index.html with 90% similarity]
site/content/docs/4.5/examples/navbar-fixed/index.html [moved from site/docs/4.5/examples/navbar-fixed/index.html with 88% similarity]
site/content/docs/4.5/examples/navbar-fixed/navbar-top-fixed.css [moved from site/docs/4.5/examples/navbar-fixed/navbar-top-fixed.css with 100% similarity]
site/content/docs/4.5/examples/navbar-static/index.html [moved from site/docs/4.5/examples/navbar-static/index.html with 88% similarity]
site/content/docs/4.5/examples/navbar-static/navbar-top.css [moved from site/docs/4.5/examples/navbar-static/navbar-top.css with 100% similarity]
site/content/docs/4.5/examples/navbars/index.html [moved from site/docs/4.5/examples/navbars/index.html with 97% similarity]
site/content/docs/4.5/examples/navbars/navbar.css [moved from site/docs/4.5/examples/navbars/navbar.css with 100% similarity]
site/content/docs/4.5/examples/offcanvas/index.html [moved from site/docs/4.5/examples/offcanvas/index.html with 84% similarity]
site/content/docs/4.5/examples/offcanvas/offcanvas.css [moved from site/docs/4.5/examples/offcanvas/offcanvas.css with 100% similarity]
site/content/docs/4.5/examples/offcanvas/offcanvas.js [moved from site/docs/4.5/examples/offcanvas/offcanvas.js with 100% similarity]
site/content/docs/4.5/examples/pricing/index.html [moved from site/docs/4.5/examples/pricing/index.html with 94% similarity]
site/content/docs/4.5/examples/pricing/pricing.css [moved from site/docs/4.5/examples/pricing/pricing.css with 100% similarity]
site/content/docs/4.5/examples/product/index.html [moved from site/docs/4.5/examples/product/index.html with 98% similarity]
site/content/docs/4.5/examples/product/product.css [moved from site/docs/4.5/examples/product/product.css with 100% similarity]
site/content/docs/4.5/examples/sign-in/index.html [moved from site/docs/4.5/examples/sign-in/index.html with 75% similarity]
site/content/docs/4.5/examples/sign-in/signin.css [moved from site/docs/4.5/examples/sign-in/signin.css with 100% similarity]
site/content/docs/4.5/examples/starter-template/index.html [moved from site/docs/4.5/examples/starter-template/index.html with 98% similarity]
site/content/docs/4.5/examples/starter-template/starter-template.css [moved from site/docs/4.5/examples/starter-template/starter-template.css with 100% similarity]
site/content/docs/4.5/examples/sticky-footer-navbar/index.html [moved from site/docs/4.5/examples/sticky-footer-navbar/index.html with 90% similarity]
site/content/docs/4.5/examples/sticky-footer-navbar/sticky-footer-navbar.css [moved from site/docs/4.5/examples/sticky-footer-navbar/sticky-footer-navbar.css with 100% similarity]
site/content/docs/4.5/examples/sticky-footer/index.html [moved from site/docs/4.5/examples/sticky-footer/index.html with 74% similarity]
site/content/docs/4.5/examples/sticky-footer/sticky-footer.css [moved from site/docs/4.5/examples/sticky-footer/sticky-footer.css with 100% similarity]
site/content/docs/4.5/extend/approach.md [moved from site/docs/4.5/extend/approach.md with 94% similarity]
site/content/docs/4.5/extend/icons.md [moved from site/docs/4.5/extend/icons.md with 64% similarity]
site/content/docs/4.5/getting-started/accessibility.md [moved from site/docs/4.5/getting-started/accessibility.md with 98% similarity]
site/content/docs/4.5/getting-started/best-practices.md [moved from site/docs/4.5/getting-started/best-practices.md with 86% similarity]
site/content/docs/4.5/getting-started/browsers-devices.md [moved from site/docs/4.5/getting-started/browsers-devices.md with 93% similarity]
site/content/docs/4.5/getting-started/build-tools.md [moved from site/docs/4.5/getting-started/build-tools.md with 53% similarity]
site/content/docs/4.5/getting-started/contents.md [moved from site/docs/4.5/getting-started/contents.md with 90% similarity]
site/content/docs/4.5/getting-started/download.md [moved from site/docs/4.5/getting-started/download.md with 58% similarity]
site/content/docs/4.5/getting-started/introduction.md [moved from site/docs/4.5/getting-started/introduction.md with 67% similarity]
site/content/docs/4.5/getting-started/javascript.md [moved from site/docs/4.5/getting-started/javascript.md with 89% similarity]
site/content/docs/4.5/getting-started/theming.md [moved from site/docs/4.5/getting-started/theming.md with 84% similarity]
site/content/docs/4.5/getting-started/webpack.md [moved from site/docs/4.5/getting-started/webpack.md with 76% similarity]
site/content/docs/4.5/layout/grid.md [moved from site/docs/4.5/layout/grid.md with 88% similarity]
site/content/docs/4.5/layout/overview.md [moved from site/docs/4.5/layout/overview.md with 92% similarity]
site/content/docs/4.5/layout/utilities-for-layout.md [new file with mode: 0644]
site/content/docs/4.5/migration.md [moved from site/docs/4.5/migration.md with 90% similarity]
site/content/docs/4.5/utilities/borders.md [new file with mode: 0644]
site/content/docs/4.5/utilities/clearfix.md [moved from site/docs/4.5/utilities/clearfix.md with 84% similarity]
site/content/docs/4.5/utilities/close-icon.md [moved from site/docs/4.5/utilities/close-icon.md with 80% similarity]
site/content/docs/4.5/utilities/colors.md [moved from site/docs/4.5/utilities/colors.md with 56% similarity]
site/content/docs/4.5/utilities/display.md [moved from site/docs/4.5/utilities/display.md with 82% similarity]
site/content/docs/4.5/utilities/embed.md [moved from site/docs/4.5/utilities/embed.md with 91% similarity]
site/content/docs/4.5/utilities/flex.md [moved from site/docs/4.5/utilities/flex.md with 86% similarity]
site/content/docs/4.5/utilities/float.md [moved from site/docs/4.5/utilities/float.md with 80% similarity]
site/content/docs/4.5/utilities/image-replacement.md [moved from site/docs/4.5/utilities/image-replacement.md with 64% similarity]
site/content/docs/4.5/utilities/interactions.md [moved from site/docs/4.5/utilities/interactions.md with 90% similarity]
site/content/docs/4.5/utilities/overflow.md [moved from site/docs/4.5/utilities/overflow.md with 96% similarity]
site/content/docs/4.5/utilities/position.md [moved from site/docs/4.5/utilities/position.md with 89% similarity]
site/content/docs/4.5/utilities/screen-readers.md [moved from site/docs/4.5/utilities/screen-readers.md with 65% similarity]
site/content/docs/4.5/utilities/shadows.md [moved from site/docs/4.5/utilities/shadows.md with 89% similarity]
site/content/docs/4.5/utilities/sizing.md [moved from site/docs/4.5/utilities/sizing.md with 80% similarity]
site/content/docs/4.5/utilities/spacing.md [moved from site/docs/4.5/utilities/spacing.md with 95% similarity]
site/content/docs/4.5/utilities/stretched-link.md [moved from site/docs/4.5/utilities/stretched-link.md with 82% similarity]
site/content/docs/4.5/utilities/text.md [moved from site/docs/4.5/utilities/text.md with 81% similarity]
site/content/docs/4.5/utilities/vertical-align.md [moved from site/docs/4.5/utilities/vertical-align.md with 88% similarity]
site/content/docs/4.5/utilities/visibility.md [moved from site/docs/4.5/utilities/visibility.md with 91% similarity]
site/content/docs/_index.html [new file with mode: 0644]
site/content/docs/versions.md [new file with mode: 0644]
site/data/breakpoints.yml [moved from site/_data/breakpoints.yml with 100% similarity]
site/data/browser-bugs.yml [moved from site/_data/browser-bugs.yml with 99% similarity]
site/data/browser-features.yml [moved from site/_data/browser-features.yml with 100% similarity]
site/data/colors.yml [moved from site/_data/colors.yml with 78% similarity]
site/data/core-team.yml [moved from site/_data/core-team.yml with 100% similarity]
site/data/docs-versions.yml [new file with mode: 0644]
site/data/examples.yml [moved from site/_data/examples.yml with 98% similarity]
site/data/grays.yml [moved from site/_data/grays.yml with 100% similarity]
site/data/sidebar.yml [moved from site/_data/nav.yml with 100% similarity]
site/data/theme-colors.yml [moved from site/_data/theme-colors.yml with 100% similarity]
site/data/translations.yml [moved from site/_data/translations.yml with 100% similarity]
site/docs/4.5/about/team.md [deleted file]
site/docs/4.5/assets/css/docs.min.css [deleted file]
site/docs/4.5/assets/css/docs.min.css.map [deleted file]
site/docs/4.5/assets/js/docs.min.js [deleted file]
site/docs/4.5/assets/scss/_syntax.scss [deleted file]
site/docs/4.5/examples/index.html [deleted file]
site/docs/4.5/layout/utilities-for-layout.md [deleted file]
site/docs/4.5/utilities/borders.md [deleted file]
site/docs/versions.html [deleted file]
site/favicon.ico [deleted file]
site/index.html [deleted file]
site/layouts/_default/docs.html [new file with mode: 0644]
site/layouts/_default/examples.html [new file with mode: 0644]
site/layouts/_default/home.html [new file with mode: 0644]
site/layouts/_default/redirect.html [new file with mode: 0644]
site/layouts/_default/single.html [new file with mode: 0644]
site/layouts/alias.html [new file with mode: 0644]
site/layouts/partials/ads.html [moved from site/_includes/ads.html with 100% similarity]
site/layouts/partials/analytics.html [moved from site/_includes/analytics.html with 100% similarity]
site/layouts/partials/bugify.html [new file with mode: 0644]
site/layouts/partials/callout-danger-async-methods.md [moved from site/_includes/callout-danger-async-methods.md with 50% similarity]
site/layouts/partials/callout-info-mediaqueries-breakpoints.md [moved from site/_includes/callout-info-mediaqueries-breakpoints.md with 81% similarity]
site/layouts/partials/callout-info-prefersreducedmotion.md [new file with mode: 0644]
site/layouts/partials/callout-warning-color-assistive-technologies.md [moved from site/_includes/callout-warning-color-assistive-technologies.md with 81% similarity]
site/layouts/partials/docs-navbar.html [new file with mode: 0644]
site/layouts/partials/docs-sidebar.html [new file with mode: 0644]
site/layouts/partials/favicons.html [new file with mode: 0644]
site/layouts/partials/footer.html [new file with mode: 0644]
site/layouts/partials/header.html [new file with mode: 0644]
site/layouts/partials/home/masthead-followup.html [new file with mode: 0644]
site/layouts/partials/home/masthead.html [new file with mode: 0644]
site/layouts/partials/icons/bootstrap-stack.svg [new file with mode: 0644]
site/layouts/partials/icons/bootstrap.svg [new file with mode: 0644]
site/layouts/partials/icons/circle-square.svg [new file with mode: 0644]
site/layouts/partials/icons/cloud-fill.svg [new file with mode: 0644]
site/layouts/partials/icons/code.svg [moved from site/_includes/icons/code.svg with 50% similarity]
site/layouts/partials/icons/droplet-fill.svg [new file with mode: 0644]
site/layouts/partials/icons/github.svg [new file with mode: 0644]
site/layouts/partials/icons/menu.svg [new file with mode: 0644]
site/layouts/partials/icons/opencollective.svg [new file with mode: 0644]
site/layouts/partials/icons/slack.svg [new file with mode: 0644]
site/layouts/partials/icons/twitter.svg [new file with mode: 0644]
site/layouts/partials/scripts.html [new file with mode: 0644]
site/layouts/partials/skippy.html [moved from site/_includes/skippy.html with 51% similarity]
site/layouts/partials/social.html [new file with mode: 0644]
site/layouts/partials/stylesheet.html [new file with mode: 0644]
site/layouts/robots.txt [new file with mode: 0644]
site/layouts/shortcodes/callout.html [new file with mode: 0644]
site/layouts/shortcodes/docsref.html [new file with mode: 0644]
site/layouts/shortcodes/example.html [new file with mode: 0644]
site/layouts/shortcodes/markdown.html [new file with mode: 0644]
site/layouts/shortcodes/param.html [new file with mode: 0644]
site/layouts/shortcodes/partial.html [new file with mode: 0644]
site/layouts/shortcodes/placeholder.html [new file with mode: 0644]
site/layouts/shortcodes/year.html [new file with mode: 0644]
site/layouts/sitemap.xml [new file with mode: 0644]
site/robots.txt [deleted file]
site/static/CNAME [moved from CNAME with 100% similarity]
site/static/docs/4.5/assets/brand/bootstrap-outline.svg [moved from site/docs/4.5/assets/brand/bootstrap-outline.svg with 100% similarity]
site/static/docs/4.5/assets/brand/bootstrap-punchout.svg [moved from site/docs/4.5/assets/brand/bootstrap-punchout.svg with 100% similarity]
site/static/docs/4.5/assets/brand/bootstrap-social-logo.png [moved from site/docs/4.5/assets/brand/bootstrap-social-logo.png with 100% similarity]
site/static/docs/4.5/assets/brand/bootstrap-social.png [moved from site/docs/4.5/assets/brand/bootstrap-social.png with 100% similarity]
site/static/docs/4.5/assets/brand/bootstrap-solid.svg [moved from site/docs/4.5/assets/brand/bootstrap-solid.svg with 100% similarity]
site/static/docs/4.5/assets/img/bootstrap-icons.png [moved from site/docs/4.5/assets/img/bootstrap-icons.png with 100% similarity]
site/static/docs/4.5/assets/img/bootstrap-icons@2x.png [moved from site/docs/4.5/assets/img/bootstrap-icons@2x.png with 100% similarity]
site/static/docs/4.5/assets/img/bootstrap-themes-collage.png [moved from site/docs/4.5/assets/img/bootstrap-themes-collage.png with 100% similarity]
site/static/docs/4.5/assets/img/bootstrap-themes-collage@2x.png [moved from site/docs/4.5/assets/img/bootstrap-themes-collage@2x.png with 100% similarity]
site/static/docs/4.5/assets/img/bootstrap-themes.png [moved from site/docs/4.5/assets/img/bootstrap-themes.png with 100% similarity]
site/static/docs/4.5/assets/img/bootstrap-themes@2x.png [moved from site/docs/4.5/assets/img/bootstrap-themes@2x.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/album.png [moved from site/docs/4.5/assets/img/examples/album.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/album@2x.png [moved from site/docs/4.5/assets/img/examples/album@2x.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/blog.png [moved from site/docs/4.5/assets/img/examples/blog.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/blog@2x.png [moved from site/docs/4.5/assets/img/examples/blog@2x.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/carousel.png [moved from site/docs/4.5/assets/img/examples/carousel.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/carousel@2x.png [moved from site/docs/4.5/assets/img/examples/carousel@2x.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/checkout.png [moved from site/docs/4.5/assets/img/examples/checkout.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/checkout@2x.png [moved from site/docs/4.5/assets/img/examples/checkout@2x.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/cover.png [moved from site/docs/4.5/assets/img/examples/cover.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/cover@2x.png [moved from site/docs/4.5/assets/img/examples/cover@2x.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/dashboard.png [moved from site/docs/4.5/assets/img/examples/dashboard.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/dashboard@2x.png [moved from site/docs/4.5/assets/img/examples/dashboard@2x.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/floating-labels.png [moved from site/docs/4.5/assets/img/examples/floating-labels.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/floating-labels@2x.png [moved from site/docs/4.5/assets/img/examples/floating-labels@2x.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/grid.png [moved from site/docs/4.5/assets/img/examples/grid.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/grid@2x.png [moved from site/docs/4.5/assets/img/examples/grid@2x.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/jumbotron.png [moved from site/docs/4.5/assets/img/examples/jumbotron.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/jumbotron@2x.png [moved from site/docs/4.5/assets/img/examples/jumbotron@2x.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/navbar-bottom.png [moved from site/docs/4.5/assets/img/examples/navbar-bottom.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/navbar-bottom@2x.png [moved from site/docs/4.5/assets/img/examples/navbar-bottom@2x.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/navbar-fixed.png [moved from site/docs/4.5/assets/img/examples/navbar-fixed.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/navbar-fixed@2x.png [moved from site/docs/4.5/assets/img/examples/navbar-fixed@2x.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/navbar-static.png [moved from site/docs/4.5/assets/img/examples/navbar-static.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/navbar-static@2x.png [moved from site/docs/4.5/assets/img/examples/navbar-static@2x.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/navbars.png [moved from site/docs/4.5/assets/img/examples/navbars.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/navbars@2x.png [moved from site/docs/4.5/assets/img/examples/navbars@2x.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/offcanvas.png [moved from site/docs/4.5/assets/img/examples/offcanvas.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/offcanvas@2x.png [moved from site/docs/4.5/assets/img/examples/offcanvas@2x.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/pricing.png [moved from site/docs/4.5/assets/img/examples/pricing.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/pricing@2x.png [moved from site/docs/4.5/assets/img/examples/pricing@2x.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/product.png [moved from site/docs/4.5/assets/img/examples/product.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/product@2x.png [moved from site/docs/4.5/assets/img/examples/product@2x.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/sign-in.png [moved from site/docs/4.5/assets/img/examples/sign-in.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/sign-in@2x.png [moved from site/docs/4.5/assets/img/examples/sign-in@2x.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/starter-template.png [moved from site/docs/4.5/assets/img/examples/starter-template.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/starter-template@2x.png [moved from site/docs/4.5/assets/img/examples/starter-template@2x.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/sticky-footer-navbar.png [moved from site/docs/4.5/assets/img/examples/sticky-footer-navbar.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/sticky-footer-navbar@2x.png [moved from site/docs/4.5/assets/img/examples/sticky-footer-navbar@2x.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/sticky-footer.png [moved from site/docs/4.5/assets/img/examples/sticky-footer.png with 100% similarity]
site/static/docs/4.5/assets/img/examples/sticky-footer@2x.png [moved from site/docs/4.5/assets/img/examples/sticky-footer@2x.png with 100% similarity]
site/static/docs/4.5/assets/img/favicons/android-chrome-192x192.png [moved from site/docs/4.5/assets/img/favicons/android-chrome-192x192.png with 100% similarity]
site/static/docs/4.5/assets/img/favicons/android-chrome-512x512.png [moved from site/docs/4.5/assets/img/favicons/android-chrome-512x512.png with 100% similarity]
site/static/docs/4.5/assets/img/favicons/apple-touch-icon.png [moved from site/docs/4.5/assets/img/favicons/apple-touch-icon.png with 100% similarity]
site/static/docs/4.5/assets/img/favicons/browserconfig.xml [moved from site/docs/4.5/assets/img/favicons/browserconfig.xml with 100% similarity]
site/static/docs/4.5/assets/img/favicons/favicon-16x16.png [moved from site/docs/4.5/assets/img/favicons/favicon-16x16.png with 100% similarity]
site/static/docs/4.5/assets/img/favicons/favicon-32x32.png [moved from site/docs/4.5/assets/img/favicons/favicon-32x32.png with 100% similarity]
site/static/docs/4.5/assets/img/favicons/favicon.ico [moved from site/docs/4.5/assets/img/favicons/favicon.ico with 100% similarity]
site/static/docs/4.5/assets/img/favicons/manifest.json [moved from site/docs/4.5/assets/img/favicons/manifest.json with 100% similarity]
site/static/docs/4.5/assets/img/favicons/mstile-144x144.png [moved from site/docs/4.5/assets/img/favicons/mstile-144x144.png with 100% similarity]
site/static/docs/4.5/assets/img/favicons/mstile-150x150.png [moved from site/docs/4.5/assets/img/favicons/mstile-150x150.png with 100% similarity]
site/static/docs/4.5/assets/img/favicons/mstile-310x150.png [moved from site/docs/4.5/assets/img/favicons/mstile-310x150.png with 100% similarity]
site/static/docs/4.5/assets/img/favicons/mstile-310x310.png [moved from site/docs/4.5/assets/img/favicons/mstile-310x310.png with 100% similarity]
site/static/docs/4.5/assets/img/favicons/mstile-70x70.png [moved from site/docs/4.5/assets/img/favicons/mstile-70x70.png with 100% similarity]
site/static/docs/4.5/assets/img/favicons/safari-pinned-tab.svg [moved from site/docs/4.5/assets/img/favicons/safari-pinned-tab.svg with 100% similarity]
site/static/docs/4.5/assets/js/vendor/jquery.slim.min.js [moved from site/docs/4.5/assets/js/vendor/jquery.slim.min.js with 100% similarity]
site/static/sw.js [moved from site/sw.js with 100% similarity]

index 8747d5460daa574dc47909cf767ccd31bd0874f7..ae6baae7e14d894cfe316eec5bc98ae827acb328 100644 (file)
@@ -3,4 +3,4 @@
 **/vendor/
 /_gh_pages/
 /js/coverage/
-/site/sw.js
+/site/static/sw.js
index 49639a16da826e95ec2c3d09be12c0129e44180c..d0acbc4237ecbd3e7f9802d9b09f7be3ba9a770e 100644 (file)
@@ -142,7 +142,7 @@ and/or [`/bootstrap/js/src/`](https://github.com/twbs/bootstrap/tree/v4-dev/js/s
 
 Similarly, when contributing to Bootstrap's documentation, you should edit the
 documentation source files in
-[the `/bootstrap/site/docs/` directory of the `v4-dev` branch](https://github.com/twbs/bootstrap/tree/v4-dev/site/docs).
+[the `/bootstrap/site/content/docs/` directory of the `v4-dev` branch](https://github.com/twbs/bootstrap/tree/v4-dev/site/content/docs).
 **Do not edit the `gh-pages` branch.** That branch is generated from the
 documentation source files and is managed separately by the Bootstrap Core Team.
 
index 5f2e3b96225831a0dd92be3899cdc2f08d31cabf..ac38d97ea5e65de86b98c41916a36eaa185c1369 100644 (file)
@@ -9,7 +9,6 @@ on:
 env:
   CI: true
   NODE: 14.x
-  RUBY: 2.7.x
 
 jobs:
   docs:
@@ -24,25 +23,7 @@ jobs:
         with:
           node-version: "${{ env.NODE }}"
 
-      - name: Set up Ruby
-        uses: actions/setup-ruby@v1
-        with:
-          ruby-version: ${{ env.RUBY }}
-
-      - name: Set up Ruby env
-        run: |
-          echo "gem: --no-document" > ~/.gemrc # Disable gem docs
-          bundle config set clean 'true'
-          bundle config set deployment 'true'
-
-      - name: Set up Ruby cache
-        uses: actions/cache@v2
-        with:
-          path: vendor/bundle
-          key: ${{ runner.os }}-ruby-v${{ env.RUBY }}-${{ hashFiles('Gemfile') }}-${{ hashFiles('Gemfile.lock') }}
-          restore-keys: |
-            ${{ runner.os }}-ruby-v${{ env.RUBY }}-${{ hashFiles('Gemfile') }}-${{ hashFiles('Gemfile.lock') }}
-            ${{ runner.os }}-ruby-v${{ env.RUBY }}-
+      - run: java -version
 
       - name: Set up npm cache
         uses: actions/cache@v2
@@ -53,19 +34,8 @@ jobs:
             ${{ runner.OS }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
             ${{ runner.OS }}-node-v${{ env.NODE }}-
 
-      - run: ruby --version
-      - run: gem --version
-      - run: bundle --version
-      - run: java -version
-
       - name: Install npm dependencies
         run: npm ci
 
-      - name: Install bundler dependencies
-        run: bundle install --deployment --jobs=4 --retry=3 --clean
-
-      - name: Copy CSS and JS
-        run: npm run css-copy && npm run js-copy
-
       - name: Test docs
         run: npm run docs
index a3437b8a5cab847286e6fb952eb079bec90a9028..ef7b47d4b12ae257c357a354622fec70d2eb3a34 100644 (file)
@@ -1,16 +1,8 @@
 # Ignore docs files
 /_gh_pages/
-/site/.jekyll-cache
-/site/.jekyll-metadata
-/site/docs/**/dist/
 # Hugo folders
 /resources/
 
-# Ignore ruby/bundler files
-/.bundle/
-/vendor/
-/.ruby-version
-
 # Numerous always-ignore extensions
 *.diff
 *.err
index 7bc488e5f8718d1cba9e7592bad4f00afb4d7469..e42e88938400e82e0ec972c84d3e13d00896e687 100644 (file)
@@ -2,3 +2,4 @@
 **/dist/
 **/vendor/
 /_gh_pages/
+/js/coverage/
diff --git a/Gemfile b/Gemfile
deleted file mode 100644 (file)
index 952b9dc..0000000
--- a/Gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-source 'https://rubygems.org'
-
-group :development, :test do
-  gem 'jekyll', '~> 4.1.1'
-  gem 'jekyll-redirect-from', '~> 0.16.0'
-  gem 'jekyll-sitemap', '~> 1.4.0'
-  gem 'jekyll-toc', '~> 0.15.0'
-  gem 'wdm', '~> 0.1.1', :install_if => Gem.win_platform?
-end
diff --git a/Gemfile.lock b/Gemfile.lock
deleted file mode 100644 (file)
index 194bad6..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    addressable (2.7.0)
-      public_suffix (>= 2.0.2, < 5.0)
-    colorator (1.1.0)
-    concurrent-ruby (1.1.7)
-    em-websocket (0.5.2)
-      eventmachine (>= 0.12.9)
-      http_parser.rb (~> 0.6.0)
-    eventmachine (1.2.7)
-    eventmachine (1.2.7-x64-mingw32)
-    ffi (1.13.1)
-    ffi (1.13.1-x64-mingw32)
-    forwardable-extended (2.6.0)
-    http_parser.rb (0.6.0)
-    i18n (1.8.5)
-      concurrent-ruby (~> 1.0)
-    jekyll (4.1.1)
-      addressable (~> 2.4)
-      colorator (~> 1.0)
-      em-websocket (~> 0.5)
-      i18n (~> 1.0)
-      jekyll-sass-converter (~> 2.0)
-      jekyll-watch (~> 2.0)
-      kramdown (~> 2.1)
-      kramdown-parser-gfm (~> 1.0)
-      liquid (~> 4.0)
-      mercenary (~> 0.4.0)
-      pathutil (~> 0.9)
-      rouge (~> 3.0)
-      safe_yaml (~> 1.0)
-      terminal-table (~> 1.8)
-    jekyll-redirect-from (0.16.0)
-      jekyll (>= 3.3, < 5.0)
-    jekyll-sass-converter (2.1.0)
-      sassc (> 2.0.1, < 3.0)
-    jekyll-sitemap (1.4.0)
-      jekyll (>= 3.7, < 5.0)
-    jekyll-toc (0.15.0)
-      jekyll (>= 3.8)
-      nokogiri (~> 1.10)
-    jekyll-watch (2.2.1)
-      listen (~> 3.0)
-    kramdown (2.3.0)
-      rexml
-    kramdown-parser-gfm (1.1.0)
-      kramdown (~> 2.0)
-    liquid (4.0.3)
-    listen (3.3.0)
-      rb-fsevent (~> 0.10, >= 0.10.3)
-      rb-inotify (~> 0.9, >= 0.9.10)
-    mercenary (0.4.0)
-    mini_portile2 (2.4.0)
-    nokogiri (1.10.10)
-      mini_portile2 (~> 2.4.0)
-    nokogiri (1.10.10-x64-mingw32)
-      mini_portile2 (~> 2.4.0)
-    pathutil (0.16.2)
-      forwardable-extended (~> 2.6)
-    public_suffix (4.0.6)
-    rb-fsevent (0.10.4)
-    rb-inotify (0.10.1)
-      ffi (~> 1.0)
-    rexml (3.2.4)
-    rouge (3.25.0)
-    safe_yaml (1.0.5)
-    sassc (2.4.0)
-      ffi (~> 1.9)
-    sassc (2.4.0-x64-mingw32)
-      ffi (~> 1.9)
-    terminal-table (1.8.0)
-      unicode-display_width (~> 1.1, >= 1.1.1)
-    unicode-display_width (1.7.0)
-    wdm (0.1.1)
-
-PLATFORMS
-  ruby
-  x64-mingw32
-
-DEPENDENCIES
-  jekyll (~> 4.1.1)
-  jekyll-redirect-from (~> 0.16.0)
-  jekyll-sitemap (~> 1.4.0)
-  jekyll-toc (~> 0.15.0)
-  wdm (~> 0.1.1)
-
-BUNDLED WITH
-   2.1.4
index 35ce9feaacfa41182cfaaf196ba5a69bc6c6e6da..7afa4abf70c3bdb8e467a853f40e110c45ebd6d6 100644 (file)
--- a/README.md
+++ b/README.md
@@ -111,18 +111,18 @@ Have a bug or a feature request? Please first read the [issue guidelines](https:
 
 ## Documentation
 
-Bootstrap's documentation, included in this repo in the root directory, is built with [Jekyll](https://jekyllrb.com/) and publicly hosted on GitHub Pages at <https://getbootstrap.com/>. The docs may also be run locally.
+Bootstrap's documentation, included in this repo in the root directory, is built with [Hugo](https://gohugo.io/) and publicly hosted on GitHub Pages at <https://getbootstrap.com/>. The docs may also be run locally.
 
-Documentation search is powered by [Algolia's DocSearch](https://community.algolia.com/docsearch/). Working on our search? Be sure to set `debug: true` in `site/docs/4.5/assets/js/src/search.js` file.
+Documentation search is powered by [Algolia's DocSearch](https://community.algolia.com/docsearch/). Working on our search? Be sure to set `debug: true` in `site/assets/js/src/search.js` file.
 
 ### Running documentation locally
 
-1. Run through the [tooling setup](https://getbootstrap.com/docs/4.5/getting-started/build-tools/#tooling-setup) to install Jekyll (the site builder) and other Ruby dependencies with `bundle install`.
-2. Run `npm install` to install Node.js dependencies.
+1. Run `npm install` to install the Node.js dependencies, including Hugo (the site builder).
+2. Run `npm run test` (or a specific npm script) to rebuild distributed CSS and JavaScript files, as well as our docs assets.
 3. Run `npm start` to compile CSS and JavaScript files, generate our docs, and watch for changes.
-4. Open `http://localhost:9001` in your browser, and voilà.
+4. Open `http://localhost:9001/` in your browser, and voilà.
 
-Learn more about using Jekyll by reading its [documentation](https://jekyllrb.com/docs/).
+Learn more about using Hugo by reading its [documentation](https://gohugo.io/documentation/).
 
 ### Documentation for previous releases
 
diff --git a/_config.yml b/_config.yml
deleted file mode 100644 (file)
index d22dba8..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-# Dependencies
-markdown:       kramdown
-highlighter:    rouge
-
-kramdown:
-  auto_ids:     true
-
-# Permalinks
-permalink:      pretty
-
-# Server
-source:         "site"
-destination:    ./_gh_pages
-host:           "localhost"
-port:           9001
-baseurl:        ""
-url:            "https://getbootstrap.com"
-encoding:       UTF-8
-exclude:
-  - docs/4.5/assets/scss/
-
-liquid:
-  error_mode:   strict
-
-plugins:
-  - jekyll-redirect-from
-  - jekyll-sitemap
-  - jekyll-toc
-
-redirect_from:
-  json: false
-
-# Social
-title:              Bootstrap
-description:        "The most popular HTML, CSS, and JS library in the world."
-twitter:            getbootstrap
-authors:            "Mark Otto, Jacob Thornton, and Bootstrap contributors"
-social_image_path:  /docs/4.5/assets/brand/bootstrap-social.png
-social_logo_path:   /docs/4.5/assets/brand/bootstrap-social-logo.png
-
-# Custom variables
-current_version:      4.5.3
-current_ruby_version: 4.5.3
-docs_version:         4.5
-github_org:           "https://github.com/twbs"
-repo:                 "https://github.com/twbs/bootstrap"
-slack:                "https://bootstrap-slack.herokuapp.com"
-opencollective:       "https://opencollective.com/bootstrap"
-blog:                 "https://blog.getbootstrap.com"
-expo:                 "https://expo.getbootstrap.com"
-themes:               "https://themes.getbootstrap.com"
-icons:                "https://icons.getbootstrap.com"
-
-download:
-  source:           "https://github.com/twbs/bootstrap/archive/v4.5.3.zip"
-  dist:             "https://github.com/twbs/bootstrap/releases/download/v4.5.3/bootstrap-4.5.3-dist.zip"
-  dist_examples:    "https://github.com/twbs/bootstrap/releases/download/v4.5.3/bootstrap-4.5.3-examples.zip"
-
-cdn:
-  # See https://www.srihash.org for info on how to generate the hashes
-  css:              "https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css"
-  css_hash:         "sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2"
-  js:               "https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.min.js"
-  js_hash:          "sha384-w1Q4orYjBQndcko6MimVbzY0tgp4pWB4lZ7lr30WKz0vr/aWKhXdBNmNb5D92v7s"
-  js_bundle:        "https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js"
-  js_bundle_hash:   "sha384-ho+j7jyWK8fNQe+A12Hb8AhRq26LrZ/JpcUGGOn+Y7RsweNrtN/tE3MoK7ZeZDyx"
-  jquery:           "https://code.jquery.com/jquery-3.5.1.slim.min.js"
-  jquery_hash:      "sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
-  popper:           "https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"
-  popper_hash:      "sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN"
-
-toc:
-  min_level:        2
-  max_level:        4
-  no_toc_section_class:
-    - "bd-callout"
-    - "bd-example"
index 972f8622ef275ea4de53cfe531021d7998612ec0..74264a2a0aa6443213047474e42c5c8eba1a5d1b 100644 (file)
@@ -21,11 +21,11 @@ const pkg = require('../package.json')
 
 sh.config.fatal = true
 
-const configFile = path.join(__dirname, '../_config.yml')
+const configFile = path.join(__dirname, '../config.yml')
 
 // Array of objects which holds the files to generate SRI hashes for.
 // `file` is the path from the root folder
-// `configPropertyName` is the _config.yml variable's name of the file
+// `configPropertyName` is the config.yml variable's name of the file
 const files = [
   {
     file: 'dist/css/bootstrap.min.css',
@@ -40,7 +40,7 @@ const files = [
     configPropertyName: 'js_bundle_hash'
   },
   {
-    file: `site/docs/${pkg.version_short}/assets/js/vendor/jquery.slim.min.js`,
+    file: `site/static/docs/${pkg.version_short}/assets/js/vendor/jquery.slim.min.js`,
     configPropertyName: 'jquery_hash'
   },
   {
diff --git a/config.yml b/config.yml
new file mode 100644 (file)
index 0000000..5ad2ac0
--- /dev/null
@@ -0,0 +1,79 @@
+languageCode:           "en"
+title:                  "Bootstrap"
+baseURL:                "https://getbootstrap.com"
+enableInlineShortcodes: true
+
+markup:
+  goldmark:
+    renderer:
+      unsafe:           true
+  highlight:
+    noClasses:          false
+  tableOfContents:
+    startLevel:         2
+    endLevel:           6
+
+buildDrafts:            true
+buildFuture:            true
+
+enableRobotsTXT:        true
+metaDataFormat:         "yaml"
+disableKinds:           ["404", "taxonomy", "taxonomyTerm", "RSS"]
+
+publishDir:             "_gh_pages"
+
+module:
+  mounts:
+    - source:           dist
+      target:           static/docs/4.5/dist
+    - source:           site/assets
+      target:           assets
+    - source:           site/content
+      target:           content
+    - source:           site/data
+      target:           data
+    - source:           site/layouts
+      target:           layouts
+    - source:           site/static
+      target:           static
+    - source:           site/static/docs/4.5/assets/img/favicons/apple-touch-icon.png
+      target:           static/apple-touch-icon.png
+    - source:           site/static/docs/4.5/assets/img/favicons/favicon.ico
+      target:           static/favicon.ico
+
+params:
+  description:          "The most popular HTML, CSS, and JS library in the world."
+  authors:              "Mark Otto, Jacob Thornton, and Bootstrap contributors"
+  social_image_path:    /docs/4.5/assets/brand/bootstrap-social.png
+  social_logo_path:     /docs/4.5/assets/brand/bootstrap-social-logo.png
+
+  current_version:      "4.5.3"
+  current_ruby_version: "4.5.3"
+  docs_version:         "4.5"
+  github_org:           "https://github.com/twbs"
+  repo:                 "https://github.com/twbs/bootstrap"
+  twitter:              "getbootstrap"
+  slack:                "https://bootstrap-slack.herokuapp.com/"
+  opencollective:       "https://opencollective.com/bootstrap"
+  blog:                 "https://blog.getbootstrap.com/"
+  expo:                 "https://expo.getbootstrap.com/"
+  themes:               "https://themes.getbootstrap.com/"
+  icons:                "https://icons.getbootstrap.com/"
+
+  download:
+    source:             "https://github.com/twbs/bootstrap/archive/v4.5.3.zip"
+    dist:               "https://github.com/twbs/bootstrap/releases/download/v4.5.3/bootstrap-4.5.3-dist.zip"
+    dist_examples:      "https://github.com/twbs/bootstrap/releases/download/v4.5.3/bootstrap-4.5.3-examples.zip"
+
+  cdn:
+    # See https://www.srihash.org for info on how to generate the hashes
+    css:              "https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css"
+    css_hash:         "sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2"
+    js:               "https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.min.js"
+    js_hash:          "sha384-w1Q4orYjBQndcko6MimVbzY0tgp4pWB4lZ7lr30WKz0vr/aWKhXdBNmNb5D92v7s"
+    js_bundle:        "https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js"
+    js_bundle_hash:   "sha384-ho+j7jyWK8fNQe+A12Hb8AhRq26LrZ/JpcUGGOn+Y7RsweNrtN/tE3MoK7ZeZDyx"
+    jquery:           "https://code.jquery.com/jquery-3.5.1.slim.min.js"
+    jquery_hash:      "sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
+    popper:           "https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"
+    popper_hash:      "sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN"
index 6edc8501e16850757060e24f0a460fa75b67d48f..48ad7d9cbfca60a2549b67e90a691b6b814ce62e 100644 (file)
       "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
       "dev": true
     },
+    "arch": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
+      "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
+      "dev": true
+    },
+    "archive-type": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz",
+      "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=",
+      "dev": true,
+      "requires": {
+        "file-type": "^4.2.0"
+      },
+      "dependencies": {
+        "file-type": {
+          "version": "4.4.0",
+          "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz",
+          "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=",
+          "dev": true
+        }
+      }
+    },
     "are-we-there-yet": {
       "version": "1.1.5",
       "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
       "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=",
       "dev": true
     },
+    "base64-js": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+      "dev": true
+    },
     "base64id": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
       "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==",
       "dev": true
     },
+    "bin-check": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz",
+      "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==",
+      "dev": true,
+      "requires": {
+        "execa": "^0.7.0",
+        "executable": "^4.1.0"
+      }
+    },
+    "bin-version": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz",
+      "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==",
+      "dev": true,
+      "requires": {
+        "execa": "^1.0.0",
+        "find-versions": "^3.0.0"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "6.0.5",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+          "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+          "dev": true,
+          "requires": {
+            "nice-try": "^1.0.4",
+            "path-key": "^2.0.1",
+            "semver": "^5.5.0",
+            "shebang-command": "^1.2.0",
+            "which": "^1.2.9"
+          }
+        },
+        "execa": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+          "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+          "dev": true,
+          "requires": {
+            "cross-spawn": "^6.0.0",
+            "get-stream": "^4.0.0",
+            "is-stream": "^1.1.0",
+            "npm-run-path": "^2.0.0",
+            "p-finally": "^1.0.0",
+            "signal-exit": "^3.0.0",
+            "strip-eof": "^1.0.0"
+          }
+        },
+        "is-stream": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+          "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+          "dev": true
+        },
+        "path-key": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+          "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+          "dev": true
+        },
+        "shebang-command": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+          "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+          "dev": true,
+          "requires": {
+            "shebang-regex": "^1.0.0"
+          }
+        },
+        "shebang-regex": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+          "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+          "dev": true
+        },
+        "which": {
+          "version": "1.3.1",
+          "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+          "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        }
+      }
+    },
+    "bin-version-check": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz",
+      "integrity": "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==",
+      "dev": true,
+      "requires": {
+        "bin-version": "^3.0.0",
+        "semver": "^5.6.0",
+        "semver-truncate": "^1.1.2"
+      }
+    },
+    "bin-wrapper": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz",
+      "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==",
+      "dev": true,
+      "requires": {
+        "bin-check": "^4.1.0",
+        "bin-version-check": "^4.0.0",
+        "download": "^7.1.0",
+        "import-lazy": "^3.1.0",
+        "os-filter-obj": "^2.0.0",
+        "pify": "^4.0.1"
+      },
+      "dependencies": {
+        "import-lazy": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz",
+          "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==",
+          "dev": true
+        }
+      }
+    },
     "binary": {
       "version": "0.3.0",
       "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz",
         "file-uri-to-path": "1.0.0"
       }
     },
+    "bl": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz",
+      "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==",
+      "dev": true,
+      "requires": {
+        "readable-stream": "^2.3.5",
+        "safe-buffer": "^5.1.1"
+      }
+    },
     "blob": {
       "version": "0.0.5",
       "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
         "unzipper": "^0.9.3"
       }
     },
+    "buffer": {
+      "version": "5.7.1",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+      "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+      "dev": true,
+      "requires": {
+        "base64-js": "^1.3.1",
+        "ieee754": "^1.1.13"
+      }
+    },
+    "buffer-alloc": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
+      "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
+      "dev": true,
+      "requires": {
+        "buffer-alloc-unsafe": "^1.1.0",
+        "buffer-fill": "^1.0.0"
+      }
+    },
+    "buffer-alloc-unsafe": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
+      "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
+      "dev": true
+    },
+    "buffer-crc32": {
+      "version": "0.2.13",
+      "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+      "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
+      "dev": true
+    },
+    "buffer-fill": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
+      "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
+      "dev": true
+    },
     "buffer-from": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
       "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
       "dev": true
     },
+    "caw": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz",
+      "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==",
+      "dev": true,
+      "requires": {
+        "get-proxy": "^2.0.0",
+        "isurl": "^1.0.0-alpha5",
+        "tunnel-agent": "^0.6.0",
+        "url-to-options": "^1.0.1"
+      }
+    },
     "ccount": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz",
       "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
       "dev": true
     },
+    "config-chain": {
+      "version": "1.1.12",
+      "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz",
+      "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==",
+      "dev": true,
+      "requires": {
+        "ini": "^1.3.4",
+        "proto-list": "~1.2.1"
+      }
+    },
     "configstore": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
       "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
       "dev": true
     },
+    "content-disposition": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+      "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "5.1.2"
+      }
+    },
     "content-type": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
       "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+      "dev": true
+    },
+    "decompress": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz",
+      "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==",
       "dev": true,
-      "optional": true
+      "requires": {
+        "decompress-tar": "^4.0.0",
+        "decompress-tarbz2": "^4.0.0",
+        "decompress-targz": "^4.0.0",
+        "decompress-unzip": "^4.0.1",
+        "graceful-fs": "^4.1.10",
+        "make-dir": "^1.0.0",
+        "pify": "^2.3.0",
+        "strip-dirs": "^2.0.0"
+      },
+      "dependencies": {
+        "make-dir": {
+          "version": "1.3.0",
+          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+          "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+          "dev": true,
+          "requires": {
+            "pify": "^3.0.0"
+          },
+          "dependencies": {
+            "pify": {
+              "version": "3.0.0",
+              "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+              "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+              "dev": true
+            }
+          }
+        },
+        "pify": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+          "dev": true
+        }
+      }
     },
     "decompress-response": {
       "version": "3.3.0",
         "mimic-response": "^1.0.0"
       }
     },
+    "decompress-tar": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz",
+      "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==",
+      "dev": true,
+      "requires": {
+        "file-type": "^5.2.0",
+        "is-stream": "^1.1.0",
+        "tar-stream": "^1.5.2"
+      },
+      "dependencies": {
+        "file-type": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
+          "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
+          "dev": true
+        },
+        "is-stream": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+          "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+          "dev": true
+        }
+      }
+    },
+    "decompress-tarbz2": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz",
+      "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==",
+      "dev": true,
+      "requires": {
+        "decompress-tar": "^4.1.0",
+        "file-type": "^6.1.0",
+        "is-stream": "^1.1.0",
+        "seek-bzip": "^1.0.5",
+        "unbzip2-stream": "^1.0.9"
+      },
+      "dependencies": {
+        "file-type": {
+          "version": "6.2.0",
+          "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz",
+          "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==",
+          "dev": true
+        },
+        "is-stream": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+          "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+          "dev": true
+        }
+      }
+    },
+    "decompress-targz": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz",
+      "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==",
+      "dev": true,
+      "requires": {
+        "decompress-tar": "^4.1.1",
+        "file-type": "^5.2.0",
+        "is-stream": "^1.1.0"
+      },
+      "dependencies": {
+        "file-type": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
+          "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
+          "dev": true
+        },
+        "is-stream": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+          "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+          "dev": true
+        }
+      }
+    },
+    "decompress-unzip": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz",
+      "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=",
+      "dev": true,
+      "requires": {
+        "file-type": "^3.8.0",
+        "get-stream": "^2.2.0",
+        "pify": "^2.3.0",
+        "yauzl": "^2.4.2"
+      },
+      "dependencies": {
+        "file-type": {
+          "version": "3.9.0",
+          "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
+          "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=",
+          "dev": true
+        },
+        "get-stream": {
+          "version": "2.3.1",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz",
+          "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=",
+          "dev": true,
+          "requires": {
+            "object-assign": "^4.0.1",
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "pify": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+          "dev": true
+        }
+      }
+    },
     "deep-extend": {
       "version": "0.6.0",
       "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
         "is-obj": "^2.0.0"
       }
     },
+    "download": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz",
+      "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==",
+      "dev": true,
+      "requires": {
+        "archive-type": "^4.0.0",
+        "caw": "^2.0.1",
+        "content-disposition": "^0.5.2",
+        "decompress": "^4.2.0",
+        "ext-name": "^5.0.0",
+        "file-type": "^8.1.0",
+        "filenamify": "^2.0.0",
+        "get-stream": "^3.0.0",
+        "got": "^8.3.1",
+        "make-dir": "^1.2.0",
+        "p-event": "^2.1.0",
+        "pify": "^3.0.0"
+      },
+      "dependencies": {
+        "@sindresorhus/is": {
+          "version": "0.7.0",
+          "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz",
+          "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==",
+          "dev": true
+        },
+        "cacheable-request": {
+          "version": "2.1.4",
+          "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz",
+          "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=",
+          "dev": true,
+          "requires": {
+            "clone-response": "1.0.2",
+            "get-stream": "3.0.0",
+            "http-cache-semantics": "3.8.1",
+            "keyv": "3.0.0",
+            "lowercase-keys": "1.0.0",
+            "normalize-url": "2.0.1",
+            "responselike": "1.0.2"
+          },
+          "dependencies": {
+            "lowercase-keys": {
+              "version": "1.0.0",
+              "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz",
+              "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=",
+              "dev": true
+            }
+          }
+        },
+        "get-stream": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+          "dev": true
+        },
+        "got": {
+          "version": "8.3.2",
+          "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz",
+          "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==",
+          "dev": true,
+          "requires": {
+            "@sindresorhus/is": "^0.7.0",
+            "cacheable-request": "^2.1.1",
+            "decompress-response": "^3.3.0",
+            "duplexer3": "^0.1.4",
+            "get-stream": "^3.0.0",
+            "into-stream": "^3.1.0",
+            "is-retry-allowed": "^1.1.0",
+            "isurl": "^1.0.0-alpha5",
+            "lowercase-keys": "^1.0.0",
+            "mimic-response": "^1.0.0",
+            "p-cancelable": "^0.4.0",
+            "p-timeout": "^2.0.1",
+            "pify": "^3.0.0",
+            "safe-buffer": "^5.1.1",
+            "timed-out": "^4.0.1",
+            "url-parse-lax": "^3.0.0",
+            "url-to-options": "^1.0.1"
+          }
+        },
+        "http-cache-semantics": {
+          "version": "3.8.1",
+          "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz",
+          "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==",
+          "dev": true
+        },
+        "keyv": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz",
+          "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==",
+          "dev": true,
+          "requires": {
+            "json-buffer": "3.0.0"
+          }
+        },
+        "make-dir": {
+          "version": "1.3.0",
+          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+          "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+          "dev": true,
+          "requires": {
+            "pify": "^3.0.0"
+          }
+        },
+        "normalize-url": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz",
+          "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==",
+          "dev": true,
+          "requires": {
+            "prepend-http": "^2.0.0",
+            "query-string": "^5.0.1",
+            "sort-keys": "^2.0.0"
+          }
+        },
+        "p-cancelable": {
+          "version": "0.4.1",
+          "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz",
+          "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==",
+          "dev": true
+        },
+        "p-timeout": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz",
+          "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==",
+          "dev": true,
+          "requires": {
+            "p-finally": "^1.0.0"
+          }
+        },
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+          "dev": true
+        },
+        "sort-keys": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz",
+          "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=",
+          "dev": true,
+          "requires": {
+            "is-plain-obj": "^1.0.0"
+          }
+        }
+      }
+    },
     "duplexer": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
       "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
       "dev": true
     },
+    "execa": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+      "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+      "dev": true,
+      "requires": {
+        "cross-spawn": "^5.0.1",
+        "get-stream": "^3.0.0",
+        "is-stream": "^1.1.0",
+        "npm-run-path": "^2.0.0",
+        "p-finally": "^1.0.0",
+        "signal-exit": "^3.0.0",
+        "strip-eof": "^1.0.0"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+          "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+          "dev": true,
+          "requires": {
+            "lru-cache": "^4.0.1",
+            "shebang-command": "^1.2.0",
+            "which": "^1.2.9"
+          }
+        },
+        "get-stream": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+          "dev": true
+        },
+        "is-stream": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+          "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+          "dev": true
+        },
+        "lru-cache": {
+          "version": "4.1.5",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+          "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+          "dev": true,
+          "requires": {
+            "pseudomap": "^1.0.2",
+            "yallist": "^2.1.2"
+          }
+        },
+        "shebang-command": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+          "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+          "dev": true,
+          "requires": {
+            "shebang-regex": "^1.0.0"
+          }
+        },
+        "shebang-regex": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+          "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+          "dev": true
+        },
+        "which": {
+          "version": "1.3.1",
+          "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+          "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        },
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+          "dev": true
+        }
+      }
+    },
     "execall": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz",
         "clone-regexp": "^2.1.0"
       }
     },
+    "executable": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
+      "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==",
+      "dev": true,
+      "requires": {
+        "pify": "^2.2.0"
+      },
+      "dependencies": {
+        "pify": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+          "dev": true
+        }
+      }
+    },
     "expand-brackets": {
       "version": "2.1.4",
       "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
         }
       }
     },
+    "ext-list": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz",
+      "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==",
+      "dev": true,
+      "requires": {
+        "mime-db": "^1.28.0"
+      }
+    },
+    "ext-name": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz",
+      "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==",
+      "dev": true,
+      "requires": {
+        "ext-list": "^2.0.0",
+        "sort-keys-length": "^1.0.0"
+      }
+    },
     "extend": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
         "reusify": "^1.0.4"
       }
     },
+    "fd-slicer": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+      "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
+      "dev": true,
+      "requires": {
+        "pend": "~1.2.0"
+      }
+    },
+    "figures": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+      "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+      "dev": true,
+      "requires": {
+        "escape-string-regexp": "^1.0.5"
+      }
+    },
     "file-entry-cache": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
         "flat-cache": "^2.0.1"
       }
     },
+    "file-type": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz",
+      "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==",
+      "dev": true
+    },
     "file-uri-to-path": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
       "dev": true,
       "optional": true
     },
+    "filename-reserved-regex": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz",
+      "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=",
+      "dev": true
+    },
+    "filenamify": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz",
+      "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==",
+      "dev": true,
+      "requires": {
+        "filename-reserved-regex": "^2.0.0",
+        "strip-outer": "^1.0.0",
+        "trim-repeated": "^1.0.0"
+      }
+    },
     "fill-range": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
         "path-exists": "^4.0.0"
       }
     },
+    "find-versions": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz",
+      "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==",
+      "dev": true,
+      "requires": {
+        "semver-regex": "^2.0.0"
+      }
+    },
     "flat-cache": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
       "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
       "dev": true
     },
+    "from2": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+      "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0"
+      }
+    },
+    "fs-constants": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
+      "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+      "dev": true
+    },
     "fs-extra": {
       "version": "8.1.0",
       "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
       "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
       "dev": true
     },
+    "get-proxy": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz",
+      "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==",
+      "dev": true,
+      "requires": {
+        "npm-conf": "^1.1.0"
+      }
+    },
     "get-stdin": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
       "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
       "dev": true
     },
+    "has-symbol-support-x": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz",
+      "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==",
+      "dev": true
+    },
     "has-symbols": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
       "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
       "dev": true
     },
+    "has-to-string-tag-x": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz",
+      "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==",
+      "dev": true,
+      "requires": {
+        "has-symbol-support-x": "^1.4.1"
+      }
+    },
     "has-unicode": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
         }
       }
     },
+    "hugo-bin": {
+      "version": "0.66.2",
+      "resolved": "https://registry.npmjs.org/hugo-bin/-/hugo-bin-0.66.2.tgz",
+      "integrity": "sha512-T/U35qAnzKubHzMi10uolB50e+RgHigHyAEnhGy6upCEp2H1sbDtsmqyzIhc+gMK8VIzJoU3vg/nqfpkFKOwsA==",
+      "dev": true,
+      "requires": {
+        "bin-wrapper": "^4.1.0",
+        "pkg-conf": "^3.1.0",
+        "rimraf": "^3.0.2",
+        "signale": "^1.4.0"
+      },
+      "dependencies": {
+        "rimraf": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+          "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+          "dev": true,
+          "requires": {
+            "glob": "^7.1.3"
+          }
+        }
+      }
+    },
     "iconv-lite": {
       "version": "0.4.24",
       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
         "safer-buffer": ">= 2.1.2 < 3"
       }
     },
+    "ieee754": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+      "dev": true
+    },
     "ignore": {
       "version": "4.0.6",
       "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
       "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
       "dev": true
     },
+    "into-stream": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz",
+      "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=",
+      "dev": true,
+      "requires": {
+        "from2": "^2.1.1",
+        "p-is-promise": "^1.1.0"
+      }
+    },
     "ip": {
       "version": "1.1.5",
       "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
       "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=",
       "dev": true
     },
+    "is-natural-number": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz",
+      "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=",
+      "dev": true
+    },
     "is-negative-zero": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz",
       "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
       "dev": true
     },
+    "is-object": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz",
+      "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=",
+      "dev": true
+    },
     "is-path-inside": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz",
       "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==",
       "dev": true
     },
+    "is-retry-allowed": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz",
+      "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==",
+      "dev": true
+    },
     "is-stream": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
         "istanbul-lib-report": "^3.0.0"
       }
     },
+    "isurl": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz",
+      "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==",
+      "dev": true,
+      "requires": {
+        "has-to-string-tag-x": "^1.2.0",
+        "is-object": "^1.0.1"
+      }
+    },
     "jquery": {
       "version": "3.5.1",
       "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz",
       "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==",
       "dev": true
     },
+    "npm-conf": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz",
+      "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==",
+      "dev": true,
+      "requires": {
+        "config-chain": "^1.1.11",
+        "pify": "^3.0.0"
+      },
+      "dependencies": {
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+          "dev": true
+        }
+      }
+    },
     "npm-run-all": {
       "version": "4.1.5",
       "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz",
         }
       }
     },
+    "npm-run-path": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+      "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+      "dev": true,
+      "requires": {
+        "path-key": "^2.0.0"
+      },
+      "dependencies": {
+        "path-key": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+          "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+          "dev": true
+        }
+      }
+    },
     "npmlog": {
       "version": "4.1.2",
       "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
         }
       }
     },
-    "p-cancelable": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
-      "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
-      "dev": true
-    },
+    "os-filter-obj": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz",
+      "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==",
+      "dev": true,
+      "requires": {
+        "arch": "^2.1.0"
+      }
+    },
+    "p-cancelable": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
+      "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
+      "dev": true
+    },
+    "p-event": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz",
+      "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==",
+      "dev": true,
+      "requires": {
+        "p-timeout": "^2.0.1"
+      },
+      "dependencies": {
+        "p-timeout": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz",
+          "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==",
+          "dev": true,
+          "requires": {
+            "p-finally": "^1.0.0"
+          }
+        }
+      }
+    },
     "p-finally": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
       "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
       "dev": true
     },
+    "p-is-promise": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz",
+      "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=",
+      "dev": true
+    },
     "p-limit": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
         }
       }
     },
+    "pend": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+      "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+      "dev": true
+    },
     "performance-now": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
         "pinkie": "^2.0.0"
       }
     },
+    "pkg-conf": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz",
+      "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==",
+      "dev": true,
+      "requires": {
+        "find-up": "^3.0.0",
+        "load-json-file": "^5.2.0"
+      },
+      "dependencies": {
+        "find-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+          "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+          "dev": true,
+          "requires": {
+            "locate-path": "^3.0.0"
+          }
+        },
+        "load-json-file": {
+          "version": "5.3.0",
+          "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz",
+          "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==",
+          "dev": true,
+          "requires": {
+            "graceful-fs": "^4.1.15",
+            "parse-json": "^4.0.0",
+            "pify": "^4.0.1",
+            "strip-bom": "^3.0.0",
+            "type-fest": "^0.3.0"
+          }
+        },
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+          "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+          "dev": true,
+          "requires": {
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+          "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.0.0"
+          }
+        },
+        "parse-json": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+          "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+          "dev": true,
+          "requires": {
+            "error-ex": "^1.3.1",
+            "json-parse-better-errors": "^1.0.1"
+          }
+        },
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+          "dev": true
+        },
+        "type-fest": {
+          "version": "0.3.1",
+          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz",
+          "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==",
+          "dev": true
+        }
+      }
+    },
     "pkg-dir": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
       "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
       "dev": true
     },
+    "proto-list": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+      "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
+      "dev": true
+    },
+    "pseudomap": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+      "dev": true
+    },
     "psl": {
       "version": "1.8.0",
       "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
       "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
       "dev": true
     },
+    "query-string": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz",
+      "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==",
+      "dev": true,
+      "requires": {
+        "decode-uri-component": "^0.2.0",
+        "object-assign": "^4.1.0",
+        "strict-uri-encode": "^1.0.0"
+      }
+    },
     "quick-lru": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
         }
       }
     },
+    "seek-bzip": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz",
+      "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==",
+      "dev": true,
+      "requires": {
+        "commander": "^2.8.1"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "2.20.3",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+          "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+          "dev": true
+        }
+      }
+    },
     "semver": {
       "version": "5.7.1",
       "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
         }
       }
     },
+    "semver-regex": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz",
+      "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==",
+      "dev": true
+    },
+    "semver-truncate": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz",
+      "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=",
+      "dev": true,
+      "requires": {
+        "semver": "^5.3.0"
+      }
+    },
     "send": {
       "version": "0.17.1",
       "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
         "rechoir": "^0.6.2"
       }
     },
-    "shx": {
-      "version": "0.3.3",
-      "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.3.tgz",
-      "integrity": "sha512-nZJ3HFWVoTSyyB+evEKjJ1STiixGztlqwKLTUNV5KqMWtGey9fTd4KU1gdZ1X9BV6215pswQ/Jew9NsuS/fNDA==",
-      "dev": true,
-      "requires": {
-        "minimist": "^1.2.3",
-        "shelljs": "^0.8.4"
-      }
-    },
     "signal-exit": {
       "version": "3.0.3",
       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
       "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
       "dev": true
     },
+    "signale": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz",
+      "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.3.2",
+        "figures": "^2.0.0",
+        "pkg-conf": "^2.1.0"
+      },
+      "dependencies": {
+        "find-up": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+          "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+          "dev": true,
+          "requires": {
+            "locate-path": "^2.0.0"
+          }
+        },
+        "load-json-file": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+          "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+          "dev": true,
+          "requires": {
+            "graceful-fs": "^4.1.2",
+            "parse-json": "^4.0.0",
+            "pify": "^3.0.0",
+            "strip-bom": "^3.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+          "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+          "dev": true,
+          "requires": {
+            "p-locate": "^2.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "p-limit": {
+          "version": "1.3.0",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+          "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+          "dev": true,
+          "requires": {
+            "p-try": "^1.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+          "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+          "dev": true,
+          "requires": {
+            "p-limit": "^1.1.0"
+          }
+        },
+        "p-try": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+          "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+          "dev": true
+        },
+        "parse-json": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+          "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+          "dev": true,
+          "requires": {
+            "error-ex": "^1.3.1",
+            "json-parse-better-errors": "^1.0.1"
+          }
+        },
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+          "dev": true
+        },
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+          "dev": true
+        },
+        "pkg-conf": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz",
+          "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=",
+          "dev": true,
+          "requires": {
+            "find-up": "^2.0.0",
+            "load-json-file": "^4.0.0"
+          }
+        }
+      }
+    },
     "sinon": {
       "version": "7.5.0",
       "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.5.0.tgz",
         }
       }
     },
+    "sort-keys": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
+      "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+      "dev": true,
+      "requires": {
+        "is-plain-obj": "^1.0.0"
+      }
+    },
+    "sort-keys-length": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz",
+      "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=",
+      "dev": true,
+      "requires": {
+        "sort-keys": "^1.0.0"
+      }
+    },
     "source-map": {
       "version": "0.5.7",
       "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
         }
       }
     },
+    "strict-uri-encode": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
+      "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
+      "dev": true
+    },
     "string-width": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
       "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
       "dev": true
     },
+    "strip-dirs": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz",
+      "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==",
+      "dev": true,
+      "requires": {
+        "is-natural-number": "^4.0.1"
+      }
+    },
+    "strip-eof": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+      "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+      "dev": true
+    },
     "strip-indent": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
       "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
       "dev": true
     },
+    "strip-outer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz",
+      "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==",
+      "dev": true,
+      "requires": {
+        "escape-string-regexp": "^1.0.2"
+      }
+    },
     "style-search": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
         }
       }
     },
+    "tar-stream": {
+      "version": "1.6.2",
+      "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz",
+      "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==",
+      "dev": true,
+      "requires": {
+        "bl": "^1.0.0",
+        "buffer-alloc": "^1.2.0",
+        "end-of-stream": "^1.0.0",
+        "fs-constants": "^1.0.0",
+        "readable-stream": "^2.3.0",
+        "to-buffer": "^1.1.1",
+        "xtend": "^4.0.0"
+      }
+    },
     "term-size": {
       "version": "2.2.1",
       "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz",
       "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
       "dev": true
     },
+    "through": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+      "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+      "dev": true
+    },
+    "timed-out": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
+      "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
+      "dev": true
+    },
     "tiny-glob": {
       "version": "0.2.6",
       "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.6.tgz",
       "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=",
       "dev": true
     },
+    "to-buffer": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
+      "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==",
+      "dev": true
+    },
     "to-fast-properties": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
       "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==",
       "dev": true
     },
+    "trim-repeated": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
+      "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=",
+      "dev": true,
+      "requires": {
+        "escape-string-regexp": "^1.0.2"
+      }
+    },
     "trim-trailing-lines": {
       "version": "1.1.4",
       "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz",
       "integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==",
       "dev": true
     },
+    "unbzip2-stream": {
+      "version": "1.4.3",
+      "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
+      "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==",
+      "dev": true,
+      "requires": {
+        "buffer": "^5.2.1",
+        "through": "^2.3.8"
+      }
+    },
     "undefsafe": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz",
         "prepend-http": "^2.0.0"
       }
     },
+    "url-to-options": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz",
+      "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=",
+      "dev": true
+    },
     "use": {
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
         "decamelize": "^1.2.0"
       }
     },
+    "yauzl": {
+      "version": "2.10.0",
+      "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+      "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
+      "dev": true,
+      "requires": {
+        "buffer-crc32": "~0.2.3",
+        "fd-slicer": "~1.1.0"
+      }
+    },
     "yeast": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
index 87ff00cba7a8e431d55bc1cbd078084ee66c813b..2a66705d54f17481a391bba265ef54e78b202c9e 100644 (file)
   "scripts": {
     "start": "npm-run-all --parallel watch docs-serve",
     "bundlewatch": "bundlewatch --config .bundlewatch.config.json",
-    "css": "npm-run-all css-compile css-prefix css-minify css-copy",
-    "css-copy": "cross-env-shell shx mkdir -p site/docs/$npm_package_version_short/dist/ && cross-env-shell shx cp -r dist/css/ site/docs/$npm_package_version_short/dist/",
-    "css-main": "npm-run-all css-lint css-compile-main css-prefix-main css-minify-main css-copy",
-    "css-docs": "npm-run-all css-compile-docs css-prefix-docs css-minify-docs",
-    "css-compile": "npm-run-all --parallel css-compile-*",
-    "css-compile-main": "node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 scss/ -o dist/css/ && npm run css-copy",
-    "css-compile-docs": "cross-env-shell node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 site/docs/$npm_package_version_short/assets/scss/docs.scss site/docs/$npm_package_version_short/assets/css/docs.min.css",
+    "css": "npm-run-all css-compile css-prefix css-minify",
+    "css-compile": "node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 scss/ -o dist/css/",
     "css-lint": "npm-run-all --continue-on-error --parallel css-lint-*",
-    "css-lint-main": "stylelint \"scss/**/*.scss\" --cache --cache-location .cache/.stylelintcache --rd",
-    "css-lint-docs": "stylelint \"site/docs/**/assets/scss/*.scss\" \"site/docs/**/*.css\" --cache --cache-location .cache/.stylelintcache",
-    "css-lint-vars": "fusv scss/ site/docs/",
-    "css-minify": "npm-run-all --parallel css-minify-*",
-    "css-minify-main": "cleancss -O1 --format breakWith=lf --source-map --source-map-inline-sources --output dist/css/bootstrap.min.css dist/css/bootstrap.css && cleancss -O1 --format breakWith=lf --source-map --source-map-inline-sources --output dist/css/bootstrap-grid.min.css dist/css/bootstrap-grid.css && cleancss -O1 --format breakWith=lf --source-map --source-map-inline-sources --output dist/css/bootstrap-reboot.min.css dist/css/bootstrap-reboot.css",
-    "css-minify-docs": "cross-env-shell cleancss -O1 --format breakWith=lf --source-map --source-map-inline-sources --output site/docs/$npm_package_version_short/assets/css/docs.min.css site/docs/$npm_package_version_short/assets/css/docs.min.css",
+    "css-lint-stylelint": "stylelint \"**/*.{css,scss}\" --cache --cache-location .cache/.stylelintcache --rd",
+    "css-lint-vars": "fusv scss/ site/assets/scss/",
+    "css-minify": "cleancss -O1 --format breakWith=lf --source-map --source-map-inline-sources --output dist/css/bootstrap.min.css dist/css/bootstrap.css && cleancss -O1 --format breakWith=lf --source-map --source-map-inline-sources --output dist/css/bootstrap-grid.min.css dist/css/bootstrap-grid.css && cleancss -O1 --format breakWith=lf --source-map --source-map-inline-sources --output dist/css/bootstrap-reboot.min.css dist/css/bootstrap-reboot.css",
     "css-prefix": "npm-run-all --parallel css-prefix-*",
     "css-prefix-main": "postcss --config build/postcss.config.js --replace \"dist/css/*.css\" \"!dist/css/*.min.css\"",
-    "css-prefix-docs": "postcss --config build/postcss.config.js --replace \"site/docs/**/*.css\"",
-    "js": "npm-run-all js-compile js-minify js-copy",
-    "js-copy": "cross-env-shell shx mkdir -p site/docs/$npm_package_version_short/dist/ && cross-env-shell shx cp -r dist/js/ site/docs/$npm_package_version_short/dist/",
-    "js-main": "npm-run-all js-lint js-compile js-minify-main",
-    "js-docs": "npm-run-all js-lint-docs js-minify-docs",
-    "js-compile": "npm-run-all --parallel js-compile-* --sequential js-copy",
+    "css-prefix-examples": "postcss --config build/postcss.config.js --replace \"site/content/**/*.css\"",
+    "js": "npm-run-all js-compile js-minify",
+    "js-compile": "npm-run-all --parallel js-compile-*",
     "js-compile-standalone": "rollup --environment BUNDLE:false --config build/rollup.config.js --sourcemap",
     "js-compile-bundle": "rollup --environment BUNDLE:true --config build/rollup.config.js --sourcemap",
     "js-compile-plugins": "node build/build-plugins.js",
     "js-compile-plugins-coverage": "cross-env NODE_ENV=test node build/build-plugins.js",
-    "js-lint": "npm-run-all --continue-on-error --parallel js-lint-*",
-    "js-lint-main": "eslint --report-unused-disable-directives --cache --cache-location .cache/.eslintcache js/src js/tests build/",
-    "js-lint-docs": "eslint --report-unused-disable-directives --cache --cache-location .cache/.eslintcache site/",
-    "js-minify": "npm-run-all --parallel js-minify-main js-minify-docs",
-    "js-minify-main": "npm-run-all js-minify-standalone js-minify-bundle",
+    "js-lint": "eslint --cache --cache-location .cache/.eslintcache --report-unused-disable-directives .",
+    "js-minify": "npm-run-all --parallel js-minify-*",
     "js-minify-standalone": "terser --compress typeofs=false --mangle --comments \"/^!/\" --source-map \"content=dist/js/bootstrap.js.map,includeSources,url=bootstrap.min.js.map\" --output dist/js/bootstrap.min.js dist/js/bootstrap.js",
     "js-minify-bundle": "terser --compress typeofs=false --mangle --comments \"/^!/\" --source-map \"content=dist/js/bootstrap.bundle.js.map,includeSources,url=bootstrap.bundle.min.js.map\" --output dist/js/bootstrap.bundle.min.js dist/js/bootstrap.bundle.js",
-    "js-minify-docs": "cross-env-shell terser --mangle --comments \\\"/^!/\\\" --output site/docs/$npm_package_version_short/assets/js/docs.min.js site/docs/$npm_package_version_short/assets/js/vendor/anchor.min.js site/docs/$npm_package_version_short/assets/js/vendor/clipboard.min.js site/docs/$npm_package_version_short/assets/js/vendor/bs-custom-file-input.min.js \"site/docs/$npm_package_version_short/assets/js/src/*.js\"",
     "js-test": "npm-run-all js-test-karma* js-test-integration",
     "js-test-karma": "karma start js/tests/karma.conf.js",
     "js-test-karma-old": "cross-env USE_OLD_JQUERY=true npm run js-test-karma",
     "js-test-integration": "rollup --config js/tests/integration/rollup.bundle.js",
     "js-test-cloud": "cross-env BROWSER=true npm run js-test-karma",
     "lint": "npm-run-all --parallel js-lint css-lint lockfile-lint",
-    "docs": "npm-run-all css-docs js-docs docs-build docs-lint",
-    "docs-build": "bundle exec jekyll build",
+    "docs": "npm-run-all docs-build docs-lint",
+    "docs-build": "hugo --cleanDestinationDir",
     "docs-compile": "npm run docs-build",
-    "docs-production": "cross-env JEKYLL_ENV=production npm run docs-build",
-    "docs-netlify": "cross-env JEKYLL_ENV=netlify npm run docs-build",
     "docs-linkinator": "linkinator _gh_pages --recurse --silent --skip \"^(?!http://localhost)\"",
     "docs-vnu": "node build/vnu-jar.js",
     "docs-lint": "npm-run-all --parallel docs-vnu docs-linkinator",
-    "docs-serve": "bundle exec jekyll serve",
-    "docs-serve-only": "npm run docs-serve -- --skip-initial-build --no-watch",
+    "docs-serve": "hugo server --port 9001 --disableFastRender",
+    "docs-serve-only": "npx sirv-cli _gh_pages --port 9001",
     "lockfile-lint": "lockfile-lint --allowed-hosts npm --allowed-schemes https: --empty-hostname false --type npm --path package-lock.json",
-    "update-deps": "ncu -u -x \"jquery,karma-browserstack-launcher,sinon,terser\" && npm update && bundle update && cross-env-shell echo Manually update \\\"site/docs/$npm_package_version_short/assets/js/vendor/\\\"",
-    "release": "npm-run-all dist release-sri docs-production release-zip*",
+    "update-deps": "ncu -u -x \"jquery,karma-browserstack-launcher,sinon,terser\" && npm update && echo Manually update site/assets/js/vendor",
+    "release": "npm-run-all dist release-sri docs-build release-zip*",
     "release-sri": "node build/generate-sri.js",
     "release-version": "node build/change-version.js",
-    "release-zip": "cross-env-shell \"shx rm -rf bootstrap-$npm_package_version-dist && shx cp -r dist/ bootstrap-$npm_package_version-dist && zip -r9 bootstrap-$npm_package_version-dist.zip bootstrap-$npm_package_version-dist && shx rm -rf bootstrap-$npm_package_version-dist\"",
+    "release-zip": "cross-env-shell \"rm -rf bootstrap-$npm_package_version-dist && cp -r dist/ bootstrap-$npm_package_version-dist && zip -r9 bootstrap-$npm_package_version-dist.zip bootstrap-$npm_package_version-dist && rm -rf bootstrap-$npm_package_version-dist\"",
     "release-zip-examples": "node build/zip-examples.js",
     "dist": "npm-run-all --parallel css js",
     "test": "npm-run-all lint dist js-test docs-build docs-lint",
-    "netlify": "npm-run-all dist release-sri docs-netlify",
+    "netlify": "cross-env-shell HUGO_BASEURL=$DEPLOY_PRIME_URL npm-run-all dist release-sri docs-build",
     "watch": "npm-run-all --parallel watch-*",
-    "watch-css-main": "nodemon --watch scss/ --ext scss --exec \"npm run css-main\"",
-    "watch-css-docs": "nodemon --watch \"site/docs/**/assets/scss/\" --ext scss --exec \"npm run css-docs\"",
-    "watch-js-main": "nodemon --watch js/src/ --ext js --exec \"npm run js-compile\"",
-    "watch-js-docs": "nodemon --watch \"site/docs/**/assets/js/src/\" --ext js --exec \"npm run js-docs\""
+    "watch-css-main": "nodemon --watch scss/ --ext scss --exec \"npm-run-all css-lint css-compile css-prefix\"",
+    "watch-css-docs": "nodemon --watch site/assets/scss/ --ext scss --exec \"npm run css-lint\"",
+    "watch-js-main": "nodemon --watch js/src/ --ext js --exec \"npm-run-all js-lint js-compile\"",
+    "watch-js-docs": "nodemon --watch site/assets/js/ --ext js --exec \"npm run js-lint\""
   },
   "style": "dist/css/bootstrap.css",
   "sass": "scss/bootstrap.scss",
     "find-unused-sass-variables": "^3.0.0",
     "glob": "^7.1.6",
     "hammer-simulator": "0.0.1",
+    "hugo-bin": "^0.66.2",
     "ip": "^1.1.5",
     "jquery": "^3.5.1",
     "karma": "^5.2.3",
     "qunit": "^2.12.0",
     "rollup": "^2.33.1",
     "shelljs": "^0.8.4",
-    "shx": "^0.3.3",
     "sinon": "^7.5.0",
     "stylelint": "^13.7.2",
     "stylelint-config-twbs-bootstrap": "^2.1.0",
     "js/{src,dist}/**/*.{js,map}",
     "scss/**/*.scss"
   ],
+  "hugo-bin": {
+    "buildTags": "extended"
+  },
   "jspm": {
     "registry": "npm",
     "main": "js/bootstrap",
index 8110030c640ca2a6554a802287b118335a937740..ad550df3b49b5374b82c0266a00a9c6e416b6155 100644 (file)
@@ -1,4 +1,3 @@
-// Do not forget to update getting-started/theming.md!
 :root {
   // Custom variable values only support SassScript inside `#{}`.
   @each $color, $value in $colors {
diff --git a/site/_data/docs-versions.yml b/site/_data/docs-versions.yml
deleted file mode 100644 (file)
index c211a01..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-- group: v1.x
-  baseurl: https://getbootstrap.com
-  description: Every minor and patch release from v1 is listed below.
-  versions:
-    - v: 1.0.0
-    - v: 1.1.0
-    - v: 1.1.1
-    - v: 1.2.0
-    - v: 1.3.0
-    - v: 1.4.0
-
-- group: v2.x
-  baseurl: https://getbootstrap.com
-  description: Every minor and patch release from v2 is listed below.
-  versions:
-    - v: 2.0.0
-    - v: 2.0.1
-    - v: 2.0.2
-    - v: 2.0.3
-    - v: 2.0.4
-    - v: 2.1.0
-    - v: 2.1.1
-    - v: 2.2.0
-    - v: 2.2.1
-    - v: 2.2.2
-    - v: 2.3.0
-    - v: 2.3.1
-    - v: 2.3.2
-
-- group: v3.x
-  baseurl: https://getbootstrap.com/docs
-  description: Our previous major release and its minor versions. Last update was v3.4.1.
-  versions:
-    - v: 3.3
-    - v: 3.4
-
-- group: v4.x
-  baseurl: https://getbootstrap.com/docs
-  description: Current major release and its minor versions. Last update was v4.5.3.
-  versions:
-    - v: 4.0
-    - v: 4.1
-    - v: 4.2
-    - v: 4.3
-    - v: 4.4
-    - v: 4.5
diff --git a/site/_includes/bugify.html b/site/_includes/bugify.html
deleted file mode 100644 (file)
index 7f33404..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-{%- comment -%}
-  Usage: include bugify.html content=text,
-  where content is a string that contains a bug reference name and id.
-  e.g. Bootstrap#19984
-{%- endcomment -%}
-
-{%- assign words = include.content | split: " " -%}
-
-{%- for word in words -%}
-  {% if word contains "#" %}
-    {% if word contains "," %}{% assign separator = true %}{% else %}{% assign separator = false %}{% endif %}
-    {%- assign data = word | split: "#" -%}
-    {%- assign bug_cat = data[0] | strip_newlines -%}
-    {%- assign bug_id  = data[1] | strip_newlines | remove: "," -%}
-
-    {%- case bug_cat -%}
-    {%- when "Bootstrap" -%}
-      <a href="https://github.com/twbs/bootstrap/issues/{{ bug_id }}">#{{ bug_id }}</a>
-    {%- when "Edge" -%}
-      <a href="https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/{{ bug_id }}/">Edge issue #{{ bug_id }}</a>
-    {%- when "A11yUserVoice" -%}
-      <a href="https://microsoftaccessibility.uservoice.com/forums/307429-microsoft-accessibility-feedback/suggestions/{{ bug_id }}">Microsoft A11y UserVoice idea #{{ bug_id }}</a>
-    {%- when "UserVoice" -%}
-      <a href="https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/{{ bug_id }}">Edge UserVoice idea #{{ bug_id }}</a>
-    {%- when "Mozilla" -%}
-      <a href="https://bugzilla.mozilla.org/show_bug.cgi?id={{ bug_id }}">Mozilla bug #{{ bug_id }}</a>
-    {%- when "Chromium" -%}
-      <a href="https://bugs.chromium.org/p/chromium/issues/detail?id={{ bug_id }}">Chromium issue #{{ bug_id }}</a>
-    {%- when "WebKit" -%}
-      <a href="https://bugs.webkit.org/show_bug.cgi?id={{ bug_id }}">WebKit bug #{{ bug_id }}</a>
-    {%- when "Safari" -%}
-      <a href="https://openradar.appspot.com/{{ bug_id }}">Apple Safari Radar #{{ bug_id }}</a>
-    {%- when "Normalize" -%}
-      <a href="https://github.com/necolas/normalize.css/issues/{{ bug_id }}">Normalize #{{ bug_id }}</a>
-    {%- else -%}
-      <strong>parse error</strong>
-    {%- endcase -%}{% if separator %}, {% endif %}
-
-  {% else %}
-    {{ word }}
-  {%- endif -%}
-{%- endfor -%}
diff --git a/site/_includes/callout-info-prefersreducedmotion.md b/site/_includes/callout-info-prefersreducedmotion.md
deleted file mode 100644 (file)
index 9c30903..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-{% capture callout %}
-The animation effect of this component is dependent on the `prefers-reduced-motion` media query. See the [reduced motion section of our accessibility documentation]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/accessibility/#reduced-motion).
-{% endcapture %}
-{% include callout.html content=callout type="info" %}
diff --git a/site/_includes/callout.html b/site/_includes/callout.html
deleted file mode 100644 (file)
index 434d10e..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-{%- comment -%}
-  Usage: include callout.html content=callout type="type",
-  where content is a capture with the content
-  and type is one of: info (default), danger, warning
-{%- endcomment -%}
-{%- assign css_class = include.type | default: "info" -%}
-<div class="bd-callout bd-callout-{{ css_class }}">
-  {{- include.content | markdownify -}}
-</div>
diff --git a/site/_includes/docs-navbar.html b/site/_includes/docs-navbar.html
deleted file mode 100644 (file)
index aa77be0..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-<header class="navbar navbar-expand navbar-dark flex-column flex-md-row bd-navbar">
-  <a class="navbar-brand mr-0 mr-md-2" href="{{ site.baseurl }}/" aria-label="Bootstrap">
-    {%- include icons/bootstrap.svg width="36" height="36" class="d-block" -%}
-  </a>
-
-  <div class="navbar-nav-scroll">
-    <ul class="navbar-nav bd-navbar-nav flex-row">
-      <li class="nav-item">
-        <a class="nav-link {% if page.layout == "home" %}active{% endif %}" href="{{ site.baseurl }}/" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Bootstrap');">Home</a>
-      </li>
-      <li class="nav-item">
-        <a class="nav-link {% if page.layout == "docs" %}active{% endif %}" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/introduction/" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Docs');">Documentation</a>
-      </li>
-      <li class="nav-item">
-        <a class="nav-link {% if page.title == "Examples" %}active{% endif %}" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/examples/" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Examples');">Examples</a>
-      </li>
-      <li class="nav-item">
-        <a class="nav-link" href="{{ site.icons }}/" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Icons');" target="_blank" rel="noopener">Icons</a>
-      </li>
-      <li class="nav-item">
-        <a class="nav-link" href="{{ site.themes }}/" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Themes');" target="_blank" rel="noopener">Themes</a>
-      </li>
-      <li class="nav-item">
-        <a class="nav-link" href="{{ site.expo }}/" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Expo');" target="_blank" rel="noopener">Expo</a>
-      </li>
-      <li class="nav-item">
-        <a class="nav-link" href="{{ site.blog }}/" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Blog');" target="_blank" rel="noopener">Blog</a>
-      </li>
-    </ul>
-  </div>
-
-  <ul class="navbar-nav ml-md-auto">
-    <li class="nav-item dropdown">
-      <a class="nav-item nav-link dropdown-toggle mr-md-2" href="#" id="bd-versions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
-        v{{ site.docs_version }}
-      </a>
-      <div class="dropdown-menu dropdown-menu-md-right" aria-labelledby="bd-versions">
-        <a class="dropdown-item active" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/">Latest (4.5.x)</a>
-        <div class="dropdown-divider"></div>
-        <a class="dropdown-item" href="https://getbootstrap.com/docs/3.4/">v3.4.1</a>
-        <a class="dropdown-item" href="https://getbootstrap.com/2.3.2/">v2.3.2</a>
-        <div class="dropdown-divider"></div>
-        <a class="dropdown-item" href="{{ site.baseurl }}/docs/versions/">All versions</a>
-      </div>
-    </li>
-
-    <li class="nav-item">
-      <a class="nav-link pl-2 pr-1 mx-1 py-3 my-n2" href="{{ site.github_org }}" target="_blank" rel="noopener" aria-label="GitHub">
-        {%- include icons/github.svg class="navbar-nav-svg" -%}
-      </a>
-    </li>
-    <li class="nav-item">
-      <a class="nav-link px-1 mx-1 py-3 my-n2" href="https://twitter.com/{{ site.twitter }}" target="_blank" rel="noopener" aria-label="Twitter">
-        {%- include icons/twitter.svg class="navbar-nav-svg" -%}
-      </a>
-    </li>
-    <li class="nav-item">
-      <a class="nav-link px-1 mx-1 py-3 my-n2" href="{{ site.slack }}/" target="_blank" rel="noopener" aria-label="Slack">
-        {%- include icons/slack.svg class="navbar-nav-svg" -%}
-      </a>
-    </li>
-    <li class="nav-item">
-      <a class="nav-link px-1 mx-1 py-3 my-n2" href="{{ site.opencollective }}/" target="_blank" rel="noopener" aria-label="Open Collective">
-        {%- include icons/opencollective.svg class="navbar-nav-svg" -%}
-      </a>
-    </li>
-  </ul>
-
-  <a class="btn btn-bd-download d-none d-lg-inline-block mb-3 mb-md-0 ml-md-3" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/download/">Download</a>
-</header>
diff --git a/site/_includes/docs-sidebar.html b/site/_includes/docs-sidebar.html
deleted file mode 100644 (file)
index fd86168..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<form role="search" class="bd-search d-flex align-items-center">
-  <input type="search" class="form-control" id="search-input" placeholder="Search..." aria-label="Search for..." autocomplete="off" data-docs-version="{{ site.docs_version }}">
-  <button class="btn bd-search-docs-toggle d-md-none p-0 ml-3" type="button" data-toggle="collapse" data-target="#bd-docs-nav" aria-controls="bd-docs-nav" aria-expanded="false" aria-label="Toggle docs navigation">
-    {%- include icons/menu.svg width="30" height="30" -%}
-  </button>
-</form>
-
-<div class="collapse d-md-block row" id="bd-docs-nav">
-  <nav class="bd-links" aria-label="Main navigation">
-    {%- assign page_slug = page.url | split: '/' | last -%}
-    {%- for group in site.data.nav -%}
-      {%- assign link = group.pages | first -%}
-      {%- assign link_slug = link.title | slugify -%}
-      {%- assign group_slug = group.title | slugify -%}
-      {%- assign active = nil -%}
-
-      {%- if page.group == group_slug -%}
-        {%- assign active = 'active' -%}
-      {%- endif -%}
-
-      <div class="bd-toc-item{% unless active == nil %} {{ active }}{% endunless %}">
-        <a class="bd-toc-link" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/{{ group_slug }}/{{ link_slug }}{% if link_slug %}/{% endif %}">
-          {{ group.title }}
-        </a>
-
-        <ul class="nav bd-sidenav">
-          {%- for doc in group.pages -%}
-            {%- assign doc_slug = doc.title | slugify -%}
-            {%- assign active = nil -%}
-
-            {%- if page.group == group_slug and page_slug == doc_slug -%}
-              {%- assign active = 'active bd-sidenav-active' -%}
-            {%- endif -%}
-
-            <li{% unless active == nil %} class="{{ active }}"{% endunless %}>
-              <a href="{{ site.baseurl }}/docs/{{ site.docs_version }}/{{ group_slug }}/{{ doc_slug }}/">
-                {{ doc.title }}
-              </a>
-            </li>
-          {%- endfor -%}
-        </ul>
-      </div>
-    {%- endfor -%}
-  </nav>
-</div>
diff --git a/site/_includes/example.html b/site/_includes/example.html
deleted file mode 100644 (file)
index dcd148b..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-{%- comment -%}
-  Usage: include example.html content=markup [args],
-  where content is a capture with the HTML content
-
-  args can be one of the following:
-    id - null (default)
-    class - "bd-example" (default)
-    optional: hide_preview - disabled (default)
-    optional: hide_markup - disabled (default)
-{%- endcomment -%}
-
-{%- assign id = include.id -%}
-{%- assign class = include.class -%}
-
-{%- if include.hide_preview == null -%}
-<div{% if id %} id="{{ id }}"{% endif %} class="bd-example{% if class %} {{ class }}{% endif %}">
-  {{- include.content -}}
-</div>
-{%- endif -%}
-
-{%- if include.hide_markup == null -%}
-  {%- highlight html -%}
-    {%- if include.content contains '<svg class="bd-placeholder-img' -%}
-      {%- assign modified_content = include.content
-        | replace: '<svg class="bd-placeholder-img', '✂️<svg class="bd-placeholder-img'
-        | replace: '</svg>', '</svg>✂️'
-        | split: '✂️' -%}
-
-      {%- if include.content contains 'bd-placeholder-img ' -%}
-        {%- assign image_class = include.content
-          | replace_first: 'bd-placeholder-img', 'bd-placeholder-img ✂️'
-          | replace: '" width="', '✂️" width="'
-          | split: '✂️' -%}
-        {%- assign image_class = image_class[1] | replace: 'bd-placeholder-img-lg', '' | strip -%}
-      {%- endif -%}
-
-      {%- for content_chunk in modified_content -%}
-        {%- if content_chunk contains '<svg class="bd-placeholder-img' -%}
-          {%- capture img_placeholder -%}
-            <img src="..." {% if image_class %}class="{{ image_class }}" {% endif %}alt="...">
-          {%- endcapture -%}
-          {{- img_placeholder -}}
-        {%- else -%}
-          {{- content_chunk -}}
-        {%- endif -%}
-      {%- endfor -%}
-    {%- else -%}
-      {{- include.content -}}
-    {%- endif -%}
-  {%- endhighlight -%}
-{%- endif -%}
diff --git a/site/_includes/favicons.html b/site/_includes/favicons.html
deleted file mode 100644 (file)
index 051259d..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<!-- Favicons -->
-<link rel="apple-touch-icon" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/favicons/apple-touch-icon.png" sizes="180x180">
-<link rel="icon" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/favicons/favicon-32x32.png" sizes="32x32" type="image/png">
-<link rel="icon" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/favicons/favicon-16x16.png" sizes="16x16" type="image/png">
-<link rel="manifest" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/favicons/manifest.json">
-<link rel="mask-icon" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/favicons/safari-pinned-tab.svg" color="#563d7c">
-<link rel="icon" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/favicons/favicon.ico">
-<meta name="msapplication-config" content="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/favicons/browserconfig.xml">
-<meta name="theme-color" content="#563d7c">
diff --git a/site/_includes/footer.html b/site/_includes/footer.html
deleted file mode 100644 (file)
index cb15d77..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<footer class="bd-footer text-muted">
-  <div class="container-fluid p-3 p-md-5">
-    <ul class="bd-footer-links">
-      <li><a href="{{ site.github_org }}">GitHub</a></li>
-      <li><a href="https://twitter.com/{{ site.twitter }}">Twitter</a></li>
-      <li><a href="{{ site.baseurl }}/docs/{{ site.docs_version }}/examples/">Examples</a></li>
-      <li><a href="{{ site.baseurl }}/docs/{{ site.docs_version }}/about/overview/">About</a></li>
-    </ul>
-    <p>Designed and built with all the love in the world by the <a href="{{ site.baseurl }}/docs/{{ site.docs_version }}/about/team/">Bootstrap team</a> with the help of <a href="{{ site.repo }}/graphs/contributors">our contributors</a>.</p>
-    <p>Currently v{{ site.current_version }}. Code licensed <a href="{{ site.repo }}/blob/main/LICENSE" target="_blank" rel="license noopener">MIT</a>, docs <a href="https://creativecommons.org/licenses/by/3.0/" target="_blank" rel="license noopener">CC BY 3.0</a>.</p>
-  </div>
-</footer>
diff --git a/site/_includes/header.html b/site/_includes/header.html
deleted file mode 100644 (file)
index 985918b..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<meta charset="utf-8">
-<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
-<meta name="description" content="{{ page.description | default: site.description | smartify }}">
-<meta name="author" content="{{ site.authors }}">
-<meta name="generator" content="Jekyll v{{ jekyll.version }}">
-
-<meta name="docsearch:language" content="en">
-<meta name="docsearch:version" content="{{ site.docs_version }}">
-
-<title>
-  {%- if page.title -%}
-    {{ page.title | smartify }} · {{ site.title | smartify }} v{{ site.docs_version }}
-  {%- else -%}
-    {{ site.title | smartify }} · {{ site.description | smartify }}
-  {%- endif -%}
-</title>
-
-<link rel="canonical" href="{{ site.url | append: page.url }}">
-
-{% include stylesheet.html %}
-{% include favicons.html %}
-{% include social.html %}
-{% include analytics.html %}
diff --git a/site/_includes/icons/bootstrap-stack.svg b/site/_includes/icons/bootstrap-stack.svg
deleted file mode 100644 (file)
index 2e3abbf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"{% if include.width %} width="{{ include.width }}"{% endif %}{% if include.height %} height="{{ include.height }}"{% endif %}{% if include.class %} class="{{ include.class }}"{% endif %} viewBox="0 0 1024 860" focusable="false" role="img"><title>Bootstrap</title><defs><linearGradient id="c" x1="50%" x2="50%" y1="0%" y2="100%"><stop offset="0%" stop-color="#5c24ae"/><stop offset="100%" stop-color="#30135a"/></linearGradient><path id="b" d="M355.967 242.807l-322 216.395c-44.275 29.754-44.275 78.443 0 108.197l322 216.395c44.275 29.754 116.725 29.754 161 0l322-216.395c44.275-29.754 44.275-78.443 0-108.197l-322-216.395c-44.275-29.754-116.725-29.754-161 0z"/><filter id="a" width="108%" height="112%" x="-4%" y="-4.3%" filterUnits="objectBoundingBox"><feOffset dy="10" in="SourceAlpha" result="shadowOffsetOuter1"/><feGaussianBlur in="shadowOffsetOuter1" result="shadowBlurOuter1" stdDeviation="10"/><feColorMatrix in="shadowBlurOuter1" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/></filter><linearGradient id="f" x1="50%" x2="50%" y1="-17.303%" y2="100%"><stop offset="0%" stop-color="#7331d4"/><stop offset="100%" stop-color="#461b84"/></linearGradient><path id="e" d="M355.967 132.807l-322 216.395c-44.275 29.754-44.275 78.443 0 108.197l322 216.395c44.275 29.754 116.725 29.754 161 0l322-216.395c44.275-29.754 44.275-78.443 0-108.197l-322-216.395c-44.275-29.754-116.725-29.754-161 0z"/><filter id="d" width="108%" height="112%" x="-4%" y="-4.3%" filterUnits="objectBoundingBox"><feOffset dy="10" in="SourceAlpha" result="shadowOffsetOuter1"/><feGaussianBlur in="shadowOffsetOuter1" result="shadowBlurOuter1" stdDeviation="10"/><feColorMatrix in="shadowBlurOuter1" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/></filter><linearGradient id="i" x1="50%" x2="50%" y1="0%" y2="100%"><stop offset="0%" stop-color="#905bdd"/><stop offset="100%" stop-color="#5521a0"/></linearGradient><path id="h" d="M355.967 22.807l-322 216.395c-44.275 29.754-44.275 78.443 0 108.197l322 216.395c44.275 29.754 116.725 29.754 161 0l322-216.395c44.275-29.754 44.275-78.443 0-108.197l-322-216.395c-44.275-29.754-116.725-29.754-161 0z"/><filter id="g" width="108%" height="112%" x="-4%" y="-4.3%" filterUnits="objectBoundingBox"><feOffset dy="10" in="SourceAlpha" result="shadowOffsetOuter1"/><feGaussianBlur in="shadowOffsetOuter1" result="shadowBlurOuter1" stdDeviation="10"/><feColorMatrix in="shadowBlurOuter1" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/></filter></defs><g fill="none"><g transform="translate(75 23)"><use fill="#000" filter="url(#a)" xlink:href="#b"/><use fill="url(#c)" xlink:href="#b"/></g><g transform="translate(75 23)"><use fill="#000" filter="url(#d)" xlink:href="#e"/><use fill="url(#f)" xlink:href="#e"/></g><g transform="translate(75 23)"><use fill="#000" filter="url(#g)" xlink:href="#h"/><use fill="url(#i)" xlink:href="#h"/></g><path fill="#fff" d="M558.273 447.667L308.036 279.5l97.982-65.847c42.83-28.784 96.789-31.483 134.245-6.311 26.044 17.502 31.214 46.615 11.444 65.724l1.389.934c38.324-19.932 84.107-18.527 117.396 3.845 44.046 29.6 38.671 68.419-14.561 104.193l-97.658 65.629zM447.112 331.01l49.942-33.562c36.935-24.822 42.31-48.249 15.224-66.451-24.798-16.665-55.49-14.453-85.851 5.95l-59.641 40.081 80.326 53.982zm176.532 35.663c37.63-25.289 42.136-48.832 13.203-68.276-28.932-19.444-64.163-15.614-104.042 11.186l-58.789 39.508 87.92 59.084 61.708-41.502z"/></g></svg>
\ No newline at end of file
diff --git a/site/_includes/icons/bootstrap.svg b/site/_includes/icons/bootstrap.svg
deleted file mode 100644 (file)
index ec6da15..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg"{% if include.width %} width="{{ include.width }}"{% endif %}{% if include.height %} height="{{ include.height }}"{% endif %}{% if include.class %} class="{{ include.class }}"{% endif %} viewBox="0 0 612 612" role="img" focusable="false"><title>Bootstrap</title><path fill="currentColor" d="M510 8a94.3 94.3 0 0 1 94 94v408a94.3 94.3 0 0 1-94 94H102a94.3 94.3 0 0 1-94-94V102a94.3 94.3 0 0 1 94-94h408m0-8H102C45.9 0 0 45.9 0 102v408c0 56.1 45.9 102 102 102h408c56.1 0 102-45.9 102-102V102C612 45.9 566.1 0 510 0z"/><path fill="currentColor" d="M196.77 471.5V154.43h124.15c54.27 0 91 31.64 91 79.1 0 33-24.17 63.72-54.71 69.21v1.76c43.07 5.49 70.75 35.82 70.75 78 0 55.81-40 89-107.45 89zm39.55-180.4h63.28c46.8 0 72.29-18.68 72.29-53 0-31.42-21.53-48.78-60-48.78h-75.57zm78.22 145.46c47.68 0 72.73-19.34 72.73-56s-25.93-55.37-76.46-55.37h-74.49v111.4z"/></svg>
\ No newline at end of file
diff --git a/site/_includes/icons/circle-square.svg b/site/_includes/icons/circle-square.svg
deleted file mode 100644 (file)
index c76b9c3..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<svg{% if include.width %} width="{{ include.width }}"{% endif %}{% if include.height %} height="{{ include.height }}"{% endif %}{% if include.class %} class="{{ include.class }}"{% endif %} focusable="false" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
-  <path d="M0 6a6 6 0 1112 0A6 6 0 010 6z"/>
-  <path d="M12.93 5h1.57a.5.5 0 01.5.5v9a.5.5 0 01-.5.5h-9a.5.5 0 01-.5-.5v-1.57a6.953 6.953 0 01-1-.22v1.79A1.5 1.5 0 005.5 16h9a1.5 1.5 0 001.5-1.5v-9A1.5 1.5 0 0014.5 4h-1.79c.097.324.17.658.22 1z"/>
-</svg>
diff --git a/site/_includes/icons/cloud-fill.svg b/site/_includes/icons/cloud-fill.svg
deleted file mode 100644 (file)
index 10143cc..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<svg{% if include.width %} width="{{ include.width }}"{% endif %}{% if include.height %} height="{{ include.height }}"{% endif %}{% if include.class %} class="{{ include.class }}"{% endif %} focusable="false" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
-  <path fill-rule="evenodd" d="M3.5 13a3.5 3.5 0 11.59-6.95 5.002 5.002 0 119.804 1.98A2.5 2.5 0 0113.5 13h-10z" clip-rule="evenodd"/>
-</svg>
diff --git a/site/_includes/icons/droplet-fill.svg b/site/_includes/icons/droplet-fill.svg
deleted file mode 100644 (file)
index c006f12..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<svg{% if include.width %} width="{{ include.width }}"{% endif %}{% if include.height %} height="{{ include.height }}"{% endif %}{% if include.class %} class="{{ include.class }}"{% endif %} focusable="false" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
-  <path fill-rule="evenodd" d="M8 16a6 6 0 006-6c0-1.655-1.122-2.904-2.432-4.362C10.254 4.176 8.75 2.503 8 0c0 0-6 5.686-6 10a6 6 0 006 6zM6.646 4.646c-.376.377-1.272 1.489-2.093 3.13l.894.448c.78-1.559 1.616-2.58 1.907-2.87l-.708-.708z" clip-rule="evenodd"/>
-</svg>
diff --git a/site/_includes/icons/github.svg b/site/_includes/icons/github.svg
deleted file mode 100644 (file)
index 0243df5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg"{% if include.width %} width="{{ include.width }}"{% endif %}{% if include.height %} height="{{ include.height }}"{% endif %}{% if include.class %} class="{{ include.class }}"{% endif %} viewBox="0 0 512 499.36" role="img" focusable="false"><title>GitHub</title><path fill="currentColor" fill-rule="evenodd" d="M256 0C114.64 0 0 114.61 0 256c0 113.09 73.34 209 175.08 242.9 12.8 2.35 17.47-5.56 17.47-12.34 0-6.08-.22-22.18-.35-43.54-71.2 15.49-86.2-34.34-86.2-34.34-11.64-29.57-28.42-37.45-28.42-37.45-23.27-15.84 1.73-15.55 1.73-15.55 25.69 1.81 39.21 26.38 39.21 26.38 22.84 39.12 59.92 27.82 74.5 21.27 2.33-16.54 8.94-27.82 16.25-34.22-56.84-6.43-116.6-28.43-116.6-126.49 0-27.95 10-50.8 26.35-68.69-2.63-6.48-11.42-32.5 2.51-67.75 0 0 21.49-6.88 70.4 26.24a242.65 242.65 0 0 1 128.18 0c48.87-33.13 70.33-26.24 70.33-26.24 14 35.25 5.18 61.27 2.55 67.75 16.41 17.9 26.31 40.75 26.31 68.69 0 98.35-59.85 120-116.88 126.32 9.19 7.9 17.38 23.53 17.38 47.41 0 34.22-.31 61.83-.31 70.23 0 6.85 4.61 14.81 17.6 12.31C438.72 464.97 512 369.08 512 256.02 512 114.62 397.37 0 256 0z"/></svg>
\ No newline at end of file
diff --git a/site/_includes/icons/menu.svg b/site/_includes/icons/menu.svg
deleted file mode 100644 (file)
index f6c4703..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg"{% if include.width %} width="{{ include.width }}"{% endif %}{% if include.height %} height="{{ include.height }}"{% endif %}{% if include.class %} class="{{ include.class }}"{% endif %} viewBox="0 0 30 30" role="img" focusable="false"><title>Menu</title><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"/></svg>
\ No newline at end of file
diff --git a/site/_includes/icons/opencollective.svg b/site/_includes/icons/opencollective.svg
deleted file mode 100644 (file)
index 090d41d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg"{% if include.width %} width="{{ include.width }}"{% endif %}{% if include.height %} height="{{ include.height }}"{% endif %} fill="currentColor" fill-rule="evenodd"{% if include.class %} class="{{ include.class }}"{% endif %} viewBox="0 0 40 41" role="img" focusable="false"><title>Open Collective</title><path fill-opacity=".4" d="M32.8 21c0 2.4-.8 4.9-2 6.9l5.1 5.1c2.5-3.4 4.1-7.6 4.1-12 0-4.6-1.6-8.8-4-12.2L30.7 14c1.2 2 2 4.3 2 7z"/><path d="M20 33.7a12.8 12.8 0 0 1 0-25.6c2.6 0 5 .7 7 2.1L32 5a20 20 0 1 0 .1 31.9l-5-5.2a13 13 0 0 1-7 2z"/></svg>
\ No newline at end of file
diff --git a/site/_includes/icons/placeholder.svg b/site/_includes/icons/placeholder.svg
deleted file mode 100644 (file)
index 36883e8..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-{%- comment -%}
-  Usage: include icons/placeholder.svg args
-
-  args can be one of the following:
-    title: Used in the SVG `title` tag
-    text: The text to show in the image - default: 'width x height'
-    class: default: 'bd-placeholder-img'
-    color: The text color (foreground) - default: '#dee2e6'
-    background: The background color - default: '#868e96'
-    width: default: 100%
-    height: default: 180px
-{%- endcomment -%}
-
-{%- assign title = include.title | default: 'Placeholder' -%}
-{%- assign class = include.class | default: '' -%}
-{%- assign color = include.color | default: site.data.grays[2].hex -%}
-{%- assign background = include.background | default: site.data.grays[5].hex -%}
-{%- assign width = include.width | default: '100%' -%}
-{%- assign height = include.height | default: '180' -%}
-
-{%- if include.text -%}
-  {%- assign text = include.text -%}
-{%- else -%}
-  {%- assign text = width | append: 'x' | append: height -%}
-{%- endif -%}
-
-{%- capture svg -%}
-<svg class="bd-placeholder-img{% if class != '' %} {{ class }}{% endif %}" width="{{ width }}" height="{{ height }}" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid slice" focusable="false" role="img"{% if title != ' ' or text != ' ' %} aria-label="{% if title != ' ' %}{{ title }}{% if text != ' ' %}: {% endif %}{% endif %}{% if text != ' ' %}{{ text }}{% endif %}"{% endif %}>
-  {% if title != ' ' %}<title>{{ title }}</title>{% endif %}
-  <rect width="100%" height="100%" fill="{{ background }}"/>
-  {% if text != ' ' %}<text x="50%" y="50%" fill="{{ color }}" dy=".3em">{{ text }}</text>{% endif %}
-</svg>
-{%- endcapture -%}
-
-{{- svg | replace: '  ', '' | strip_newlines -}}
diff --git a/site/_includes/icons/slack.svg b/site/_includes/icons/slack.svg
deleted file mode 100644 (file)
index d6ae455..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg"{% if include.width %} width="{{ include.width }}"{% endif %}{% if include.height %} height="{{ include.height }}"{% endif %}{% if include.class %} class="{{ include.class }}"{% endif %} viewBox="0 0 512 512" role="img" focusable="false"><title>Slack</title><path fill="currentColor" d="M210.787 234.832l68.31-22.883 22.1 65.977-68.309 22.882z"/><path fill="currentColor" d="M490.54 185.6C437.7 9.59 361.6-31.34 185.6 21.46S-31.3 150.4 21.46 326.4 150.4 543.3 326.4 490.54 543.34 361.6 490.54 185.6zM401.7 299.8l-33.15 11.05 11.46 34.38c4.5 13.92-2.87 29.06-16.78 33.56-2.87.82-6.14 1.64-9 1.23a27.32 27.32 0 0 1-24.56-18l-11.46-34.38-68.36 22.92 11.46 34.38c4.5 13.92-2.87 29.06-16.78 33.56-2.87.82-6.14 1.64-9 1.23a27.32 27.32 0 0 1-24.56-18l-11.46-34.43-33.15 11.05c-2.87.82-6.14 1.64-9 1.23a27.32 27.32 0 0 1-24.56-18c-4.5-13.92 2.87-29.06 16.78-33.56l33.12-11.03-22.1-65.9-33.15 11.05c-2.87.82-6.14 1.64-9 1.23a27.32 27.32 0 0 1-24.56-18c-4.48-13.93 2.89-29.07 16.81-33.58l33.15-11.05-11.46-34.38c-4.5-13.92 2.87-29.06 16.78-33.56s29.06 2.87 33.56 16.78l11.46 34.38 68.36-22.92-11.46-34.38c-4.5-13.92 2.87-29.06 16.78-33.56s29.06 2.87 33.56 16.78l11.47 34.42 33.15-11.05c13.92-4.5 29.06 2.87 33.56 16.78s-2.87 29.06-16.78 33.56L329.7 194.6l22.1 65.9 33.15-11.05c13.92-4.5 29.06 2.87 33.56 16.78s-2.88 29.07-16.81 33.57z"/></svg>
\ No newline at end of file
diff --git a/site/_includes/icons/twitter.svg b/site/_includes/icons/twitter.svg
deleted file mode 100644 (file)
index 7b838be..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg"{% if include.width %} width="{{ include.width }}"{% endif %}{% if include.height %} height="{{ include.height }}"{% endif %}{% if include.class %} class="{{ include.class }}"{% endif %} viewBox="0 0 512 416.32" role="img" focusable="false"><title>Twitter</title><path fill="currentColor" d="M160.83 416.32c193.2 0 298.92-160.22 298.92-298.92 0-4.51 0-9-.2-13.52A214 214 0 0 0 512 49.38a212.93 212.93 0 0 1-60.44 16.6 105.7 105.7 0 0 0 46.3-58.19 209 209 0 0 1-66.79 25.37 105.09 105.09 0 0 0-181.73 71.91 116.12 116.12 0 0 0 2.66 24c-87.28-4.3-164.73-46.3-216.56-109.82A105.48 105.48 0 0 0 68 159.6a106.27 106.27 0 0 1-47.53-13.11v1.43a105.28 105.28 0 0 0 84.21 103.06 105.67 105.67 0 0 1-47.33 1.84 105.06 105.06 0 0 0 98.14 72.94A210.72 210.72 0 0 1 25 370.84a202.17 202.17 0 0 1-25-1.43 298.85 298.85 0 0 0 160.83 46.92"/></svg>
\ No newline at end of file
diff --git a/site/_includes/scripts.html b/site/_includes/scripts.html
deleted file mode 100644 (file)
index 2f90f1e..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<script src="{{ site.cdn.jquery }}" integrity="{{ site.cdn.jquery_hash }}" crossorigin="anonymous"></script>
-<script>window.jQuery || document.write('<script src="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/js/vendor/jquery.slim.min.js"><\/script>')</script>
-
-{%- if jekyll.environment == "production" or jekyll.environment == "netlify" -%}
-  <script src="{{ site.baseurl }}/docs/{{ site.docs_version }}/dist/js/bootstrap.bundle.min.js" integrity="{{ site.cdn.js_bundle_hash }}" crossorigin="anonymous"></script>
-{%- else -%}
-  <script src="{{ site.baseurl }}/docs/{{ site.docs_version }}/dist/js/bootstrap.bundle.js"></script>
-{%- endif -%}
-
-{%- if page.layout == "docs" -%}
-<script src="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.js"></script>
-{%- endif -%}
-
-{%- if jekyll.environment == "production" or jekyll.environment == "netlify" -%}
-  <script src="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/js/docs.min.js"></script>
-{%- else -%}
-  <script src="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/js/vendor/anchor.min.js"></script>
-  <script src="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/js/vendor/clipboard.min.js"></script>
-  <script src="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/js/vendor/bs-custom-file-input.min.js"></script>
-  <script src="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/js/src/application.js"></script>
-  <script src="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/js/src/search.js"></script>
-  <script src="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/js/src/ie-emulation-modes-warning.js"></script>
-{%- endif -%}
diff --git a/site/_includes/social.html b/site/_includes/social.html
deleted file mode 100644 (file)
index cf5be12..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<!-- Twitter -->
-<meta name="twitter:card" content="{% if page.title %}summary{% else %}summary_large_image{% endif %}">
-<meta name="twitter:site" content="@{{ site.twitter }}">
-<meta name="twitter:creator" content="@{{ site.twitter }}">
-<meta name="twitter:title" content="{{ page.title | default: site.title | smartify }}">
-<meta name="twitter:description" content="{{ page.description | default: site.description | smartify }}">
-<meta name="twitter:image" content="{% if page.title %}{{ site.url | append: site.social_logo_path }}{% else %}{{ site.url | append: site.social_image_path }}{% endif %}">
-
-<!-- Facebook -->
-<meta property="og:url" content="{{ site.url | append: page.url }}">
-<meta property="og:title" content="{{ page.title | default: site.title | smartify }}">
-<meta property="og:description" content="{{ page.description | default: site.description | smartify }}">
-<meta property="og:type" content="website">
-<meta property="og:image" content="{{ site.url | append: site.social_image_path }}">
-<meta property="og:image:type" content="image/png">
-<meta property="og:image:width" content="1200">
-<meta property="og:image:height" content="630">
diff --git a/site/_includes/stylesheet.html b/site/_includes/stylesheet.html
deleted file mode 100644 (file)
index 2f7599e..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<!-- Bootstrap core CSS -->
-{%- if jekyll.environment == "production" or jekyll.environment == "netlify" %}
-<link href="{{ site.baseurl }}/docs/{{ site.docs_version }}/dist/css/bootstrap.min.css" rel="stylesheet" integrity="{{ site.cdn.css_hash }}" crossorigin="anonymous">
-{% else %}
-<link href="{{ site.baseurl }}/docs/{{ site.docs_version }}/dist/css/bootstrap.css" rel="stylesheet">
-{% endif -%}
-
-{%- if page.layout == "docs" or page.layout != "examples" -%}
-<!-- Documentation extras -->
-{% if page.layout == "docs" %}
-<link href="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css" rel="stylesheet">
-{% endif %}
-{% if page.layout != "examples" %}
-<link href="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/css/docs.min.css" rel="stylesheet">
-{% endif %}
-{%- endif -%}
diff --git a/site/_layouts/default.html b/site/_layouts/default.html
deleted file mode 100644 (file)
index 59f5c12..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<!doctype html>
-<html lang="en">
-  <head>
-    {% include header.html %}
-  </head>
-  <body>
-    {% include skippy.html %}
-
-    {% include docs-navbar.html %}
-
-    {% if page.layout == "simple" %}
-      {{ content }}
-    {% else %}
-      <main id="content" role="main">
-        {{ content }}
-      </main>
-    {% endif %}
-
-    {% include footer.html %}
-    {% include scripts.html %}
-  </body>
-</html>
diff --git a/site/_layouts/docs.html b/site/_layouts/docs.html
deleted file mode 100644 (file)
index 10c9fcb..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-<!doctype html>
-<html lang="en">
-  <head>
-    {% include header.html %}
-  </head>
-  <body>
-    {% include skippy.html %}
-
-    {% include docs-navbar.html %}
-
-    <div class="container-fluid">
-      <div class="row flex-xl-nowrap">
-        <div class="col-md-3 col-xl-2 bd-sidebar">
-          {% include docs-sidebar.html %}
-        </div>
-
-        {% if page.toc %}
-          <nav class="d-none d-xl-block col-xl-2 bd-toc" aria-label="Secondary navigation">
-            {{ content | toc_only }}
-          </nav>
-        {% endif %}
-
-        <main class="col-md-9 col-xl-8 py-md-3 pl-md-5 bd-content" role="main">
-          <div class="d-md-flex flex-md-row-reverse align-items-center justify-content-between">
-            <a class="btn btn-sm btn-bd-light my-2 my-md-0" href="{{ site.repo }}/blob/v4-dev/site/{{ page.path }}" title="View and edit this file on GitHub" target="_blank" rel="noopener">View on GitHub</a>
-            <h1 class="bd-title" id="content">{{ page.title | smartify }}</h1>
-          </div>
-          <p class="bd-lead">{{ page.description | smartify }}</p>
-          {% include ads.html %}
-          {{ content }}
-        </main>
-      </div>
-    </div>
-
-    {% include scripts.html %}
-  </body>
-</html>
diff --git a/site/_layouts/examples.html b/site/_layouts/examples.html
deleted file mode 100644 (file)
index 4ca4c56..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-<!doctype html>
-<html lang="en"{% if page.html_class %} class="{{ page.html_class }}"{% endif %}>
-  <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
-    <meta name="description" content="">
-    <meta name="author" content="{{ site.authors }}">
-    <meta name="generator" content="Jekyll v{{ jekyll.version }}">
-    <title>{{ page.title | smartify }} · {{ site.title | smartify }}</title>
-
-    <link rel="canonical" href="{{ site.url | append: page.url }}">
-
-    {% include stylesheet.html %}
-    {% include favicons.html %}
-
-    <style>
-      .bd-placeholder-img {
-        font-size: 1.125rem;
-        text-anchor: middle;
-        -webkit-user-select: none;
-        -moz-user-select: none;
-        -ms-user-select: none;
-        user-select: none;
-      }
-
-      @media (min-width: 768px) {
-        .bd-placeholder-img-lg {
-          font-size: 3.5rem;
-        }
-      }
-    </style>
-
-    {%- for css in page.extra_css %}
-    <!-- Custom styles for this template -->
-    <link href="{{ css }}" rel="stylesheet">
-    {%- endfor %}
-  </head>
-  <body{% if page.body_class %} class="{{ page.body_class }}"{% endif %}>
-    {{ content }}
-
-    {%- if page.include_js != false -%}
-      <script src="{{ site.cdn.jquery }}" integrity="{{ site.cdn.jquery_hash }}" crossorigin="anonymous"></script>
-      <script>window.jQuery || document.write('<script src="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/js/vendor/jquery.slim.min.js"><\/script>')</script>
-
-      {%- if jekyll.environment == "production" or jekyll.environment == "netlify" -%}
-        <script src="{{ site.baseurl }}/docs/{{ site.docs_version }}/dist/js/bootstrap.bundle.min.js" integrity="{{ site.cdn.js_bundle_hash }}" crossorigin="anonymous"></script>
-      {%- else -%}
-        <script src="{{ site.baseurl }}/docs/{{ site.docs_version }}/dist/js/bootstrap.bundle.js"></script>
-      {%- endif -%}
-
-      {%- for js in page.extra_js %}
-        <script src="{{ js }}"></script>
-      {%- endfor %}
-    {%- endif -%}
-  </body>
-</html>
diff --git a/site/_layouts/home.html b/site/_layouts/home.html
deleted file mode 100644 (file)
index 88a23d4..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<!doctype html>
-<html lang="en">
-  <head>
-    {% include header.html %}
-  </head>
-  <body>
-    {% include skippy.html %}
-
-    {% include docs-navbar.html %}
-
-    {{ content }}
-
-    {% include footer.html %}
-    {% include scripts.html %}
-  </body>
-</html>
diff --git a/site/_layouts/simple.html b/site/_layouts/simple.html
deleted file mode 100644 (file)
index 833061b..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
----
-layout: default
----
-
-<header class="d-flex flex-column flex-md-row align-items-md-center p-5 bg-light">
-  <div class="pt-md-3 pb-md-4">
-    <h1 class="bd-title mt-0">{{ page.title | smartify }}</h1>
-    <p class="bd-lead">{{ page.description | smartify }}</p>
-    {%- if page.title == "Examples" -%}
-    <div class="d-flex flex-column flex-sm-row">
-      <a href="{{ site.download.dist_examples }}" class="btn btn-bd-primary py-2 px-3" onclick="ga('send', 'event', 'Examples', 'Hero', 'Download Examples');">Download examples</a>
-      <a href="{{ site.download.source }}" class="btn btn-outline-secondary py-2 px-3 mt-3 mt-sm-0 ml-sm-3" onclick="ga('send', 'event', 'Examples', 'Hero', 'Download');">Download source code</a>
-    </div>
-    {%- endif -%}
-  </div>
-  {% include ads.html %}
-</header>
-
-<main class="bd-content p-5" id="content" role="main">
-  {{ content }}
-</main>
similarity index 98%
rename from site/docs/4.5/assets/js/src/application.js
rename to site/assets/js/application.js
index a3032173bf80753eb4ff527992c4798ca9a0c7d5..ca1ddcca009e5ca85d919fe96f56702ef3d7ecd5 100644 (file)
@@ -59,7 +59,7 @@
     })
 
     // Insert copy to clipboard button before .highlight
-    $('figure.highlight, div.highlight').each(function () {
+    $('div.highlight').each(function () {
       var btnHtml = '<div class="bd-clipboard"><button type="button" class="btn-clipboard" title="Copy to clipboard">Copy</button></div>'
       $(this).before(btnHtml)
       $('.btn-clipboard')
similarity index 76%
rename from site/docs/4.5/assets/scss/_sidebar.scss
rename to site/assets/scss/_sidebar.scss
index cdabdeb3ff49d3c4ade6013094c5ab66f7537b69..7c350f8e3affeee36d92058ef39a105aae0f00bd 100644 (file)
@@ -1,46 +1,3 @@
-// stylelint-disable declaration-no-important
-
-//
-// Right side table of contents
-//
-
-.bd-toc {
-  @supports (position: sticky) {
-    position: sticky;
-    top: 4rem;
-    height: subtract(100vh, 4rem);
-    overflow-y: auto;
-  }
-  order: 2;
-  padding-top: 1.5rem;
-  padding-bottom: 1.5rem;
-  @include font-size(.875rem);
-}
-
-.section-nav {
-  padding-left: 0;
-  border-left: 1px solid #eee;
-
-  ul {
-    padding-left: 1rem;
-  }
-}
-
-.toc-entry {
-  display: block;
-
-  a {
-    display: block;
-    padding: .125rem 1.5rem;
-    color: #77757a;
-
-    &:hover {
-      color: $blue;
-      text-decoration: none;
-    }
-  }
-}
-
 //
 // Left side navigation
 //
diff --git a/site/assets/scss/_syntax.scss b/site/assets/scss/_syntax.scss
new file mode 100644 (file)
index 0000000..bca6aad
--- /dev/null
@@ -0,0 +1,94 @@
+// stylelint-disable comment-empty-line-before, declaration-block-single-line-max-declarations, selector-class-pattern
+
+/* NEW Background .chroma { background-color: #f0f0f0; } */
+/* NEW Error .chroma .err { } */
+/* NEW LineTableTD .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; } */
+/* NEW LineTable .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; width: auto; overflow: auto; display: block; } */
+/* NEW LineHighlight .chroma .hl { display: block; width: 100%; background-color: #ffffcc; } */
+/* NEW LineNumbersTable .chroma .lnt { margin-right: .4em; padding: 0 .4em; } */
+/* NEW LineNumbers .chroma .ln { margin-right: .4em; padding: 0 .4em; } */
+
+/* LiteralStringDelimiter */ .chroma .dl { color: #4070a0; } /* NEW */
+/* Comment */ .chroma .c { color: #727272; }
+/* CommentMultiline */ .chroma .c1 { color: #727272; }
+/* CommentHashbang */ .chroma .ch { font-style: italic; color: #60a0b0; } /* NEW */
+/* CommentMultiline */ .chroma .cm { color: #727272; }
+/* CommentPreproc */ .chroma .cp { color: #008085; }
+/* CommentPreprocFile */ .chroma .cpf { color: #007020; } /* NEW */
+/* CommentSpecial */ .chroma .cs { color: #727272; }
+/* GenericDeleted */ .chroma .gd { background-color: #fcc; border: 1px solid #c00; }
+/* GenericEmph */ .chroma .ge { font-style: italic; }
+/* GenericHeading */ .chroma .gh { color: #030; }
+/* GenericInserted */ .chroma .gi { background-color: #cfc; border: 1px solid #0c0; }
+/* GenericUnderline */ .chroma .gl { text-decoration: underline; } /* NEW */
+/* GenericOutput */ .chroma .go { color: #aaa; }
+/* GenericPrompt */ .chroma .gp { color: #009; }
+/* GenericError */ .chroma .gr { color: #f00; }
+/* GenericStrong */ .chroma .gs { font-weight: 700; } /* NEW */
+/* GenericTraceback */ .chroma .gt { color: #9c6; }
+/* GenericSubheading */ .chroma .gu { color: #030; }
+/* LiteralNumberIntegerLong */ .chroma .il { color: #c24f19; }
+/* Keyword */ .chroma .k { color: #069; }
+/* KeywordConstant */ .chroma .kc { color: #069; }
+/* KeywordDeclaration */ .chroma .kd { color: #069; }
+/* KeywordNamespace */ .chroma .kn { color: #069; }
+/* KeywordPseudo */ .chroma .kp { color: #069; }
+/* KeywordReserved */ .chroma .kr { color: #069; }
+/* KeywordType */ .chroma .kt { color: #078; }
+/* LiteralNumber */ .chroma .m { color: #c24f19; }
+/* LiteralNumberFloat */ .chroma .mf { color: #c24f19; }
+/* LiteralNumberBin */ .chroma .mb { color: #40a070; } /* NEW */
+/* LiteralNumberHex */ .chroma .mh { color: #c24f19; }
+/* LiteralNumberInteger */ .chroma .mi { color: #c24f19; }
+/* LiteralNumberOct */ .chroma .mo { color: #c24f19; }
+/* NameAttribute */ .chroma .na { color: #006ee0; }
+/* NameBuiltin */ .chroma .nb { color: #366; }
+/* NameClass */ .chroma .nc { color: #168174; }
+/* NameDecorator */ .chroma .nd { color: #6b62de; }
+/* NameException */ .chroma .ne { color: #c00; }
+/* NameFunction */ .chroma .nf { color: #b715f4; }
+/* NameEntity */ .chroma .ni { color: #727272; }
+/* NameLabel */ .chroma .nl { color: #6b62de; }
+/* NameNamespace */ .chroma .nn { color: #007ca5; }
+/* NameConstant */ .chroma .no { color: #360; }
+/* NameTag */ .chroma .nt { color: #2f6f9f; }
+/* NameVariable */ .chroma .nv { color: #033; }
+/* Operator */ .chroma .o { color: #555; }
+/* OperatorWord */ .chroma .ow { color: #000; }
+/* LiteralString */ .chroma .s { color: #d73038; }
+/* LiteralStringSingle */ .chroma .s1 { color: #c30; }
+/* LiteralStringDouble */ .chroma .s2 { color: #c30; }
+/* LiteralStringAffix */ .chroma .sa { color: #4070a0; } /* NEW */
+/* LiteralStringBacktick */ .chroma .sb { color: #c30; }
+/* LiteralStringChar */ .chroma .sc { color: #c30; }
+/* LiteralStringDoc */ .chroma .sd { font-style: italic; color: #c30; }
+/* LiteralStringEscape */ .chroma .se { color: #c30; }
+/* LiteralStringHeredoc */ .chroma .sh { color: #c30; }
+/* LiteralStringInterpol */ .chroma .si { color: #a00; }
+/* LiteralStringRegex */ .chroma .sr { color: #337e7e; }
+/* LiteralStringSymbol */ .chroma .ss { color: #fc3; }
+/* LiteralStringOther */ .chroma .sx { color: #c30; }
+/* TextWhitespace */ .chroma .w { color: #bbb; }
+
+.chroma {
+  .language-bash,
+  .language-sh {
+    &::before {
+      color: #009;
+      content: "$ ";
+      user-select: none;
+    }
+
+    // This is just to work around a Chroma bug;
+    // should be removed when fixed upstream
+    .m {
+      color: inherit;
+    }
+  }
+
+  .language-powershell::before {
+    color: #009;
+    content: "PM> ";
+    user-select: none;
+  }
+}
diff --git a/site/assets/scss/_toc.scss b/site/assets/scss/_toc.scss
new file mode 100644 (file)
index 0000000..23d843a
--- /dev/null
@@ -0,0 +1,54 @@
+// stylelint-disable selector-max-combinators, selector-max-type, selector-max-compound-selectors
+
+//
+// Right side table of contents
+//
+
+.bd-toc {
+  @supports (position: sticky) {
+    position: sticky;
+    top: 4rem;
+    height: subtract(100vh, 4rem);
+    overflow-y: auto;
+  }
+  order: 2;
+  padding-top: 1.5rem;
+  padding-bottom: 1.5rem;
+  @include font-size(.875rem);
+
+  nav {
+    padding-left: 0;
+    border-left: 1px solid #eee;
+
+    ul {
+      padding-left: 0;
+
+      ul {
+        padding-left: 1rem;
+      }
+    }
+
+    a code {
+      font: inherit;
+    }
+
+    li {
+      display: block;
+
+      ul li ul {
+        padding-left: 1rem;
+      }
+
+      a {
+        display: block;
+        padding: .125rem 1.5rem;
+        color: #77757a;
+
+        &:hover {
+          color: $blue;
+          text-decoration: none;
+        }
+      }
+    }
+  }
+}
similarity index 92%
rename from site/docs/4.5/assets/scss/docs.scss
rename to site/assets/scss/docs.scss
index 8dd3f5b56f8a638f7d986bc99654e3740b7c0139..0f1d68cdb48c2fdbbaed696cc6adf4ccef1a973d 100644 (file)
@@ -24,9 +24,9 @@
 // Happy Bootstrapping!
 
 // Load Bootstrap variables and mixins
-@import "../../../../../scss/functions";
-@import "../../../../../scss/variables";
-@import "../../../../../scss/mixins";
+@import "../../../scss/functions";
+@import "../../../scss/variables";
+@import "../../../scss/mixins";
 
 // Load docs components
 @import "variables";
@@ -36,6 +36,7 @@
 @import "content";
 @import "skippy";
 @import "sidebar";
+@import "toc";
 @import "footer";
 @import "component-examples";
 @import "buttons";
diff --git a/site/content/docs/4.5/_index.html b/site/content/docs/4.5/_index.html
new file mode 100644 (file)
index 0000000..7db8e4c
--- /dev/null
@@ -0,0 +1,5 @@
+---
+layout: redirect
+sitemap_exclude: true
+redirect: "/docs/4.5/getting-started/introduction/"
+---
similarity index 73%
rename from site/docs/4.5/about/brand.md
rename to site/content/docs/4.5/about/brand.md
index 5e670091b328a1029199145ef78ff4a9f24bcec8..a640c180a0a99d26604dd065fea2e7e2eaa8e6ea 100644 (file)
@@ -14,10 +14,10 @@ Use either the Bootstrap mark (a capital **B**) or the standard logo (just **Boo
 
 <div class="bd-brand-logos">
   <div class="bd-brand-item">
-    <img class="svg" src="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/brand/bootstrap-solid.svg" alt="Bootstrap" width="144" height="144" loading="lazy">
+    <img class="svg" src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-solid.svg" alt="Bootstrap" width="144" height="144" loading="lazy">
   </div>
   <div class="bd-brand-item inverse">
-    <img class="svg" src="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/brand/bootstrap-outline.svg" alt="Bootstrap" width="144" height="144" loading="lazy">
+    <img class="svg" src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-outline.svg" alt="Bootstrap" width="144" height="144" loading="lazy">
   </div>
 </div>
 <div class="bd-brand-logos">
@@ -35,13 +35,13 @@ Download the Bootstrap mark in one of three styles, each available as an SVG fil
 
 <div class="bd-brand-logos">
   <div class="bd-brand-item">
-    <img class="svg" src="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/brand/bootstrap-solid.svg" alt="Bootstrap" width="144" height="144" loading="lazy">
+    <img class="svg" src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-solid.svg" alt="Bootstrap" width="144" height="144" loading="lazy">
   </div>
   <div class="bd-brand-item inverse">
-    <img class="svg" src="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/brand/bootstrap-outline.svg" alt="Bootstrap" width="144" height="144" loading="lazy">
+    <img class="svg" src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-outline.svg" alt="Bootstrap" width="144" height="144" loading="lazy">
   </div>
   <div class="bd-brand-item inverse">
-    <img class="svg" src="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/brand/bootstrap-punchout.svg" alt="Bootstrap" width="144" height="144" loading="lazy">
+    <img class="svg" src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-punchout.svg" alt="Bootstrap" width="144" height="144" loading="lazy">
   </div>
 </div>
 
similarity index 84%
rename from site/docs/4.5/about/license.md
rename to site/content/docs/4.5/about/license.md
index 39720029d7e7145cb34b3a3682801dc8e14bfd2d..c7f130203576e171fc85d11045a36a774ac6deaf 100644 (file)
@@ -5,7 +5,7 @@ description: Commonly asked questions about Bootstrap's open source license.
 group: about
 ---
 
-Bootstrap is released under the MIT license and is copyright {{ site.time | date: "%Y" }} Twitter. Boiled down to smaller chunks, it can be described with the following conditions.
+Bootstrap is released under the MIT license and is copyright {{< year >}} Twitter. Boiled down to smaller chunks, it can be described with the following conditions.
 
 #### It requires you to:
 
@@ -31,4 +31,4 @@ Bootstrap is released under the MIT license and is copyright {{ site.time | date
 - Include the source of Bootstrap itself, or of any modifications you may have made to it, in any redistribution you may assemble that includes it
 - Submit changes that you make to Bootstrap back to the Bootstrap project (though such feedback is encouraged)
 
-The full Bootstrap license is located [in the project repository]({{ site.repo }}/blob/v{{ site.current_version }}/LICENSE) for more information.
+The full Bootstrap license is located [in the project repository]({{< param repo >}}/blob/v{{< param current_version >}}/LICENSE) for more information.
similarity index 78%
rename from site/docs/4.5/about/overview.md
rename to site/content/docs/4.5/about/overview.md
index 71572a47e8544f0b7c47746fcc76884f03adae70..f75f447a1c94fb7a4ab94845a7b678cc1f33df5b 100644 (file)
@@ -3,7 +3,7 @@ layout: docs
 title: About
 description: Learn more about the team maintaining Bootstrap, how and why the project started, and how to get involved.
 group: about
-redirect_from:
+aliases:
   - "/about/"
   - "/docs/4.5/about/"
 ---
@@ -18,10 +18,10 @@ Originally created by a designer and a developer at Twitter, Bootstrap has becom
 
 Bootstrap was created at Twitter in mid-2010 by [@mdo](https://twitter.com/mdo) and [@fat](https://twitter.com/fat). Prior to being an open-sourced framework, Bootstrap was known as _Twitter Blueprint_. A few months into development, Twitter held its [first Hack Week](https://blog.twitter.com/engineering/en_us/a/2010/hack-week.html) and the project exploded as developers of all skill levels jumped in without any external guidance. It served as the style guide for internal tools development at the company for over a year before its public release, and continues to do so today.
 
-Originally [released](https://blog.twitter.com/developer/en_us/a/2011/bootstrap-twitter.html) on <time datetime="2011-08-19 11:25">Friday, August 19, 2011</time>, we've since had over [twenty releases]({{ site.repo }}/releases), including two major rewrites with v2 and v3. With Bootstrap 2, we added responsive functionality to the entire framework as an optional stylesheet. Building on that with Bootstrap 3, we rewrote the library once more to make it responsive by default with a mobile first approach.
+Originally [released](https://blog.twitter.com/developer/en_us/a/2011/bootstrap-twitter.html) on <time datetime="2011-08-19 11:25">Friday, August 19, 2011</time>, we've since had over [twenty releases]({{< param repo >}}/releases), including two major rewrites with v2 and v3. With Bootstrap 2, we added responsive functionality to the entire framework as an optional stylesheet. Building on that with Bootstrap 3, we rewrote the library once more to make it responsive by default with a mobile first approach.
 
 With Bootstrap 4, we once again rewrote the project to account for two key architectural changes: a migration to Sass and the move to CSS's flexbox. Our intention is to help in a small way to move the web development community forward by pushing for newer CSS properties, fewer dependencies, and new technologies across more modern browsers.
 
 ## Get involved
 
-Get involved with Bootstrap development by [opening an issue]({{ site.repo }}/issues/new) or submitting a pull request. Read our [contributing guidelines]({{ site.repo }}/blob/v{{ site.current_version }}/.github/CONTRIBUTING.md) for information on how we develop.
+Get involved with Bootstrap development by [opening an issue]({{< param repo >}}/issues/new) or submitting a pull request. Read our [contributing guidelines]({{< param repo >}}/blob/v{{< param current_version >}}/.github/CONTRIBUTING.md) for information on how we develop.
diff --git a/site/content/docs/4.5/about/team.md b/site/content/docs/4.5/about/team.md
new file mode 100644 (file)
index 0000000..fd1d6bf
--- /dev/null
@@ -0,0 +1,23 @@
+---
+layout: docs
+title: Team
+description: An overview of the founding team and core contributors to Bootstrap.
+group: about
+---
+
+Bootstrap is maintained by the founding team and a small group of invaluable core contributors, with the massive support and involvement of our community.
+
+{{< team.inline >}}
+<div class="list-group mb-3">
+  {{- range (index $.Site.Data "core-team") }}
+    <a class="list-group-item list-group-item-action d-flex align-items-center" href="https://github.com/{{ .user }}">
+      <img src="https://github.com/{{ .user }}.png" alt="@{{ .user }}" width="32" height="32" class="rounded mr-2" loading="lazy">
+      <span>
+        <strong>{{ .name }}</strong> @{{ .user }}
+      </span>
+    </a>
+  {{ end -}}
+</div>
+{{< /team.inline >}}
+
+Get involved with Bootstrap development by [opening an issue]({{< param repo >}}/issues/new) or submitting a pull request. Read our [contributing guidelines]({{< param repo >}}/blob/v{{< param current_version >}}/.github/CONTRIBUTING.md) for information on how we develop.
similarity index 69%
rename from site/docs/4.5/about/translations.md
rename to site/content/docs/4.5/about/translations.md
index 576259d356e2fe35c05eb1ac7ff2653bf6156795..e719e3a842c281226b9be5107f592d0b6dcb5804 100644 (file)
@@ -7,11 +7,13 @@ group: about
 
 Community members have translated Bootstrap's documentation into various languages. None are officially supported and they may not always be up to date.
 
+{{< translations.inline >}}
 <ul>
-{% for language in site.data.translations %}
-  <li><a href="{{ language.url }}" hreflang="{{ language.code }}">{{ language.description }} ({{ language.name }})</a></li>
-{% endfor %}
+{{ range .Site.Data.translations -}}
+  <li><a href="{{ .url }}" hreflang="{{ .code }}">{{ .description }} ({{ .name }})</a></li>
+{{ end -}}
 </ul>
+{{< /translations.inline >}}
 
 **We don't help organize or host translations, we just link to them.**
 
similarity index 61%
rename from site/docs/4.5/browser-bugs.md
rename to site/content/docs/4.5/browser-bugs.md
index 15c99a67d5205dc43c525f60c3e5cd068a5621c8..1180fb5e212a6388270ac8c90489d0a3fc626e11 100644 (file)
@@ -2,19 +2,18 @@
 layout: docs
 title: Wall of browser bugs
 group: browser-bugs
-redirect_from: "/browser-bugs/"
+aliases: "/browser-bugs/"
 ---
 
-{% capture callout %}
+{{< callout danger >}}
 ##### Outdated content
 
 This page is outdated and is no longer applicable to the latest versions of Bootstrap. It's here purely for historical purposes now and will be removed in our next major release.
-{% endcapture %}
-{% include callout.html content=callout type="danger" %}
+{{< /callout >}}
 
 Bootstrap currently works around several outstanding browser bugs in major browsers to deliver the best cross-browser experience possible. Some bugs, like those listed below, cannot be solved by us.
 
-We publicly list browser bugs that are impacting us here, in the hopes of expediting the process of fixing them. For information on Bootstrap's browser compatibility, [see our browser compatibility docs]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/browsers-devices/#supported-browsers).
+We publicly list browser bugs that are impacting us here, in the hopes of expediting the process of fixing them. For information on Bootstrap's browser compatibility, [see our browser compatibility docs]({{< docsref "/getting-started/browsers-devices#supported-browsers" >}}).
 
 See also:
 
@@ -23,26 +22,31 @@ See also:
 * [WebKit bug 159753: [meta] Issues affecting Bootstrap](https://bugs.webkit.org/show_bug.cgi?id=159753)
 * [jQuery's browser bug workarounds](https://docs.google.com/document/d/1LPaPA30bLUB_publLIMF0RlhdnPx_ePXm7oW02iiT6o)
 
+
+{{< bug.inline >}}
+{{- $type := .Get "type" | default "bug" -}}
+{{- $data := .Get "data" | default "browser-bugs" -}}
 <table class="bd-browser-bugs table table-bordered table-hover">
   <thead>
     <tr>
       <th>Browser(s)</th>
-      <th>Summary of bug</th>
-      <th>Upstream bug(s)</th>
+      <th>Summary of {{ $type }}</th>
+      <th>Upstream issue(s)</th>
       <th>Bootstrap issue(s)</th>
     </tr>
   </thead>
   <tbody>
-    {% for bug in site.data.browser-bugs %}
+    {{- range (index $.Site.Data $data) }}
     <tr>
-      <td>{{ bug.browser }}</td>
-      <td>{{ bug.summary | markdownify }}</td>
-      <td>{% include bugify.html content=bug.upstream_bug %}</td>
-      <td>{% include bugify.html content=bug.origin %}</td>
+      <td>{{ .browser | chomp }}</td>
+      <td>{{ .summary | markdownify }}</td>
+      <td>{{ partial "bugify" .upstream_bug }}</td>
+      <td>{{ partial "bugify" .origin }}</td>
     </tr>
-    {% endfor %}
+    {{- end }}
   </tbody>
 </table>
+ {{< /bug.inline >}}
 
 # Most wanted features
 
@@ -50,23 +54,4 @@ There are several features specified in Web standards which would allow us to ma
 
 We publicly list these "most wanted" feature requests here, in the hopes of expediting the process of getting them implemented.
 
-<table class="bd-browser-bugs table table-bordered table-hover">
-  <thead>
-    <tr>
-      <th>Browser(s)</th>
-      <th>Summary of feature</th>
-      <th>Upstream issue(s)</th>
-      <th>Bootstrap issue(s)</th>
-    </tr>
-  </thead>
-  <tbody>
-    {% for feat in site.data.browser-features %}
-    <tr>
-      <td>{{ feat.browser }}</td>
-      <td>{{ feat.summary | markdownify }}</td>
-      <td>{% include bugify.html content=feat.upstream_bug %}</td>
-      <td>{% include bugify.html content=feat.origin %}</td>
-    </tr>
-    {% endfor %}
-  </tbody>
-</table>
+{{< bug.inline data="browser-features" type="feature" />}}
similarity index 75%
rename from site/docs/4.5/components/alerts.md
rename to site/content/docs/4.5/components/alerts.md
index 082101598d75bec1adda755cb32553cb8914ce15..9227221697542546cbabe51f346a1182ad4232b2 100644 (file)
@@ -3,7 +3,7 @@ layout: docs
 title: Alerts
 description: Provide contextual feedback messages for typical user actions with the handful of available and flexible alert messages.
 group: components
-redirect_from:
+aliases:
   - "/components/"
   - "/docs/4.5/components/"
 toc: true
@@ -13,41 +13,44 @@ toc: true
 
 Alerts are available for any length of text, as well as an optional dismiss button. For proper styling, use one of the eight **required** contextual classes (e.g., `.alert-success`). For inline dismissal, use the [alerts jQuery plugin](#dismissing).
 
-{% capture example %}
-{% for color in site.data.theme-colors %}
-<div class="alert alert-{{ color.name }}" role="alert">
-  A simple {{ color.name }} alert—check it out!
-</div>{% endfor %}
-{% endcapture %}
-{% include example.html content=example %}
+{{< example >}}
+{{< alerts.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<div class="alert alert-{{ .name }}" role="alert">
+  A simple {{ .name }} alert—check it out!
+</div>{{- end -}}
+{{< /alerts.inline >}}
+{{< /example >}}
 
-{% include callout-warning-color-assistive-technologies.md %}
+{{< callout warning >}}
+{{< partial "callout-warning-color-assistive-technologies.md" >}}
+{{< /callout >}}
 
 ### Link color
 
 Use the `.alert-link` utility class to quickly provide matching colored links within any alert.
 
-{% capture example %}
-{% for color in site.data.theme-colors %}
-<div class="alert alert-{{ color.name }}" role="alert">
-  A simple {{ color.name }} alert with <a href="#" class="alert-link">an example link</a>. Give it a click if you like.
-</div>{% endfor %}
-{% endcapture %}
-{% include example.html content=example %}
+{{< example >}}
+{{< alerts.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<div class="alert alert-{{ .name }}" role="alert">
+  A simple {{ .name }} alert with <a href="#" class="alert-link">an example link</a>. Give it a click if you like.
+</div>{{ end -}}
+{{< /alerts.inline >}}
+{{< /example >}}
 
 ### Additional content
 
 Alerts can also contain additional HTML elements like headings, paragraphs and dividers.
 
-{% capture example %}
+{{< example >}}
 <div class="alert alert-success" role="alert">
   <h4 class="alert-heading">Well done!</h4>
   <p>Aww yeah, you successfully read this important alert message. This example text is going to run a bit longer so that you can see how spacing within an alert works with this kind of content.</p>
   <hr>
   <p class="mb-0">Whenever you need to, be sure to use margin utilities to keep things nice and tidy.</p>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 
 ### Dismissing
@@ -55,22 +58,21 @@ Alerts can also contain additional HTML elements like headings, paragraphs and d
 Using the alert JavaScript plugin, it's possible to dismiss any alert inline. Here's how:
 
 - Be sure you've loaded the alert plugin, or the compiled Bootstrap JavaScript.
-- If you're building our JavaScript from source, it [requires `util.js`]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/javascript/#util). The compiled version includes this.
+- If you're building our JavaScript from source, it [requires `util.js`]({{< docsref "/getting-started/javascript#util" >}}). The compiled version includes this.
 - Add a dismiss button and the `.alert-dismissible` class, which adds extra padding to the right of the alert and positions the `.close` button.
 - On the dismiss button, add the `data-dismiss="alert"` attribute, which triggers the JavaScript functionality. Be sure to use the `<button>` element with it for proper behavior across all devices.
 - To animate alerts when dismissing them, be sure to add the `.fade` and `.show` classes.
 
 You can see this in action with a live demo:
 
-{% capture example %}
+{{< example >}}
 <div class="alert alert-warning alert-dismissible fade show" role="alert">
   <strong>Holy guacamole!</strong> You should check in on some of those fields below.
   <button type="button" class="close" data-dismiss="alert" aria-label="Close">
     <span aria-hidden="true">&times;</span>
   </button>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## JavaScript behavior
 
@@ -78,17 +80,17 @@ You can see this in action with a live demo:
 
 Enable dismissal of an alert via JavaScript:
 
-{% highlight js %}
+```js
 $('.alert').alert()
-{% endhighlight %}
+```
 
 Or with `data` attributes on a button **within the alert**, as demonstrated above:
 
-{% highlight html %}
+```html
 <button type="button" class="close" data-dismiss="alert" aria-label="Close">
   <span aria-hidden="true">&times;</span>
 </button>
-{% endhighlight %}
+```
 
 Note that closing an alert will remove it from the DOM.
 
@@ -100,7 +102,9 @@ Note that closing an alert will remove it from the DOM.
 | `$().alert('close')` | Closes an alert by removing it from the DOM. If the `.fade` and `.show` classes are present on the element, the alert will fade out before it is removed. |
 | `$().alert('dispose')` | Destroys an element's alert. |
 
-{% highlight js %}$('.alert').alert('close'){% endhighlight %}
+```js
+$('.alert').alert('close')
+```
 
 ### Events
 
@@ -111,8 +115,8 @@ Bootstrap's alert plugin exposes a few events for hooking into alert functionali
 | `close.bs.alert` | This event fires immediately when the `close` instance method is called. |
 | `closed.bs.alert` | This event is fired when the alert has been closed (will wait for CSS transitions to complete). |
 
-{% highlight js %}
+```js
 $('#myAlert').on('closed.bs.alert', function () {
   // do something...
 })
-{% endhighlight %}
+```
similarity index 68%
rename from site/docs/4.5/components/badge.md
rename to site/content/docs/4.5/components/badge.md
index 8c17600459ff327fb96139ca78fca3bef3a20451..7d55cabcfd19c851b18dfda5407cc558bac3e664 100644 (file)
@@ -10,65 +10,67 @@ toc: true
 
 Badges scale to match the size of the immediate parent element by using relative font sizing and `em` units.
 
-{% capture example %}
+{{< example >}}
 <h1>Example heading <span class="badge badge-secondary">New</span></h1>
 <h2>Example heading <span class="badge badge-secondary">New</span></h2>
 <h3>Example heading <span class="badge badge-secondary">New</span></h3>
 <h4>Example heading <span class="badge badge-secondary">New</span></h4>
 <h5>Example heading <span class="badge badge-secondary">New</span></h5>
 <h6>Example heading <span class="badge badge-secondary">New</span></h6>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Badges can be used as part of links or buttons to provide a counter.
 
-{% capture example %}
+{{< example >}}
 <button type="button" class="btn btn-primary">
   Notifications <span class="badge badge-light">4</span>
 </button>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Note that depending on how they are used, badges may be confusing for users of screen readers and similar assistive technologies. While the styling of badges provides a visual cue as to their purpose, these users will simply be presented with the content of the badge. Depending on the specific situation, these badges may seem like random additional words or numbers at the end of a sentence, link, or button.
 
 Unless the context is clear (as with the "Notifications" example, where it is understood that the "4" is the number of notifications), consider including additional context with a visually hidden piece of additional text.
 
-{% capture example %}
+{{< example >}}
 <button type="button" class="btn btn-primary">
   Profile <span class="badge badge-light">9</span>
   <span class="sr-only">unread messages</span>
 </button>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Contextual variations
 
 Add any of the below mentioned modifier classes to change the appearance of a badge.
 
-{% capture example %}
-{% for color in site.data.theme-colors %}
-<span class="badge badge-{{ color.name }}">{{ color.name | capitalize }}</span>{% endfor %}
-{% endcapture %}
-{% include example.html content=example %}
+{{< example >}}
+{{< badge.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<span class="badge badge-{{ .name }}">{{ .name | title }}</span>{{- end -}}
+{{< /badge.inline >}}
+{{< /example >}}
 
-{% include callout-warning-color-assistive-technologies.md %}
+{{< callout warning >}}
+{{< partial "callout-warning-color-assistive-technologies.md" >}}
+{{< /callout >}}
 
 ## Pill badges
 
 Use the `.badge-pill` modifier class to make badges more rounded (with a larger `border-radius` and additional horizontal `padding`). Useful if you miss the badges from v3.
 
-{% capture example %}
-{% for color in site.data.theme-colors %}
-<span class="badge badge-pill badge-{{ color.name }}">{{ color.name | capitalize }}</span>{% endfor %}
-{% endcapture %}
-{% include example.html content=example %}
+{{< example >}}
+{{< badge.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<span class="badge badge-pill badge-{{ .name }}">{{ .name | title }}</span>{{- end -}}
+{{< /badge.inline >}}
+{{< /example >}}
 
 ## Links
 
 Using the contextual `.badge-*` classes on an `<a>` element quickly provide _actionable_ badges with hover and focus states.
 
-{% capture example %}
-{% for color in site.data.theme-colors %}
-<a href="#" class="badge badge-{{ color.name }}">{{ color.name | capitalize }}</a>{% endfor %}
-{% endcapture %}
-{% include example.html content=example %}
+{{< example >}}
+{{< badge.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<a href="#" class="badge badge-{{ .name }}">{{ .name | title }}</a>{{- end -}}
+{{< /badge.inline >}}
+{{< /example >}}
similarity index 96%
rename from site/docs/4.5/components/breadcrumb.md
rename to site/content/docs/4.5/components/breadcrumb.md
index f6ce8f1be11218df13e2e90574cf4b9f12e6abdb..9ed198fcd1a78050da11fa9df2aac65a21469524 100644 (file)
@@ -7,7 +7,7 @@ group: components
 
 ## Example
 
-{% capture example %}
+{{< example >}}
 <nav aria-label="breadcrumb">
   <ol class="breadcrumb">
     <li class="breadcrumb-item active" aria-current="page">Home</li>
@@ -28,8 +28,7 @@ group: components
     <li class="breadcrumb-item active" aria-current="page">Data</li>
   </ol>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Changing the separator
 
similarity index 93%
rename from site/docs/4.5/components/button-group.md
rename to site/content/docs/4.5/components/button-group.md
index 2261a5e7294fcc1f92a89a7a90ea0aa7273a76b2..07f60a9bbe31b38cbad58362caa40873dd5be523 100644 (file)
@@ -8,31 +8,29 @@ toc: true
 
 ## Basic example
 
-Wrap a series of buttons with `.btn` in `.btn-group`. Add on optional JavaScript radio and checkbox style behavior with [our buttons plugin]({{ site.baseurl }}/docs/{{ site.docs_version }}/components/buttons/#button-plugin).
+Wrap a series of buttons with `.btn` in `.btn-group`. Add on optional JavaScript radio and checkbox style behavior with [our buttons plugin]({{< docsref "/components/buttons#button-plugin" >}}).
 
-{% capture example %}
+{{< example >}}
 <div class="btn-group" role="group" aria-label="Basic example">
   <button type="button" class="btn btn-secondary">Left</button>
   <button type="button" class="btn btn-secondary">Middle</button>
   <button type="button" class="btn btn-secondary">Right</button>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture callout %}
+{{< callout warning >}}
 ##### Ensure correct `role` and provide a label
 
 In order for assistive technologies (such as screen readers) to convey that a series of buttons is grouped, an appropriate `role` attribute needs to be provided. For button groups, this would be `role="group"`, while toolbars should have a `role="toolbar"`.
 
 In addition, groups and toolbars should be given an explicit label, as most assistive technologies will otherwise not announce them, despite the presence of the correct role attribute. In the examples provided here, we use `aria-label`, but alternatives such as `aria-labelledby` can also be used.
-{% endcapture %}
-{% include callout.html content=callout type="warning" %}
+{{< /callout >}}
 
 ## Button toolbar
 
 Combine sets of button groups into button toolbars for more complex components. Use utility classes as needed to space out groups, buttons, and more.
 
-{% capture example %}
+{{< example >}}
 <div class="btn-toolbar" role="toolbar" aria-label="Toolbar with button groups">
   <div class="btn-group mr-2" role="group" aria-label="First group">
     <button type="button" class="btn btn-secondary">1</button>
@@ -49,12 +47,11 @@ Combine sets of button groups into button toolbars for more complex components.
     <button type="button" class="btn btn-secondary">8</button>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Feel free to mix input groups with button groups in your toolbars. Similar to the example above, you'll likely need some utilities though to space things properly.
 
-{% capture example %}
+{{< example >}}
 <div class="btn-toolbar mb-3" role="toolbar" aria-label="Toolbar with button groups">
   <div class="btn-group mr-2" role="group" aria-label="First group">
     <button type="button" class="btn btn-secondary">1</button>
@@ -84,8 +81,7 @@ Feel free to mix input groups with button groups in your toolbars. Similar to th
     <input type="text" class="form-control" placeholder="Input group example" aria-label="Input group example" aria-describedby="btnGroupAddon2">
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Sizing
 
@@ -111,17 +107,17 @@ Instead of applying button sizing classes to every button in a group, just add `
   </div>
 </div>
 
-{% highlight html %}
+```html
 <div class="btn-group btn-group-lg" role="group" aria-label="...">...</div>
 <div class="btn-group" role="group" aria-label="...">...</div>
 <div class="btn-group btn-group-sm" role="group" aria-label="...">...</div>
-{% endhighlight %}
+```
 
 ## Nesting
 
 Place a `.btn-group` within another `.btn-group` when you want dropdown menus mixed with a series of buttons.
 
-{% capture example %}
+{{< example >}}
 <div class="btn-group" role="group" aria-label="Button group with nested dropdown">
   <button type="button" class="btn btn-secondary">1</button>
   <button type="button" class="btn btn-secondary">2</button>
@@ -136,8 +132,7 @@ Place a `.btn-group` within another `.btn-group` when you want dropdown menus mi
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Vertical variation
 
@@ -200,8 +195,8 @@ Make a set of buttons appear vertically stacked rather than horizontally. **Spli
   </div>
 </div>
 
-{% highlight html %}
+```html
 <div class="btn-group-vertical">
   ...
 </div>
-{% endhighlight %}
+```
similarity index 81%
rename from site/docs/4.5/components/buttons.md
rename to site/content/docs/4.5/components/buttons.md
index 978b7683ecc755829b3c157094528ad4fe7c381b..a544823198d7c6a39169f6fa5ff1e35d75462082 100644 (file)
@@ -10,15 +10,19 @@ toc: true
 
 Bootstrap includes several predefined button styles, each serving its own semantic purpose, with a few extras thrown in for more control.
 
-{% capture example %}
-{% for color in site.data.theme-colors %}
-<button type="button" class="btn btn-{{ color.name }}">{{ color.name | capitalize }}</button>{% endfor %}
+{{< example >}}
+{{< buttons.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<button type="button" class="btn btn-{{ .name }}">{{ .name | title }}</button>
+{{- end -}}
+{{< /buttons.inline >}}
 
 <button type="button" class="btn btn-link">Link</button>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% include callout-warning-color-assistive-technologies.md %}
+{{< callout warning >}}
+{{< partial "callout-warning-color-assistive-technologies.md" >}}
+{{< /callout >}}
 
 ## Disable text wrapping
 
@@ -30,73 +34,68 @@ The `.btn` classes are designed to be used with the `<button>` element. However,
 
 When using button classes on `<a>` elements that are used to trigger in-page functionality (like collapsing content), rather than linking to new pages or sections within the current page, these links should be given a `role="button"` to appropriately convey their purpose to assistive technologies such as screen readers.
 
-{% capture example %}
+{{< example >}}
 <a class="btn btn-primary" href="#" role="button">Link</a>
 <button class="btn btn-primary" type="submit">Button</button>
 <input class="btn btn-primary" type="button" value="Input">
 <input class="btn btn-primary" type="submit" value="Submit">
 <input class="btn btn-primary" type="reset" value="Reset">
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Outline buttons
 
 In need of a button, but not the hefty background colors they bring? Replace the default modifier classes with the `.btn-outline-*` ones to remove all background images and colors on any button.
 
-{% capture example %}
-{% for color in site.data.theme-colors %}
-<button type="button" class="btn btn-outline-{{ color.name }}">{{ color.name | capitalize }}</button>{% endfor %}
-{% endcapture %}
-{% include example.html content=example %}
+{{< example >}}
+{{< buttons.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<button type="button" class="btn btn-outline-{{ .name }}">{{ .name | title }}</button>
+{{- end -}}
+{{< /buttons.inline >}}
+{{< /example >}}
 
-{% capture callout %}
+{{< callout info >}}
 Some of the button styles use a relatively light foreground color, and should only be used on a dark background in order to have sufficient contrast.
-{% endcapture %}
-{% include callout.html content=callout type="info" %}
+{{< /callout >}}
 
 ## Sizes
 
 Fancy larger or smaller buttons? Add `.btn-lg` or `.btn-sm` for additional sizes.
 
-{% capture example %}
+{{< example >}}
 <button type="button" class="btn btn-primary btn-lg">Large button</button>
 <button type="button" class="btn btn-secondary btn-lg">Large button</button>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <button type="button" class="btn btn-primary btn-sm">Small button</button>
 <button type="button" class="btn btn-secondary btn-sm">Small button</button>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Create block level buttons—those that span the full width of a parent—by adding `.btn-block`.
 
-{% capture example %}
+{{< example >}}
 <button type="button" class="btn btn-primary btn-lg btn-block">Block level button</button>
 <button type="button" class="btn btn-secondary btn-lg btn-block">Block level button</button>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Active state
 
 Buttons will appear pressed (with a darker background, darker border, and inset shadow) when active. **There's no need to add a class to `<button>`s as they use a pseudo-class**. However, you can still force the same active appearance with `.active` (and include the <code>aria-pressed="true"</code> attribute) should you need to replicate the state programmatically.
 
-{% capture example %}
+{{< example >}}
 <a href="#" class="btn btn-primary btn-lg active" role="button" aria-pressed="true">Primary link</a>
 <a href="#" class="btn btn-secondary btn-lg active" role="button" aria-pressed="true">Link</a>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Disabled state
 
 Make buttons look inactive by adding the `disabled` boolean attribute to any `<button>` element.
 
-{% capture example %}
+{{< example >}}
 <button type="button" class="btn btn-lg btn-primary" disabled>Primary button</button>
 <button type="button" class="btn btn-secondary btn-lg" disabled>Button</button>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Disabled buttons using the `<a>` element behave a bit different:
 
@@ -104,18 +103,16 @@ Disabled buttons using the `<a>` element behave a bit different:
 - Some future-friendly styles are included to disable all `pointer-events` on anchor buttons. In browsers which support that property, you won't see the disabled cursor at all.
 - Disabled buttons should include the `aria-disabled="true"` attribute to indicate the state of the element to assistive technologies.
 
-{% capture example %}
+{{< example >}}
 <a href="#" class="btn btn-primary btn-lg disabled" tabindex="-1" role="button" aria-disabled="true">Primary link</a>
 <a href="#" class="btn btn-secondary btn-lg disabled" tabindex="-1" role="button" aria-disabled="true">Link</a>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture callout %}
+{{< callout warning >}}
 ##### Link functionality caveat
 
 The `.disabled` class uses `pointer-events: none` to try to disable the link functionality of `<a>`s, but that CSS property is not yet standardized. In addition, even in browsers that do support `pointer-events: none`, keyboard navigation remains unaffected, meaning that sighted keyboard users and users of assistive technologies will still be able to activate these links. So to be safe, add a `tabindex="-1"` attribute on these links (to prevent them from receiving keyboard focus) and use custom JavaScript to disable their functionality.
-{% endcapture %}
-{% include callout.html content=callout type="warning" %}
+{{< /callout >}}
 
 ## Button plugin
 
@@ -125,12 +122,11 @@ Do more with buttons. Control button states or create groups of buttons for more
 
 Add `data-toggle="button"` to toggle a button's `active` state. If you're pre-toggling a button, you must manually add the `.active` class **and** `aria-pressed="true"` to the `<button>`.
 
-{% capture example %}
+{{< example >}}
 <button type="button" class="btn btn-primary" data-toggle="button" aria-pressed="false">
   Single toggle
 </button>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Checkbox and radio buttons
 
@@ -140,16 +136,15 @@ The checked state for these buttons is **only updated via `click` event** on the
 
 Note that pre-checked buttons require you to manually add the `.active` class to the input's `<label>`.
 
-{% capture example %}
+{{< example >}}
 <div class="btn-group-toggle" data-toggle="buttons">
   <label class="btn btn-secondary active">
     <input type="checkbox" checked> Checked
   </label>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <div class="btn-group btn-group-toggle" data-toggle="buttons">
   <label class="btn btn-secondary active">
     <input type="radio" name="options" id="option1" checked> Active
@@ -161,8 +156,7 @@ Note that pre-checked buttons require you to manually add the `.active` class to
     <input type="radio" name="options" id="option3"> Radio
   </label>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Methods
 
similarity index 77%
rename from site/docs/4.5/components/card.md
rename to site/content/docs/4.5/components/card.md
index 18e1c0fabb4c61cf43548e7dfcb2aadd8d119073..d7730c6228238a0a76951fc30dbcf1a0d506a9ab 100644 (file)
@@ -12,21 +12,20 @@ A **card** is a flexible and extensible content container. It includes options f
 
 ## Example
 
-Cards are built with as little markup and styles as possible, but still manage to deliver a ton of control and customization. Built with flexbox, they offer easy alignment and mix well with other Bootstrap components. They have no `margin` by default, so use [spacing utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/spacing/) as needed.
+Cards are built with as little markup and styles as possible, but still manage to deliver a ton of control and customization. Built with flexbox, they offer easy alignment and mix well with other Bootstrap components. They have no `margin` by default, so use [spacing utilities]({{< docsref "/utilities/spacing" >}}) as needed.
 
 Below is an example of a basic card with mixed content and a fixed width. Cards have no fixed width to start, so they'll naturally fill the full width of its parent element. This is easily customized with our various [sizing options](#sizing).
 
-{% capture example %}
+{{< example >}}
 <div class="card" style="width: 18rem;">
-  {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %}
+  {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
   <div class="card-body">
     <h5 class="card-title">Card title</h5>
     <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
     <a href="#" class="btn btn-primary">Go somewhere</a>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Content types
 
@@ -36,14 +35,13 @@ Cards support a wide variety of content, including images, text, list groups, li
 
 The building block of a card is the `.card-body`. Use it whenever you need a padded section within a card.
 
-{% capture example %}
+{{< example >}}
 <div class="card">
   <div class="card-body">
     This is some text within a card body.
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Titles, text, and links
 
@@ -51,7 +49,7 @@ Card titles are used by adding `.card-title` to a `<h*>` tag. In the same way, l
 
 Subtitles are used by adding a `.card-subtitle` to a `<h*>` tag. If the `.card-title` and the `.card-subtitle` items are placed in a `.card-body` item, the card title and subtitle are aligned nicely.
 
-{% capture example %}
+{{< example >}}
 <div class="card" style="width: 18rem;">
   <div class="card-body">
     <h5 class="card-title">Card title</h5>
@@ -61,28 +59,26 @@ Subtitles are used by adding a `.card-subtitle` to a `<h*>` tag. If the `.card-t
     <a href="#" class="card-link">Another link</a>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Images
 
 `.card-img-top` places an image to the top of the card. With `.card-text`, text can be added to the card. Text within `.card-text` can also be styled with the standard HTML tags.
 
-{% capture example %}
+{{< example >}}
 <div class="card" style="width: 18rem;">
-  {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %}
+  {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
   <div class="card-body">
     <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### List groups
 
 Create lists of content in a card with a flush list group.
 
-{% capture example %}
+{{< example >}}
 <div class="card" style="width: 18rem;">
   <ul class="list-group list-group-flush">
     <li class="list-group-item">Cras justo odio</li>
@@ -90,10 +86,9 @@ Create lists of content in a card with a flush list group.
     <li class="list-group-item">Vestibulum at eros</li>
   </ul>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <div class="card" style="width: 18rem;">
   <div class="card-header">
     Featured
@@ -104,10 +99,9 @@ Create lists of content in a card with a flush list group.
     <li class="list-group-item">Vestibulum at eros</li>
   </ul>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <div class="card" style="width: 18rem;">
   <ul class="list-group list-group-flush">
     <li class="list-group-item">Cras justo odio</li>
@@ -118,16 +112,15 @@ Create lists of content in a card with a flush list group.
     Card footer
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Kitchen sink
 
 Mix and match multiple content types to create the card you need, or throw everything in there. Shown below are image styles, blocks, text styles, and a list group—all wrapped in a fixed-width card.
 
-{% capture example %}
+{{< example >}}
 <div class="card" style="width: 18rem;">
-  {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %}
+  {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
   <div class="card-body">
     <h5 class="card-title">Card title</h5>
     <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
@@ -142,14 +135,13 @@ Mix and match multiple content types to create the card you need, or throw every
     <a href="#" class="card-link">Another link</a>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Header and footer
 
 Add an optional header and/or footer within a card.
 
-{% capture example %}
+{{< example >}}
 <div class="card">
   <div class="card-header">
     Featured
@@ -160,12 +152,11 @@ Add an optional header and/or footer within a card.
     <a href="#" class="btn btn-primary">Go somewhere</a>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Card headers can be styled by adding `.card-header` to `<h*>` elements.
 
-{% capture example %}
+{{< example >}}
 <div class="card">
   <h5 class="card-header">Featured</h5>
   <div class="card-body">
@@ -174,10 +165,9 @@ Card headers can be styled by adding `.card-header` to `<h*>` elements.
     <a href="#" class="btn btn-primary">Go somewhere</a>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <div class="card">
   <div class="card-header">
     Quote
@@ -189,10 +179,9 @@ Card headers can be styled by adding `.card-header` to `<h*>` elements.
     </blockquote>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <div class="card text-center">
   <div class="card-header">
     Featured
@@ -206,8 +195,7 @@ Card headers can be styled by adding `.card-header` to `<h*>` elements.
     2 days ago
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Sizing
 
@@ -217,7 +205,7 @@ Cards assume no specific `width` to start, so they'll be 100% wide unless otherw
 
 Using the grid, wrap cards in columns and rows as needed.
 
-{% capture example %}
+{{< example >}}
 <div class="row">
   <div class="col-sm-6">
     <div class="card">
@@ -238,14 +226,13 @@ Using the grid, wrap cards in columns and rows as needed.
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Using utilities
 
-Use our handful of [available sizing utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/sizing/) to quickly set a card's width.
+Use our handful of [available sizing utilities]({{< docsref "/utilities/sizing" >}}) to quickly set a card's width.
 
-{% capture example %}
+{{< example >}}
 <div class="card w-75">
   <div class="card-body">
     <h5 class="card-title">Card title</h5>
@@ -261,14 +248,13 @@ Use our handful of [available sizing utilities]({{ site.baseurl }}/docs/{{ site.
     <a href="#" class="btn btn-primary">Button</a>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Using custom CSS
 
 Use custom CSS in your stylesheets or as inline styles to set a width.
 
-{% capture example %}
+{{< example >}}
 <div class="card" style="width: 18rem;">
   <div class="card-body">
     <h5 class="card-title">Special title treatment</h5>
@@ -276,14 +262,13 @@ Use custom CSS in your stylesheets or as inline styles to set a width.
     <a href="#" class="btn btn-primary">Go somewhere</a>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Text alignment
 
-You can quickly change the text alignment of any card—in its entirety or specific parts—with our [text align classes]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/text/#text-alignment).
+You can quickly change the text alignment of any card—in its entirety or specific parts—with our [text align classes]({{< docsref "/utilities/text#text-alignment" >}}).
 
-{% capture example %}
+{{< example >}}
 <div class="card" style="width: 18rem;">
   <div class="card-body">
     <h5 class="card-title">Special title treatment</h5>
@@ -307,14 +292,13 @@ You can quickly change the text alignment of any card—in its entirety or speci
     <a href="#" class="btn btn-primary">Go somewhere</a>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Navigation
 
-Add some navigation to a card's header (or block) with Bootstrap's [nav components]({{ site.baseurl }}/docs/{{ site.docs_version }}/components/navs/).
+Add some navigation to a card's header (or block) with Bootstrap's [nav components]({{< docsref "/components/navs" >}}).
 
-{% capture example %}
+{{< example >}}
 <div class="card text-center">
   <div class="card-header">
     <ul class="nav nav-tabs card-header-tabs">
@@ -335,10 +319,9 @@ Add some navigation to a card's header (or block) with Bootstrap's [nav componen
     <a href="#" class="btn btn-primary">Go somewhere</a>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <div class="card text-center">
   <div class="card-header">
     <ul class="nav nav-pills card-header-pills">
@@ -359,8 +342,7 @@ Add some navigation to a card's header (or block) with Bootstrap's [nav componen
     <a href="#" class="btn btn-primary">Go somewhere</a>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Images
 
@@ -372,7 +354,7 @@ Similar to headers and footers, cards can include top and bottom "image caps"—
 
 <div class="bd-example">
   <div class="card mb-3">
-    {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %}
+    {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
     <div class="card-body">
       <h5 class="card-title">Card title</h5>
       <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
@@ -385,11 +367,11 @@ Similar to headers and footers, cards can include top and bottom "image caps"—
       <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
       <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
     </div>
-    {% include icons/placeholder.svg width="100%" height="180" class="card-img-bottom" text="Image cap" %}
+    {{< placeholder width="100%" height="180" class="card-img-bottom" text="Image cap" >}}
   </div>
 </div>
 
-{% highlight html %}
+```html
 <div class="card mb-3">
   <img src="..." class="card-img-top" alt="...">
   <div class="card-body">
@@ -406,38 +388,36 @@ Similar to headers and footers, cards can include top and bottom "image caps"—
   </div>
   <img src="..." class="card-img-bottom" alt="...">
 </div>
-{% endhighlight %}
+```
 
 ### Image overlays
 
 Turn an image into a card background and overlay your card's text. Depending on the image, you may or may not need additional styles or utilities.
 
-{% capture example %}
+{{< example >}}
 <div class="card bg-dark text-white">
-  {% include icons/placeholder.svg width="100%" height="270" class="bd-placeholder-img-lg card-img" text="Card image" %}
+  {{< placeholder width="100%" height="270" class="bd-placeholder-img-lg card-img" text="Card image" >}}
   <div class="card-img-overlay">
     <h5 class="card-title">Card title</h5>
     <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
     <p class="card-text">Last updated 3 mins ago</p>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture callout %}
+{{< callout info >}}
 Note that content should not be larger than the height of the image. If content is larger than the image the content will be displayed outside the image.
-{% endcapture %}
-{% include callout.html content=callout type="info" %}
+{{< /callout >}}
 
 ## Horizontal
 
 Using a combination of grid and utility classes, cards can be made horizontal in a mobile-friendly and responsive way. In the example below, we remove the grid gutters with `.no-gutters` and use `.col-md-*` classes to make the card horizontal at the `md` breakpoint. Further adjustments may be needed depending on your card content.
 
-{% capture example %}
+{{< example >}}
 <div class="card mb-3" style="max-width: 540px;">
   <div class="row no-gutters">
     <div class="col-md-4">
-      {% include icons/placeholder.svg width="100%" height="250" class="" text="Image" %}
+      {{< placeholder width="100%" height="250" class="" text="Image" >}}
     </div>
     <div class="col-md-8">
       <div class="card-body">
@@ -448,8 +428,7 @@ Using a combination of grid and utility classes, cards can be made horizontal in
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Card styles
 
@@ -457,43 +436,49 @@ Cards include various options for customizing their backgrounds, borders, and co
 
 ### Background and color
 
-Use [text and background utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/colors/) to change the appearance of a card.
+Use [text and background utilities]({{< docsref "/utilities/colors" >}}) to change the appearance of a card.
 
-{% capture example %}
-{% for color in site.data.theme-colors %}
-<div class="card{% unless color.name == "light" %} text-white{% endunless %} bg-{{ color.name }} mb-3" style="max-width: 18rem;">
+{{< example >}}
+{{< card.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<div class="card{{ if not (eq .name "light") }} text-white{{ end }} bg-{{ .name }} mb-3" style="max-width: 18rem;">
   <div class="card-header">Header</div>
   <div class="card-body">
-    <h5 class="card-title">{{ color.name | capitalize }} card title</h5>
+    <h5 class="card-title">{{ .name | title }} card title</h5>
     <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
   </div>
-</div>{% endfor %}
-{% endcapture %}
-{% include example.html content=example %}
+</div>
+{{- end -}}
+{{< /card.inline >}}
+{{< /example >}}
 
-{% include callout-warning-color-assistive-technologies.md %}
+{{< callout warning >}}
+{{< partial "callout-warning-color-assistive-technologies.md" >}}
+{{< /callout >}}
 
 ### Border
 
-Use [border utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/borders/) to change just the `border-color` of a card. Note that you can put `.text-{color}` classes on the parent `.card` or a subset of the card's contents as shown below.
+Use [border utilities]({{< docsref "/utilities/borders" >}}) to change just the `border-color` of a card. Note that you can put `.text-{color}` classes on the parent `.card` or a subset of the card's contents as shown below.
 
-{% capture example %}
-{% for color in site.data.theme-colors %}
-<div class="card border-{{ color.name }} mb-3" style="max-width: 18rem;">
+{{< example >}}
+{{< card.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<div class="card border-{{ .name }} mb-3" style="max-width: 18rem;">
   <div class="card-header">Header</div>
-  <div class="card-body{% unless color.name == "light" %} text-{{ color.name }}{% endunless %}">
-    <h5 class="card-title">{{ color.name | capitalize }} card title</h5>
+  <div class="card-body{{ if not (eq .name "light") }} text-{{ .name }}{{ end }}">
+    <h5 class="card-title">{{ .name | title }} card title</h5>
     <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
   </div>
-</div>{% endfor %}
-{% endcapture %}
-{% include example.html content=example %}
+</div>
+{{- end -}}
+{{< /card.inline >}}
+{{< /example >}}
 
 ### Mixins utilities
 
 You can also change the borders on the card header and footer as needed, and even remove their `background-color` with `.bg-transparent`.
 
-{% capture example %}
+{{< example >}}
 <div class="card border-success mb-3" style="max-width: 18rem;">
   <div class="card-header bg-transparent border-success">Header</div>
   <div class="card-body text-success">
@@ -502,8 +487,7 @@ You can also change the borders on the card header and footer as needed, and eve
   </div>
   <div class="card-footer bg-transparent border-success">Footer</div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Card layout
 
@@ -513,10 +497,10 @@ In addition to styling the content within cards, Bootstrap includes a few option
 
 Use card groups to render cards as a single, attached element with equal width and height columns. Card groups start off stacked and use `display: flex;` to become attached with uniform dimensions starting at the `sm` breakpoint.
 
-{% capture example %}
+{{< example >}}
 <div class="card-group">
   <div class="card">
-    {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %}
+    {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
     <div class="card-body">
       <h5 class="card-title">Card title</h5>
       <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
@@ -524,7 +508,7 @@ Use card groups to render cards as a single, attached element with equal width a
     </div>
   </div>
   <div class="card">
-    {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %}
+    {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
     <div class="card-body">
       <h5 class="card-title">Card title</h5>
       <p class="card-text">This card has supporting text below as a natural lead-in to additional content.</p>
@@ -532,7 +516,7 @@ Use card groups to render cards as a single, attached element with equal width a
     </div>
   </div>
   <div class="card">
-    {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %}
+    {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
     <div class="card-body">
       <h5 class="card-title">Card title</h5>
       <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.</p>
@@ -540,15 +524,14 @@ Use card groups to render cards as a single, attached element with equal width a
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 When using card groups with footers, their content will automatically line up.
 
-{% capture example %}
+{{< example >}}
 <div class="card-group">
   <div class="card">
-    {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %}
+    {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
     <div class="card-body">
       <h5 class="card-title">Card title</h5>
       <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
@@ -558,7 +541,7 @@ When using card groups with footers, their content will automatically line up.
     </div>
   </div>
   <div class="card">
-    {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %}
+    {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
     <div class="card-body">
       <h5 class="card-title">Card title</h5>
       <p class="card-text">This card has supporting text below as a natural lead-in to additional content.</p>
@@ -568,7 +551,7 @@ When using card groups with footers, their content will automatically line up.
     </div>
   </div>
   <div class="card">
-    {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %}
+    {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
     <div class="card-body">
       <h5 class="card-title">Card title</h5>
       <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.</p>
@@ -578,17 +561,16 @@ When using card groups with footers, their content will automatically line up.
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Card decks
 
 Need a set of equal width and height cards that aren't attached to one another? Use card decks.
 
-{% capture example %}
+{{< example >}}
 <div class="card-deck">
   <div class="card">
-    {% include icons/placeholder.svg width="100%" height="200" class="card-img-top" text="Image cap" %}
+    {{< placeholder width="100%" height="200" class="card-img-top" text="Image cap" >}}
     <div class="card-body">
       <h5 class="card-title">Card title</h5>
       <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
@@ -596,7 +578,7 @@ Need a set of equal width and height cards that aren't attached to one another?
     </div>
   </div>
   <div class="card">
-    {% include icons/placeholder.svg width="100%" height="200" class="card-img-top" text="Image cap" %}
+    {{< placeholder width="100%" height="200" class="card-img-top" text="Image cap" >}}
     <div class="card-body">
       <h5 class="card-title">Card title</h5>
       <p class="card-text">This card has supporting text below as a natural lead-in to additional content.</p>
@@ -604,7 +586,7 @@ Need a set of equal width and height cards that aren't attached to one another?
     </div>
   </div>
   <div class="card">
-    {% include icons/placeholder.svg width="100%" height="200" class="card-img-top" text="Image cap" %}
+    {{< placeholder width="100%" height="200" class="card-img-top" text="Image cap" >}}
     <div class="card-body">
       <h5 class="card-title">Card title</h5>
       <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.</p>
@@ -612,15 +594,14 @@ Need a set of equal width and height cards that aren't attached to one another?
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Just like with card groups, card footers in decks will automatically line up.
 
-{% capture example %}
+{{< example >}}
 <div class="card-deck">
   <div class="card">
-    {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %}
+    {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
     <div class="card-body">
       <h5 class="card-title">Card title</h5>
       <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
@@ -630,7 +611,7 @@ Just like with card groups, card footers in decks will automatically line up.
     </div>
   </div>
   <div class="card">
-    {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %}
+    {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
     <div class="card-body">
       <h5 class="card-title">Card title</h5>
       <p class="card-text">This card has supporting text below as a natural lead-in to additional content.</p>
@@ -640,7 +621,7 @@ Just like with card groups, card footers in decks will automatically line up.
     </div>
   </div>
   <div class="card">
-    {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %}
+    {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
     <div class="card-body">
       <h5 class="card-title">Card title</h5>
       <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.</p>
@@ -650,18 +631,17 @@ Just like with card groups, card footers in decks will automatically line up.
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Grid cards
 
-Use the Bootstrap grid system and its [`.row-cols` classes]({{ site.baseurl }}/docs/{{ site.docs_version }}/layout/grid/#row-columns) to control how many grid columns (wrapped around your cards) you show per row. For example, here's `.row-cols-1` laying out the cards on one column, and `.row-cols-md-2` splitting four cards to equal width across multiple rows, from the medium breakpoint up.
+Use the Bootstrap grid system and its [`.row-cols` classes]({{< docsref "/layout/grid#row-columns" >}}) to control how many grid columns (wrapped around your cards) you show per row. For example, here's `.row-cols-1` laying out the cards on one column, and `.row-cols-md-2` splitting four cards to equal width across multiple rows, from the medium breakpoint up.
 
-{% capture example %}
+{{< example >}}
 <div class="row row-cols-1 row-cols-md-2">
   <div class="col mb-4">
     <div class="card">
-      {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %}
+      {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
       <div class="card-body">
         <h5 class="card-title">Card title</h5>
         <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
@@ -670,7 +650,7 @@ Use the Bootstrap grid system and its [`.row-cols` classes]({{ site.baseurl }}/d
   </div>
   <div class="col mb-4">
     <div class="card">
-      {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %}
+      {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
       <div class="card-body">
         <h5 class="card-title">Card title</h5>
         <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
@@ -679,7 +659,7 @@ Use the Bootstrap grid system and its [`.row-cols` classes]({{ site.baseurl }}/d
   </div>
   <div class="col mb-4">
     <div class="card">
-      {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %}
+      {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
       <div class="card-body">
         <h5 class="card-title">Card title</h5>
         <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content.</p>
@@ -688,7 +668,7 @@ Use the Bootstrap grid system and its [`.row-cols` classes]({{ site.baseurl }}/d
   </div>
   <div class="col mb-4">
     <div class="card">
-      {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %}
+      {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
       <div class="card-body">
         <h5 class="card-title">Card title</h5>
         <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
@@ -696,16 +676,15 @@ Use the Bootstrap grid system and its [`.row-cols` classes]({{ site.baseurl }}/d
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Change it to `.row-cols-3` and you'll see the fourth card wrap.
 
-{% capture example %}
+{{< example >}}
 <div class="row row-cols-1 row-cols-md-3">
   <div class="col mb-4">
     <div class="card">
-      {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %}
+      {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
       <div class="card-body">
         <h5 class="card-title">Card title</h5>
         <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
@@ -714,7 +693,7 @@ Change it to `.row-cols-3` and you'll see the fourth card wrap.
   </div>
   <div class="col mb-4">
     <div class="card">
-      {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %}
+      {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
       <div class="card-body">
         <h5 class="card-title">Card title</h5>
         <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
@@ -723,7 +702,7 @@ Change it to `.row-cols-3` and you'll see the fourth card wrap.
   </div>
   <div class="col mb-4">
     <div class="card">
-      {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %}
+      {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
       <div class="card-body">
         <h5 class="card-title">Card title</h5>
         <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content.</p>
@@ -732,7 +711,7 @@ Change it to `.row-cols-3` and you'll see the fourth card wrap.
   </div>
   <div class="col mb-4">
     <div class="card">
-      {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %}
+      {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
       <div class="card-body">
         <h5 class="card-title">Card title</h5>
         <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
@@ -740,16 +719,15 @@ Change it to `.row-cols-3` and you'll see the fourth card wrap.
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 When you need equal height, add `.h-100` to the cards. If you want equal heights by default, you can set `$card-height: 100%` in Sass.
 
-{% capture example %}
+{{< example >}}
 <div class="row row-cols-1 row-cols-md-3">
   <div class="col mb-4">
     <div class="card h-100">
-      {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %}
+      {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
       <div class="card-body">
         <h5 class="card-title">Card title</h5>
         <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
@@ -758,7 +736,7 @@ When you need equal height, add `.h-100` to the cards. If you want equal heights
   </div>
   <div class="col mb-4">
     <div class="card h-100">
-      {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %}
+      {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
       <div class="card-body">
         <h5 class="card-title">Card title</h5>
         <p class="card-text">This is a short card.</p>
@@ -767,7 +745,7 @@ When you need equal height, add `.h-100` to the cards. If you want equal heights
   </div>
   <div class="col mb-4">
     <div class="card h-100">
-      {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %}
+      {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
       <div class="card-body">
         <h5 class="card-title">Card title</h5>
         <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content.</p>
@@ -776,7 +754,7 @@ When you need equal height, add `.h-100` to the cards. If you want equal heights
   </div>
   <div class="col mb-4">
     <div class="card h-100">
-      {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %}
+      {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
       <div class="card-body">
         <h5 class="card-title">Card title</h5>
         <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
@@ -784,8 +762,7 @@ When you need equal height, add `.h-100` to the cards. If you want equal heights
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Card columns
 
@@ -793,10 +770,10 @@ Cards can be organized into [Masonry](https://masonry.desandro.com/)-like column
 
 **Heads up!** Your mileage with card columns may vary. To prevent cards breaking across columns, we must set them to `display: inline-block` as `column-break-inside: avoid` isn't a bulletproof solution yet.
 
-{% capture example %}
+{{< example >}}
 <div class="card-columns">
   <div class="card">
-    {% include icons/placeholder.svg width="100%" height="160" class="card-img-top" text="Image cap" %}
+    {{< placeholder width="100%" height="160" class="card-img-top" text="Image cap" >}}
     <div class="card-body">
       <h5 class="card-title">Card title that wraps to a new line</h5>
       <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
@@ -813,7 +790,7 @@ Cards can be organized into [Masonry](https://masonry.desandro.com/)-like column
     </blockquote>
   </div>
   <div class="card">
-    {% include icons/placeholder.svg width="100%" height="160" class="card-img-top" text="Image cap" %}
+    {{< placeholder width="100%" height="160" class="card-img-top" text="Image cap" >}}
     <div class="card-body">
       <h5 class="card-title">Card title</h5>
       <p class="card-text">This card has supporting text below as a natural lead-in to additional content.</p>
@@ -838,7 +815,7 @@ Cards can be organized into [Masonry](https://masonry.desandro.com/)-like column
     </div>
   </div>
   <div class="card">
-    {% include icons/placeholder.svg width="100%" height="260" class="card-img" text="Card image" %}
+    {{< placeholder width="100%" height="260" class="card-img" text="Card image" >}}
   </div>
   <div class="card p-3 text-right">
     <blockquote class="blockquote mb-0">
@@ -858,12 +835,11 @@ Cards can be organized into [Masonry](https://masonry.desandro.com/)-like column
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Card columns can also be extended and customized with some additional code. Shown below is an extension of the `.card-columns` class using the same CSS we use—CSS columns— to generate a set of responsive tiers for changing the number of columns.
 
-{% highlight scss %}
+```scss
 .card-columns {
   @include media-breakpoint-only(lg) {
     column-count: 4;
@@ -872,4 +848,4 @@ Card columns can also be extended and customized with some additional code. Show
     column-count: 5;
   }
 }
-{% endhighlight %}
+```
similarity index 76%
rename from site/docs/4.5/components/carousel.md
rename to site/content/docs/4.5/components/carousel.md
index 35bdd198f1dc29b3605322b82167c3c5050eef5c..31692b06443c7e2a2b6a430aaf22f1eab2425e5f 100644 (file)
@@ -12,11 +12,13 @@ The carousel is a slideshow for cycling through a series of content, built with
 
 In browsers where the [Page Visibility API](https://www.w3.org/TR/page-visibility/) is supported, the carousel will avoid sliding when the webpage is not visible to the user (such as when the browser tab is inactive, the browser window is minimized, etc.).
 
-{% include callout-info-prefersreducedmotion.md %}
+{{< callout info >}}
+{{< partial "callout-info-prefersreducedmotion.md" >}}
+{{< /callout >}}
 
 Please be aware that nested carousels are not supported, and carousels are generally not compliant with accessibility standards.
 
-Lastly, if you're building our JavaScript from source, it [requires `util.js`]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/javascript/#util).
+Lastly, if you're building our JavaScript from source, it [requires `util.js`]({{< docsref "/getting-started/javascript#util" >}}).
 
 ## Example
 
@@ -28,38 +30,37 @@ Carousels don't automatically normalize slide dimensions. As such, you may need
 
 Here's a carousel with slides only. Note the presence of the `.d-block` and `.w-100` on carousel images to prevent browser default image alignment.
 
-{% capture example %}
+{{< example >}}
 <div id="carouselExampleSlidesOnly" class="carousel slide" data-ride="carousel">
   <div class="carousel-inner">
     <div class="carousel-item active">
-        {% include icons/placeholder.svg width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" %}
+        {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" >}}
     </div>
     <div class="carousel-item">
-      {% include icons/placeholder.svg width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" %}
+      {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" >}}
     </div>
     <div class="carousel-item">
-      {% include icons/placeholder.svg width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" %}
+      {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### With controls
 
 Adding in the previous and next controls:
 
-{% capture example %}
+{{< example >}}
 <div id="carouselExampleControls" class="carousel slide" data-ride="carousel">
   <div class="carousel-inner">
     <div class="carousel-item active">
-      {% include icons/placeholder.svg width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" %}
+      {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" >}}
     </div>
     <div class="carousel-item">
-      {% include icons/placeholder.svg width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" %}
+      {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" >}}
     </div>
     <div class="carousel-item">
-      {% include icons/placeholder.svg width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" %}
+      {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
     </div>
   </div>
   <a class="carousel-control-prev" href="#carouselExampleControls" role="button" data-slide="prev">
@@ -71,14 +72,13 @@ Adding in the previous and next controls:
     <span class="sr-only">Next</span>
   </a>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### With indicators
 
 You can also add the indicators to the carousel, alongside the controls, too.
 
-{% capture example %}
+{{< example >}}
 <div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel">
   <ol class="carousel-indicators">
     <li data-target="#carouselExampleIndicators" data-slide-to="0" class="active"></li>
@@ -87,13 +87,13 @@ You can also add the indicators to the carousel, alongside the controls, too.
   </ol>
   <div class="carousel-inner">
     <div class="carousel-item active">
-      {% include icons/placeholder.svg width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" %}
+      {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" >}}
     </div>
     <div class="carousel-item">
-      {% include icons/placeholder.svg width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" %}
+      {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" >}}
     </div>
     <div class="carousel-item">
-      {% include icons/placeholder.svg width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" %}
+      {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
     </div>
   </div>
   <a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev">
@@ -105,14 +105,13 @@ You can also add the indicators to the carousel, alongside the controls, too.
     <span class="sr-only">Next</span>
   </a>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### With captions
 
-Add captions to your slides easily with the `.carousel-caption` element within any `.carousel-item`. They can be easily hidden on smaller viewports, as shown below, with optional [display utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/display/). We hide them initially with `.d-none` and bring them back on medium-sized devices with `.d-md-block`.
+Add captions to your slides easily with the `.carousel-caption` element within any `.carousel-item`. They can be easily hidden on smaller viewports, as shown below, with optional [display utilities]({{< docsref "/utilities/display" >}}). We hide them initially with `.d-none` and bring them back on medium-sized devices with `.d-md-block`.
 
-{% capture example %}
+{{< example >}}
 <div id="carouselExampleCaptions" class="carousel slide" data-ride="carousel">
   <ol class="carousel-indicators">
     <li data-target="#carouselExampleCaptions" data-slide-to="0" class="active"></li>
@@ -121,21 +120,21 @@ Add captions to your slides easily with the `.carousel-caption` element within a
   </ol>
   <div class="carousel-inner">
     <div class="carousel-item active">
-      {% include icons/placeholder.svg width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" %}
+      {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" >}}
       <div class="carousel-caption d-none d-md-block">
         <h5>First slide label</h5>
         <p>Nulla vitae elit libero, a pharetra augue mollis interdum.</p>
       </div>
     </div>
     <div class="carousel-item">
-      {% include icons/placeholder.svg width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" %}
+      {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" >}}
       <div class="carousel-caption d-none d-md-block">
         <h5>Second slide label</h5>
         <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
       </div>
     </div>
     <div class="carousel-item">
-      {% include icons/placeholder.svg width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" %}
+      {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
       <div class="carousel-caption d-none d-md-block">
         <h5>Third slide label</h5>
         <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur.</p>
@@ -151,24 +150,23 @@ Add captions to your slides easily with the `.carousel-caption` element within a
     <span class="sr-only">Next</span>
   </a>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Crossfade
 
 Add `.carousel-fade` to your carousel to animate slides with a fade transition instead of a slide.
 
-{% capture example %}
+{{< example >}}
 <div id="carouselExampleFade" class="carousel slide carousel-fade" data-ride="carousel">
   <div class="carousel-inner">
     <div class="carousel-item active">
-      {% include icons/placeholder.svg width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" %}
+      {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" >}}
     </div>
     <div class="carousel-item">
-      {% include icons/placeholder.svg width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" %}
+      {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" >}}
     </div>
     <div class="carousel-item">
-      {% include icons/placeholder.svg width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" %}
+      {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
     </div>
   </div>
   <a class="carousel-control-prev" href="#carouselExampleFade" role="button" data-slide="prev">
@@ -180,24 +178,23 @@ Add `.carousel-fade` to your carousel to animate slides with a fade transition i
     <span class="sr-only">Next</span>
   </a>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Individual `.carousel-item` interval
 
 Add `data-interval=""` to a `.carousel-item` to change the amount of time to delay between automatically cycling to the next item.
 
-{% capture example %}
+{{< example >}}
 <div id="carouselExampleInterval" class="carousel slide" data-ride="carousel">
   <div class="carousel-inner">
     <div class="carousel-item active" data-interval="10000">
-      {% include icons/placeholder.svg width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" %}
+      {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" >}}
     </div>
     <div class="carousel-item" data-interval="2000">
-      {% include icons/placeholder.svg width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" %}
+      {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" >}}
     </div>
     <div class="carousel-item">
-      {% include icons/placeholder.svg width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" %}
+      {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
     </div>
   </div>
   <a class="carousel-control-prev" href="#carouselExampleInterval" role="button" data-slide="prev">
@@ -209,8 +206,7 @@ Add `data-interval=""` to a `.carousel-item` to change the amount of time to del
     <span class="sr-only">Next</span>
   </a>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 
 ## Usage
@@ -225,9 +221,9 @@ The `data-ride="carousel"` attribute is used to mark a carousel as animating sta
 
 Call carousel manually with:
 
-{% highlight js %}
+```js
 $('.carousel').carousel()
-{% endhighlight %}
+```
 
 ### Options
 
@@ -285,17 +281,19 @@ Options can be passed via data attributes or JavaScript. For data attributes, ap
 
 ### Methods
 
-{% include callout-danger-async-methods.md %}
+{{< callout danger >}}
+{{< partial "callout-danger-async-methods.md" >}}
+{{< /callout >}}
 
 #### `.carousel(options)`
 
 Initializes the carousel with an optional options `object` and starts cycling through items.
 
-{% highlight js %}
+```js
 $('.carousel').carousel({
   interval: 2000
 })
-{% endhighlight %}
+```
 
 #### `.carousel('cycle')`
 
@@ -359,11 +357,11 @@ All carousel events are fired at the carousel itself (i.e. at the `<div class="c
   </tbody>
 </table>
 
-{% highlight js %}
+```js
 $('#myCarousel').on('slide.bs.carousel', function () {
   // do something...
 })
-{% endhighlight %}
+```
 
 ### Change transition duration
 
similarity index 94%
rename from site/docs/4.5/components/collapse.md
rename to site/content/docs/4.5/components/collapse.md
index bcc321ef89d4e0ffcb1cab541958e428e65900fd..4aae3493144a310f868ab6c16b9c34e1e9a14fca 100644 (file)
@@ -10,7 +10,9 @@ toc: true
 
 The collapse JavaScript plugin is used to show and hide content. Buttons or anchors are used as triggers that are mapped to specific elements you toggle. Collapsing an element will animate the `height` from its current value to `0`. Given how CSS handles animations, you cannot use `padding` on a `.collapse` element. Instead, use the class as an independent wrapping element.
 
-{% include callout-info-prefersreducedmotion.md %}
+{{< callout info >}}
+{{< partial "callout-info-prefersreducedmotion.md" >}}
+{{< /callout >}}
 
 ## Example
 
@@ -22,7 +24,7 @@ Click the buttons below to show and hide another element via class changes:
 
 You can use a link with the `href` attribute, or a button with the `data-target` attribute. In both cases, the `data-toggle="collapse"` is required.
 
-{% capture example %}
+{{< example >}}
 <p>
   <a class="btn btn-primary" data-toggle="collapse" href="#collapseExample" role="button" aria-expanded="false" aria-controls="collapseExample">
     Link with href
@@ -36,15 +38,14 @@ You can use a link with the `href` attribute, or a button with the `data-target`
     Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident.
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Multiple targets
 
 A `<button>` or `<a>` can show and hide multiple elements by referencing them with a JQuery selector in its `href` or `data-target` attribute.
 Multiple `<button>` or `<a>` can show and hide an element if they each reference it with their `href` or `data-target` attribute
 
-{% capture example %}
+{{< example >}}
 <p>
   <a class="btn btn-primary" data-toggle="collapse" href="#multiCollapseExample1" role="button" aria-expanded="false" aria-controls="multiCollapseExample1">Toggle first element</a>
   <button class="btn btn-primary" type="button" data-toggle="collapse" data-target="#multiCollapseExample2" aria-expanded="false" aria-controls="multiCollapseExample2">Toggle second element</button>
@@ -66,14 +67,13 @@ Multiple `<button>` or `<a>` can show and hide an element if they each reference
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Accordion example
 
-Using the [card]({{ site.baseurl }}/docs/{{ site.docs_version }}/components/card/) component, you can extend the default collapse behavior to create an accordion. To properly achieve the accordion style, be sure to use `.accordion` as a wrapper.
+Using the [card]({{< docsref "/components/card" >}}) component, you can extend the default collapse behavior to create an accordion. To properly achieve the accordion style, be sure to use `.accordion` as a wrapper.
 
-{% capture example %}
+{{< example >}}
 <div class="accordion" id="accordionExample">
   <div class="card">
     <div class="card-header" id="headingOne">
@@ -119,8 +119,7 @@ Using the [card]({{ site.baseurl }}/docs/{{ site.docs_version }}/components/card
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Accessibility
 
@@ -150,9 +149,9 @@ To add accordion-like group management to a collapsible area, add the data attri
 
 Enable manually with:
 
-{% highlight js %}
+```js
 $('.collapse').collapse()
-{% endhighlight %}
+```
 
 ### Options
 
@@ -185,17 +184,19 @@ Options can be passed via data attributes or JavaScript. For data attributes, ap
 
 ### Methods
 
-{% include callout-danger-async-methods.md %}
+{{< callout danger >}}
+{{< partial "callout-danger-async-methods.md" >}}
+{{< /callout >}}
 
 #### `.collapse(options)`
 
 Activates your content as a collapsible element. Accepts an optional options `object`.
 
-{% highlight js %}
+```js
 $('#myCollapsible').collapse({
   toggle: false
 })
-{% endhighlight %}
+```
 
 #### `.collapse('toggle')`
 
@@ -244,8 +245,8 @@ Bootstrap's collapse class exposes a few events for hooking into collapse functi
   </tbody>
 </table>
 
-{% highlight js %}
+```js
 $('#myCollapsible').on('hidden.bs.collapse', function () {
   // do something...
 })
-{% endhighlight %}
+```
similarity index 93%
rename from site/docs/4.5/components/dropdowns.md
rename to site/content/docs/4.5/components/dropdowns.md
index 42bd699a46bde7db950c8d866d96d9901f4eeea5..6f8ba5794b6bc5f4968d2a525772229b829dfe37 100644 (file)
@@ -10,9 +10,9 @@ toc: true
 
 Dropdowns are toggleable, contextual overlays for displaying lists of links and more. They're made interactive with the included Bootstrap dropdown JavaScript plugin. They're toggled by clicking, not by hovering; this is [an intentional design decision](https://markdotto.com/2012/02/27/bootstrap-explained-dropdowns/).
 
-Dropdowns are built on a third party library, [Popper.js](https://popper.js.org/), which provides dynamic positioning and viewport detection. Be sure to include [popper.min.js]({{ site.cdn.popper }}) before Bootstrap's JavaScript or use `bootstrap.bundle.min.js` / `bootstrap.bundle.js` which contains Popper.js. Popper.js isn't used to position dropdowns in navbars though as dynamic positioning isn't required.
+Dropdowns are built on a third party library, [Popper.js](https://popper.js.org/), which provides dynamic positioning and viewport detection. Be sure to include [popper.min.js]({{< param "cdn.popper" >}}) before Bootstrap's JavaScript or use `bootstrap.bundle.min.js` / `bootstrap.bundle.js` which contains Popper.js. Popper.js isn't used to position dropdowns in navbars though as dynamic positioning isn't required.
 
-If you're building our JavaScript from source, it [requires `util.js`]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/javascript/#util).
+If you're building our JavaScript from source, it [requires `util.js`]({{< docsref "/getting-started/javascript#util" >}}).
 
 ## Accessibility
 
@@ -30,7 +30,7 @@ Wrap the dropdown's toggle (your button or link) and the dropdown menu within `.
 
 Any single `.btn` can be turned into a dropdown toggle with some markup changes. Here's how you can put them to work with either `<button>` elements:
 
-{% capture example %}
+{{< example >}}
 <div class="dropdown">
   <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
     Dropdown button
@@ -41,12 +41,11 @@ Any single `.btn` can be turned into a dropdown toggle with some markup changes.
     <a class="dropdown-item" href="#">Something else here</a>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 And with `<a>` elements:
 
-{% capture example %}
+{{< example >}}
 <div class="dropdown">
   <a class="btn btn-secondary dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
     Dropdown link
@@ -58,8 +57,7 @@ And with `<a>` elements:
     <a class="dropdown-item" href="#">Something else here</a>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 The best part is you can do this with any button variant, too:
 
@@ -126,7 +124,7 @@ The best part is you can do this with any button variant, too:
   </div><!-- /btn-group -->
 </div>
 
-{% highlight html %}
+```html
 <!-- Example single danger button -->
 <div class="btn-group">
   <button type="button" class="btn btn-danger dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
@@ -140,7 +138,7 @@ The best part is you can do this with any button variant, too:
     <a class="dropdown-item" href="#">Separated link</a>
   </div>
 </div>
-{% endhighlight %}
+```
 
 ### Split button
 
@@ -229,7 +227,7 @@ We use this extra class to reduce the horizontal `padding` on either side of the
   </div><!-- /btn-group -->
 </div>
 
-{% highlight html %}
+```html
 <!-- Example split danger button -->
 <div class="btn-group">
   <button type="button" class="btn btn-danger">Action</button>
@@ -244,7 +242,7 @@ We use this extra class to reduce the horizontal `padding` on either side of the
     <a class="dropdown-item" href="#">Separated link</a>
   </div>
 </div>
-{% endhighlight %}
+```
 
 ## Sizing
 
@@ -278,7 +276,7 @@ Button dropdowns work with buttons of all sizes, including default and split dro
   </div>
 </div>
 
-{% highlight html %}
+```html
 <!-- Large button groups (default and split) -->
 <div class="btn-group">
   <button class="btn btn-secondary btn-lg dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
@@ -299,7 +297,7 @@ Button dropdowns work with buttons of all sizes, including default and split dro
     ...
   </div>
 </div>
-{% endhighlight %}
+```
 
 <div class="bd-example">
   <div class="btn-group">
@@ -329,7 +327,7 @@ Button dropdowns work with buttons of all sizes, including default and split dro
   </div>
 </div>
 
-{% highlight html %}
+```html
 <!-- Small button groups (default and split) -->
 <div class="btn-group">
   <button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
@@ -350,7 +348,7 @@ Button dropdowns work with buttons of all sizes, including default and split dro
     ...
   </div>
 </div>
-{% endhighlight %}
+```
 
 ## Directions
 
@@ -371,7 +369,6 @@ Trigger dropdown menus above elements by adding `.dropup` to the parent element.
       <a class="dropdown-item" href="#">Separated link</a>
     </div>
   </div>
-
   <div class="btn-group dropup">
     <button type="button" class="btn btn-secondary">
       Split dropup
@@ -389,7 +386,7 @@ Trigger dropdown menus above elements by adding `.dropup` to the parent element.
   </div>
 </div>
 
-{% highlight html %}
+```html
 <!-- Default dropup button -->
 <div class="btn-group dropup">
   <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
@@ -412,7 +409,7 @@ Trigger dropdown menus above elements by adding `.dropup` to the parent element.
     <!-- Dropdown menu links -->
   </div>
 </div>
-{% endhighlight %}
+```
 
 ### Dropright
 
@@ -431,7 +428,6 @@ Trigger dropdown menus at the right of the elements by adding `.dropright` to th
       <a class="dropdown-item" href="#">Separated link</a>
     </div>
   </div>
-
   <div class="btn-group dropright">
     <button type="button" class="btn btn-secondary">
       Split dropright
@@ -449,7 +445,7 @@ Trigger dropdown menus at the right of the elements by adding `.dropright` to th
   </div>
 </div>
 
-{% highlight html %}
+```html
 <!-- Default dropright button -->
 <div class="btn-group dropright">
   <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
@@ -472,7 +468,7 @@ Trigger dropdown menus at the right of the elements by adding `.dropright` to th
     <!-- Dropdown menu links -->
   </div>
 </div>
-{% endhighlight %}
+```
 
 ### Dropleft
 
@@ -491,7 +487,6 @@ Trigger dropdown menus at the left of the elements by adding `.dropleft` to the
       <a class="dropdown-item" href="#">Separated link</a>
     </div>
   </div>
-
   <div class="btn-group">
     <div class="btn-group dropleft" role="group">
       <button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
@@ -511,7 +506,7 @@ Trigger dropdown menus at the left of the elements by adding `.dropleft` to the
   </div>
 </div>
 
-{% highlight html %}
+```html
 <!-- Default dropleft button -->
 <div class="btn-group dropleft">
   <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
@@ -536,13 +531,13 @@ Trigger dropdown menus at the left of the elements by adding `.dropleft` to the
     Split dropleft
   </button>
 </div>
-{% endhighlight %}
+```
 
 ## Menu items
 
 Historically dropdown menu contents *had* to be links, but that's no longer the case with v4. Now you can optionally use `<button>` elements in your dropdowns instead of just `<a>`s.
 
-{% capture example %}
+{{< example >}}
 <div class="dropdown">
   <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenu2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
     Dropdown
@@ -553,57 +548,52 @@ Historically dropdown menu contents *had* to be links, but that's no longer the
     <button class="dropdown-item" type="button">Something else here</button>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 You can also create non-interactive dropdown items with `.dropdown-item-text`. Feel free to style further with custom CSS or text utilities.
 
-{% capture example %}
+{{< example >}}
 <div class="dropdown-menu">
   <span class="dropdown-item-text">Dropdown item text</span>
   <a class="dropdown-item" href="#">Action</a>
   <a class="dropdown-item" href="#">Another action</a>
   <a class="dropdown-item" href="#">Something else here</a>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Active
 
 Add `.active` to items in the dropdown to **style them as active**.
 
-{% capture example %}
+{{< example >}}
 <div class="dropdown-menu">
   <a class="dropdown-item" href="#">Regular link</a>
   <a class="dropdown-item active" href="#">Active link</a>
   <a class="dropdown-item" href="#">Another link</a>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Disabled
 
 Add `.disabled` to items in the dropdown to **style them as disabled**.
 
-{% capture example %}
+{{< example >}}
 <div class="dropdown-menu">
   <a class="dropdown-item" href="#">Regular link</a>
   <a class="dropdown-item disabled" href="#" tabindex="-1" aria-disabled="true">Disabled link</a>
   <a class="dropdown-item" href="#">Another link</a>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Menu alignment
 
 By default, a dropdown menu is automatically positioned 100% from the top and along the left side of its parent. Add `.dropdown-menu-right` to a `.dropdown-menu` to right align the dropdown menu.
 
-{% capture callout %}
+{{< callout info >}}
 **Heads up!** Dropdowns are positioned thanks to Popper.js (except when they are contained in a navbar).
-{% endcapture %}
-{% include callout.html content=callout type="info" %}
+{{< /callout >}}
 
-{% capture example %}
+{{< example >}}
 <div class="btn-group">
   <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
     Right-aligned menu
@@ -614,8 +604,7 @@ By default, a dropdown menu is automatically positioned 100% from the top and al
     <button class="dropdown-item" type="button">Something else here</button>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Responsive alignment
 
@@ -623,7 +612,7 @@ If you want to use responsive alignment, disable dynamic positioning by adding t
 
 To align **right** the dropdown menu with the given breakpoint or larger, add `.dropdown-menu{-sm|-md|-lg|-xl}-right`.
 
-{% capture example %}
+{{< example >}}
 <div class="btn-group">
   <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" data-display="static" aria-haspopup="true" aria-expanded="false">
     Left-aligned but right aligned when large screen
@@ -634,12 +623,11 @@ To align **right** the dropdown menu with the given breakpoint or larger, add `.
     <button class="dropdown-item" type="button">Something else here</button>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 To align **left** the dropdown menu with the given breakpoint or larger, add `.dropdown-menu-right` and `.dropdown-menu{-sm|-md|-lg|-xl}-left`.
 
-{% capture example %}
+{{< example >}}
 <div class="btn-group">
   <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" data-display="static" aria-haspopup="true" aria-expanded="false">
     Right-aligned but left aligned when large screen
@@ -650,8 +638,7 @@ To align **left** the dropdown menu with the given breakpoint or larger, add `.d
     <button class="dropdown-item" type="button">Something else here</button>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Note that you don't need to add a `data-display="static"` attribute to dropdown buttons in navbars, since Popper.js isn't used in navbars.
 
@@ -661,20 +648,19 @@ Note that you don't need to add a `data-display="static"` attribute to dropdown
 
 Add a header to label sections of actions in any dropdown menu.
 
-{% capture example %}
+{{< example >}}
 <div class="dropdown-menu">
   <h6 class="dropdown-header">Dropdown header</h6>
   <a class="dropdown-item" href="#">Action</a>
   <a class="dropdown-item" href="#">Another action</a>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Dividers
 
 Separate groups of related menu items with a divider.
 
-{% capture example %}
+{{< example >}}
 <div class="dropdown-menu">
   <a class="dropdown-item" href="#">Action</a>
   <a class="dropdown-item" href="#">Another action</a>
@@ -682,14 +668,13 @@ Separate groups of related menu items with a divider.
   <div class="dropdown-divider"></div>
   <a class="dropdown-item" href="#">Separated link</a>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Text
 
-Place any freeform text within a dropdown menu with text and use [spacing utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/spacing/). Note that you'll likely need additional sizing styles to constrain the menu width.
+Place any freeform text within a dropdown menu with text and use [spacing utilities]({{< docsref "/utilities/spacing" >}}). Note that you'll likely need additional sizing styles to constrain the menu width.
 
-{% capture example %}
+{{< example >}}
 <div class="dropdown-menu p-4 text-muted" style="max-width: 200px;">
   <p>
     Some example text that's free-flowing within the dropdown menu.
@@ -698,14 +683,13 @@ Place any freeform text within a dropdown menu with text and use [spacing utilit
     And this is more example text.
   </p>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Forms
 
-Put a form within a dropdown menu, or make it into a dropdown menu, and use [margin or padding utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/spacing/) to give it the negative space you require.
+Put a form within a dropdown menu, or make it into a dropdown menu, and use [margin or padding utilities]({{< docsref "/utilities/spacing" >}}) to give it the negative space you require.
 
-{% capture example %}
+{{< example >}}
 <div class="dropdown-menu">
   <form class="px-4 py-3">
     <div class="form-group">
@@ -730,10 +714,9 @@ Put a form within a dropdown menu, or make it into a dropdown menu, and use [mar
   <a class="dropdown-item" href="#">New around here? Sign up</a>
   <a class="dropdown-item" href="#">Forgot password?</a>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <form class="dropdown-menu p-4">
   <div class="form-group">
     <label for="exampleDropdownFormEmail2">Email address</label>
@@ -753,14 +736,13 @@ Put a form within a dropdown menu, or make it into a dropdown menu, and use [mar
   </div>
   <button type="submit" class="btn btn-primary">Sign in</button>
 </form>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Dropdown options
 
 Use `data-offset` or `data-reference` to change the location of the dropdown.
 
-{% capture example %}
+{{< example >}}
 <div class="d-flex">
   <div class="dropdown mr-1">
     <button type="button" class="btn btn-secondary dropdown-toggle" id="dropdownMenuOffset" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" data-offset="10,20">
@@ -786,23 +768,21 @@ Use `data-offset` or `data-reference` to change the location of the dropdown.
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Usage
 
 Via data attributes or JavaScript, the dropdown plugin toggles hidden content (dropdown menus) by toggling the `.show` class on the parent list item. The `data-toggle="dropdown"` attribute is relied on for closing dropdown menus at an application level, so it's a good idea to always use it.
 
-{% capture callout %}
+{{< callout info >}}
 On touch-enabled devices, opening a dropdown adds empty (`$.noop`) `mouseover` handlers to the immediate children of the `<body>` element. This admittedly ugly hack is necessary to work around a [quirk in iOS' event delegation](https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html), which would otherwise prevent a tap anywhere outside of the dropdown from triggering the code that closes the dropdown. Once the dropdown is closed, these additional empty `mouseover` handlers are removed.
-{% endcapture %}
-{% include callout.html content=callout type="info" %}
+{{< /callout >}}
 
 ### Via data attributes
 
 Add `data-toggle="dropdown"` to a link or button to toggle a dropdown.
 
-{% highlight html %}
+```html
 <div class="dropdown">
   <button id="dLabel" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
     Dropdown trigger
@@ -811,22 +791,21 @@ Add `data-toggle="dropdown"` to a link or button to toggle a dropdown.
     ...
   </div>
 </div>
-{% endhighlight %}
+```
 
 ### Via JavaScript
 
 Call the dropdowns via JavaScript:
 
-{% highlight js %}
+```js
 $('.dropdown-toggle').dropdown()
-{% endhighlight %}
+```
 
-{% capture callout %}
+{{< callout info >}}
 ##### `data-toggle="dropdown"` still required
 
 Regardless of whether you call your dropdown via JavaScript or instead use the data-api, `data-toggle="dropdown"` is always required to be present on the dropdown's trigger element.
-{% endcapture %}
-{% include callout.html content=callout type="info" %}
+{{< /callout >}}
 
 ### Options
 
@@ -909,8 +888,8 @@ All dropdown events are fired at the `.dropdown-menu`'s parent element and have
 | `hide.bs.dropdown` | This event is fired immediately when the hide instance method has been called. |
 | `hidden.bs.dropdown`| This event is fired when the dropdown has finished being hidden from the user (will wait for CSS transitions, to complete). |
 
-{% highlight js %}
+```js
 $('#myDropdown').on('show.bs.dropdown', function () {
   // do something...
 })
-{% endhighlight %}
+```
similarity index 89%
rename from site/docs/4.5/components/forms.md
rename to site/content/docs/4.5/components/forms.md
index 2d75f738f5b8a22fac1acc1c518ed28f3298f220..b44ce67adcc0bae3a136e24504dbe230e1349deb 100644 (file)
@@ -8,13 +8,13 @@ toc: true
 
 ## Overview
 
-Bootstrap's form controls expand on [our Rebooted form styles]({{ site.baseurl }}/docs/{{ site.docs_version }}/content/reboot/#forms) with classes. Use these classes to opt into their customized displays for a more consistent rendering across browsers and devices.
+Bootstrap's form controls expand on [our Rebooted form styles]({{< docsref "/content/reboot#forms" >}}) with classes. Use these classes to opt into their customized displays for a more consistent rendering across browsers and devices.
 
 Be sure to use an appropriate `type` attribute on all inputs (e.g., `email` for email address or `number` for numerical information) to take advantage of newer input controls like email verification, number selection, and more.
 
 Here's a quick example to demonstrate Bootstrap's form styles. Keep reading for documentation on required classes, form layout, and more.
 
-{% capture example %}
+{{< example >}}
 <form>
   <div class="form-group">
     <label for="exampleInputEmail1">Email address</label>
@@ -31,8 +31,7 @@ Here's a quick example to demonstrate Bootstrap's form styles. Keep reading for
   </div>
   <button type="submit" class="btn btn-primary">Submit</button>
 </form>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Form controls
 
@@ -40,7 +39,7 @@ Textual form controls—like `<input>`s, `<select>`s, and `<textarea>`s—are st
 
 Be sure to explore our [custom forms](#custom-forms) to further style `<select>`s.
 
-{% capture example %}
+{{< example >}}
 <form>
   <div class="form-group">
     <label for="exampleFormControlInput1">Email address</label>
@@ -71,33 +70,30 @@ Be sure to explore our [custom forms](#custom-forms) to further style `<select>`
     <textarea class="form-control" id="exampleFormControlTextarea1" rows="3"></textarea>
   </div>
 </form>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 For file inputs, swap the `.form-control` for `.form-control-file`.
 
-{% capture example %}
+{{< example >}}
 <form>
   <div class="form-group">
     <label for="exampleFormControlFile1">Example file input</label>
     <input type="file" class="form-control-file" id="exampleFormControlFile1">
   </div>
 </form>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Sizing
 
 Set heights using classes like `.form-control-lg` and `.form-control-sm`.
 
-{% capture example %}
+{{< example >}}
 <input class="form-control form-control-lg" type="text" placeholder=".form-control-lg">
 <input class="form-control" type="text" placeholder="Default input">
 <input class="form-control form-control-sm" type="text" placeholder=".form-control-sm">
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <select class="form-control form-control-lg">
   <option>Large select</option>
 </select>
@@ -107,23 +103,21 @@ Set heights using classes like `.form-control-lg` and `.form-control-sm`.
 <select class="form-control form-control-sm">
   <option>Small select</option>
 </select>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Readonly
 
 Add the `readonly` boolean attribute on an input to prevent modification of the input's value. Read-only inputs appear lighter (just like disabled inputs), but retain the standard cursor.
 
-{% capture example %}
+{{< example >}}
 <input class="form-control" type="text" placeholder="Readonly input here..." readonly>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Readonly plain text
 
 If you want to have `<input readonly>` elements in your form styled as plain text, use the `.form-control-plaintext` class to remove the default form field styling and preserve the correct margin and padding.
 
-{% capture example %}
+{{< example >}}
 <form>
   <div class="form-group row">
     <label for="staticEmail" class="col-sm-2 col-form-label">Email</label>
@@ -138,10 +132,9 @@ If you want to have `<input readonly>` elements in your form styled as plain tex
     </div>
   </div>
 </form>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <form class="form-inline">
   <div class="form-group mb-2">
     <label for="staticEmail2" class="sr-only">Email</label>
@@ -153,22 +146,20 @@ If you want to have `<input readonly>` elements in your form styled as plain tex
   </div>
   <button type="submit" class="btn btn-primary mb-2">Confirm identity</button>
 </form>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Range Inputs
 
 Set horizontally scrollable range inputs using `.form-control-range`.
 
-{% capture example %}
+{{< example >}}
 <form>
   <div class="form-group">
     <label for="formControlRange">Example Range input</label>
     <input type="range" class="form-control-range" id="formControlRange">
   </div>
 </form>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Checkboxes and radios
 
@@ -182,7 +173,7 @@ Checkboxes and radio buttons support HTML-based form validation and provide conc
 
 By default, any number of checkboxes and radios that are immediate sibling will be vertically stacked and appropriately spaced with `.form-check`.
 
-{% capture example %}
+{{< example >}}
 <div class="form-check">
   <input class="form-check-input" type="checkbox" value="" id="defaultCheck1">
   <label class="form-check-label" for="defaultCheck1">
@@ -195,10 +186,9 @@ By default, any number of checkboxes and radios that are immediate sibling will
     Disabled checkbox
   </label>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <div class="form-check">
   <input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios1" value="option1" checked>
   <label class="form-check-label" for="exampleRadios1">
@@ -217,14 +207,13 @@ By default, any number of checkboxes and radios that are immediate sibling will
     Disabled radio
   </label>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Inline
 
 Group checkboxes or radios on the same horizontal row by adding `.form-check-inline` to any `.form-check`.
 
-{% capture example %}
+{{< example >}}
 <div class="form-check form-check-inline">
   <input class="form-check-input" type="checkbox" id="inlineCheckbox1" value="option1">
   <label class="form-check-label" for="inlineCheckbox1">1</label>
@@ -237,10 +226,9 @@ Group checkboxes or radios on the same horizontal row by adding `.form-check-inl
   <input class="form-check-input" type="checkbox" id="inlineCheckbox3" value="option3" disabled>
   <label class="form-check-label" for="inlineCheckbox3">3 (disabled)</label>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <div class="form-check form-check-inline">
   <input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio1" value="option1">
   <label class="form-check-label" for="inlineRadio1">1</label>
@@ -253,22 +241,20 @@ Group checkboxes or radios on the same horizontal row by adding `.form-check-inl
   <input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio3" value="option3" disabled>
   <label class="form-check-label" for="inlineRadio3">3 (disabled)</label>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Without labels
 
 Add `.position-static` to inputs within `.form-check` that don't have any label text. Remember to still provide some form of accessible name for assistive technologies (for instance, using `aria-label`).
 
-{% capture example %}
+{{< example >}}
 <div class="form-check">
   <input class="form-check-input position-static" type="checkbox" id="blankCheckbox" value="option1" aria-label="...">
 </div>
 <div class="form-check">
   <input class="form-check-input position-static" type="radio" name="blankRadio" id="blankRadio1" value="option1" aria-label="...">
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Layout
 
@@ -278,7 +264,7 @@ Since Bootstrap applies `display: block` and `width: 100%` to almost all our for
 
 The `.form-group` class is the easiest way to add some structure to forms. It provides a flexible class that encourages proper grouping of labels, controls, optional help text, and form validation messaging. By default it only applies `margin-bottom`, but it picks up additional styles in `.form-inline` as needed. Use it with `<fieldset>`s, `<div>`s, or nearly any other element.
 
-{% capture example %}
+{{< example >}}
 <form>
   <div class="form-group">
     <label for="formGroupExampleInput">Example label</label>
@@ -289,14 +275,13 @@ The `.form-group` class is the easiest way to add some structure to forms. It pr
     <input type="text" class="form-control" id="formGroupExampleInput2" placeholder="Another input placeholder">
   </div>
 </form>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Form grid
 
 More complex forms can be built using our grid classes. Use these for form layouts that require multiple columns, varied widths, and additional alignment options.
 
-{% capture example %}
+{{< example >}}
 <form>
   <div class="row">
     <div class="col">
@@ -307,14 +292,13 @@ More complex forms can be built using our grid classes. Use these for form layou
     </div>
   </div>
 </form>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 #### Form row
 
 You may also swap `.row` for `.form-row`, a variation of our standard grid row that overrides the default column gutters for tighter and more compact layouts.
 
-{% capture example %}
+{{< example >}}
 <form>
   <div class="form-row">
     <div class="col">
@@ -325,12 +309,11 @@ You may also swap `.row` for `.form-row`, a variation of our standard grid row t
     </div>
   </div>
 </form>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 More complex layouts can also be created with the grid system.
 
-{% capture example %}
+{{< example >}}
 <form>
   <div class="form-row">
     <div class="form-group col-md-6">
@@ -377,8 +360,7 @@ More complex layouts can also be created with the grid system.
   </div>
   <button type="submit" class="btn btn-primary">Sign in</button>
 </form>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 #### Horizontal form
 
@@ -386,7 +368,7 @@ Create horizontal forms with the grid by adding the `.row` class to form groups
 
 At times, you maybe need to use margin or padding utilities to create that perfect alignment you need. For example, we've removed the `padding-top` on our stacked radio inputs label to better align the text baseline.
 
-{% capture example %}
+{{< example >}}
 <form>
   <div class="form-group row">
     <label for="inputEmail3" class="col-sm-2 col-form-label">Email</label>
@@ -439,14 +421,13 @@ At times, you maybe need to use margin or padding utilities to create that perfe
     </div>
   </div>
 </form>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ##### Horizontal form label sizing
 
 Be sure to use `.col-form-label-sm` or `.col-form-label-lg` to your `<label>`s or `<legend>`s to correctly follow the size of `.form-control-lg` and `.form-control-sm`.
 
-{% capture example %}
+{{< example >}}
 <form>
   <div class="form-group row">
     <label for="colFormLabelSm" class="col-sm-2 col-form-label col-form-label-sm">Email</label>
@@ -467,14 +448,13 @@ Be sure to use `.col-form-label-sm` or `.col-form-label-lg` to your `<label>`s o
     </div>
   </div>
 </form>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 #### Column sizing
 
 As shown in the previous examples, our grid system allows you to place any number of `.col`s within a `.row` or `.form-row`. They'll split the available width equally between them. You may also pick a subset of your columns to take up more or less space, while the remaining `.col`s equally split the rest, with specific column classes like `.col-7`.
 
-{% capture example %}
+{{< example >}}
 <form>
   <div class="form-row">
     <div class="col-7">
@@ -488,14 +468,13 @@ As shown in the previous examples, our grid system allows you to place any numbe
     </div>
   </div>
 </form>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 #### Auto-sizing
 
 The example below uses a flexbox utility to vertically center the contents and changes `.col` to `.col-auto` so that your columns only take up as much space as needed. Put another way, the column sizes itself based on the contents.
 
-{% capture example %}
+{{< example >}}
 <form>
   <div class="form-row align-items-center">
     <div class="col-auto">
@@ -524,12 +503,11 @@ The example below uses a flexbox utility to vertically center the contents and c
     </div>
   </div>
 </form>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 You can then remix that once again with size-specific column classes.
 
-{% capture example %}
+{{< example >}}
 <form>
   <div class="form-row align-items-center">
     <div class="col-sm-3 my-1">
@@ -558,12 +536,11 @@ You can then remix that once again with size-specific column classes.
     </div>
   </div>
 </form>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 And of course [custom form controls](#custom-forms) are supported.
 
-{% capture example %}
+{{< example >}}
 <form>
   <div class="form-row align-items-center">
     <div class="col-auto my-1">
@@ -586,20 +563,19 @@ And of course [custom form controls](#custom-forms) are supported.
     </div>
   </div>
 </form>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Inline forms
 
 Use the `.form-inline` class to display a series of labels, form controls, and buttons on a single horizontal row. Form controls within inline forms vary slightly from their default states.
 
-- Controls are `display: flex`, collapsing any HTML white space and allowing you to provide alignment control with [spacing]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/spacing/) and [flexbox]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/flex/) utilities.
+- Controls are `display: flex`, collapsing any HTML white space and allowing you to provide alignment control with [spacing]({{< docsref "/utilities/spacing" >}}) and [flexbox]({{< docsref "/utilities/flex" >}}) utilities.
 - Controls and input groups receive `width: auto` to override the Bootstrap default `width: 100%`.
 - Controls **only appear inline in viewports that are at least 576px wide** to account for narrow viewports on mobile devices.
 
-You may need to manually address the width and alignment of individual form controls with [spacing utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/spacing/) (as shown below). Lastly, be sure to always include a `<label>` with each form control, even if you need to hide it from non-screenreader visitors with `.sr-only`.
+You may need to manually address the width and alignment of individual form controls with [spacing utilities]({{< docsref "/utilities/spacing" >}}) (as shown below). Lastly, be sure to always include a `<label>` with each form control, even if you need to hide it from non-screenreader visitors with `.sr-only`.
 
-{% capture example %}
+{{< example >}}
 <form class="form-inline">
   <label class="sr-only" for="inlineFormInputName2">Name</label>
   <input type="text" class="form-control mb-2 mr-sm-2" id="inlineFormInputName2" placeholder="Jane Doe">
@@ -621,12 +597,11 @@ You may need to manually address the width and alignment of individual form cont
 
   <button type="submit" class="btn btn-primary mb-2">Submit</button>
 </form>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Custom form controls and selects are also supported.
 
-{% capture example %}
+{{< example >}}
 <form class="form-inline">
   <label class="my-1 mr-2" for="inlineFormCustomSelectPref">Preference</label>
   <select class="custom-select my-1 mr-sm-2" id="inlineFormCustomSelectPref">
@@ -643,40 +618,36 @@ Custom form controls and selects are also supported.
 
   <button type="submit" class="btn btn-primary my-1">Submit</button>
 </form>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture callout %}
+{{< callout warning >}}
 ##### Alternatives to hidden labels
 Assistive technologies such as screen readers will have trouble with your forms if you don't include a label for every input. For these inline forms, you can hide the labels using the `.sr-only` class. There are further alternative methods of providing a label for assistive technologies, such as the `aria-label`, `aria-labelledby` or `title` attribute. If none of these are present, assistive technologies may resort to using the `placeholder` attribute, if present, but note that use of `placeholder` as a replacement for other labelling methods is not advised.
-{% endcapture %}
-{% include callout.html content=callout type="warning" %}
+{{< /callout >}}
 
 ## Help text
 
 Block-level help text in forms can be created using `.form-text` (previously known as `.help-block` in v3). Inline help text can be flexibly implemented using any inline HTML element and utility classes like `.text-muted`.
 
-{% capture callout %}
+{{< callout warning >}}
 ##### Associating help text with form controls
 
 Help text should be explicitly associated with the form control it relates to using the `aria-describedby` attribute. This will ensure that assistive technologies—such as screen readers—will announce this help text when the user focuses or enters the control.
-{% endcapture %}
-{% include callout.html content=callout type="warning" %}
+{{< /callout >}}
 
 Help text below inputs can be styled with `.form-text`. This class includes `display: block` and adds some top margin for easy spacing from the inputs above.
 
-{% capture example %}
+{{< example >}}
 <label for="inputPassword5">Password</label>
 <input type="password" id="inputPassword5" class="form-control" aria-describedby="passwordHelpBlock">
 <small id="passwordHelpBlock" class="form-text text-muted">
   Your password must be 8-20 characters long, contain letters and numbers, and must not contain spaces, special characters, or emoji.
 </small>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Inline text can use any typical inline HTML element (be it a `<small>`, `<span>`, or something else) with nothing more than a utility class.
 
-{% capture example %}
+{{< example >}}
 <form class="form-inline">
   <div class="form-group">
     <label for="inputPassword6">Password</label>
@@ -686,20 +657,19 @@ Inline text can use any typical inline HTML element (be it a `<small>`, `<span>`
     </small>
   </div>
 </form>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Disabled forms
 
 Add the `disabled` boolean attribute on an input to prevent user interactions and make it appear lighter.
 
-{% highlight html %}
+```html
 <input class="form-control" id="disabledInput" type="text" placeholder="Disabled input here..." disabled>
-{% endhighlight %}
+```
 
 Add the `disabled` attribute to a `<fieldset>` to disable all the controls within.
 
-{% capture example %}
+{{< example >}}
 <form>
   <fieldset disabled>
     <legend>Disabled fieldset example</legend>
@@ -724,33 +694,29 @@ Add the `disabled` attribute to a `<fieldset>` to disable all the controls withi
     <button type="submit" class="btn btn-primary">Submit</button>
   </fieldset>
 </form>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture callout %}
+{{< callout warning >}}
 ##### Caveat with anchors
 
 Browsers treat all native form controls (`<input>`, `<select>`, and `<button>` elements) inside a `<fieldset disabled>` as disabled, preventing both keyboard and mouse interactions on them.
 
-However, if your form also includes custom button-like elements such as `<a ... class="btn btn-*">`, these will only be given a style of `pointer-events: none`. As noted in the section about [disabled state for buttons]({{ site.baseurl }}/docs/{{ site.docs_version }}/components/buttons/#disabled-state) (and specifically in the sub-section for anchor elements), this CSS property is not yet standardized and isn't fully supported in Internet Explorer 10. The anchor-based controls will also still be focusable and operable using the keyboard. You must manually modify these controls by adding `tabindex="-1"` to prevent them from receiving focus and `aria-disabled="disabled"` to signal their state to assistive technologies.
-{% endcapture %}
-{% include callout.html content=callout type="warning" %}
+However, if your form also includes custom button-like elements such as `<a ... class="btn btn-*">`, these will only be given a style of `pointer-events: none`. As noted in the section about [disabled state for buttons]({{< docsref "/components/buttons#disabled-state" >}}) (and specifically in the sub-section for anchor elements), this CSS property is not yet standardized and isn't fully supported in Internet Explorer 10. The anchor-based controls will also still be focusable and operable using the keyboard. You must manually modify these controls by adding `tabindex="-1"` to prevent them from receiving focus and `aria-disabled="disabled"` to signal their state to assistive technologies.
+{{< /callout >}}
 
-{% capture callout %}
+{{< callout danger >}}
 #### Cross-browser compatibility
 
 While Bootstrap will apply these styles in all browsers, Internet Explorer 11 and below don't fully support the `disabled` attribute on a `<fieldset>`. Use custom JavaScript to disable the fieldset in these browsers.
-{% endcapture %}
-{% include callout.html content=callout type="danger" %}
+{{< /callout >}}
 
 ## Validation
 
 Provide valuable, actionable feedback to your users with HTML5 form validation–[available in all our supported browsers](https://caniuse.com/form-validation). Choose from the browser default validation feedback, or implement custom messages with our built-in classes and starter JavaScript.
 
-{% capture callout %}
+{{< callout warning >}}
 We are aware that currently the client-side custom validation styles and tooltips are not accessible, since they are not exposed to assistive technologies. While we work on a solution, we'd recommend either using the server-side option or the default browser validation method.
-{% endcapture %}
-{% include callout.html content=callout type="warning" %}
+{{< /callout >}}
 
 ### How it works
 
@@ -773,7 +739,7 @@ For custom Bootstrap form validation messages, you'll need to add the `novalidat
 
 Custom feedback styles apply custom colors, borders, focus styles, and background icons to better communicate feedback. Background icons for `<select>`s are only available with `.custom-select`, and not `.form-control`.
 
-{% capture example %}
+{{< example >}}
 <form class="needs-validation" novalidate>
   <div class="form-row">
     <div class="col-md-6 mb-3">
@@ -851,8 +817,7 @@ Custom feedback styles apply custom colors, borders, focus styles, and backgroun
   }, false);
 })();
 </script>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Browser defaults
 
@@ -860,7 +825,7 @@ Not interested in custom validation feedback messages or writing JavaScript to c
 
 While these feedback styles cannot be styled with CSS, you can still customize the feedback text through JavaScript.
 
-{% capture example %}
+{{< example >}}
 <form>
   <div class="form-row">
     <div class="col-md-6 mb-3">
@@ -899,8 +864,7 @@ While these feedback styles cannot be styled with CSS, you can still customize t
   </div>
   <button class="btn btn-primary" type="submit">Submit form</button>
 </form>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Server side
 
@@ -908,7 +872,7 @@ We recommend using client-side validation, but in case you require server-side v
 
 For invalid fields, ensure that the invalid feedback/error message is associated with the relevant form field using `aria-describedby`. This attribute allows more than one `id` to be referenced, in case the field already points to additional form text.
 
-{% capture example %}
+{{< example >}}
 <form>
   <div class="form-row">
     <div class="col-md-6 mb-3">
@@ -965,8 +929,7 @@ For invalid fields, ensure that the invalid feedback/error message is associated
   </div>
   <button class="btn btn-primary" type="submit">Submit form</button>
 </form>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Supported elements
 
@@ -978,7 +941,7 @@ Validation styles are available for the following form controls and components:
 - `.custom-checkbox`s and `.custom-radio`s
 - `.custom-file`
 
-{% capture example %}
+{{< example >}}
 <form class="was-validated">
   <div class="mb-3">
     <label for="validationTextarea">Textarea</label>
@@ -1062,14 +1025,13 @@ Validation styles are available for the following form controls and components:
     Example invalid input group feedback
   </div>
 </form>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Tooltips
 
 If your form layout allows it, you can swap the `.{valid|invalid}-feedback` classes for `.{valid|invalid}-tooltip` classes to display validation feedback in a styled tooltip. Be sure to have a parent with `position: relative` on it for tooltip positioning. In the example below, our column classes have this already, but your project may require an alternative setup.
 
-{% capture example %}
+{{< example >}}
 <form class="needs-validation" novalidate>
   <div class="form-row">
     <div class="col-md-6 mb-3">
@@ -1115,8 +1077,7 @@ If your form layout allows it, you can swap the `.{valid|invalid}-feedback` clas
   </div>
   <button class="btn btn-primary" type="submit">Submit form</button>
 </form>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Customizing
 
@@ -1124,7 +1085,7 @@ Validation states can be customized via Sass with the `$form-validation-states`
 
 Please note that we do not recommend customizing these values without also modifying the `form-validation-state` mixin.
 
-{% highlight scss %}
+```scss
 // Sass map from `_variables.scss`
 // Override this and recompile your Sass to generate different states
 $form-validation-states: map-merge(
@@ -1147,13 +1108,13 @@ $form-validation-states: map-merge(
 @each $state, $data in $form-validation-states {
   @include form-validation-state($state, map-get($data, color), map-get($data, icon));
 }
-{% endhighlight %}
+```
 
 ### Input group validation
 
 To detect what elements need rounded corners inside an input group with validation, an input group requires an additional `.has-validation` class.
 
-{% highlight html %}
+```html
 <div class="input-group has-validation">
   <div class="input-group-prepend">
     <span class="input-group-text">@</span>
@@ -1163,7 +1124,7 @@ To detect what elements need rounded corners inside an input group with validati
     Please choose a username.
   </div>
 </div>
-{% endhighlight %}
+```
 
 <div class="bd-example bd-example-forms-input-group-workaround">
   <div class="input-group has-validation">
@@ -1193,13 +1154,12 @@ In the checked states, we use **base64 embedded SVG icons** from [Open Iconic](h
 
 #### Checkboxes
 
-{% capture example %}
+{{< example >}}
 <div class="custom-control custom-checkbox">
   <input type="checkbox" class="custom-control-input" id="customCheck1">
   <label class="custom-control-label" for="customCheck1">Check this custom checkbox</label>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Custom checkboxes can also utilize the `:indeterminate` pseudo class when manually set via JavaScript (there is no available HTML attribute for specifying it).
 
@@ -1212,13 +1172,13 @@ Custom checkboxes can also utilize the `:indeterminate` pseudo class when manual
 
 If you're using jQuery, something like this should suffice:
 
-{% highlight js %}
+```js
 $('.your-checkbox').prop('indeterminate', true)
-{% endhighlight %}
+```
 
 #### Radios
 
-{% capture example %}
+{{< example >}}
 <div class="custom-control custom-radio">
   <input type="radio" id="customRadio1" name="customRadio" class="custom-control-input">
   <label class="custom-control-label" for="customRadio1">Toggle this custom radio</label>
@@ -1227,12 +1187,11 @@ $('.your-checkbox').prop('indeterminate', true)
   <input type="radio" id="customRadio2" name="customRadio" class="custom-control-input">
   <label class="custom-control-label" for="customRadio2">Or toggle this other custom radio</label>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 #### Inline
 
-{% capture example %}
+{{< example >}}
 <div class="custom-control custom-radio custom-control-inline">
   <input type="radio" id="customRadioInline1" name="customRadioInline" class="custom-control-input">
   <label class="custom-control-label" for="customRadioInline1">Toggle this custom radio</label>
@@ -1241,14 +1200,13 @@ $('.your-checkbox').prop('indeterminate', true)
   <input type="radio" id="customRadioInline2" name="customRadioInline" class="custom-control-input">
   <label class="custom-control-label" for="customRadioInline2">Or toggle this other custom radio</label>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 #### Disabled
 
 Custom checkboxes and radios can also be disabled. Add the `disabled` boolean attribute to the `<input>` and the custom indicator and label description will be automatically styled.
 
-{% capture example %}
+{{< example >}}
 <div class="custom-control custom-checkbox">
   <input type="checkbox" class="custom-control-input" id="customCheckDisabled1" disabled>
   <label class="custom-control-label" for="customCheckDisabled1">Check this custom checkbox</label>
@@ -1258,14 +1216,13 @@ Custom checkboxes and radios can also be disabled. Add the `disabled` boolean at
   <input type="radio" name="radioDisabled" id="customRadioDisabled2" class="custom-control-input" disabled>
   <label class="custom-control-label" for="customRadioDisabled2">Toggle this custom radio</label>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Switches
 
 A switch has the markup of a custom checkbox but uses the `.custom-switch` class to render a toggle switch. Switches also support the `disabled` attribute.
 
-{% capture example %}
+{{< example >}}
 <div class="custom-control custom-switch">
   <input type="checkbox" class="custom-control-input" id="customSwitch1">
   <label class="custom-control-label" for="customSwitch1">Toggle this switch element</label>
@@ -1274,26 +1231,24 @@ A switch has the markup of a custom checkbox but uses the `.custom-switch` class
   <input type="checkbox" class="custom-control-input" disabled id="customSwitch2">
   <label class="custom-control-label" for="customSwitch2">Disabled switch element</label>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Select menu
 
 Custom `<select>` menus need only a custom class, `.custom-select` to trigger the custom styles. Custom styles are limited to the `<select>`'s initial appearance and cannot modify the `<option>`s due to browser limitations.
 
-{% capture example %}
+{{< example >}}
 <select class="custom-select">
   <option selected>Open this select menu</option>
   <option value="1">One</option>
   <option value="2">Two</option>
   <option value="3">Three</option>
 </select>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 You may also choose from small and large custom selects to match our similarly sized text inputs.
 
-{% capture example %}
+{{< example >}}
 <select class="custom-select custom-select-lg mb-3">
   <option selected>Open this select menu</option>
   <option value="1">One</option>
@@ -1307,75 +1262,67 @@ You may also choose from small and large custom selects to match our similarly s
   <option value="2">Two</option>
   <option value="3">Three</option>
 </select>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 The `multiple` attribute is also supported:
 
-{% capture example %}
+{{< example >}}
 <select class="custom-select" multiple>
   <option selected>Open this select menu</option>
   <option value="1">One</option>
   <option value="2">Two</option>
   <option value="3">Three</option>
 </select>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 As is the `size` attribute:
 
-{% capture example %}
+{{< example >}}
 <select class="custom-select" size="3">
   <option selected>Open this select menu</option>
   <option value="1">One</option>
   <option value="2">Two</option>
   <option value="3">Three</option>
 </select>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Range
 
 Create custom `<input type="range">` controls with `.custom-range`. The track (the background) and thumb (the value) are both styled to appear the same across browsers. As only IE and Firefox support "filling" their track from the left or right of the thumb as a means to visually indicate progress, we do not currently support it.
 
-{% capture example %}
+{{< example >}}
 <label for="customRange1">Example range</label>
 <input type="range" class="custom-range" id="customRange1">
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Range inputs have implicit values for `min` and `max`—`0` and `100`, respectively. You may specify new values for those using the `min` and `max` attributes.
 
-{% capture example %}
+{{< example >}}
 <label for="customRange2">Example range</label>
 <input type="range" class="custom-range" min="0" max="5" id="customRange2">
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 By default, range inputs "snap" to integer values. To change this, you can specify a `step` value. In the example below, we double the number of steps by using `step="0.5"`.
 
-{% capture example %}
+{{< example >}}
 <label for="customRange3">Example range</label>
 <input type="range" class="custom-range" min="0" max="5" step="0.5" id="customRange3">
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### File browser
 
-{% capture callout %}
+{{< callout info >}}
 The recommended plugin to animate custom file input: [bs-custom-file-input](https://www.npmjs.com/package/bs-custom-file-input), that's what we are using currently here in our docs.
-{% endcapture %}
-{% include callout.html content=callout type="info" %}
+{{< /callout >}}
 
 The file input is the most gnarly of the bunch and requires additional JavaScript if you'd like to hook them up with functional *Choose file...* and selected file name text.
 
-{% capture example %}
+{{< example >}}
 <div class="custom-file">
   <input type="file" class="custom-file-input" id="customFile">
   <label class="custom-file-label" for="customFile">Choose file</label>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 We hide the default file `<input>` via `opacity` and instead style the `<label>`. The button is generated and positioned with `::after`. Lastly, we declare a `width` and `height` on the `<input>` for proper spacing for surrounding content.
 
@@ -1383,22 +1330,21 @@ We hide the default file `<input>` via `opacity` and instead style the `<label>`
 
 The [`:lang()` pseudo-class](https://developer.mozilla.org/en-US/docs/Web/CSS/:lang) is used to allow for translation of the "Browse" text into other languages. Override or add entries to the `$custom-file-text` Sass variable with the relevant [language tag](https://en.wikipedia.org/wiki/IETF_language_tag) and localized strings. The English strings can be customized the same way. For example, here's how one might add a Spanish translation (Spanish's language code is `es`):
 
-{% highlight scss %}
+```scss
 $custom-file-text: (
   en: "Browse",
   es: "Elegir"
 );
-{% endhighlight %}
+```
 
 Here's `lang(es)` in action on the custom file input for a Spanish translation:
 
-{% capture example %}
+{{< example >}}
 <div class="custom-file">
   <input type="file" class="custom-file-input" id="customFileLang" lang="es">
   <label class="custom-file-label" for="customFileLang">Seleccionar Archivo</label>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 You'll need to set the language of your document (or subtree thereof) correctly in order for the correct text to be shown. This can be done using [the `lang` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/lang) on the `<html>` element or the [`Content-Language` HTTP header](https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.12), among other methods.
 
@@ -1406,10 +1352,9 @@ You'll need to set the language of your document (or subtree thereof) correctly
 
 Bootstrap also provides a way to translate the "Browse" text in HTML with the `data-browse` attribute which can be added to the custom input label (example in Dutch):
 
-{% capture example %}
+{{< example >}}
 <div class="custom-file">
   <input type="file" class="custom-file-input" id="customFileLangHTML">
   <label class="custom-file-label" for="customFileLangHTML" data-browse="Bestand kiezen">Voeg je document toe</label>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
similarity index 94%
rename from site/docs/4.5/components/input-group.md
rename to site/content/docs/4.5/components/input-group.md
index 1eb71e9b7076b1e8f8bbde6e091c5a5e9c5e77fb..e97d3362893b0558db3d3370ff8e0155026c31a6 100644 (file)
@@ -10,7 +10,7 @@ toc: true
 
 Place one add-on or button on either side of an input. You may also place one on both sides of an input. Remember to place `<label>`s outside the input group.
 
-{% capture example %}
+{{< example >}}
 <div class="input-group mb-3">
   <div class="input-group-prepend">
     <span class="input-group-text" id="basic-addon1">@</span>
@@ -49,22 +49,20 @@ Place one add-on or button on either side of an input. You may also place one on
   </div>
   <textarea class="form-control" aria-label="With textarea"></textarea>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Wrapping
 
 Input groups wrap by default via `flex-wrap: wrap` in order to accommodate custom form field validation within an input group. You may disable this with `.flex-nowrap`.
 
-{% capture example %}
+{{< example >}}
 <div class="input-group flex-nowrap">
   <div class="input-group-prepend">
     <span class="input-group-text" id="addon-wrapping">@</span>
   </div>
   <input type="text" class="form-control" placeholder="Username" aria-label="Username" aria-describedby="addon-wrapping">
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Sizing
 
@@ -72,7 +70,7 @@ Add the relative form sizing classes to the `.input-group` itself and contents w
 
 **Sizing on the individual input group elements isn't supported.**
 
-{% capture example %}
+{{< example >}}
 <div class="input-group input-group-sm mb-3">
   <div class="input-group-prepend">
     <span class="input-group-text" id="inputGroup-sizing-sm">Small</span>
@@ -93,14 +91,13 @@ Add the relative form sizing classes to the `.input-group` itself and contents w
   </div>
   <input type="text" class="form-control" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-lg">
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Checkboxes and radios
 
 Place any checkbox or radio option within an input group's addon instead of text.
 
-{% capture example %}
+{{< example >}}
 <div class="input-group mb-3">
   <div class="input-group-prepend">
     <div class="input-group-text">
@@ -118,14 +115,13 @@ Place any checkbox or radio option within an input group's addon instead of text
   </div>
   <input type="text" class="form-control" aria-label="Text input with radio button">
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Multiple inputs
 
 While multiple `<input>`s are supported visually, validation styles are only available for input groups with a single `<input>`.
 
-{% capture example %}
+{{< example >}}
 <div class="input-group">
   <div class="input-group-prepend">
     <span class="input-group-text">First and last name</span>
@@ -133,14 +129,13 @@ While multiple `<input>`s are supported visually, validation styles are only ava
   <input type="text" aria-label="First name" class="form-control">
   <input type="text" aria-label="Last name" class="form-control">
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Multiple addons
 
 Multiple add-ons are supported and can be mixed with checkbox and radio input versions.
 
-{% capture example %}
+{{< example >}}
 <div class="input-group mb-3">
   <div class="input-group-prepend">
     <span class="input-group-text">$</span>
@@ -156,12 +151,11 @@ Multiple add-ons are supported and can be mixed with checkbox and radio input ve
     <span class="input-group-text">0.00</span>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Button addons
 
-{% capture example %}
+{{< example >}}
 <div class="input-group mb-3">
   <div class="input-group-prepend">
     <button class="btn btn-outline-secondary" type="button" id="button-addon1">Button</button>
@@ -191,12 +185,11 @@ Multiple add-ons are supported and can be mixed with checkbox and radio input ve
     <button class="btn btn-outline-secondary" type="button">Button</button>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Buttons with dropdowns
 
-{% capture example %}
+{{< example >}}
 <div class="input-group mb-3">
   <div class="input-group-prepend">
     <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropdown</button>
@@ -224,12 +217,11 @@ Multiple add-ons are supported and can be mixed with checkbox and radio input ve
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Segmented buttons
 
-{% capture example %}
+{{< example >}}
 <div class="input-group mb-3">
   <div class="input-group-prepend">
     <button type="button" class="btn btn-outline-secondary">Action</button>
@@ -263,8 +255,7 @@ Multiple add-ons are supported and can be mixed with checkbox and radio input ve
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Custom forms
 
@@ -272,7 +263,7 @@ Input groups include support for custom selects and custom file inputs. Browser
 
 ### Custom select
 
-{% capture example %}
+{{< example >}}
 <div class="input-group mb-3">
   <div class="input-group-prepend">
     <label class="input-group-text" for="inputGroupSelect01">Options</label>
@@ -320,12 +311,11 @@ Input groups include support for custom selects and custom file inputs. Browser
     <button class="btn btn-outline-secondary" type="button">Button</button>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Custom file input
 
-{% capture example %}
+{{< example >}}
 <div class="input-group mb-3">
   <div class="input-group-prepend">
     <span class="input-group-text" id="inputGroupFileAddon01">Upload</span>
@@ -365,8 +355,7 @@ Input groups include support for custom selects and custom file inputs. Browser
     <button class="btn btn-outline-secondary" type="button" id="inputGroupFileAddon04">Button</button>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Accessibility
 
similarity index 87%
rename from site/docs/4.5/components/jumbotron.md
rename to site/content/docs/4.5/components/jumbotron.md
index c146215653cebe1cc5ecfa58ec4aa4340468489c..9810be418b5e8ea13fa695637573dff63da4290b 100644 (file)
@@ -7,7 +7,7 @@ group: components
 
 A lightweight, flexible component that can optionally extend the entire viewport to showcase key marketing messages on your site.
 
-{% capture example %}
+{{< example >}}
 <div class="jumbotron">
   <h1 class="display-4">Hello, world!</h1>
   <p class="lead">This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.</p>
@@ -15,17 +15,15 @@ A lightweight, flexible component that can optionally extend the entire viewport
   <p>It uses utility classes for typography and spacing to space content out within the larger container.</p>
   <a class="btn btn-primary btn-lg" href="#" role="button">Learn more</a>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 To make the jumbotron full width, and without rounded corners, add the `.jumbotron-fluid` modifier class and add a `.container` or `.container-fluid` within.
 
-{% capture example %}
+{{< example >}}
 <div class="jumbotron jumbotron-fluid">
   <div class="container">
     <h1 class="display-4">Fluid jumbotron</h1>
     <p class="lead">This is a modified jumbotron that occupies the entire horizontal space of its parent.</p>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
similarity index 90%
rename from site/docs/4.5/components/list-group.md
rename to site/content/docs/4.5/components/list-group.md
index 4f51daa3c19f1b2d0896b50e4d01fbaf9745ce0a..48a1fa09973eee1a60ff35d4b4a1fdc31f2a3eb4 100644 (file)
@@ -10,7 +10,7 @@ toc: true
 
 The most basic list group is an unordered list with list items and the proper classes. Build upon it with the options that follow, or with your own CSS as needed.
 
-{% capture example %}
+{{< example >}}
 <ul class="list-group">
   <li class="list-group-item">Cras justo odio</li>
   <li class="list-group-item">Dapibus ac facilisis in</li>
@@ -18,14 +18,13 @@ The most basic list group is an unordered list with list items and the proper cl
   <li class="list-group-item">Porta ac consectetur ac</li>
   <li class="list-group-item">Vestibulum at eros</li>
 </ul>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Active items
 
 Add `.active` to a `.list-group-item` to indicate the current active selection.
 
-{% capture example %}
+{{< example >}}
 <ul class="list-group">
   <li class="list-group-item active">Cras justo odio</li>
   <li class="list-group-item">Dapibus ac facilisis in</li>
@@ -33,14 +32,13 @@ Add `.active` to a `.list-group-item` to indicate the current active selection.
   <li class="list-group-item">Porta ac consectetur ac</li>
   <li class="list-group-item">Vestibulum at eros</li>
 </ul>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Disabled items
 
 Add `.disabled` to a `.list-group-item` to make it _appear_ disabled. Note that some elements with `.disabled` will also require custom JavaScript to fully disable their click events (e.g., links).
 
-{% capture example %}
+{{< example >}}
 <ul class="list-group">
   <li class="list-group-item disabled" aria-disabled="true">Cras justo odio</li>
   <li class="list-group-item">Dapibus ac facilisis in</li>
@@ -48,8 +46,7 @@ Add `.disabled` to a `.list-group-item` to make it _appear_ disabled. Note that
   <li class="list-group-item">Porta ac consectetur ac</li>
   <li class="list-group-item">Vestibulum at eros</li>
 </ul>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Links and buttons
 
@@ -57,7 +54,7 @@ Use `<a>`s or `<button>`s to create _actionable_ list group items with hover, di
 
 Be sure to **not use the standard `.btn` classes here**.
 
-{% capture example %}
+{{< example >}}
 <div class="list-group">
   <a href="#" class="list-group-item list-group-item-action active">
     Cras justo odio
@@ -67,12 +64,11 @@ Be sure to **not use the standard `.btn` classes here**.
   <a href="#" class="list-group-item list-group-item-action">Porta ac consectetur ac</a>
   <a href="#" class="list-group-item list-group-item-action disabled" tabindex="-1" aria-disabled="true">Vestibulum at eros</a>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 With `<button>`s, you can also make use of the `disabled` attribute instead of the `.disabled` class. Sadly, `<a>`s don't support the disabled attribute.
 
-{% capture example %}
+{{< example >}}
 <div class="list-group">
   <button type="button" class="list-group-item list-group-item-action active">
     Cras justo odio
@@ -82,14 +78,13 @@ With `<button>`s, you can also make use of the `disabled` attribute instead of t
   <button type="button" class="list-group-item list-group-item-action">Porta ac consectetur ac</button>
   <button type="button" class="list-group-item list-group-item-action" disabled>Vestibulum at eros</button>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Flush
 
 Add `.list-group-flush` to remove some borders and rounded corners to render list group items edge-to-edge in a parent container (e.g., cards).
 
-{% capture example %}
+{{< example >}}
 <ul class="list-group list-group-flush">
   <li class="list-group-item">Cras justo odio</li>
   <li class="list-group-item">Dapibus ac facilisis in</li>
@@ -97,8 +92,7 @@ Add `.list-group-flush` to remove some borders and rounded corners to render lis
   <li class="list-group-item">Porta ac consectetur ac</li>
   <li class="list-group-item">Vestibulum at eros</li>
 </ul>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Horizontal
 
@@ -106,49 +100,55 @@ Add `.list-group-horizontal` to change the layout of list group items from verti
 
 **ProTip:** Want equal-width list group items when horizontal? Add `.flex-fill` to each list group item.
 
-{% for bp in site.data.breakpoints %}
-{% capture example %}
-<ul class="list-group list-group-horizontal{{ bp.abbr }}">
+{{< example >}}
+{{< list-group.inline >}}
+{{- range $.Site.Data.breakpoints }}
+<ul class="list-group list-group-horizontal{{ .abbr }}">
   <li class="list-group-item">Cras justo odio</li>
   <li class="list-group-item">Dapibus ac facilisis in</li>
   <li class="list-group-item">Morbi leo risus</li>
 </ul>
-{% endcapture %}
-{% include example.html content=example %}{% endfor %}
+{{- end -}}
+{{< /list-group.inline >}}
+{{< /example >}}
 
 ## Contextual classes
 
 Use contextual classes to style list items with a stateful background and color.
 
-{% capture example %}
+{{< example >}}
 <ul class="list-group">
   <li class="list-group-item">Dapibus ac facilisis in</li>
-
-  {% for color in site.data.theme-colors %}
-  <li class="list-group-item list-group-item-{{ color.name }}">A simple {{ color.name }} list group item</li>{% endfor %}
+{{< list.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+  <li class="list-group-item list-group-item-{{ .name }}">A simple {{ .name }} list group item</li>
+{{- end -}}
+{{< /list.inline >}}
 </ul>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Contextual classes also work with `.list-group-item-action`. Note the addition of the hover styles here not present in the previous example. Also supported is the `.active` state; apply it to indicate an active selection on a contextual list group item.
 
-{% capture example %}
+{{< example >}}
 <div class="list-group">
   <a href="#" class="list-group-item list-group-item-action">Dapibus ac facilisis in</a>
-
-  {% for color in site.data.theme-colors %}
-  <a href="#" class="list-group-item list-group-item-action list-group-item-{{ color.name }}">A simple {{ color.name }} list group item</a>{% endfor %}
+{{< list.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+  <a href="#" class="list-group-item list-group-item-action list-group-item-{{ .name }}">A simple {{ .name }} list group item</a>
+{{- end -}}
+{{< /list.inline >}}
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% include callout-warning-color-assistive-technologies.md %}
+{{< callout warning >}}
+{{< partial "callout-warning-color-assistive-technologies.md" >}}
+{{< /callout >}}
 
 ## With badges
 
-Add badges to any list group item to show unread counts, activity, and more with the help of some [utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/flex/).
+Add badges to any list group item to show unread counts, activity, and more with the help of some [utilities]({{< docsref "/utilities/flex" >}}).
 
-{% capture example %}
+{{< example >}}
 <ul class="list-group">
   <li class="list-group-item d-flex justify-content-between align-items-center">
     Cras justo odio
@@ -163,14 +163,13 @@ Add badges to any list group item to show unread counts, activity, and more with
     <span class="badge badge-primary badge-pill">1</span>
   </li>
 </ul>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Custom content
 
-Add nearly any HTML within, even for linked list groups like the one below, with the help of [flexbox utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/flex/).
+Add nearly any HTML within, even for linked list groups like the one below, with the help of [flexbox utilities]({{< docsref "/utilities/flex" >}}).
 
-{% capture example %}
+{{< example >}}
 <div class="list-group">
   <a href="#" class="list-group-item list-group-item-action active">
     <div class="d-flex w-100 justify-content-between">
@@ -197,8 +196,7 @@ Add nearly any HTML within, even for linked list groups like the one below, with
     <small class="text-muted">Donec id elit non mi porta.</small>
   </a>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## JavaScript behavior
 
@@ -233,7 +231,7 @@ Use the tab JavaScript plugin—include it individually or through the compiled
   </div>
 </div>
 
-{% highlight html %}
+```html
 <div class="row">
   <div class="col-4">
     <div class="list-group" id="list-tab" role="tablist">
@@ -252,13 +250,13 @@ Use the tab JavaScript plugin—include it individually or through the compiled
     </div>
   </div>
 </div>
-{% endhighlight %}
+```
 
 ### Using data attributes
 
 You can activate a list group navigation without writing any JavaScript by simply specifying `data-toggle="list"` or on an element. Use these data attributes on `.list-group-item`.
 
-{% highlight html %}
+```html
 <div role="tabpanel">
   <!-- List group -->
   <div class="list-group" id="myList" role="tablist">
@@ -276,40 +274,40 @@ You can activate a list group navigation without writing any JavaScript by simpl
     <div class="tab-pane" id="settings" role="tabpanel">...</div>
   </div>
 </div>
-{% endhighlight %}
+```
 
 ### Via JavaScript
 
 Enable tabbable list item via JavaScript (each list item needs to be activated individually):
 
-{% highlight js %}
+```js
 $('#myList a').on('click', function (e) {
   e.preventDefault()
   $(this).tab('show')
 })
-{% endhighlight %}
+```
 
 You can activate individual list item in several ways:
 
-{% highlight js %}
+```js
 $('#myList a[href="#profile"]').tab('show') // Select tab by name
 $('#myList a:first-child').tab('show') // Select first tab
 $('#myList a:last-child').tab('show') // Select last tab
 $('#myList a:nth-child(3)').tab('show') // Select third tab
-{% endhighlight %}
+```
 
 ### Fade effect
 
 To make tabs panel fade in, add `.fade` to each `.tab-pane`. The first tab pane must also have `.show` to make the initial content visible.
 
-{% highlight html %}
+```html
 <div class="tab-content">
   <div class="tab-pane fade show active" id="home" role="tabpanel">...</div>
   <div class="tab-pane fade" id="profile" role="tabpanel">...</div>
   <div class="tab-pane fade" id="messages" role="tabpanel">...</div>
   <div class="tab-pane fade" id="settings" role="tabpanel">...</div>
 </div>
-{% endhighlight %}
+```
 
 ### Methods
 
@@ -317,7 +315,7 @@ To make tabs panel fade in, add `.fade` to each `.tab-pane`. The first tab pane
 
 Activates a list item element and content container. Tab should have either a `data-target` or an `href` targeting a container node in the DOM.
 
-{% highlight html %}
+```html
 <div class="list-group" id="myList" role="tablist">
   <a class="list-group-item list-group-item-action active" data-toggle="list" href="#home" role="tab">Home</a>
   <a class="list-group-item list-group-item-action" data-toggle="list" href="#profile" role="tab">Profile</a>
@@ -337,15 +335,15 @@ Activates a list item element and content container. Tab should have either a `d
     $('#myList a:last-child').tab('show')
   })
 </script>
-{% endhighlight %}
+```
 
 #### .tab('show')
 
 Selects the given list item and shows its associated pane. Any other list item that was previously selected becomes unselected and its associated pane is hidden. **Returns to the caller before the tab pane has actually been shown** (for example, before the `shown.bs.tab` event occurs).
 
-{% highlight js %}
+```js
 $('#someListItem').tab('show')
-{% endhighlight %}
+```
 
 ### Events
 
@@ -385,9 +383,9 @@ If no tab was already active, the `hide.bs.tab` and `hidden.bs.tab` events will
   </tbody>
 </table>
 
-{% highlight js %}
+```js
 $('a[data-toggle="list"]').on('shown.bs.tab', function (e) {
   e.target // newly activated tab
   e.relatedTarget // previous active tab
 })
-{% endhighlight %}
+```
similarity index 79%
rename from site/docs/4.5/components/media-object.md
rename to site/content/docs/4.5/components/media-object.md
index 32628e723f05457daf70dfa9f380af47b4b23886..3e295f8bbaaf0f0308e5e48d191ab8f42f8a3875 100644 (file)
@@ -10,42 +10,40 @@ toc: true
 
 The [media object](http://www.stubbornella.org/content/2010/06/25/the-media-object-saves-hundreds-of-lines-of-code/) helps build complex and repetitive components where some media is positioned alongside content that doesn't wrap around said media. Plus, it does this with only two required classes thanks to flexbox.
 
-Below is an example of a single media object. Only two classes are required—the wrapping `.media` and the `.media-body` around your content. Optional padding and margin can be controlled through [spacing utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/spacing/).
+Below is an example of a single media object. Only two classes are required—the wrapping `.media` and the `.media-body` around your content. Optional padding and margin can be controlled through [spacing utilities]({{< docsref "/utilities/spacing" >}}).
 
-{% capture example %}
+{{< example >}}
 <div class="media">
-  {% include icons/placeholder.svg width="64" height="64" class="mr-3" %}
+  {{< placeholder width="64" height="64" class="mr-3" >}}
   <div class="media-body">
     <h5 class="mt-0">Media heading</h5>
     Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture callout %}
+{{< callout warning >}}
 ##### Flexbug #12: Inline elements aren't treated as flex items
 
-Internet Explorer 10-11 do not render inline elements like links or images (or `::before` and `::after` pseudo-elements) as flex items. The only workaround is to set a non-inline `display` value (e.g., `block`, `inline-block`, or `flex`). We suggest using `.d-flex`, one of our [display utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/display/), as an easy fix.
+Internet Explorer 10-11 do not render inline elements like links or images (or `::before` and `::after` pseudo-elements) as flex items. The only workaround is to set a non-inline `display` value (e.g., `block`, `inline-block`, or `flex`). We suggest using `.d-flex`, one of our [display utilities]({{< docsref "/utilities/display" >}}), as an easy fix.
 
 **Source:** [Flexbugs on GitHub](https://github.com/philipwalton/flexbugs#flexbug-12)
-{% endcapture %}
-{% include callout.html content=callout type="warning" %}
+{{< /callout >}}
 
 ## Nesting
 
 Media objects can be infinitely nested, though we suggest you stop at some point. Place nested `.media` within the `.media-body` of a parent media object.
 
-{% capture example %}
+{{< example >}}
 <div class="media">
-  {% include icons/placeholder.svg width="64" height="64" class="mr-3" %}
+  {{< placeholder width="64" height="64" class="mr-3" >}}
   <div class="media-body">
     <h5 class="mt-0">Media heading</h5>
     Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
 
     <div class="media mt-3">
       <a class="mr-3" href="#">
-        {% include icons/placeholder.svg width="64" height="64" %}
+        {{< placeholder width="64" height="64" >}}
       </a>
       <div class="media-body">
         <h5 class="mt-0">Media heading</h5>
@@ -54,91 +52,85 @@ Media objects can be infinitely nested, though we suggest you stop at some point
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Alignment
 
 Media in a media object can be aligned with flexbox utilities to the top (default), middle, or end of your `.media-body` content.
 
-{% capture example %}
+{{< example >}}
 <div class="media">
-  {% include icons/placeholder.svg width="64" height="64" class="align-self-start mr-3" %}
+  {{< placeholder width="64" height="64" class="align-self-start mr-3" >}}
   <div class="media-body">
     <h5 class="mt-0">Top-aligned media</h5>
     <p>Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.</p>
     <p>Donec sed odio dui. Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <div class="media">
-  {% include icons/placeholder.svg width="64" height="64" class="align-self-center mr-3" %}
+  {{< placeholder width="64" height="64" class="align-self-center mr-3" >}}
   <div class="media-body">
     <h5 class="mt-0">Center-aligned media</h5>
     <p>Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.</p>
     <p class="mb-0">Donec sed odio dui. Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <div class="media">
-  {% include icons/placeholder.svg width="64" height="64" class="align-self-end mr-3" %}
+  {{< placeholder width="64" height="64" class="align-self-end mr-3" >}}
   <div class="media-body">
     <h5 class="mt-0">Bottom-aligned media</h5>
     <p>Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.</p>
     <p class="mb-0">Donec sed odio dui. Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Order
 
 Change the order of content in media objects by modifying the HTML itself, or by adding some custom flexbox CSS to set the `order` property (to an integer of your choosing).
 
-{% capture example %}
+{{< example >}}
 <div class="media">
   <div class="media-body">
     <h5 class="mt-0 mb-1">Media object</h5>
     Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
   </div>
-  {% include icons/placeholder.svg width="64" height="64" class="ml-3" %}
+  {{< placeholder width="64" height="64" class="ml-3" >}}
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Media list
 
 Because the media object has so few structural requirements, you can also use these classes on list HTML elements. On your `<ul>` or `<ol>`, add the `.list-unstyled` to remove any browser default list styles, and then apply `.media` to your `<li>`s. As always, use spacing utilities wherever needed to fine tune.
 
-{% capture example %}
+{{< example >}}
 <ul class="list-unstyled">
   <li class="media">
-    {% include icons/placeholder.svg width="64" height="64" class="mr-3" %}
+    {{< placeholder width="64" height="64" class="mr-3" >}}
     <div class="media-body">
       <h5 class="mt-0 mb-1">List-based media object</h5>
       Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
     </div>
   </li>
   <li class="media my-4">
-    {% include icons/placeholder.svg width="64" height="64" class="mr-3" %}
+    {{< placeholder width="64" height="64" class="mr-3" >}}
     <div class="media-body">
       <h5 class="mt-0 mb-1">List-based media object</h5>
       Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
     </div>
   </li>
   <li class="media">
-    {% include icons/placeholder.svg width="64" height="64" class="mr-3" %}
+    {{< placeholder width="64" height="64" class="mr-3" >}}
     <div class="media-body">
       <h5 class="mt-0 mb-1">List-based media object</h5>
       Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
     </div>
   </li>
 </ul>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
similarity index 96%
rename from site/docs/4.5/components/modal.md
rename to site/content/docs/4.5/components/modal.md
index 9e1ac736ff7d51429efc766533a4fd2dfaa46a17..ac564a9ed491f1e10ffbc4a7e8053b4df0ce69e1 100644 (file)
@@ -14,16 +14,18 @@ Before getting started with Bootstrap's modal component, be sure to read the fol
 - Clicking on the modal "backdrop" will automatically close the modal.
 - Bootstrap only supports one modal window at a time. Nested modals aren't supported as we believe them to be poor user experiences.
 - Modals use `position: fixed`, which can sometimes be a bit particular about its rendering. Whenever possible, place your modal HTML in a top-level position to avoid potential interference from other elements. You'll likely run into issues when nesting a `.modal` within another fixed element.
-- Once again, due to `position: fixed`, there are some caveats with using modals on mobile devices. [See our browser support docs]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/browsers-devices/#modals-and-dropdowns-on-mobile) for details.
+- Once again, due to `position: fixed`, there are some caveats with using modals on mobile devices. [See our browser support docs]({{< docsref "/getting-started/browsers-devices#modals-and-dropdowns-on-mobile" >}}) for details.
 - Due to how HTML5 defines its semantics, [the `autofocus` HTML attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-autofocus) has no effect in Bootstrap modals. To achieve the same effect, use some custom JavaScript:
 
-{% highlight js %}
+```js
 $('#myModal').on('shown.bs.modal', function () {
   $('#myInput').trigger('focus')
 })
-{% endhighlight %}
+```
 
-{% include callout-info-prefersreducedmotion.md %}
+{{< callout info >}}
+{{< partial "callout-info-prefersreducedmotion.md" >}}
+{{< /callout >}}
 
 Keep reading for demos and usage guidelines.
 
@@ -55,7 +57,7 @@ Below is a _static_ modal example (meaning its `position` and `display` have bee
   </div>
 </div>
 
-{% highlight html %}
+```html
 <div class="modal" tabindex="-1">
   <div class="modal-dialog">
     <div class="modal-content">
@@ -75,7 +77,7 @@ Below is a _static_ modal example (meaning its `position` and `display` have bee
     </div>
   </div>
 </div>
-{% endhighlight %}
+```
 
 ### Live demo
 
@@ -107,7 +109,7 @@ Toggle a working modal demo by clicking the button below. It will slide down and
   </button>
 </div>
 
-{% highlight html %}
+```html
 <!-- Button trigger modal -->
 <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">
   Launch demo modal
@@ -133,7 +135,7 @@ Toggle a working modal demo by clicking the button below. It will slide down and
     </div>
   </div>
 </div>
-{% endhighlight %}
+```
 
 ### Static backdrop
 
@@ -165,7 +167,7 @@ When backdrop is set to static, the modal will not close when clicking outside i
   </button>
 </div>
 
-{% highlight html %}
+```html
 <!-- Button trigger modal -->
 <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#staticBackdrop">
   Launch static backdrop modal
@@ -191,7 +193,7 @@ When backdrop is set to static, the modal will not close when clicking outside i
     </div>
   </div>
 </div>
-{% endhighlight %}
+```
 
 
 ### Scrolling long content
@@ -286,12 +288,12 @@ You can also create a scrollable modal that allows scroll the modal body by addi
   </button>
 </div>
 
-{% highlight html %}
+```html
 <!-- Scrollable modal -->
 <div class="modal-dialog modal-dialog-scrollable">
   ...
 </div>
-{% endhighlight %}
+```
 
 ### Vertically centered
 
@@ -350,7 +352,7 @@ Add `.modal-dialog-centered` to `.modal-dialog` to vertically center the modal.
   </button>
 </div>
 
-{% highlight html %}
+```html
 <!-- Vertically centered modal -->
 <div class="modal-dialog modal-dialog-centered">
   ...
@@ -360,11 +362,11 @@ Add `.modal-dialog-centered` to `.modal-dialog` to vertically center the modal.
 <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable">
   ...
 </div>
-{% endhighlight %}
+```
 
 ### Tooltips and popovers
 
-[Tooltips]({{ site.baseurl }}/docs/{{ site.docs_version }}/components/tooltips/) and [popovers]({{ site.baseurl }}/docs/{{ site.docs_version }}/components/popovers/) can be placed within modals as needed. When modals are closed, any tooltips and popovers within are also automatically dismissed.
+[Tooltips]({{< docsref "/components/tooltips" >}}) and [popovers]({{< docsref "/components/popovers" >}}) can be placed within modals as needed. When modals are closed, any tooltips and popovers within are also automatically dismissed.
 
 <div class="modal fade" id="exampleModalPopovers" tabindex="-1" aria-labelledby="exampleModalPopoversLabel" aria-hidden="true">
   <div class="modal-dialog">
@@ -396,7 +398,7 @@ Add `.modal-dialog-centered` to `.modal-dialog` to vertically center the modal.
   </button>
 </div>
 
-{% highlight html %}
+```html
 <div class="modal-body">
   <h5>Popover in a modal</h5>
   <p>This <a href="#" role="button" class="btn btn-secondary popover-test" title="Popover title" data-content="Popover body content is set in this attribute.">button</a> triggers a popover on click.</p>
@@ -404,7 +406,7 @@ Add `.modal-dialog-centered` to `.modal-dialog` to vertically center the modal.
   <h5>Tooltips in a modal</h5>
   <p><a href="#" class="tooltip-test" title="Tooltip">This link</a> and <a href="#" class="tooltip-test" title="Tooltip">that link</a> have tooltips on hover.</p>
 </div>
-{% endhighlight %}
+```
 
 ### Using the grid
 
@@ -459,7 +461,7 @@ Utilize the Bootstrap grid system within a modal by nesting `.container-fluid` w
 </button>
 </div>
 
-{% highlight html %}
+```html
 <div class="modal-body">
   <div class="container-fluid">
     <div class="row">
@@ -488,7 +490,7 @@ Utilize the Bootstrap grid system within a modal by nesting `.container-fluid` w
     </div>
   </div>
 </div>
-{% endhighlight %}
+```
 
 ### Varying modal content
 
@@ -496,7 +498,7 @@ Have a bunch of buttons that all trigger the same modal with slightly different
 
 Below is a live demo followed by example HTML and JavaScript. For more information, [read the modal events docs](#events) for details on `relatedTarget`.
 
-{% capture example %}
+{{< example >}}
 <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" data-whatever="@mdo">Open modal for @mdo</button>
 <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" data-whatever="@fat">Open modal for @fat</button>
 <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" data-whatever="@getbootstrap">Open modal for @getbootstrap</button>
@@ -529,10 +531,9 @@ Below is a live demo followed by example HTML and JavaScript. For more informati
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% highlight js %}
+```js
 $('#exampleModal').on('show.bs.modal', function (event) {
   var button = $(event.relatedTarget) // Button that triggered the modal
   var recipient = button.data('whatever') // Extract info from data-* attributes
@@ -542,7 +543,7 @@ $('#exampleModal').on('show.bs.modal', function (event) {
   modal.find('.modal-title').text('New message to ' + recipient)
   modal.find('.modal-body input').val(recipient)
 })
-{% endhighlight %}
+```
 
 ### Change animation
 
@@ -554,11 +555,11 @@ If you want for example a zoom-in animation, you can set `$modal-fade-transform:
 
 For modals that simply appear rather than fade in to view, remove the `.fade` class from your modal markup.
 
-{% highlight html %}
+```html
 <div class="modal" tabindex="-1" aria-labelledby="..." aria-hidden="true">
   ...
 </div>
-{% endhighlight %}
+```
 
 ### Dynamic heights
 
@@ -616,16 +617,15 @@ Our default modal without modifier class constitutes the "medium" size modal.
   <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModalSm">Small modal</button>
 </div>
 
-{% highlight html %}
+```html
 <div class="modal-dialog modal-xl">...</div>
 <div class="modal-dialog modal-lg">...</div>
 <div class="modal-dialog modal-sm">...</div>
-{% endhighlight %}
+```
 
 <div class="modal fade" id="exampleModalXl" tabindex="-1" aria-labelledby="exampleModalXlLabel" aria-hidden="true">
   <div class="modal-dialog modal-xl">
     <div class="modal-content">
-
       <div class="modal-header">
         <h5 class="modal-title h4" id="exampleModalXlLabel">Extra large modal</h5>
         <button type="button" class="close" data-dismiss="modal" aria-label="Close">
@@ -642,7 +642,6 @@ Our default modal without modifier class constitutes the "medium" size modal.
 <div class="modal fade" id="exampleModalLg" tabindex="-1" aria-labelledby="exampleModalLgLabel" aria-hidden="true">
   <div class="modal-dialog modal-lg">
     <div class="modal-content">
-
       <div class="modal-header">
         <h5 class="modal-title h4" id="exampleModalLgLabel">Large modal</h5>
         <button type="button" class="close" data-dismiss="modal" aria-label="Close">
@@ -680,15 +679,17 @@ The modal plugin toggles your hidden content on demand, via data attributes or J
 
 Activate a modal without writing JavaScript. Set `data-toggle="modal"` on a controller element, like a button, along with a `data-target="#foo"` or `href="#foo"` to target a specific modal to toggle.
 
-{% highlight html %}
+```html
 <button type="button" data-toggle="modal" data-target="#myModal">Launch modal</button>
-{% endhighlight %}
+```
 
 ### Via JavaScript
 
 Call a modal with id `myModal` with a single line of JavaScript:
 
-{% highlight js %}$('#myModal').modal(options){% endhighlight %}
+```js
+$('#myModal').modal(options)
+```
 
 ### Options
 
@@ -733,41 +734,51 @@ Options can be passed via data attributes or JavaScript. For data attributes, ap
 
 ### Methods
 
-{% include callout-danger-async-methods.md %}
+{{< callout danger >}}
+{{< partial "callout-danger-async-methods.md" >}}
+{{< /callout >}}
 
 #### `.modal(options)`
 
 Activates your content as a modal. Accepts an optional options `object`.
 
-{% highlight js %}
+```js
 $('#myModal').modal({
   keyboard: false
 })
-{% endhighlight %}
+```
 
 #### `.modal('toggle')`
 
 Manually toggles a modal. **Returns to the caller before the modal has actually been shown or hidden** (i.e. before the `shown.bs.modal` or `hidden.bs.modal` event occurs).
 
-{% highlight js %}$('#myModal').modal('toggle'){% endhighlight %}
+```js
+$('#myModal').modal('toggle')
+```
 
 #### `.modal('show')`
 
 Manually opens a modal. **Returns to the caller before the modal has actually been shown** (i.e. before the `shown.bs.modal` event occurs).
 
-{% highlight js %}$('#myModal').modal('show'){% endhighlight %}
+```js
+$('#myModal').modal('show')
+```
 
 #### `.modal('hide')`
 
 Manually hides a modal. **Returns to the caller before the modal has actually been hidden** (i.e. before the `hidden.bs.modal` event occurs).
 
-{% highlight js %}$('#myModal').modal('hide'){% endhighlight %}
+```js
+$('#myModal').modal('hide')
+```
 
 #### `.modal('handleUpdate')`
 
 Manually readjust the modal's position if the height of a modal changes while it is open (i.e. in case a scrollbar appears).
 
-{% highlight js %}$('#myModal').modal('handleUpdate'){% endhighlight %}
+```js
+$('#myModal').modal('handleUpdate')
+```
 
 #### `.modal('dispose')`
 
@@ -808,8 +819,8 @@ Bootstrap's modal class exposes a few events for hooking into modal functionalit
   </tbody>
 </table>
 
-{% highlight js %}
+```js
 $('#myModal').on('hidden.bs.modal', function (e) {
   // do something...
 })
-{% endhighlight %}
+```
similarity index 86%
rename from site/docs/4.5/components/navbar.md
rename to site/content/docs/4.5/components/navbar.md
index 3cdd89be54298c25d6301a820f0981a063207fac..07fff3b35f69abfbd0be24b7a73716d9497a8e81 100644 (file)
@@ -12,12 +12,14 @@ Here's what you need to know before getting started with the navbar:
 
 - Navbars require a wrapping `.navbar` with `.navbar-expand{-sm|-md|-lg|-xl}` for responsive collapsing and [color scheme](#color-schemes) classes.
 - Navbars and their contents are fluid by default. Use [optional containers](#containers) to limit their horizontal width.
-- Use our [spacing]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/spacing/) and [flex]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/flex/) utility classes for controlling spacing and alignment within navbars.
+- Use our [spacing]({{< docsref "/utilities/spacing" >}}) and [flex]({{< docsref "/utilities/flex" >}}) utility classes for controlling spacing and alignment within navbars.
 - Navbars are responsive by default, but you can easily modify them to change that. Responsive behavior depends on our Collapse JavaScript plugin.
-- Navbars are hidden by default when printing. Force them to be printed by adding `.d-print` to the `.navbar`. See the [display]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/display/) utility class.
+- Navbars are hidden by default when printing. Force them to be printed by adding `.d-print` to the `.navbar`. See the [display]({{< docsref "/utilities/display" >}}) utility class.
 - Ensure accessibility by using a `<nav>` element or, if using a more generic element such as a `<div>`, add a `role="navigation"` to every navbar to explicitly identify it as a landmark region for users of assistive technologies.
 
-{% include callout-info-prefersreducedmotion.md %}
+{{< callout info >}}
+{{< partial "callout-info-prefersreducedmotion.md" >}}
+{{< /callout >}}
 
 ## Supported content
 
@@ -32,7 +34,7 @@ Navbars come with built-in support for a handful of sub-components. Choose from
 
 Here's an example of all the sub-components included in a responsive light-themed navbar that automatically collapses at the `lg` (large) breakpoint.
 
-{% capture example %}
+{{< example >}}
 <nav class="navbar navbar-expand-lg navbar-light bg-light">
   <a class="navbar-brand" href="#">Navbar</a>
   <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
@@ -68,16 +70,15 @@ Here's an example of all the sub-components included in a responsive light-theme
     </form>
   </div>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-This example uses [color]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/colors/) (`bg-light`) and [spacing]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/spacing/) (`my-2`, `my-lg-0`, `mr-sm-0`, `my-sm-0`) utility classes.
+This example uses [color]({{< docsref "/utilities/colors" >}}) (`bg-light`) and [spacing]({{< docsref "/utilities/spacing" >}}) (`my-2`, `my-lg-0`, `mr-sm-0`, `my-sm-0`) utility classes.
 
 ### Brand
 
 The `.navbar-brand` can be applied to most elements, but an anchor works best, as some elements might require utility classes or custom styles.
 
-{% capture example %}
+{{< example >}}
 <!-- As a link -->
 <nav class="navbar navbar-light bg-light">
   <a class="navbar-brand" href="#">Navbar</a>
@@ -87,31 +88,28 @@ The `.navbar-brand` can be applied to most elements, but an anchor works best, a
 <nav class="navbar navbar-light bg-light">
   <span class="navbar-brand mb-0 h1">Navbar</span>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Adding images to the `.navbar-brand` will likely always require custom styles or utilities to properly size. Here are some examples to demonstrate.
 
-{% capture example %}
+{{< example >}}
 <!-- Just an image -->
 <nav class="navbar navbar-light bg-light">
   <a class="navbar-brand" href="#">
-    <img src="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/brand/bootstrap-solid.svg" width="30" height="30" alt="">
+    <img src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-solid.svg" width="30" height="30" alt="">
   </a>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <!-- Image and text -->
 <nav class="navbar navbar-light bg-light">
   <a class="navbar-brand" href="#">
-    <img src="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/brand/bootstrap-solid.svg" width="30" height="30" class="d-inline-block align-top" alt="">
+    <img src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-solid.svg" width="30" height="30" class="d-inline-block align-top" alt="">
     Bootstrap
   </a>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Nav
 
@@ -119,7 +117,7 @@ Navbar navigation links build on our `.nav` options with their own modifier clas
 
 Active states—with `.active`—to indicate the current page can be applied directly to `.nav-link`s or their immediate parent `.nav-item`s.
 
-{% capture example %}
+{{< example >}}
 <nav class="navbar navbar-expand-lg navbar-light bg-light">
   <a class="navbar-brand" href="#">Navbar</a>
   <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
@@ -142,12 +140,11 @@ Active states—with `.active`—to indicate the current page can be applied dir
     </ul>
   </div>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 And because we use classes for our navs, you can avoid the list-based approach entirely if you like.
 
-{% capture example %}
+{{< example >}}
 <nav class="navbar navbar-expand-lg navbar-light bg-light">
   <a class="navbar-brand" href="#">Navbar</a>
   <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
@@ -162,12 +159,11 @@ And because we use classes for our navs, you can avoid the list-based approach e
     </div>
   </div>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 You can also use dropdowns in your navbar. Dropdown menus require a wrapping element for positioning, so be sure to use separate and nested elements for `.nav-item` and `.nav-link` as shown below.
 
-{% capture example %}
+{{< example >}}
 <nav class="navbar navbar-expand-lg navbar-light bg-light">
   <a class="navbar-brand" href="#">Navbar</a>
   <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
@@ -197,26 +193,24 @@ You can also use dropdowns in your navbar. Dropdown menus require a wrapping ele
     </ul>
   </div>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Forms
 
 Place various form controls and components within a navbar with `.form-inline`.
 
-{% capture example %}
+{{< example >}}
 <nav class="navbar navbar-light bg-light">
   <form class="form-inline">
     <input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search">
     <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
   </form>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-Immediate child elements of `.navbar` use flex layout and will default to `justify-content: space-between`. Use additional [flex utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/flex/) as needed to adjust this behavior.
+Immediate child elements of `.navbar` use flex layout and will default to `justify-content: space-between`. Use additional [flex utilities]({{< docsref "/utilities/flex" >}}) as needed to adjust this behavior.
 
-{% capture example %}
+{{< example >}}
 <nav class="navbar navbar-light bg-light">
   <a class="navbar-brand">Navbar</a>
   <form class="form-inline">
@@ -224,12 +218,11 @@ Immediate child elements of `.navbar` use flex layout and will default to `justi
     <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
   </form>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Input groups work, too:
 
-{% capture example %}
+{{< example >}}
 <nav class="navbar navbar-light bg-light">
   <form class="form-inline">
     <div class="input-group">
@@ -240,37 +233,34 @@ Input groups work, too:
     </div>
   </form>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Various buttons are supported as part of these navbar forms, too. This is also a great reminder that vertical alignment utilities can be used to align different sized elements.
 
-{% capture example %}
+{{< example >}}
 <nav class="navbar navbar-light bg-light">
   <form class="form-inline">
     <button class="btn btn-outline-success" type="button">Main button</button>
     <button class="btn btn-sm btn-outline-secondary" type="button">Smaller button</button>
   </form>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Text
 
 Navbars may contain bits of text with the help of `.navbar-text`. This class adjusts vertical alignment and horizontal spacing for strings of text.
 
-{% capture example %}
+{{< example >}}
 <nav class="navbar navbar-light bg-light">
   <span class="navbar-text">
     Navbar text with an inline element
   </span>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Mix and match with other components and utilities as needed.
 
-{% capture example %}
+{{< example >}}
 <nav class="navbar navbar-expand-lg navbar-light bg-light">
   <a class="navbar-brand" href="#">Navbar w/ text</a>
   <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation">
@@ -293,8 +283,7 @@ Mix and match with other components and utilities as needed.
     </span>
   </div>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Color schemes
 
@@ -306,7 +295,6 @@ Theming the navbar has never been easier thanks to the combination of theming cl
     <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarColor01" aria-controls="navbarColor01" aria-expanded="false" aria-label="Toggle navigation">
       <span class="navbar-toggler-icon"></span>
     </button>
-
     <div class="collapse navbar-collapse" id="navbarColor01">
       <ul class="navbar-nav mr-auto">
         <li class="nav-item active">
@@ -334,7 +322,6 @@ Theming the navbar has never been easier thanks to the combination of theming cl
     <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarColor02" aria-controls="navbarColor02" aria-expanded="false" aria-label="Toggle navigation">
       <span class="navbar-toggler-icon"></span>
     </button>
-
     <div class="collapse navbar-collapse" id="navbarColor02">
       <ul class="navbar-nav mr-auto">
         <li class="nav-item active">
@@ -362,7 +349,6 @@ Theming the navbar has never been easier thanks to the combination of theming cl
     <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarColor03" aria-controls="navbarColor03" aria-expanded="false" aria-label="Toggle navigation">
       <span class="navbar-toggler-icon"></span>
     </button>
-
     <div class="collapse navbar-collapse" id="navbarColor03">
       <ul class="navbar-nav mr-auto">
         <li class="nav-item active">
@@ -386,7 +372,7 @@ Theming the navbar has never been easier thanks to the combination of theming cl
   </nav>
 </div>
 
-{% highlight html %}
+```html
 <nav class="navbar navbar-dark bg-dark">
   <!-- Navbar content -->
 </nav>
@@ -398,65 +384,59 @@ Theming the navbar has never been easier thanks to the combination of theming cl
 <nav class="navbar navbar-light" style="background-color: #e3f2fd;">
   <!-- Navbar content -->
 </nav>
-{% endhighlight %}
+```
 
 ## Containers
 
 Although it's not required, you can wrap a navbar in a `.container` to center it on a page. Or you can add a container inside the `.navbar` to only center the contents of a [fixed or static top navbar](#placement).
 
-{% capture example %}
+{{< example >}}
 <div class="container">
   <nav class="navbar navbar-expand-lg navbar-light bg-light">
     <a class="navbar-brand" href="#">Navbar</a>
   </nav>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 When the container is within your navbar, its horizontal padding is removed at breakpoints lower than your specified `.navbar-expand{-sm|-md|-lg|-xl}` class. This ensures we're not doubling up on padding unnecessarily on lower viewports when your navbar is collapsed.
 
-{% capture example %}
+{{< example >}}
 <nav class="navbar navbar-expand-lg navbar-light bg-light">
   <div class="container">
     <a class="navbar-brand" href="#">Navbar</a>
   </div>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Placement
 
-Use our [position utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/position/) to place navbars in non-static positions. Choose from fixed to the top, fixed to the bottom, or stickied to the top (scrolls with the page until it reaches the top, then stays there). Fixed navbars use `position: fixed`, meaning they're pulled from the normal flow of the DOM and may require custom CSS (e.g., `padding-top` on the `<body>`) to prevent overlap with other elements.
+Use our [position utilities]({{< docsref "/utilities/position" >}}) to place navbars in non-static positions. Choose from fixed to the top, fixed to the bottom, or stickied to the top (scrolls with the page until it reaches the top, then stays there). Fixed navbars use `position: fixed`, meaning they're pulled from the normal flow of the DOM and may require custom CSS (e.g., `padding-top` on the `<body>`) to prevent overlap with other elements.
 
 Also note that **`.sticky-top` uses `position: sticky`, which [isn't fully supported in every browser](https://caniuse.com/css-sticky)**.
 
-{% capture example %}
+{{< example >}}
 <nav class="navbar navbar-light bg-light">
   <a class="navbar-brand" href="#">Default</a>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <nav class="navbar fixed-top navbar-light bg-light">
   <a class="navbar-brand" href="#">Fixed top</a>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <nav class="navbar fixed-bottom navbar-light bg-light">
   <a class="navbar-brand" href="#">Fixed bottom</a>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <nav class="navbar sticky-top navbar-light bg-light">
   <a class="navbar-brand" href="#">Sticky top</a>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Responsive behaviors
 
@@ -470,7 +450,7 @@ Navbar togglers are left-aligned by default, but should they follow a sibling el
 
 With no `.navbar-brand` shown at the smallest breakpoint:
 
-{% capture example %}
+{{< example >}}
 <nav class="navbar navbar-expand-lg navbar-light bg-light">
   <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarTogglerDemo01" aria-controls="navbarTogglerDemo01" aria-expanded="false" aria-label="Toggle navigation">
     <span class="navbar-toggler-icon"></span>
@@ -494,12 +474,11 @@ With no `.navbar-brand` shown at the smallest breakpoint:
     </form>
   </div>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 With a brand name shown on the left and toggler on the right:
 
-{% capture example %}
+{{< example >}}
 <nav class="navbar navbar-expand-lg navbar-light bg-light">
   <a class="navbar-brand" href="#">Navbar</a>
   <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarTogglerDemo02" aria-controls="navbarTogglerDemo02" aria-expanded="false" aria-label="Toggle navigation">
@@ -524,12 +503,11 @@ With a brand name shown on the left and toggler on the right:
     </form>
   </div>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 With a toggler on the left and brand name on the right:
 
-{% capture example %}
+{{< example >}}
 <nav class="navbar navbar-expand-lg navbar-light bg-light">
   <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarTogglerDemo03" aria-controls="navbarTogglerDemo03" aria-expanded="false" aria-label="Toggle navigation">
     <span class="navbar-toggler-icon"></span>
@@ -554,14 +532,13 @@ With a toggler on the left and brand name on the right:
     </form>
   </div>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### External content
 
 Sometimes you want to use the collapse plugin to trigger a container element for content that structurally sits outside of the `.navbar` . Because our plugin works on the `id` and `data-target` matching, that's easily done!
 
-{% capture example %}
+{{< example >}}
 <div class="fixed-top">
   <div class="collapse" id="navbarToggleExternalContent">
     <div class="bg-dark p-4">
@@ -575,7 +552,6 @@ Sometimes you want to use the collapse plugin to trigger a container element for
     </button>
   </nav>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 When you do this, we recommend including additional JavaScript to move the focus programmatically to the container when it is opened. Otherwise, keyboard users and users of assistive technologies will likely have a hard time finding the newly revealed content - particularly if the container that was opened comes *before* the toggler in the document's structure. We also recommend making sure that the toggler has the `aria-controls` attribute, pointing to the `id` of the content container. In theory, this allows assistive technology users to jump directly from the toggler to the container it controls–but support for this is currently quite patchy.
similarity index 93%
rename from site/docs/4.5/components/navs.md
rename to site/content/docs/4.5/components/navs.md
index 4bcf2e320d77fffd1905538735001d26391050c9..9faedb598d22a9e3329ccf21bcc38edd49936834 100644 (file)
@@ -12,12 +12,11 @@ Navigation available in Bootstrap share general markup and styles, from the base
 
 The base `.nav` component is built with flexbox and provide a strong foundation for building all types of navigation components. It includes some style overrides (for working with lists), some link padding for larger hit areas, and basic disabled styling.
 
-{% capture callout %}
+{{< callout info >}}
 The base `.nav` component does not include any `.active` state. The following examples include the class, mainly to demonstrate that this particular class does not trigger any special styling.
-{% endcapture %}
-{% include callout.html content=callout type="info" %}
+{{< /callout >}}
 
-{% capture example %}
+{{< example >}}
 <ul class="nav">
   <li class="nav-item">
     <a class="nav-link active" href="#">Active</a>
@@ -32,20 +31,18 @@ The base `.nav` component does not include any `.active` state. The following ex
     <a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
   </li>
 </ul>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Classes are used throughout, so your markup can be super flexible. Use `<ul>`s like above, `<ol>` if the order of your items is important, or roll your own with a `<nav>` element. Because the `.nav` uses `display: flex`, the nav links behave the same as nav items would, but without the extra markup.
 
-{% capture example %}
+{{< example >}}
 <nav class="nav">
   <a class="nav-link active" href="#">Active</a>
   <a class="nav-link" href="#">Link</a>
   <a class="nav-link" href="#">Link</a>
   <a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Available styles
 
@@ -53,11 +50,11 @@ Change the style of `.nav`s component with modifiers and utilities. Mix and matc
 
 ### Horizontal alignment
 
-Change the horizontal alignment of your nav with [flexbox utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/layout/grid/#horizontal-alignment). By default, navs are left-aligned, but you can easily change them to center or right aligned.
+Change the horizontal alignment of your nav with [flexbox utilities]({{< docsref "/layout/grid#horizontal-alignment" >}}). By default, navs are left-aligned, but you can easily change them to center or right aligned.
 
 Centered with `.justify-content-center`:
 
-{% capture example %}
+{{< example >}}
 <ul class="nav justify-content-center">
   <li class="nav-item">
     <a class="nav-link active" href="#">Active</a>
@@ -72,12 +69,11 @@ Centered with `.justify-content-center`:
     <a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
   </li>
 </ul>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Right-aligned with `.justify-content-end`:
 
-{% capture example %}
+{{< example >}}
 <ul class="nav justify-content-end">
   <li class="nav-item">
     <a class="nav-link active" href="#">Active</a>
@@ -92,14 +88,13 @@ Right-aligned with `.justify-content-end`:
     <a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
   </li>
 </ul>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Vertical
 
 Stack your navigation by changing the flex item direction with the `.flex-column` utility. Need to stack them on some viewports but not others? Use the responsive versions (e.g., `.flex-sm-column`).
 
-{% capture example %}
+{{< example >}}
 <ul class="nav flex-column">
   <li class="nav-item">
     <a class="nav-link active" href="#">Active</a>
@@ -114,26 +109,24 @@ Stack your navigation by changing the flex item direction with the `.flex-column
     <a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
   </li>
 </ul>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 As always, vertical navigation is possible without `<ul>`s, too.
 
-{% capture example %}
+{{< example >}}
 <nav class="nav flex-column">
   <a class="nav-link active" href="#">Active</a>
   <a class="nav-link" href="#">Link</a>
   <a class="nav-link" href="#">Link</a>
   <a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Tabs
 
 Takes the basic nav from above and adds the `.nav-tabs` class to generate a tabbed interface. Use them to create tabbable regions with our [tab JavaScript plugin](#javascript-behavior).
 
-{% capture example %}
+{{< example >}}
 <ul class="nav nav-tabs">
   <li class="nav-item">
     <a class="nav-link active" href="#">Active</a>
@@ -148,14 +141,13 @@ Takes the basic nav from above and adds the `.nav-tabs` class to generate a tabb
     <a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
   </li>
 </ul>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Pills
 
 Take that same HTML, but use `.nav-pills` instead:
 
-{% capture example %}
+{{< example >}}
 <ul class="nav nav-pills">
   <li class="nav-item">
     <a class="nav-link active" href="#">Active</a>
@@ -170,14 +162,13 @@ Take that same HTML, but use `.nav-pills` instead:
     <a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
   </li>
 </ul>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Fill and justify
 
 Force your `.nav`'s contents to extend the full available width one of two modifier classes. To proportionately fill all available space with your `.nav-item`s, use `.nav-fill`. Notice that all horizontal space is occupied, but not every nav item has the same width.
 
-{% capture example %}
+{{< example >}}
 <ul class="nav nav-pills nav-fill">
   <li class="nav-item">
     <a class="nav-link active" href="#">Active</a>
@@ -192,24 +183,22 @@ Force your `.nav`'s contents to extend the full available width one of two modif
     <a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
   </li>
 </ul>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 When using a `<nav>`-based navigation, you can safely omit `.nav-item` as only `.nav-link` is required for styling `<a>` elements.
 
-{% capture example %}
+{{< example >}}
 <nav class="nav nav-pills nav-fill">
   <a class="nav-link active" href="#">Active</a>
   <a class="nav-link" href="#">Much longer nav link</a>
   <a class="nav-link" href="#">Link</a>
   <a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 For equal-width elements, use `.nav-justified`. All horizontal space will be occupied by nav links, but unlike the `.nav-fill` above, every nav item will be the same width.
 
-{% capture example %}
+{{< example >}}
 <ul class="nav nav-pills nav-justified">
   <li class="nav-item">
     <a class="nav-link active" href="#">Active</a>
@@ -224,12 +213,11 @@ For equal-width elements, use `.nav-justified`. All horizontal space will be occ
     <a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
   </li>
 </ul>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Similar to the `.nav-fill` example using a `<nav>`-based navigation.
 
-{% capture example %}
+{{< example >}}
 <nav class="nav nav-pills nav-justified">
   <a class="nav-link active" href="#">Active</a>
   <a class="nav-link" href="#">Much longer nav link</a>
@@ -237,21 +225,19 @@ Similar to the `.nav-fill` example using a `<nav>`-based navigation.
   <a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
 </nav>
 
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 ## Working with flex utilities
 
-If you need responsive nav variations, consider using a series of [flexbox utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/flex/). While more verbose, these utilities offer greater customization across responsive breakpoints. In the example below, our nav will be stacked on the lowest breakpoint, then adapt to a horizontal layout that fills the available width starting from the small breakpoint.
+If you need responsive nav variations, consider using a series of [flexbox utilities]({{< docsref "/utilities/flex" >}}). While more verbose, these utilities offer greater customization across responsive breakpoints. In the example below, our nav will be stacked on the lowest breakpoint, then adapt to a horizontal layout that fills the available width starting from the small breakpoint.
 
-{% capture example %}
+{{< example >}}
 <nav class="nav nav-pills flex-column flex-sm-row">
   <a class="flex-sm-fill text-sm-center nav-link active" href="#">Active</a>
   <a class="flex-sm-fill text-sm-center nav-link" href="#">Longer nav link</a>
   <a class="flex-sm-fill text-sm-center nav-link" href="#">Link</a>
   <a class="flex-sm-fill text-sm-center nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Regarding accessibility
 
@@ -261,11 +247,11 @@ Note that navigation bars, even if visually styled as tabs with the `.nav-tabs`
 
 ## Using dropdowns
 
-Add dropdown menus with a little extra HTML and the [dropdowns JavaScript plugin]({{ site.baseurl }}/docs/{{ site.docs_version }}/components/dropdowns/#usage).
+Add dropdown menus with a little extra HTML and the [dropdowns JavaScript plugin]({{< docsref "/components/dropdowns#usage" >}}).
 
 ### Tabs with dropdowns
 
-{% capture example %}
+{{< example >}}
 <ul class="nav nav-tabs">
   <li class="nav-item">
     <a class="nav-link active" href="#">Active</a>
@@ -287,12 +273,11 @@ Add dropdown menus with a little extra HTML and the [dropdowns JavaScript plugin
     <a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
   </li>
 </ul>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Pills with dropdowns
 
-{% capture example %}
+{{< example >}}
 <ul class="nav nav-pills">
   <li class="nav-item">
     <a class="nav-link active" href="#">Active</a>
@@ -314,14 +299,13 @@ Add dropdown menus with a little extra HTML and the [dropdowns JavaScript plugin
     <a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
   </li>
 </ul>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## JavaScript behavior
 
 Use the tab JavaScript plugin—include it individually or through the compiled `bootstrap.js` file—to extend our navigational tabs and pills to create tabbable panes of local content, even via dropdown menus.
 
-If you're building our JavaScript from source, it [requires `util.js`]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/javascript/#util).
+If you're building our JavaScript from source, it [requires `util.js`]({{< docsref "/getting-started/javascript#util" >}}).
 
 Dynamic tabbed interfaces, as described in the [<abbr title="Web Accessibility Initiative">WAI</abbr> <abbr title="Accessible Rich Internet Applications">ARIA</abbr> Authoring Practices](https://www.w3.org/TR/wai-aria-practices/#tabpanel), require `role="tablist"`, `role="tab"`, `role="tabpanel"`, and additional `aria-` attributes in order to convey their structure, functionality and current state to users of assistive technologies (such as screen readers).
 
@@ -352,7 +336,7 @@ Note that dynamic tabbed interfaces should <em>not</em> contain dropdown menus,
   </div>
 </div>
 
-{% highlight html %}
+```html
 <ul class="nav nav-tabs" id="myTab" role="tablist">
   <li class="nav-item" role="presentation">
     <a class="nav-link active" id="home-tab" data-toggle="tab" href="#home" role="tab" aria-controls="home" aria-selected="true">Home</a>
@@ -369,7 +353,7 @@ Note that dynamic tabbed interfaces should <em>not</em> contain dropdown menus,
   <div class="tab-pane fade" id="profile" role="tabpanel" aria-labelledby="profile-tab">...</div>
   <div class="tab-pane fade" id="contact" role="tabpanel" aria-labelledby="contact-tab">...</div>
 </div>
-{% endhighlight %}
+```
 
 To help fit your needs, this works with `<ul>`-based markup, as shown above, or with any arbitrary "roll your own" markup. Note that if you're using `<nav>`, you shouldn't add `role="tablist"` directly to it, as this would override the element's native role as a navigation landmark. Instead, switch to an alternative element (in the example below, a simple `<div>`) and wrap the `<nav>` around it.
 
@@ -394,7 +378,7 @@ To help fit your needs, this works with `<ul>`-based markup, as shown above, or
   </div>
 </div>
 
-{% highlight html %}
+```html
 <nav>
   <div class="nav nav-tabs" id="nav-tab" role="tablist">
     <a class="nav-link active" id="nav-home-tab" data-toggle="tab" href="#nav-home" role="tab" aria-controls="nav-home" aria-selected="true">Home</a>
@@ -407,7 +391,7 @@ To help fit your needs, this works with `<ul>`-based markup, as shown above, or
   <div class="tab-pane fade" id="nav-profile" role="tabpanel" aria-labelledby="nav-profile-tab">...</div>
   <div class="tab-pane fade" id="nav-contact" role="tabpanel" aria-labelledby="nav-contact-tab">...</div>
 </div>
-{% endhighlight %}
+```
 
 The tabs plugin also works with pills.
 
@@ -436,7 +420,7 @@ The tabs plugin also works with pills.
   </div>
 </div>
 
-{% highlight html %}
+```html
 <ul class="nav nav-pills mb-3" id="pills-tab" role="tablist">
   <li class="nav-item" role="presentation">
     <a class="nav-link active" id="pills-home-tab" data-toggle="pill" href="#pills-home" role="tab" aria-controls="pills-home" aria-selected="true">Home</a>
@@ -453,7 +437,7 @@ The tabs plugin also works with pills.
   <div class="tab-pane fade" id="pills-profile" role="tabpanel" aria-labelledby="pills-profile-tab">...</div>
   <div class="tab-pane fade" id="pills-contact" role="tabpanel" aria-labelledby="pills-contact-tab">...</div>
 </div>
-{% endhighlight %}
+```
 
 And with vertical pills.
 
@@ -486,7 +470,7 @@ And with vertical pills.
   </div>
 </div>
 
-{% highlight html %}
+```html
 <div class="row">
   <div class="col-3">
     <div class="nav flex-column nav-pills" id="v-pills-tab" role="tablist" aria-orientation="vertical">
@@ -505,13 +489,13 @@ And with vertical pills.
     </div>
   </div>
 </div>
-{% endhighlight %}
+```
 
 ### Using data attributes
 
 You can activate a tab or pill navigation without writing any JavaScript by simply specifying `data-toggle="tab"` or `data-toggle="pill"` on an element. Use these data attributes on `.nav-tabs` or `.nav-pills`.
 
-{% highlight html %}
+```html
 <!-- Nav tabs -->
 <ul class="nav nav-tabs" id="myTab" role="tablist">
   <li class="nav-item" role="presentation">
@@ -535,50 +519,52 @@ You can activate a tab or pill navigation without writing any JavaScript by simp
   <div class="tab-pane" id="messages" role="tabpanel" aria-labelledby="messages-tab">...</div>
   <div class="tab-pane" id="settings" role="tabpanel" aria-labelledby="settings-tab">...</div>
 </div>
-{% endhighlight %}
+```
 
 ### Via JavaScript
 
 Enable tabbable tabs via JavaScript (each tab needs to be activated individually):
 
-{% highlight js %}
+```js
 $('#myTab a').on('click', function (e) {
   e.preventDefault()
   $(this).tab('show')
 })
-{% endhighlight %}
+```
 
 You can activate individual tabs in several ways:
 
-{% highlight js %}
+```js
 $('#myTab a[href="#profile"]').tab('show') // Select tab by name
 $('#myTab li:first-child a').tab('show') // Select first tab
 $('#myTab li:last-child a').tab('show') // Select last tab
 $('#myTab li:nth-child(3) a').tab('show') // Select third tab
-{% endhighlight %}
+```
 
 ### Fade effect
 
 To make tabs fade in, add `.fade` to each `.tab-pane`. The first tab pane must also have `.show` to make the initial content visible.
 
-{% highlight html %}
+```html
 <div class="tab-content">
   <div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">...</div>
   <div class="tab-pane fade" id="profile" role="tabpanel" aria-labelledby="profile-tab">...</div>
   <div class="tab-pane fade" id="messages" role="tabpanel" aria-labelledby="messages-tab">...</div>
   <div class="tab-pane fade" id="settings" role="tabpanel" aria-labelledby="settings-tab">...</div>
 </div>
-{% endhighlight %}
+```
 
 ### Methods
 
-{% include callout-danger-async-methods.md %}
+{{< callout danger >}}
+{{< partial "callout-danger-async-methods.md" >}}
+{{< /callout >}}
 
 #### $().tab
 
 Activates a tab element and content container. Tab should have either a `data-target` or an `href` targeting a container node in the DOM.
 
-{% highlight html %}
+```html
 <ul class="nav nav-tabs" id="myTab" role="tablist">
   <li class="nav-item" role="presentation">
     <a class="nav-link active" id="home-tab" data-toggle="tab" href="#home" role="tab" aria-controls="home" aria-selected="true">Home</a>
@@ -606,15 +592,15 @@ Activates a tab element and content container. Tab should have either a `data-ta
     $('#myTab li:last-child a').tab('show')
   })
 </script>
-{% endhighlight %}
+```
 
 #### .tab('show')
 
 Selects the given tab and shows its associated pane. Any other tab that was previously selected becomes unselected and its associated pane is hidden. **Returns to the caller before the tab pane has actually been shown** (i.e. before the `shown.bs.tab` event occurs).
 
-{% highlight js %}
+```js
 $('#someTab').tab('show')
-{% endhighlight %}
+```
 
 #### .tab('dispose')
 
@@ -658,9 +644,9 @@ If no tab was already active, then the `hide.bs.tab` and `hidden.bs.tab` events
   </tbody>
 </table>
 
-{% highlight js %}
+```js
 $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
   e.target // newly activated tab
   e.relatedTarget // previous active tab
 })
-{% endhighlight %}
+```
similarity index 88%
rename from site/docs/4.5/components/pagination.md
rename to site/content/docs/4.5/components/pagination.md
index 184a86c234e61194cb5898e3922612a6aa26a022..23b474589db23c51438293d0b94ed58a0e28b903 100644 (file)
@@ -12,7 +12,7 @@ We use a large block of connected links for our pagination, making links hard to
 
 In addition, as pages likely have more than one such navigation section, it's advisable to provide a descriptive `aria-label` for the `<nav>` to reflect its purpose. For example, if the pagination component is used to navigate between a set of search results, an appropriate label could be `aria-label="Search results pages"`.
 
-{% capture example %}
+{{< example >}}
 <nav aria-label="Page navigation example">
   <ul class="pagination">
     <li class="page-item"><a class="page-link" href="#">Previous</a></li>
@@ -22,14 +22,13 @@ In addition, as pages likely have more than one such navigation section, it's ad
     <li class="page-item"><a class="page-link" href="#">Next</a></li>
   </ul>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Working with icons
 
 Looking to use an icon or symbol in place of text for some pagination links? Be sure to provide proper screen reader support with `aria` attributes.
 
-{% capture example %}
+{{< example >}}
 <nav aria-label="Page navigation example">
   <ul class="pagination">
     <li class="page-item">
@@ -47,8 +46,7 @@ Looking to use an icon or symbol in place of text for some pagination links? Be
     </li>
   </ul>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Disabled and active states
 
@@ -56,7 +54,7 @@ Pagination links are customizable for different circumstances. Use `.disabled` f
 
 While the `.disabled` class uses `pointer-events: none` to _try_ to disable the link functionality of `<a>`s, that CSS property is not yet standardized and doesn't account for keyboard navigation. As such, you should always add `tabindex="-1"` on disabled links and use custom JavaScript to fully disable their functionality.
 
-{% capture example %}
+{{< example >}}
 <nav aria-label="...">
   <ul class="pagination">
     <li class="page-item disabled">
@@ -72,12 +70,11 @@ While the `.disabled` class uses `pointer-events: none` to _try_ to disable the
     </li>
   </ul>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 You can optionally swap out active or disabled anchors for `<span>`, or omit the anchor in the case of the prev/next arrows, to remove click functionality and prevent keyboard focus while retaining intended styles.
 
-{% capture example %}
+{{< example >}}
 <nav aria-label="...">
   <ul class="pagination">
     <li class="page-item disabled">
@@ -93,14 +90,13 @@ You can optionally swap out active or disabled anchors for `<span>`, or omit the
     </li>
   </ul>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Sizing
 
 Fancy larger or smaller pagination? Add `.pagination-lg` or `.pagination-sm` for additional sizes.
 
-{% capture example %}
+{{< example >}}
 <nav aria-label="...">
   <ul class="pagination pagination-lg">
     <li class="page-item active" aria-current="page">
@@ -110,10 +106,9 @@ Fancy larger or smaller pagination? Add `.pagination-lg` or `.pagination-sm` for
     <li class="page-item"><a class="page-link" href="#">3</a></li>
   </ul>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <nav aria-label="...">
   <ul class="pagination pagination-sm">
     <li class="page-item active" aria-current="page">
@@ -123,14 +118,13 @@ Fancy larger or smaller pagination? Add `.pagination-lg` or `.pagination-sm` for
     <li class="page-item"><a class="page-link" href="#">3</a></li>
   </ul>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Alignment
 
-Change the alignment of pagination components with [flexbox utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/flex/).
+Change the alignment of pagination components with [flexbox utilities]({{< docsref "/utilities/flex" >}}).
 
-{% capture example %}
+{{< example >}}
 <nav aria-label="Page navigation example">
   <ul class="pagination justify-content-center">
     <li class="page-item disabled">
@@ -144,10 +138,9 @@ Change the alignment of pagination components with [flexbox utilities]({{ site.b
     </li>
   </ul>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <nav aria-label="Page navigation example">
   <ul class="pagination justify-content-end">
     <li class="page-item disabled">
@@ -161,5 +154,4 @@ Change the alignment of pagination components with [flexbox utilities]({{ site.b
     </li>
   </ul>
 </nav>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
similarity index 87%
rename from site/docs/4.5/components/popovers.md
rename to site/content/docs/4.5/components/popovers.md
index 5b54d1c824eedc70ecef50a82f92018be1410a40..90fcfb7ed7758855e9986c8d8336a580b55da07f 100644 (file)
@@ -10,9 +10,9 @@ toc: true
 
 Things to know when using the popover plugin:
 
-- Popovers rely on the 3rd party library [Popper.js](https://popper.js.org/) for positioning. You must include [popper.min.js]({{ site.cdn.popper }}) before bootstrap.js or use `bootstrap.bundle.min.js` / `bootstrap.bundle.js` which contains Popper.js in order for popovers to work!
-- Popovers require the [tooltip plugin]({{ site.baseurl }}/docs/{{ site.docs_version }}/components/tooltips/) as a dependency.
-- If you're building our JavaScript from source, it [requires `util.js`]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/javascript/#util).
+- Popovers rely on the 3rd party library [Popper.js](https://popper.js.org/) for positioning. You must include [popper.min.js]({{< param "cdn.popper" >}}) before bootstrap.js or use `bootstrap.bundle.min.js` / `bootstrap.bundle.js` which contains Popper.js in order for popovers to work!
+- Popovers require the [tooltip plugin]({{< docsref "/components/tooltips" >}}) as a dependency.
+- If you're building our JavaScript from source, it [requires `util.js`]({{< docsref "/getting-started/javascript#util" >}}).
 - Popovers are opt-in for performance reasons, so **you must initialize them yourself**.
 - Zero-length `title` and `content` values will never show a popover.
 - Specify `container: 'body'` to avoid rendering problems in more complex components (like our input groups, button groups, etc).
@@ -22,7 +22,9 @@ Things to know when using the popover plugin:
 - Popovers must be hidden before their corresponding elements have been removed from the DOM.
 - Popovers can be triggered thanks to an element inside a shadow DOM.
 
-{% include callout-info-prefersreducedmotion.md %}
+{{< callout info >}}
+{{< partial "callout-info-prefersreducedmotion.md" >}}
+{{< /callout >}}
 
 Keep reading to see how popovers work with some examples.
 
@@ -30,30 +32,29 @@ Keep reading to see how popovers work with some examples.
 
 One way to initialize all popovers on a page would be to select them by their `data-toggle` attribute:
 
-{% highlight js %}
+```js
 $(function () {
   $('[data-toggle="popover"]').popover()
 })
-{% endhighlight %}
+```
 
 ## Example: Using the `container` option
 
 When you have some styles on a parent element that interfere with a popover, you'll want to specify a custom `container` so that the popover's HTML appears within that element instead.
 
-{% highlight js %}
+```js
 $(function () {
   $('.example-popover').popover({
     container: 'body'
   })
 })
-{% endhighlight %}
+```
 
 ## Example
 
-{% capture example %}
+{{< example >}}
 <button type="button" class="btn btn-lg btn-danger" data-toggle="popover" title="Popover title" data-content="And here's some amazing content. It's very engaging. Right?">Click to toggle popover</button>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Four directions
 
@@ -76,7 +77,7 @@ Four options are available: top, right, bottom, and left aligned.
   </div>
 </div>
 
-{% highlight html %}
+```html
 <button type="button" class="btn btn-secondary" data-container="body" data-toggle="popover" data-placement="top" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus.">
   Popover on top
 </button>
@@ -85,37 +86,34 @@ Four options are available: top, right, bottom, and left aligned.
   Popover on right
 </button>
 
-<button type="button" class="btn btn-secondary" data-container="body" data-toggle="popover" data-placement="bottom" data-content="Vivamus
-sagittis lacus vel augue laoreet rutrum faucibus.">
+<button type="button" class="btn btn-secondary" data-container="body" data-toggle="popover" data-placement="bottom" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus.">
   Popover on bottom
 </button>
 
 <button type="button" class="btn btn-secondary" data-container="body" data-toggle="popover" data-placement="left" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus.">
   Popover on left
 </button>
-{% endhighlight %}
+```
 
 ### Dismiss on next click
 
 Use the `focus` trigger to dismiss popovers on the user's next click of a different element than the toggle element.
 
-{% capture callout %}
+{{< callout danger >}}
 #### Specific markup required for dismiss-on-next-click
 
 For proper cross-browser and cross-platform behavior, you must use the `<a>` tag, _not_ the `<button>` tag, and you also must include a [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) attribute.
-{% endcapture %}
-{% include callout.html content=callout type="danger" %}
+{{< /callout >}}
 
-{% capture example %}
+{{< example >}}
 <a tabindex="0" class="btn btn-lg btn-danger" role="button" data-toggle="popover" data-trigger="focus" title="Dismissible popover" data-content="And here's some amazing content. It's very engaging. Right?">Dismissible popover</a>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% highlight js %}
+```js
 $('.popover-dismiss').popover({
   trigger: 'focus'
 })
-{% endhighlight %}
+```
 
 ### Disabled elements
 
@@ -123,33 +121,33 @@ Elements with the `disabled` attribute aren't interactive, meaning users cannot
 
 For disabled popover triggers, you may also prefer `data-trigger="hover"` so that the popover appears as immediate visual feedback to your users as they may not expect to _click_ on a disabled element.
 
-{% capture example %}
+{{< example >}}
 <span class="d-inline-block" data-toggle="popover" data-content="Disabled popover">
   <button class="btn btn-primary" style="pointer-events: none;" type="button" disabled>Disabled button</button>
 </span>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Usage
 
 Enable popovers via JavaScript:
 
-{% highlight js %}$('#example').popover(options){% endhighlight %}
+```js
+$('#example').popover(options)
+```
 
-{% capture callout %}
+{{< callout warning >}}
 ##### GPU acceleration
 
 Popovers sometimes appear blurry on Windows 10 devices due to GPU acceleration and a modified system DPI. The workaround for this in v4 is to disable GPU acceleration as needed on your popovers.
 
 Suggested fix:
 
-{% highlight js %}
+```js
 Popper.Defaults.modifiers.computeStyle.gpuAcceleration = !(window.devicePixelRatio < 1.5 && /Win/.test(navigator.platform))
-{% endhighlight %}
-{% endcapture %}
-{% include callout.html content=callout type="warning" %}
+```
+{{< /callout >}}
 
-{% capture callout %}
+{{< callout warning >}}
 ### Making popovers work for keyboard and assistive technology users
 
 To allow keyboard users to activate your popovers, you should only add them to HTML elements that are traditionally keyboard-focusable and interactive (such as links or form controls). Although arbitrary HTML elements (such as `<span>`s) can be made focusable by adding the `tabindex="0"` attribute, this will add potentially annoying and confusing tab stops on non-interactive elements for keyboard users, and most assistive technologies currently do not announce the popover's content in this situation. Additionally, do not rely solely on `hover` as the trigger for your popovers, as this will make them impossible to trigger for keyboard users.
@@ -157,17 +155,15 @@ To allow keyboard users to activate your popovers, you should only add them to H
 While you can insert rich, structured HTML in popovers with the `html` option, we strongly recommend that you avoid adding an excessive amount of content. The way popovers currently work is that, once displayed, their content is tied to the trigger element with the `aria-describedby` attribute. As a result, the entirety of the popover's content will be announced to assistive technology users as one long, uninterrupted stream.
 
 Additionally, while it is possible to also include interactive controls (such as form elements or links) in your popover (by adding these elements to the `whiteList` or allowed attributes and tags), be aware that currently the popover does not manage keyboard focus order. When a keyboard user opens a popover, focus remains on the triggering element, and as the popover usually does not immediately follow the trigger in the document's structure, there is no guarantee that moving forward/pressing <kbd>TAB</kbd> will move a keyboard user into the popover itself. In short, simply adding interactive controls to a popover is likely to make these controls unreachable/unusable for keyboard users and users of assistive technologies, or at the very least make for an illogical overall focus order. In these cases, consider using a modal dialog instead.
-{% endcapture %}
-{% include callout.html content=callout type="warning" %}
+{{< /callout >}}
 
 ### Options
 
 Options can be passed via data attributes or JavaScript. For data attributes, append the option name to `data-`, as in `data-animation=""`.
 
-{% capture callout %}
+{{< callout warning >}}
 Note that for security reasons the `sanitize`, `sanitizeFn` and `whiteList` options cannot be supplied using data attributes.
-{% endcapture %}
-{% include callout.html content=callout type="warning" %}
+{{< /callout >}}
 
 <table class="table table-bordered table-striped">
   <thead>
@@ -231,7 +227,7 @@ Note that for security reasons the `sanitize`, `sanitizeFn` and `whiteList` opti
       <td>selector</td>
       <td>string | false</td>
       <td>false</td>
-      <td>If a selector is provided, popover objects will be delegated to the specified targets. In practice, this is used to enable dynamic HTML content to have popovers added. See <a href="{{ site.repo }}/issues/4215">this</a> and <a href="https://codepen.io/Johann-S/pen/djJYPb">an informative example</a>.</td>
+      <td>If a selector is provided, popover objects will be delegated to the specified targets. In practice, this is used to enable dynamic HTML content to have popovers added. See <a href="{{< param repo >}}/issues/4215">this</a> and <a href="https://codepen.io/Johann-S/pen/djJYPb">an informative example</a>.</td>
     </tr>
     <tr>
       <td>template</td>
@@ -288,7 +284,7 @@ Note that for security reasons the `sanitize`, `sanitizeFn` and `whiteList` opti
     <tr>
       <td>whiteList</td>
       <td>object</td>
-      <td><a href="{{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/javascript/#sanitizer">Default value</a></td>
+      <td><a href="{{< docsref "/getting-started/javascript#sanitizer" >}}">Default value</a></td>
       <td>Object which contains allowed attributes and tags</td>
     </tr>
     <tr>
@@ -306,16 +302,17 @@ Note that for security reasons the `sanitize`, `sanitizeFn` and `whiteList` opti
   </tbody>
 </table>
 
-{% capture callout %}
+{{< callout info >}}
 #### Data attributes for individual popovers
 
 Options for individual popovers can alternatively be specified through the use of data attributes, as explained above.
-{% endcapture %}
-{% include callout.html content=callout type="info" %}
+{{< /callout >}}
 
 ### Methods
 
-{% include callout-danger-async-methods.md %}
+{{< callout danger >}}
+{{< partial "callout-danger-async-methods.md" >}}
+{{< /callout >}}
 
 #### `$().popover(options)`
 
@@ -325,49 +322,65 @@ Initializes popovers for an element collection.
 
 Reveals an element's popover. **Returns to the caller before the popover has actually been shown** (i.e. before the `shown.bs.popover` event occurs). This is considered a "manual" triggering of the popover. Popovers whose title and content are both zero-length are never displayed.
 
-{% highlight js %}$('#element').popover('show'){% endhighlight %}
+```js
+$('#element').popover('show')
+```
 
 #### `.popover('hide')`
 
 Hides an element's popover. **Returns to the caller before the popover has actually been hidden** (i.e. before the `hidden.bs.popover` event occurs). This is considered a "manual" triggering of the popover.
 
-{% highlight js %}$('#element').popover('hide'){% endhighlight %}
+```js
+$('#element').popover('hide')
+```
 
 #### `.popover('toggle')`
 
 Toggles an element's popover. **Returns to the caller before the popover has actually been shown or hidden** (i.e. before the `shown.bs.popover` or `hidden.bs.popover` event occurs). This is considered a "manual" triggering of the popover.
 
-{% highlight js %}$('#element').popover('toggle'){% endhighlight %}
+```js
+$('#element').popover('toggle')
+```
 
 #### `.popover('dispose')`
 
 Hides and destroys an element's popover. Popovers that use delegation (which are created using [the `selector` option](#options)) cannot be individually destroyed on descendant trigger elements.
 
-{% highlight js %}$('#element').popover('dispose'){% endhighlight %}
+```js
+$('#element').popover('dispose')
+```
 
 #### `.popover('enable')`
 
 Gives an element's popover the ability to be shown. **Popovers are enabled by default.**
 
-{% highlight js %}$('#element').popover('enable'){% endhighlight %}
+```js
+$('#element').popover('enable')
+```
 
 #### `.popover('disable')`
 
 Removes the ability for an element's popover to be shown. The popover will only be able to be shown if it is re-enabled.
 
-{% highlight js %}$('#element').popover('disable'){% endhighlight %}
+```js
+$('#element').popover('disable')
+```
 
 #### `.popover('toggleEnabled')`
 
 Toggles the ability for an element's popover to be shown or hidden.
 
-{% highlight js %}$('#element').popover('toggleEnabled'){% endhighlight %}
+```js
+$('#element').popover('toggleEnabled')
+```
 
 #### `.popover('update')`
 
 Updates the position of an element's popover.
 
-{% highlight js %}$('#element').popover('update'){% endhighlight %}
+```js
+$('#element').popover('update')
+```
 
 ### Events
 
@@ -402,8 +415,8 @@ Updates the position of an element's popover.
   </tbody>
 </table>
 
-{% highlight js %}
+```js
 $('#myPopover').on('hidden.bs.popover', function () {
   // do something...
 })
-{% endhighlight %}
+```
similarity index 88%
rename from site/docs/4.5/components/progress.md
rename to site/content/docs/4.5/components/progress.md
index 7c42aec3ed91e71e2bb075e229640e1f0633cc2e..ee830626318ac57adf938ab8a22cabd27421df78 100644 (file)
@@ -17,7 +17,7 @@ Progress components are built with two HTML elements, some CSS to set the width,
 
 Put that all together, and you have the following examples.
 
-{% capture example %}
+{{< example >}}
 <div class="progress">
   <div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div>
 </div>
@@ -33,48 +33,44 @@ Put that all together, and you have the following examples.
 <div class="progress">
   <div class="progress-bar" role="progressbar" style="width: 100%" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100"></div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-Bootstrap provides a handful of [utilities for setting width]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/sizing/). Depending on your needs, these may help with quickly configuring progress.
+Bootstrap provides a handful of [utilities for setting width]({{< docsref "/utilities/sizing" >}}). Depending on your needs, these may help with quickly configuring progress.
 
-{% capture example %}
+{{< example >}}
 <div class="progress">
   <div class="progress-bar w-75" role="progressbar" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100"></div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Labels
 
 Add labels to your progress bars by placing text within the `.progress-bar`.
 
-{% capture example %}
+{{< example >}}
 <div class="progress">
   <div class="progress-bar" role="progressbar" style="width: 25%;" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100">25%</div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Height
 
 We only set a `height` value on the `.progress`, so if you change that value the inner `.progress-bar` will automatically resize accordingly.
 
-{% capture example %}
+{{< example >}}
 <div class="progress" style="height: 1px;">
   <div class="progress-bar" role="progressbar" style="width: 25%;" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100"></div>
 </div>
 <div class="progress" style="height: 20px;">
   <div class="progress-bar" role="progressbar" style="width: 25%;" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100"></div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Backgrounds
 
 Use background utility classes to change the appearance of individual progress bars.
 
-{% capture example %}
+{{< example >}}
 <div class="progress">
   <div class="progress-bar bg-success" role="progressbar" style="width: 25%" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100"></div>
 </div>
@@ -87,27 +83,25 @@ Use background utility classes to change the appearance of individual progress b
 <div class="progress">
   <div class="progress-bar bg-danger" role="progressbar" style="width: 100%" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100"></div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Multiple bars
 
 Include multiple progress bars in a progress component if you need.
 
-{% capture example %}
+{{< example >}}
 <div class="progress">
   <div class="progress-bar" role="progressbar" style="width: 15%" aria-valuenow="15" aria-valuemin="0" aria-valuemax="100"></div>
   <div class="progress-bar bg-success" role="progressbar" style="width: 30%" aria-valuenow="30" aria-valuemin="0" aria-valuemax="100"></div>
   <div class="progress-bar bg-info" role="progressbar" style="width: 20%" aria-valuenow="20" aria-valuemin="0" aria-valuemax="100"></div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Striped
 
 Add `.progress-bar-striped` to any `.progress-bar` to apply a stripe via CSS gradient over the progress bar's background color.
 
-{% capture example %}
+{{< example >}}
 <div class="progress">
   <div class="progress-bar progress-bar-striped" role="progressbar" style="width: 10%" aria-valuenow="10" aria-valuemin="0" aria-valuemax="100"></div>
 </div>
@@ -123,8 +117,7 @@ Add `.progress-bar-striped` to any `.progress-bar` to apply a stripe via CSS gra
 <div class="progress">
   <div class="progress-bar progress-bar-striped bg-danger" role="progressbar" style="width: 100%" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100"></div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Animated stripes
 
@@ -139,8 +132,8 @@ The striped gradient can also be animated. Add `.progress-bar-animated` to `.pro
   </button>
 </div>
 
-{% highlight html %}
+```html
 <div class="progress">
   <div class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100" style="width: 75%"></div>
 </div>
-{% endhighlight %}
+```
similarity index 95%
rename from site/docs/4.5/components/scrollspy.md
rename to site/content/docs/4.5/components/scrollspy.md
index eb5b4ba6ff42ce80e4f0328e6a05d0f8eb58f8b9..6be0855f1ec388da658d13db59867106adc0328f 100644 (file)
@@ -10,8 +10,8 @@ toc: true
 
 Scrollspy has a few requirements to function properly:
 
-- If you're building our JavaScript from source, it [requires `util.js`]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/javascript/#util).
-- It must be used on a Bootstrap [nav component]({{ site.baseurl }}/docs/{{ site.docs_version }}/components/navs/) or [list group]({{ site.baseurl }}/docs/{{ site.docs_version }}/components/list-group/).
+- If you're building our JavaScript from source, it [requires `util.js`]({{< docsref "/getting-started/javascript#util" >}}).
+- It must be used on a Bootstrap [nav component]({{< docsref "/components/navs" >}}) or [list group]({{< docsref "/components/list-group" >}}).
 - Scrollspy requires `position: relative;` on the element you're spying on, usually the `<body>`.
 - When spying on elements other than the `<body>`, be sure to have a `height` set and `overflow-y: scroll;` applied.
 - Anchors (`<a>`) are required and must point to an element with that `id`.
@@ -59,7 +59,7 @@ Scroll the area below the navbar and watch the active class change. The dropdown
   </div>
 </div>
 
-{% highlight html %}
+```html
 <nav id="navbar-example2" class="navbar navbar-light bg-light">
   <a class="navbar-brand" href="#">Navbar</a>
   <ul class="nav nav-pills">
@@ -92,7 +92,7 @@ Scroll the area below the navbar and watch the active class change. The dropdown
   <h4 id="three">three</h4>
   <p>...</p>
 </div>
-{% endhighlight %}
+```
 
 ## Example with nested nav
 
@@ -139,7 +139,7 @@ Scrollspy also works with nested `.nav`s. If a nested `.nav` is `.active`, its p
   </div>
 </div>
 
-{% highlight html %}
+```html
 <nav id="navbar-example3" class="navbar navbar-light bg-light">
   <a class="navbar-brand" href="#">Navbar</a>
   <nav class="nav nav-pills flex-column">
@@ -173,7 +173,7 @@ Scrollspy also works with nested `.nav`s. If a nested `.nav` is `.active`, its p
   <h5 id="item-3-2">Item 3-2</h5>
   <p>...</p>
 </div>
-{% endhighlight %}
+```
 
 ## Example with list-group
 
@@ -204,7 +204,7 @@ Scrollspy also works with `.list-group`s. Scroll the area next to the list group
   </div>
 </div>
 
-{% highlight html %}
+```html
 <div id="list-example" class="list-group">
   <a class="list-group-item list-group-item-action" href="#list-item-1">Item 1</a>
   <a class="list-group-item list-group-item-action" href="#list-item-2">Item 2</a>
@@ -221,7 +221,7 @@ Scrollspy also works with `.list-group`s. Scroll the area next to the list group
   <h4 id="list-item-4">Item 4</h4>
   <p>...</p>
 </div>
-{% endhighlight %}
+```
 
 
 ## Usage
@@ -230,13 +230,13 @@ Scrollspy also works with `.list-group`s. Scroll the area next to the list group
 
 To easily add scrollspy behavior to your topbar navigation, add `data-spy="scroll"` to the element you want to spy on (most typically this would be the `<body>`). Then add the `data-target` attribute with the ID or class of the parent element of any Bootstrap `.nav` component.
 
-{% highlight css %}
+```css
 body {
   position: relative;
 }
-{% endhighlight %}
+```
 
-{% highlight html %}
+```html
 <body data-spy="scroll" data-target="#navbar-example">
   ...
   <div id="navbar-example">
@@ -246,29 +246,27 @@ body {
   </div>
   ...
 </body>
-{% endhighlight %}
+```
 
 ### Via JavaScript
 
 After adding `position: relative;` in your CSS, call the scrollspy via JavaScript:
 
-{% highlight js %}
+```js
 $('body').scrollspy({ target: '#navbar-example' })
-{% endhighlight %}
+```
 
-{% capture callout %}
+{{< callout danger >}}
 #### Resolvable ID targets required
 
 Navbar links must have resolvable id targets. For example, a `<a href="#home">home</a>` must correspond to something in the DOM like `<div id="home"></div>`.
-{% endcapture %}
-{% include callout.html content=callout type="danger" %}
+{{< /callout >}}
 
-{% capture callout %}
+{{< callout info >}}
 #### Non-`:visible` target elements ignored
 
 Target elements that are not [`:visible` according to jQuery](https://api.jquery.com/visible-selector/) will be ignored and their corresponding nav items will never be highlighted.
-{% endcapture %}
-{% include callout.html content=callout type="info" %}
+{{< /callout >}}
 
 ### Methods
 
@@ -276,11 +274,11 @@ Target elements that are not [`:visible` according to jQuery](https://api.jquery
 
 When using scrollspy in conjunction with adding or removing of elements from the DOM, you'll need to call the refresh method like so:
 
-{% highlight js %}
+```js
 $('[data-spy="scroll"]').each(function () {
   var $spy = $(this).scrollspy('refresh')
 })
-{% endhighlight %}
+```
 
 #### `.scrollspy('dispose')`
 
@@ -338,8 +336,8 @@ Options can be passed via data attributes or JavaScript. For data attributes, ap
   </tbody>
 </table>
 
-{% highlight js %}
+```js
 $('[data-spy="scroll"]').on('activate.bs.scrollspy', function () {
   // do something...
 })
-{% endhighlight %}
+```
similarity index 69%
rename from site/docs/4.5/components/spinners.md
rename to site/content/docs/4.5/components/spinners.md
index fe1a91ce7cbb832328d8a15fa414b6a2a28084d2..87b0611e91070a3902b64ec3f9b8ca9e8d04e109 100644 (file)
@@ -12,56 +12,59 @@ Bootstrap "spinners" can be used to show the loading state in your projects. The
 
 For accessibility purposes, each loader here includes `role="status"` and a nested `<span class="sr-only">Loading...</span>`.
 
-{% include callout-info-prefersreducedmotion.md %}
+{{< callout info >}}
+{{< partial "callout-info-prefersreducedmotion.md" >}}
+{{< /callout >}}
 
 ## Border spinner
 
 Use the border spinners for a lightweight loading indicator.
 
-{% capture example %}
+{{< example >}}
 <div class="spinner-border" role="status">
   <span class="sr-only">Loading...</span>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Colors
 
 The border spinner uses `currentColor` for its `border-color`, meaning you can customize the color with [text color utilities][color]. You can use any of our text color utilities on the standard spinner.
 
-{% capture example %}
-{% for color in site.data.theme-colors %}
-<div class="spinner-border text-{{ color.name }}" role="status">
+{{< example >}}
+{{< spinner.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<div class="spinner-border text-{{ .name }}" role="status">
   <span class="sr-only">Loading...</span>
-</div>{% endfor %}
-{% endcapture %}
-{% include example.html content=example %}
+</div>
+{{- end -}}
+{{< /spinner.inline >}}
+{{< /example >}}
 
-{% capture callout %}
+{{< callout info >}}
 **Why not use `border-color` utilities?** Each border spinner specifies a `transparent` border for at least one side, so `.border-{color}` utilities would override that.
-{% endcapture %}
-{% include callout.html content=callout type="info" %}
+{{< /callout >}}
 
 ## Growing spinner
 
 If you don't fancy a border spinner, switch to the grow spinner. While it doesn't technically spin, it does repeatedly grow!
 
-{% capture example %}
+{{< example >}}
 <div class="spinner-grow" role="status">
   <span class="sr-only">Loading...</span>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Once again, this spinner is built with `currentColor`, so you can easily change its appearance with [text color utilities][color]. Here it is in blue, along with the supported variants.
 
-{% capture example %}
-{% for color in site.data.theme-colors %}
-<div class="spinner-grow text-{{ color.name }}" role="status">
+{{< example >}}
+{{< spinner.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<div class="spinner-grow text-{{ .name }}" role="status">
   <span class="sr-only">Loading...</span>
-</div>{% endfor %}
-{% endcapture %}
-{% include example.html content=example %}
+</div>
+{{- end -}}
+{{< /spinner.inline >}}
+{{< /example >}}
 
 ## Alignment
 
@@ -71,12 +74,11 @@ Spinners in Bootstrap are built with `rem`s, `currentColor`, and `display: inlin
 
 Use [margin utilities][margin] like `.m-5` for easy spacing.
 
-{% capture example %}
+{{< example >}}
 <div class="spinner-border m-5" role="status">
   <span class="sr-only">Loading...</span>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Placement
 
@@ -84,76 +86,70 @@ Use [flexbox utilities][flex], [float utilities][float], or [text alignment][tex
 
 #### Flex
 
-{% capture example %}
+{{< example >}}
 <div class="d-flex justify-content-center">
   <div class="spinner-border" role="status">
     <span class="sr-only">Loading...</span>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <div class="d-flex align-items-center">
   <strong>Loading...</strong>
   <div class="spinner-border ml-auto" role="status" aria-hidden="true"></div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 #### Floats
 
-{% capture example %}
+{{< example >}}
 <div class="clearfix">
   <div class="spinner-border float-right" role="status">
     <span class="sr-only">Loading...</span>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 #### Text align
 
-{% capture example %}
+{{< example >}}
 <div class="text-center">
   <div class="spinner-border" role="status">
     <span class="sr-only">Loading...</span>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Size
 
 Add `.spinner-border-sm` and `.spinner-grow-sm` to make a smaller spinner that can quickly be used within other components.
 
-{% capture example %}
+{{< example >}}
 <div class="spinner-border spinner-border-sm" role="status">
   <span class="sr-only">Loading...</span>
 </div>
 <div class="spinner-grow spinner-grow-sm" role="status">
   <span class="sr-only">Loading...</span>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Or, use custom CSS or inline styles to change the dimensions as needed.
 
-{% capture example %}
+{{< example >}}
 <div class="spinner-border" style="width: 3rem; height: 3rem;" role="status">
   <span class="sr-only">Loading...</span>
 </div>
 <div class="spinner-grow" style="width: 3rem; height: 3rem;" role="status">
   <span class="sr-only">Loading...</span>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Buttons
 
 Use spinners within buttons to indicate an action is currently processing or taking place. You may also swap the text out of the spinner element and utilize button text as needed.
 
-{% capture example %}
+{{< example >}}
 <button class="btn btn-primary" type="button" disabled>
   <span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>
   <span class="sr-only">Loading...</span>
@@ -162,10 +158,9 @@ Use spinners within buttons to indicate an action is currently processing or tak
   <span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>
   Loading...
 </button>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <button class="btn btn-primary" type="button" disabled>
   <span class="spinner-grow spinner-grow-sm" role="status" aria-hidden="true"></span>
   <span class="sr-only">Loading...</span>
@@ -174,14 +169,13 @@ Use spinners within buttons to indicate an action is currently processing or tak
   <span class="spinner-grow spinner-grow-sm" role="status" aria-hidden="true"></span>
   Loading...
 </button>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 
-[color]:   {{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/colors/
-[display]: {{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/display/
-[flex]:    {{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/flex/
-[float]:   {{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/float/
-[margin]:  {{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/spacing/
-[sizing]:  {{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/sizing/
-[text]:    {{ site.baseurl }}/docs/{{ site.docs_version }}/content/typography/
+[color]:   {{< docsref "/utilities/colors" >}}
+[display]: {{< docsref "/utilities/display" >}}
+[flex]:    {{< docsref "/utilities/flex" >}}
+[float]:   {{< docsref "/utilities/float" >}}
+[margin]:  {{< docsref "/utilities/spacing" >}}
+[sizing]:  {{< docsref "/utilities/sizing" >}}
+[text]:    {{< docsref "/content/typography" >}}
similarity index 81%
rename from site/docs/4.5/components/toasts.md
rename to site/content/docs/4.5/components/toasts.md
index 7ef36c7f7665b9208b01929dccb5633b46517149..fd8ea06e87edbe7bf1a7dc65257403387f02574d 100644 (file)
@@ -12,12 +12,14 @@ Toasts are lightweight notifications designed to mimic the push notifications th
 
 Things to know when using the toast plugin:
 
-- If you're building our JavaScript from source, it [requires `util.js`]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/javascript/#util).
+- If you're building our JavaScript from source, it [requires `util.js`]({{< docsref "/getting-started/javascript#util" >}}).
 - Toasts are opt-in for performance reasons, so **you must initialize them yourself**.
 - **Please note that you are responsible for positioning toasts.**
 - Toasts will automatically hide if you do not specify `autohide: false`.
 
-{% include callout-info-prefersreducedmotion.md %}
+{{< callout info >}}
+{{< partial "callout-info-prefersreducedmotion.md" >}}
+{{< /callout >}}
 
 ## Examples
 
@@ -27,10 +29,10 @@ To encourage extensible and predictable toasts, we recommend a header and body.
 
 Toasts are as flexible as you need and have very little required markup. At a minimum, we require a single element to contain your "toasted" content and strongly encourage a dismiss button.
 
-{% capture example %}
+{{< example class="bg-light" >}}
 <div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
   <div class="toast-header">
-    {% include icons/placeholder.svg width="20" height="20" background="#007aff" class="rounded mr-2" text=" " title=" " %}
+    {{< placeholder width="20" height="20" background="#007aff" class="rounded mr-2" text=" " title=" " >}}
     <strong class="mr-auto">Bootstrap</strong>
     <small>11 mins ago</small>
     <button type="button" class="ml-2 mb-1 close" data-dismiss="toast" aria-label="Close">
@@ -41,17 +43,16 @@ Toasts are as flexible as you need and have very little required markup. At a mi
     Hello, world! This is a toast message.
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example class="bg-light" %}
+{{< /example >}}
 
 ### Translucent
 
 Toasts are slightly translucent, too, so they blend over whatever they might appear over. For browsers that support the `backdrop-filter` CSS property, we'll also attempt to blur the elements under a toast.
 
-{% capture example %}
+{{< example class="bg-dark" >}}
 <div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
   <div class="toast-header">
-    {% include icons/placeholder.svg width="20" height="20" background="#007aff" class="rounded mr-2" text=" " title=" " %}
+    {{< placeholder width="20" height="20" background="#007aff" class="rounded mr-2" text=" " title=" " >}}
     <strong class="mr-auto">Bootstrap</strong>
     <small class="text-muted">11 mins ago</small>
     <button type="button" class="ml-2 mb-1 close" data-dismiss="toast" aria-label="Close">
@@ -62,17 +63,16 @@ Toasts are slightly translucent, too, so they blend over whatever they might app
     Hello, world! This is a toast message.
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example class="bg-dark" %}
+{{< /example >}}
 
 ### Stacking
 
 When you have multiple toasts, we default to vertically stacking them in a readable manner.
 
-{% capture example %}
+{{< example class="bg-light" >}}
 <div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
   <div class="toast-header">
-    {% include icons/placeholder.svg width="20" height="20" background="#007aff" class="rounded mr-2" text=" " title=" " %}
+    {{< placeholder width="20" height="20" background="#007aff" class="rounded mr-2" text=" " title=" " >}}
     <strong class="mr-auto">Bootstrap</strong>
     <small class="text-muted">just now</small>
     <button type="button" class="ml-2 mb-1 close" data-dismiss="toast" aria-label="Close">
@@ -86,7 +86,7 @@ When you have multiple toasts, we default to vertically stacking them in a reada
 
 <div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
   <div class="toast-header">
-    {% include icons/placeholder.svg width="20" height="20" background="#007aff" class="rounded mr-2" text=" " title=" " %}
+    {{< placeholder width="20" height="20" background="#007aff" class="rounded mr-2" text=" " title=" " >}}
     <strong class="mr-auto">Bootstrap</strong>
     <small class="text-muted">2 seconds ago</small>
     <button type="button" class="ml-2 mb-1 close" data-dismiss="toast" aria-label="Close">
@@ -97,18 +97,17 @@ When you have multiple toasts, we default to vertically stacking them in a reada
     Heads up, toasts will stack automatically
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example class="bg-light" %}
+{{< /example >}}
 
 ## Placement
 
 Place toasts with custom CSS as you need them. The top right is often used for notifications, as is the top middle. If you're only ever going to show one toast at a time, put the positioning styles right on the `.toast`.
 
-{% capture example %}
+{{< example class="bg-dark" >}}
 <div aria-live="polite" aria-atomic="true" style="position: relative; min-height: 200px;">
   <div class="toast" style="position: absolute; top: 0; right: 0;">
     <div class="toast-header">
-      {% include icons/placeholder.svg width="20" height="20" background="#007aff" class="rounded mr-2" text=" " title=" " %}
+      {{< placeholder width="20" height="20" background="#007aff" class="rounded mr-2" text=" " title=" " >}}
       <strong class="mr-auto">Bootstrap</strong>
       <small>11 mins ago</small>
       <button type="button" class="ml-2 mb-1 close" data-dismiss="toast" aria-label="Close">
@@ -120,12 +119,11 @@ Place toasts with custom CSS as you need them. The top right is often used for n
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example class="bg-dark" %}
+{{< /example >}}
 
 For systems that generate more notifications, consider using a wrapping element so they can easily stack.
 
-{% capture example %}
+{{< example class="bg-dark" >}}
 <div aria-live="polite" aria-atomic="true" style="position: relative; min-height: 200px;">
   <!-- Position it -->
   <div style="position: absolute; top: 0; right: 0;">
@@ -133,7 +131,7 @@ For systems that generate more notifications, consider using a wrapping element
     <!-- Then put toasts within -->
     <div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
       <div class="toast-header">
-        {% include icons/placeholder.svg width="20" height="20" background="#007aff" class="rounded mr-2" text=" " title=" " %}
+        {{< placeholder width="20" height="20" background="#007aff" class="rounded mr-2" text=" " title=" " >}}
         <strong class="mr-auto">Bootstrap</strong>
         <small class="text-muted">just now</small>
         <button type="button" class="ml-2 mb-1 close" data-dismiss="toast" aria-label="Close">
@@ -147,7 +145,7 @@ For systems that generate more notifications, consider using a wrapping element
 
     <div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
       <div class="toast-header">
-        {% include icons/placeholder.svg width="20" height="20" background="#007aff" class="rounded mr-2" text=" " title=" " %}
+        {{< placeholder width="20" height="20" background="#007aff" class="rounded mr-2" text=" " title=" " >}}
         <strong class="mr-auto">Bootstrap</strong>
         <small class="text-muted">2 seconds ago</small>
         <button type="button" class="ml-2 mb-1 close" data-dismiss="toast" aria-label="Close">
@@ -160,19 +158,18 @@ For systems that generate more notifications, consider using a wrapping element
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example class="bg-dark" %}
+{{< /example >}}
 
 You can also get fancy with flexbox utilities to align toasts horizontally and/or vertically.
 
-{% capture example %}
+{{< example class="bg-dark" >}}
 <!-- Flexbox container for aligning the toasts -->
 <div aria-live="polite" aria-atomic="true" class="d-flex justify-content-center align-items-center" style="height: 200px;">
 
   <!-- Then put toasts within -->
   <div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
     <div class="toast-header">
-      {% include icons/placeholder.svg width="20" height="20" background="#007aff" class="rounded mr-2" text=" " title=" " %}
+      {{< placeholder width="20" height="20" background="#007aff" class="rounded mr-2" text=" " title=" " >}}
       <strong class="mr-auto">Bootstrap</strong>
       <small>11 mins ago</small>
       <button type="button" class="ml-2 mb-1 close" data-dismiss="toast" aria-label="Close">
@@ -184,12 +181,11 @@ You can also get fancy with flexbox utilities to align toasts horizontally and/o
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example class="bg-dark" %}
+{{< /example >}}
 
 ## Accessibility
 
-Toasts are intended to be small interruptions to your visitors or users, so to help those with screen readers and similar assistive technologies, you should wrap your toasts in an [`aria-live` region](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Live_Regions). Changes to live regions (such as injecting/updating a toast component) are automatically announced by screen readers without needing to move the user's focus or otherwise interrupt the user. Additionally, include `aria-atomic="true"` to ensure that the entire toast is always announced as a single (atomic) unit, rather than announcing what was changed (which could lead to problems if you only update part of the toast's content, or if displaying the same toast content at a later point in time). If the information needed is important for the process, e.g. for a list of errors in a form, then use the [alert component]({{ site.baseurl }}/docs/{{ site.docs_version }}/components/alerts/) instead of toast.
+Toasts are intended to be small interruptions to your visitors or users, so to help those with screen readers and similar assistive technologies, you should wrap your toasts in an [`aria-live` region](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Live_Regions). Changes to live regions (such as injecting/updating a toast component) are automatically announced by screen readers without needing to move the user's focus or otherwise interrupt the user. Additionally, include `aria-atomic="true"` to ensure that the entire toast is always announced as a single (atomic) unit, rather than announcing what was changed (which could lead to problems if you only update part of the toast's content, or if displaying the same toast content at a later point in time). If the information needed is important for the process, e.g. for a list of errors in a form, then use the [alert component]({{< docsref "/components/alerts" >}}) instead of toast.
 
 Note that the live region needs to be present in the markup *before* the toast is generated or updated. If you dynamically generate both at the same time and inject them into the page, they will generally not be announced by assistive technologies.
 
@@ -197,18 +193,18 @@ You also need to adapt the `role` and `aria-live` level depending on the content
 
 As the content you're displaying changes, be sure to update the [`delay` timeout](#options) to ensure people have enough time to read the toast.
 
-{% highlight html %}
+```html
 <div class="toast" role="alert" aria-live="polite" aria-atomic="true" data-delay="10000">
   <div role="alert" aria-live="assertive" aria-atomic="true">...</div>
 </div>
-{% endhighlight %}
+```
 
 When using `autohide: false`, you must add a close button to allow users to dismiss the toast.
 
-{% capture example %}
+{{< example class="bg-light" >}}
 <div role="alert" aria-live="assertive" aria-atomic="true" class="toast" data-autohide="false">
   <div class="toast-header">
-    {% include icons/placeholder.svg width="20" height="20" background="#007aff" class="rounded mr-2" text=" " title=" " %}
+    {{< placeholder width="20" height="20" background="#007aff" class="rounded mr-2" text=" " title=" " >}}
     <strong class="mr-auto">Bootstrap</strong>
     <small>11 mins ago</small>
     <button type="button" class="ml-2 mb-1 close" data-dismiss="toast" aria-label="Close">
@@ -219,8 +215,7 @@ When using `autohide: false`, you must add a close button to allow users to dism
     Hello, world! This is a toast message.
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example class="bg-light" %}
+{{< /example >}}
 
 ## JavaScript behavior
 
@@ -228,9 +223,9 @@ When using `autohide: false`, you must add a close button to allow users to dism
 
 Initialize toasts via JavaScript:
 
-{% highlight js %}
+```js
 $('.toast').toast(option)
-{% endhighlight %}
+```
 
 ### Options
 
@@ -271,7 +266,9 @@ Options can be passed via data attributes or JavaScript. For data attributes, ap
 
 ### Methods
 
-{% include callout-danger-async-methods.md %}
+{{< callout danger >}}
+{{< partial "callout-danger-async-methods.md" >}}
+{{< /callout >}}
 
 #### `$().toast(options)`
 
@@ -282,19 +279,25 @@ Attaches a toast handler to an element collection.
 Reveals an element's toast. **Returns to the caller before the toast has actually been shown** (i.e. before the `shown.bs.toast` event occurs).
 You have to manually call this method, instead your toast won't show.
 
-{% highlight js %}$('#element').toast('show'){% endhighlight %}
+```js
+$('#element').toast('show')
+```
 
 #### `.toast('hide')`
 
 Hides an element's toast. **Returns to the caller before the toast has actually been hidden** (i.e. before the `hidden.bs.toast` event occurs). You have to manually call this method if you made `autohide` to `false`.
 
-{% highlight js %}$('#element').toast('hide'){% endhighlight %}
+```js
+$('#element').toast('hide')
+```
 
 #### `.toast('dispose')`
 
 Hides an element's toast. Your toast will remain on the DOM but won't show anymore.
 
-{% highlight js %}$('#element').toast('dispose'){% endhighlight %}
+```js
+$('#element').toast('dispose')
+```
 
 ### Events
 
@@ -325,8 +328,8 @@ Hides an element's toast. Your toast will remain on the DOM but won't show anymo
   </tbody>
 </table>
 
-{% highlight js %}
+```js
 $('#myToast').on('hidden.bs.toast', function () {
   // do something...
 })
-{% endhighlight %}
+```
similarity index 89%
rename from site/docs/4.5/components/tooltips.md
rename to site/content/docs/4.5/components/tooltips.md
index 2d23c49873996ecb2ff30f8072c4ce6733d73650..38f1ca3d717323fc2af86823979330e80f084ac9 100644 (file)
@@ -10,8 +10,8 @@ toc: true
 
 Things to know when using the tooltip plugin:
 
-- Tooltips rely on the 3rd party library [Popper.js](https://popper.js.org/) for positioning. You must include [popper.min.js]({{ site.cdn.popper }}) before bootstrap.js or use `bootstrap.bundle.min.js` / `bootstrap.bundle.js` which contains Popper.js in order for tooltips to work!
-- If you're building our JavaScript from source, it [requires `util.js`]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/javascript/#util).
+- Tooltips rely on the 3rd party library [Popper.js](https://popper.js.org/) for positioning. You must include [popper.min.js]({{< param "cdn.popper" >}}) before bootstrap.js or use `bootstrap.bundle.min.js` / `bootstrap.bundle.js` which contains Popper.js in order for tooltips to work!
+- If you're building our JavaScript from source, it [requires `util.js`]({{< docsref "/getting-started/javascript#util" >}}).
 - Tooltips are opt-in for performance reasons, so **you must initialize them yourself**.
 - Tooltips with zero-length titles are never displayed.
 - Specify `container: 'body'` to avoid rendering problems in more complex components (like our input groups, button groups, etc).
@@ -21,7 +21,9 @@ Things to know when using the tooltip plugin:
 - Tooltips must be hidden before their corresponding elements have been removed from the DOM.
 - Tooltips can be triggered thanks to an element inside a shadow DOM.
 
-{% include callout-info-prefersreducedmotion.md %}
+{{< callout info >}}
+{{< partial "callout-info-prefersreducedmotion.md" >}}
+{{< /callout >}}
 
 Got all that? Great, let's see how they work with some examples.
 
@@ -29,11 +31,11 @@ Got all that? Great, let's see how they work with some examples.
 
 One way to initialize all tooltips on a page would be to select them by their `data-toggle` attribute:
 
-{% highlight js %}
+```js
 $(function () {
   $('[data-toggle="tooltip"]').tooltip()
 })
-{% endhighlight %}
+```
 
 ## Examples
 
@@ -56,7 +58,7 @@ Hover over the buttons below to see the four tooltips directions: top, right, bo
   </div>
 </div>
 
-{% highlight html %}
+```html
 <button type="button" class="btn btn-secondary" data-toggle="tooltip" data-placement="top" title="Tooltip on top">
   Tooltip on top
 </button>
@@ -69,15 +71,15 @@ Hover over the buttons below to see the four tooltips directions: top, right, bo
 <button type="button" class="btn btn-secondary" data-toggle="tooltip" data-placement="left" title="Tooltip on left">
   Tooltip on left
 </button>
-{% endhighlight %}
+```
 
 And with custom HTML added:
 
-{% highlight html %}
+```html
 <button type="button" class="btn btn-secondary" data-toggle="tooltip" data-html="true" title="<em>Tooltip</em> <u>with</u> <b>HTML</b>">
   Tooltip with HTML
 </button>
-{% endhighlight %}
+```
 
 ## Usage
 
@@ -85,33 +87,31 @@ The tooltip plugin generates content and markup on demand, and by default places
 
 Trigger the tooltip via JavaScript:
 
-{% highlight js %}
+```js
 $('#example').tooltip(options)
-{% endhighlight %}
+```
 
-{% capture callout %}
+{{< callout warning >}}
 ##### Overflow `auto` and `scroll`
 
 Tooltip position attempts to automatically change when a parent container has `overflow: auto` or `overflow: scroll` like our `.table-responsive`, but still keeps the original placement's positioning. To resolve, set the `boundary` option to anything other than default value, `'scrollParent'`, such as `'window'`:
 
-{% highlight js %}
+```js
 $('#example').tooltip({ boundary: 'window' })
-{% endhighlight %}
-{% endcapture %}
-{% include callout.html content=callout type="warning" %}
+```
+{{< /callout >}}
 
 ### Markup
 
 The required markup for a tooltip is only a `data` attribute and `title` on the HTML element you wish to have a tooltip. The generated markup of a tooltip is rather simple, though it does require a position (by default, set to `top` by the plugin).
 
-{% capture callout %}
+{{< callout warning >}}
 ##### Making tooltips work for keyboard and assistive technology users
 
 You should only add tooltips to HTML elements that are traditionally keyboard-focusable and interactive (such as links or form controls). Although arbitrary HTML elements (such as `<span>`s) can be made focusable by adding the `tabindex="0"` attribute, this will add potentially annoying and confusing tab stops on non-interactive elements for keyboard users, and most assistive technologies currently do not announce the tooltip in this situation. Additionally, do not rely solely on `hover` as the trigger for your tooltip, as this will make your tooltips impossible to trigger for keyboard users.
-{% endcapture %}
-{% include callout.html content=callout type="warning" %}
+{{< /callout >}}
 
-{% highlight html %}
+```html
 <!-- HTML to write -->
 <a href="#" data-toggle="tooltip" title="Some tooltip text!">Hover over me</a>
 
@@ -122,29 +122,27 @@ You should only add tooltips to HTML elements that are traditionally keyboard-fo
     Some tooltip text!
   </div>
 </div>
-{% endhighlight %}
+```
 
 ### Disabled elements
 
 Elements with the `disabled` attribute aren't interactive, meaning users cannot focus, hover, or click them to trigger a tooltip (or popover). As a workaround, you'll want to trigger the tooltip from a wrapper `<div>` or `<span>`, ideally made keyboard-focusable using `tabindex="0"`, and override the `pointer-events` on the disabled element.
 
 <div class="tooltip-demo">
-{% capture example %}
+{{< example >}}
 <span class="d-inline-block" tabindex="0" data-toggle="tooltip" title="Disabled tooltip">
   <button class="btn btn-primary" style="pointer-events: none;" type="button" disabled>Disabled button</button>
 </span>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
 ### Options
 
 Options can be passed via data attributes or JavaScript. For data attributes, append the option name to `data-`, as in `data-animation=""`.
 
-{% capture callout %}
+{{< callout warning >}}
 Note that for security reasons the `sanitize`, `sanitizeFn` and `whiteList` options cannot be supplied using data attributes.
-{% endcapture %}
-{% include callout.html content=callout type="warning" %}
+{{< /callout >}}
 
 <table class="table table-bordered table-striped">
   <thead>
@@ -203,7 +201,7 @@ Note that for security reasons the `sanitize`, `sanitizeFn` and `whiteList` opti
       <td>selector</td>
       <td>string | false</td>
       <td>false</td>
-      <td>If a selector is provided, tooltip objects will be delegated to the specified targets. In practice, this is used to also apply tooltips to dynamically added DOM elements (<code>jQuery.on</code> support). See <a href="{{ site.repo }}/issues/4215">this</a> and <a href="https://codepen.io/Johann-S/pen/djJYPb">an informative example</a>.</td>
+      <td>If a selector is provided, tooltip objects will be delegated to the specified targets. In practice, this is used to also apply tooltips to dynamically added DOM elements (<code>jQuery.on</code> support). See <a href="{{< param repo >}}/issues/4215">this</a> and <a href="https://codepen.io/Johann-S/pen/djJYPb">an informative example</a>.</td>
     </tr>
     <tr>
       <td>template</td>
@@ -267,7 +265,7 @@ Note that for security reasons the `sanitize`, `sanitizeFn` and `whiteList` opti
     <tr>
       <td>whiteList</td>
       <td>object</td>
-      <td><a href="{{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/javascript/#sanitizer">Default value</a></td>
+      <td><a href="{{< docsref "/getting-started/javascript#sanitizer" >}}">Default value</a></td>
       <td>Object which contains allowed attributes and tags</td>
     </tr>
     <tr>
@@ -285,16 +283,17 @@ Note that for security reasons the `sanitize`, `sanitizeFn` and `whiteList` opti
   </tbody>
 </table>
 
-{% capture callout %}
+{{< callout info >}}
 #### Data attributes for individual tooltips
 
 Options for individual tooltips can alternatively be specified through the use of data attributes, as explained above.
-{% endcapture %}
-{% include callout.html content=callout type="info" %}
+{{< /callout >}}
 
 ### Methods
 
-{% include callout-danger-async-methods.md %}
+{{< callout danger >}}
+{{< partial "callout-danger-async-methods.md" >}}
+{{< /callout >}}
 
 #### `$().tooltip(options)`
 
@@ -304,49 +303,65 @@ Attaches a tooltip handler to an element collection.
 
 Reveals an element's tooltip. **Returns to the caller before the tooltip has actually been shown** (i.e. before the `shown.bs.tooltip` event occurs). This is considered a "manual" triggering of the tooltip. Tooltips with zero-length titles are never displayed.
 
-{% highlight js %}$('#element').tooltip('show'){% endhighlight %}
+```js
+$('#element').tooltip('show')
+```
 
 #### `.tooltip('hide')`
 
 Hides an element's tooltip. **Returns to the caller before the tooltip has actually been hidden** (i.e. before the `hidden.bs.tooltip` event occurs). This is considered a "manual" triggering of the tooltip.
 
-{% highlight js %}$('#element').tooltip('hide'){% endhighlight %}
+```js
+$('#element').tooltip('hide')
+```
 
 #### `.tooltip('toggle')`
 
 Toggles an element's tooltip. **Returns to the caller before the tooltip has actually been shown or hidden** (i.e. before the `shown.bs.tooltip` or `hidden.bs.tooltip` event occurs). This is considered a "manual" triggering of the tooltip.
 
-{% highlight js %}$('#element').tooltip('toggle'){% endhighlight %}
+```js
+$('#element').tooltip('toggle')
+```
 
 #### `.tooltip('dispose')`
 
 Hides and destroys an element's tooltip. Tooltips that use delegation (which are created using [the `selector` option](#options)) cannot be individually destroyed on descendant trigger elements.
 
-{% highlight js %}$('#element').tooltip('dispose'){% endhighlight %}
+```js
+$('#element').tooltip('dispose')
+```
 
 #### `.tooltip('enable')`
 
 Gives an element's tooltip the ability to be shown. **Tooltips are enabled by default.**
 
-{% highlight js %}$('#element').tooltip('enable'){% endhighlight %}
+```js
+$('#element').tooltip('enable')
+```
 
 #### `.tooltip('disable')`
 
 Removes the ability for an element's tooltip to be shown. The tooltip will only be able to be shown if it is re-enabled.
 
-{% highlight js %}$('#element').tooltip('disable'){% endhighlight %}
+```js
+$('#element').tooltip('disable')
+```
 
 #### `.tooltip('toggleEnabled')`
 
 Toggles the ability for an element's tooltip to be shown or hidden.
 
-{% highlight js %}$('#element').tooltip('toggleEnabled'){% endhighlight %}
+```js
+$('#element').tooltip('toggleEnabled')
+```
 
 #### `.tooltip('update')`
 
 Updates the position of an element's tooltip.
 
-{% highlight js %}$('#element').tooltip('update'){% endhighlight %}
+```js
+$('#element').tooltip('update')
+```
 
 ### Events
 
@@ -381,8 +396,8 @@ Updates the position of an element's tooltip.
   </tbody>
 </table>
 
-{% highlight js %}
+```js
 $('#myTooltip').on('hidden.bs.tooltip', function () {
   // do something...
 })
-{% endhighlight %}
+```
similarity index 75%
rename from site/docs/4.5/content/code.md
rename to site/content/docs/4.5/content/code.md
index d1ce12ccdcf8ff0abdd41bdd9e467644ced8d0a5..c0ddf5839f9900574d5d051a191eee6fded071cd 100644 (file)
@@ -10,46 +10,41 @@ toc: true
 
 Wrap inline snippets of code with `<code>`. Be sure to escape HTML angle brackets.
 
-{% capture example %}
+{{< example >}}
 For example, <code>&lt;section&gt;</code> should be wrapped as inline.
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Code blocks
 
 Use `<pre>`s for multiple lines of code. Once again, be sure to escape any angle brackets in the code for proper rendering. You may optionally add the `.pre-scrollable` class, which will set a max-height of 340px and provide a y-axis scrollbar.
 
-{% capture example %}
+{{< example >}}
 <pre><code>&lt;p&gt;Sample text here...&lt;/p&gt;
 &lt;p&gt;And another line of sample text here...&lt;/p&gt;
 </code></pre>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Variables
 
 For indicating variables use the `<var>` tag.
 
-{% capture example %}
+{{< example >}}
 <var>y</var> = <var>m</var><var>x</var> + <var>b</var>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## User input
 
 Use the `<kbd>` to indicate input that is typically entered via keyboard.
 
-{% capture example %}
+{{< example >}}
 To switch directories, type <kbd>cd</kbd> followed by the name of the directory.<br>
 To edit settings, press <kbd><kbd>ctrl</kbd> + <kbd>,</kbd></kbd>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Sample output
 
 For indicating sample output from a program use the `<samp>` tag.
 
-{% capture example %}
+{{< example >}}
 <samp>This text is meant to be treated as sample output from a computer program.</samp>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
similarity index 66%
rename from site/docs/4.5/content/figures.md
rename to site/content/docs/4.5/content/figures.md
index a647fc1d0b4f456ffa7ecd0ca55fb37fa8f8a130..559e612ede46f861954617628fee387d4db1f67d 100644 (file)
@@ -9,20 +9,18 @@ Anytime you need to display a piece of content—like an image with an optional
 
 Use the included `.figure` , `.figure-img` and `.figure-caption` classes to provide some baseline styles for the HTML5 `<figure>` and `<figcaption>` elements. Images in figures have no explicit size, so be sure to add the `.img-fluid` class to your `<img>` to make it responsive.
 
-{% capture example %}
+{{< example >}}
 <figure class="figure">
-  {% include icons/placeholder.svg width="400" height="300" class="figure-img img-fluid rounded" %}
+  {{< placeholder width="400" height="300" class="figure-img img-fluid rounded" >}}
   <figcaption class="figure-caption">A caption for the above image.</figcaption>
 </figure>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-Aligning the figure's caption is easy with our [text utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/text/#text-alignment).
+Aligning the figure's caption is easy with our [text utilities]({{< docsref "/utilities/text#text-alignment" >}}).
 
-{% capture example %}
+{{< example >}}
 <figure class="figure">
-  {% include icons/placeholder.svg width="400" height="300" class="figure-img img-fluid rounded" %}
+  {{< placeholder width="400" height="300" class="figure-img img-fluid rounded" >}}
   <figcaption class="figure-caption text-right">A caption for the above image.</figcaption>
 </figure>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
similarity index 51%
rename from site/docs/4.5/content/images.md
rename to site/content/docs/4.5/content/images.md
index 15b4f2988e7887eed2538c56f6c820b4cf8366b1..390b797798ad820d5e14d8894c98e0f70e6b99c2 100644 (file)
@@ -11,74 +11,73 @@ toc: true
 Images in Bootstrap are made responsive with `.img-fluid`. `max-width: 100%;` and `height: auto;` are applied to the image so that it scales with the parent element.
 
 <div class="bd-example">
-  {% include icons/placeholder.svg width="100%" height="250" class="bd-placeholder-img-lg img-fluid" text="Responsive image" %}
+  {{< placeholder width="100%" height="250" class="bd-placeholder-img-lg img-fluid" text="Responsive image" >}}
 </div>
 
-{% highlight html %}
+```html
 <img src="..." class="img-fluid" alt="Responsive image">
-{% endhighlight %}
+```
 
-{% capture callout %}
+{{< callout warning >}}
 ##### SVG images and Internet Explorer
 
 In Internet Explorer 10 and 11, SVG images with `.img-fluid` are disproportionately sized. To fix this, add `width: 100%;` or `.w-100` where necessary. This fix improperly sizes other image formats, so Bootstrap doesn't apply it automatically.
-{% endcapture %}
-{% include callout.html content=callout type="warning" %}
+{{< /callout >}}
 
 ## Image thumbnails
 
-In addition to our [border-radius utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/borders/), you can use `.img-thumbnail` to give an image a rounded 1px border appearance.
+In addition to our [border-radius utilities]({{< docsref "/utilities/borders" >}}), you can use `.img-thumbnail` to give an image a rounded 1px border appearance.
 
 <div class="bd-example bd-example-images">
-  {% include icons/placeholder.svg width="200" height="200" class="img-thumbnail" title="A generic square placeholder image with a white border around it, making it resemble a photograph taken with an old instant camera" %}
+  {{< placeholder width="200" height="200" class="img-thumbnail" title="A generic square placeholder image with a white border around it, making it resemble a photograph taken with an old instant camera" >}}
 </div>
 
-{% highlight html %}
+```html
 <img src="..." alt="..." class="img-thumbnail">
-{% endhighlight %}
+```
 
 ## Aligning images
 
-Align images with the [helper float classes]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/float/) or [text alignment classes]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/text/#text-alignment). `block`-level images can be centered using [the `.mx-auto` margin utility class]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/spacing/#horizontal-centering).
+Align images with the [helper float classes]({{< docsref "/utilities/float" >}}) or [text alignment classes]({{< docsref "/utilities/text#text-alignment" >}}). `block`-level images can be centered using [the `.mx-auto` margin utility class]({{< docsref "/utilities/spacing#horizontal-centering" >}}).
 
 <div class="bd-example bd-example-images">
-  {% include icons/placeholder.svg width="200" height="200" class="rounded float-left" %}
-  {% include icons/placeholder.svg width="200" height="200" class="rounded float-right" %}
+  {{< placeholder width="200" height="200" class="rounded float-left" >}}
+  {{< placeholder width="200" height="200" class="rounded float-right" >}}
 </div>
 
-{% highlight html %}
+```html
 <img src="..." class="rounded float-left" alt="...">
 <img src="..." class="rounded float-right" alt="...">
-{% endhighlight %}
+```
 
 <div class="bd-example bd-example-images">
-  {% include icons/placeholder.svg width="200" height="200" class="rounded mx-auto d-block" %}
+  {{< placeholder width="200" height="200" class="rounded mx-auto d-block" >}}
 </div>
 
-{% highlight html %}
+```html
 <img src="..." class="rounded mx-auto d-block" alt="...">
-{% endhighlight %}
+```
 
 <div class="bd-example bd-example-images">
   <div class="text-center">
-    {% include icons/placeholder.svg width="200" height="200" class="rounded" %}
+    {{< placeholder width="200" height="200" class="rounded" >}}
   </div>
 </div>
 
-{% highlight html %}
+```html
 <div class="text-center">
   <img src="..." class="rounded" alt="...">
 </div>
-{% endhighlight %}
+```
 
 
 ## Picture
 
 If you are using the `<picture>` element to specify multiple `<source>` elements for a specific `<img>`, make sure to add the `.img-*` classes to the `<img>` and not to the `<picture>` tag.
 
-{% highlight html %}
+```html
 ​<picture>
   <source srcset="..." type="image/svg+xml">
   <img src="..." class="img-fluid img-thumbnail" alt="...">
 </picture>
-{% endhighlight %}
+```
similarity index 94%
rename from site/docs/4.5/content/reboot.md
rename to site/content/docs/4.5/content/reboot.md
index 83ec13aef259e219258baee3f8dcbba9de82275e..ea49f3038e1469c00ec28dddd528abe927b4fffc 100644 (file)
@@ -3,7 +3,7 @@ layout: docs
 title: Reboot
 description: Reboot, a collection of element-specific CSS changes in a single file, kickstart Bootstrap to provide an elegant, consistent, and simple baseline to build upon.
 group: content
-redirect_from: "/docs/4.5/content/"
+aliases: "/docs/4.5/content/"
 toc: true
 ---
 
@@ -31,7 +31,7 @@ The `<html>` and `<body>` elements are updated to provide better page-wide defau
 
 The default web fonts (Helvetica Neue, Helvetica, and Arial) have been dropped in Bootstrap 4 and replaced with a "native font stack" for optimum text rendering on every device and OS. Read more about [native font stacks in this *Smashing Magazine* article](https://www.smashingmagazine.com/2015/11/using-system-ui-fonts-practical-guide/).
 
-{% highlight sass %}
+```sass
 $font-family-sans-serif:
   // Safari for macOS and iOS (San Francisco)
   -apple-system,
@@ -50,7 +50,7 @@ $font-family-sans-serif:
   sans-serif,
   // Emoji fonts
   "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default;
-{% endhighlight %}
+```
 
 Note that because the font stack includes emoji fonts, many common symbol/dingbat unicode characters will be rendered as multi-colored pictographs. Their appearance will vary, depending on the style used in the browser/platform's native emoji font, and they won't be affected by any CSS `color` styles.
 
@@ -70,37 +70,37 @@ All heading elements—e.g., `<h1>`—and `<p>` are reset to have their `margin-
   <tbody>
     <tr>
       <td>
-        {{ "`<h1></h1>`" | markdownify }}
+        {{< markdown >}}`<h1></h1>`{{< /markdown >}}
       </td>
       <td><span class="h1">h1. Bootstrap heading</span></td>
     </tr>
     <tr>
       <td>
-        {{ "`<h2></h2>`" | markdownify }}
+        {{< markdown >}}`<h2></h2>`{{< /markdown >}}
       </td>
       <td><span class="h2">h2. Bootstrap heading</span></td>
     </tr>
     <tr>
       <td>
-        {{ "`<h3></h3>`" | markdownify }}
+        {{< markdown >}}`<h3></h3>`{{< /markdown >}}
       </td>
       <td><span class="h3">h3. Bootstrap heading</span></td>
     </tr>
     <tr>
       <td>
-        {{ "`<h4></h4>`" | markdownify }}
+        {{< markdown >}}`<h4></h4>`{{< /markdown >}}
       </td>
       <td><span class="h4">h4. Bootstrap heading</span></td>
     </tr>
     <tr>
       <td>
-        {{ "`<h5></h5>`" | markdownify }}
+        {{< markdown >}}`<h5></h5>`{{< /markdown >}}
       </td>
       <td><span class="h5">h5. Bootstrap heading</span></td>
     </tr>
     <tr>
       <td>
-        {{ "`<h6></h6>`" | markdownify }}
+        {{< markdown >}}`<h6></h6>`{{< /markdown >}}
       </td>
       <td><span class="h6">h6. Bootstrap heading</span></td>
     </tr>
@@ -112,7 +112,7 @@ All heading elements—e.g., `<h1>`—and `<p>` are reset to have their `margin-
 All lists—`<ul>`, `<ol>`, and `<dl>`—have their `margin-top` removed and a `margin-bottom: 1rem`. Nested lists have no `margin-bottom`.
 
 <div class="bd-example">
-{% capture markdown %}
+{{< markdown >}}
 * Lorem ipsum dolor sit amet
 * Consectetur adipiscing elit
 * Integer molestie lorem at massa
@@ -134,8 +134,7 @@ All lists—`<ul>`, `<ol>`, and `<dl>`—have their `margin-top` removed and a `
 6. Faucibus porta lacus fringilla vel
 7. Aenean sit amet erat nunc
 8. Eget porttitor lorem
-{% endcapture %}
-{{ markdown | markdownify }}
+{{< /markdown >}}
 </div>
 
 For simpler styling, clear hierarchy, and better spacing, description lists have updated `margin`s. `<dd>`s reset `margin-left` to `0` and add `margin-bottom: .5rem`. `<dt>`s are **bolded**.
@@ -166,7 +165,7 @@ The `<pre>` element is reset to remove its `margin-top` and use `rem` units for
 
 ## Tables
 
-Tables are slightly adjusted to style `<caption>`s, collapse borders, and ensure consistent `text-align` throughout. Additional changes for borders, padding, and more come with [the `.table` class]({{ site.baseurl }}/docs/{{ site.docs_version }}/content/tables/).
+Tables are slightly adjusted to style `<caption>`s, collapse borders, and ensure consistent `text-align` throughout. Additional changes for borders, padding, and more come with [the `.table` class]({{< docsref "/content/tables" >}}).
 
 <div class="bd-example">
   <table>
@@ -220,12 +219,10 @@ These changes, and more, are demonstrated below.
 <form class="bd-example">
   <fieldset>
     <legend>Example legend</legend>
-
     <p>
       <label for="input">Example input</label>
       <input type="text" id="input" placeholder="Example input">
     </p>
-
     <p>
       <label for="select">Example select</label>
       <select id="select">
@@ -242,14 +239,12 @@ These changes, and more, are demonstrated below.
         </optgroup>
       </select>
     </p>
-
     <p>
       <label>
         <input type="checkbox" value="">
         Check this checkbox
       </label>
     </p>
-
     <p>
       <label>
         <input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked>
@@ -264,34 +259,28 @@ These changes, and more, are demonstrated below.
         Option three is disabled
       </label>
     </p>
-
     <p>
       <label for="textarea">Example textarea</label>
       <textarea id="textarea" rows="3"></textarea>
     </p>
-
     <p>
       <label for="date">Example date</label>
       <input type="date" id="date">
     </p>
-
     <p>
       <label for="time">Example time</label>
       <input type="time" id="time">
     </p>
-
     <p>
       <label for="output">Example output</label>
       <output name="result" id="output">100</output>
     </p>
-
     <p>
       <button type="submit">Button submit</button>
       <input type="submit" value="Input submit button">
       <input type="reset" value="Input reset button">
       <input type="button" value="Input button">
     </p>
-
     <p>
       <button type="submit" disabled>Button submit</button>
       <input type="submit" value="Input submit button" disabled>
@@ -305,10 +294,9 @@ These changes, and more, are demonstrated below.
 
 Reboot includes an enhancement for `role="button"` to change the default cursor to `pointer`. Add this attribute to elements to help indicate elements are interactive. This role isn't necessary for `<button>` elements, which get their own `cursor` change.
 
-{% capture example %}
+{{< example >}}
 <span role="button" tabindex="0">Non-button element button</span>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Misc elements
 
@@ -369,15 +357,14 @@ The default `cursor` on summary is `text`, so we reset that to `pointer` to conv
 
 HTML5 adds [a new global attribute named `[hidden]`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/hidden), which is styled as `display: none` by default. Borrowing an idea from [PureCSS](https://purecss.io/), we improve upon this default by making `[hidden] { display: none !important; }` to help prevent its `display` from getting accidentally overridden. While `[hidden]` isn't natively supported by IE10, the explicit declaration in our CSS gets around that problem.
 
-{% highlight html %}
+```html
 <input type="text" hidden>
-{% endhighlight %}
+```
 
-{% capture callout %}
+{{< callout warning >}}
 ##### jQuery incompatibility
 
 `[hidden]` is not compatible with jQuery's `$(...).hide()` and `$(...).show()` methods. Therefore, we don't currently especially endorse `[hidden]` over other techniques for managing the `display` of elements.
-{% endcapture %}
-{% include callout.html content=callout type="warning" %}
+{{< /callout >}}
 
-To merely toggle the visibility of an element, meaning its `display` is not modified and the element can still affect the flow of the document, use [the `.invisible` class]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/visibility/) instead.
+To merely toggle the visibility of an element, meaning its `display` is not modified and the element can still affect the flow of the document, use [the `.invisible` class]({{< docsref "/utilities/visibility" >}}) instead.
similarity index 87%
rename from site/docs/4.5/content/tables.md
rename to site/content/docs/4.5/content/tables.md
index 8799d47f255c8d7d1ed131f6ad58ea044541599b..9129c3c6852e76f72da3f2a8b6268100dbed10ba 100644 (file)
@@ -12,7 +12,7 @@ Due to the widespread use of tables across third-party widgets like calendars an
 
 Using the most basic table markup, here's how `.table`-based tables look in Bootstrap. **All table styles are inherited in Bootstrap 4**, meaning any nested tables will be styled in the same manner as the parent.
 
-{% capture example %}
+{{< example >}}
 <table class="table">
   <thead>
     <tr>
@@ -43,12 +43,11 @@ Using the most basic table markup, here's how `.table`-based tables look in Boot
     </tr>
   </tbody>
 </table>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 You can also invert the colors—with light text on dark backgrounds—with `.table-dark`.
 
-{% capture example %}
+{{< example >}}
 <table class="table table-dark">
   <thead>
     <tr>
@@ -79,14 +78,13 @@ You can also invert the colors—with light text on dark backgrounds—with `.ta
     </tr>
   </tbody>
 </table>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Table head options
 
 Similar to tables and dark tables, use the modifier classes `.thead-light` or `.thead-dark` to make `<thead>`s appear light or dark gray.
 
-{% capture example %}
+{{< example >}}
 <table class="table">
   <thead class="thead-dark">
     <tr>
@@ -148,14 +146,13 @@ Similar to tables and dark tables, use the modifier classes `.thead-light` or `.
     </tr>
   </tbody>
 </table>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Striped rows
 
 Use `.table-striped` to add zebra-striping to any table row within the `<tbody>`.
 
-{% capture example %}
+{{< example >}}
 <table class="table table-striped">
   <thead>
     <tr>
@@ -186,10 +183,9 @@ Use `.table-striped` to add zebra-striping to any table row within the `<tbody>`
     </tr>
   </tbody>
 </table>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <table class="table table-striped table-dark">
   <thead>
     <tr>
@@ -220,14 +216,13 @@ Use `.table-striped` to add zebra-striping to any table row within the `<tbody>`
     </tr>
   </tbody>
 </table>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Bordered table
 
 Add `.table-bordered` for borders on all sides of the table and cells.
 
-{% capture example %}
+{{< example >}}
 <table class="table table-bordered">
   <thead>
     <tr>
@@ -257,10 +252,9 @@ Add `.table-bordered` for borders on all sides of the table and cells.
     </tr>
   </tbody>
 </table>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <table class="table table-bordered table-dark">
   <thead>
     <tr>
@@ -290,14 +284,13 @@ Add `.table-bordered` for borders on all sides of the table and cells.
     </tr>
   </tbody>
 </table>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Borderless table
 
 Add `.table-borderless` for a table without borders.
 
-{% capture example %}
+{{< example >}}
 <table class="table table-borderless">
   <thead>
     <tr>
@@ -327,12 +320,11 @@ Add `.table-borderless` for a table without borders.
     </tr>
   </tbody>
 </table>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 `.table-borderless` can also be used on dark tables.
 
-{% capture example %}
+{{< example >}}
 <table class="table table-borderless table-dark">
   <thead>
     <tr>
@@ -362,14 +354,13 @@ Add `.table-borderless` for a table without borders.
     </tr>
   </tbody>
 </table>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Hoverable rows
 
 Add `.table-hover` to enable a hover state on table rows within a `<tbody>`.
 
-{% capture example %}
+{{< example >}}
 <table class="table table-hover">
   <thead>
     <tr>
@@ -399,10 +390,9 @@ Add `.table-hover` to enable a hover state on table rows within a `<tbody>`.
     </tr>
   </tbody>
 </table>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <table class="table table-hover table-dark">
   <thead>
     <tr>
@@ -432,14 +422,13 @@ Add `.table-hover` to enable a hover state on table rows within a `<tbody>`.
     </tr>
   </tbody>
 </table>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Small table
 
 Add `.table-sm` to make tables more compact by cutting cell padding in half.
 
-{% capture example %}
+{{< example >}}
 <table class="table table-sm">
   <thead>
     <tr>
@@ -469,10 +458,9 @@ Add `.table-sm` to make tables more compact by cutting cell padding in half.
     </tr>
   </tbody>
 </table>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <table class="table table-sm table-dark">
   <thead>
     <tr>
@@ -502,8 +490,7 @@ Add `.table-sm` to make tables more compact by cutting cell padding in half.
     </tr>
   </tbody>
 </table>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Contextual classes
 
@@ -529,32 +516,38 @@ Use contextual classes to color table rows or individual cells.
         <td>Cell</td>
         <td>Cell</td>
       </tr>
-
-      {% for color in site.data.theme-colors %}
-      <tr class="table-{{ color.name }}">
-        <th scope="row">{{ color.name | capitalize }}</th>
-        <td>Cell</td>
-        <td>Cell</td>
-      </tr>{% endfor %}
+      {{< table.inline >}}
+      {{- range (index $.Site.Data "theme-colors") }}
+        <tr class="table-{{ .name }}">
+          <th scope="row">{{ .name | title }}</th>
+          <td>Cell</td>
+          <td>Cell</td>
+        </tr>
+      {{- end -}}
+      {{< /table.inline >}}
     </tbody>
   </table>
 </div>
 
-{% highlight html %}
+{{< highlight html >}}
 <!-- On rows -->
-<tr class="table-active">...</tr>
-{% for color in site.data.theme-colors %}
-<tr class="table-{{ color.name }}">...</tr>{% endfor %}
+<tr class="table-active">...</tr>{{< table.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<tr class="table-{{ .name }}">...</tr>
+{{- end -}}
+{{< /table.inline >}}
 
 <!-- On cells (`td` or `th`) -->
 <tr>
-  <td class="table-active">...</td>
-  {% for color in site.data.theme-colors %}
-  <td class="table-{{ color.name }}">...</td>{% endfor %}
+  <td class="table-active">...</td>{{< table.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+  <td class="table-{{ .name }}">...</td>
+{{- end -}}
+{{< /table.inline >}}
 </tr>
-{% endhighlight %}
+{{< /highlight >}}
 
-Regular table background variants are not available with the dark table, however, you may use [text or background utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/colors/) to achieve similar styles.
+Regular table background variants are not available with the dark table, however, you may use [text or background utilities]({{< docsref "/utilities/colors" >}}) to achieve similar styles.
 
 <div class="bd-example">
   <table class="table table-dark">
@@ -615,7 +608,7 @@ Regular table background variants are not available with the dark table, however
   </table>
 </div>
 
-{% highlight html %}
+```html
 <!-- On rows -->
 <tr class="bg-primary">...</tr>
 <tr class="bg-success">...</tr>
@@ -631,19 +624,23 @@ Regular table background variants are not available with the dark table, however
   <td class="bg-danger">...</td>
   <td class="bg-info">...</td>
 </tr>
-{% endhighlight %}
+```
 
-{% include callout-warning-color-assistive-technologies.md %}
+{{< callout warning >}}
+{{< partial "callout-warning-color-assistive-technologies.md" >}}
+{{< /callout >}}
 
 Create responsive tables by wrapping any `.table` with `.table-responsive{-sm|-md|-lg|-xl}`, making the table scroll horizontally at each `max-width` breakpoint of up to (but not including) 576px, 768px, 992px, and 1120px, respectively.
 
-{% include callout-info-mediaqueries-breakpoints.md %}
+{{< callout info >}}
+{{< partial "callout-info-mediaqueries-breakpoints.md" >}}
+{{< /callout >}}
 
 ## Captions
 
 A `<caption>` functions like a heading for a table. It helps users with screen readers to find a table and understand what it's about and decide if they want to read it.
 
-{% capture example %}
+{{< example >}}
 <table class="table">
   <caption>List of users</caption>
   <thead>
@@ -675,19 +672,17 @@ A `<caption>` functions like a heading for a table. It helps users with screen r
     </tr>
   </tbody>
 </table>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Responsive tables
 
 Responsive tables allow tables to be scrolled horizontally with ease. Make any table responsive across all viewports by wrapping a `.table` with `.table-responsive`. Or, pick a maximum breakpoint with which to have a responsive table up to by using `.table-responsive{-sm|-md|-lg|-xl}`.
 
-{% capture callout %}
+{{< callout warning >}}
 ##### Vertical clipping/truncation
 
 Responsive tables make use of `overflow-y: hidden`, which clips off any content that goes beyond the bottom or top edges of the table. In particular, this can clip off dropdown menus and other third-party widgets.
-{% endcapture %}
-{% include callout.html content=callout type="warning" %}
+{{< /callout >}}
 
 ### Always responsive
 
@@ -752,13 +747,13 @@ Across every breakpoint, use `.table-responsive` for horizontally scrolling tabl
   </div>
 </div>
 
-{% highlight html %}
+```html
 <div class="table-responsive">
   <table class="table">
     ...
   </table>
 </div>
-{% endhighlight %}
+```
 
 ### Breakpoint specific
 
@@ -766,9 +761,11 @@ Use `.table-responsive{-sm|-md|-lg|-xl}` as needed to create responsive tables u
 
 **These tables may appear broken until their responsive styles apply at specific viewport widths.**
 
-{% for bp in site.data.breakpoints %}{% unless bp.breakpoint == "xs" %}
+{{< tables.inline >}}
+{{ range $.Site.Data.breakpoints }}
+{{ if not (eq .breakpoint "xs") }}
 <div class="bd-example">
-<div class="table-responsive{{ bp.abbr }}">
+<div class="table-responsive{{ .abbr }}">
   <table class="table">
     <thead>
       <tr>
@@ -821,11 +818,20 @@ Use `.table-responsive{-sm|-md|-lg|-xl}` as needed to create responsive tables u
   </table>
 </div>
 </div>
-{% highlight html %}
-<div class="table-responsive{{ bp.abbr }}">
+{{ end -}}
+{{- end -}}
+{{< /tables.inline >}}
+
+{{< highlight html >}}
+{{< tables.inline >}}
+{{- range $.Site.Data.breakpoints -}}
+{{- if not (eq .breakpoint "xs") }}
+<div class="table-responsive{{ .abbr }}">
   <table class="table">
     ...
   </table>
 </div>
-{% endhighlight %}
-{% endunless %}{% endfor %}
+{{ end -}}
+{{- end -}}
+{{< /tables.inline >}}
+{{< /highlight >}}
similarity index 84%
rename from site/docs/4.5/content/typography.md
rename to site/content/docs/4.5/content/typography.md
index 37caddb2cc2e1c913ae7aecbb720b183ebe7dd15..ef79ea6ced15457b11422694f554a6d19b566310 100644 (file)
@@ -8,9 +8,9 @@ toc: true
 
 ## Global settings
 
-Bootstrap sets basic global display, typography, and link styles. When more control is needed, check out the [textual utility classes]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/text/).
+Bootstrap sets basic global display, typography, and link styles. When more control is needed, check out the [textual utility classes]({{< docsref "/utilities/text" >}}).
 
-- Use a [native font stack]({{ site.baseurl }}/docs/{{ site.docs_version }}/content/reboot/#native-font-stack) that selects the best `font-family` for each OS and device.
+- Use a [native font stack]({{< docsref "/content/reboot#native-font-stack" >}}) that selects the best `font-family` for each OS and device.
 - For a more inclusive and accessible type scale, we use the browser's default root `font-size` (typically 16px) so visitors can customize their browser defaults as needed.
 - Use the `$font-family-base`, `$font-size-base`, and `$line-height-base` attributes as our typographic base applied to the `<body>`.
 - Set the global link color via `$link-color` and apply link underlines only on `:hover`.
@@ -32,75 +32,73 @@ All HTML headings, `<h1>` through `<h6>`, are available.
   <tbody>
     <tr>
       <td>
-        {{ "`<h1></h1>`" | markdownify }}
+        {{< markdown >}}`<h1></h1>`{{< /markdown >}}
       </td>
       <td><span class="h1">h1. Bootstrap heading</span></td>
     </tr>
     <tr>
       <td>
-        {{ "`<h2></h2>`" | markdownify }}
+        {{< markdown >}}`<h2></h2>`{{< /markdown >}}
       </td>
       <td><span class="h2">h2. Bootstrap heading</span></td>
     </tr>
     <tr>
       <td>
-        {{ "`<h3></h3>`" | markdownify }}
+        {{< markdown >}}`<h3></h3>`{{< /markdown >}}
       </td>
       <td><span class="h3">h3. Bootstrap heading</span></td>
     </tr>
     <tr>
       <td>
-        {{ "`<h4></h4>`" | markdownify }}
+        {{< markdown >}}`<h4></h4>`{{< /markdown >}}
       </td>
       <td><span class="h4">h4. Bootstrap heading</span></td>
     </tr>
     <tr>
       <td>
-        {{ "`<h5></h5>`" | markdownify }}
+        {{< markdown >}}`<h5></h5>`{{< /markdown >}}
       </td>
       <td><span class="h5">h5. Bootstrap heading</span></td>
     </tr>
     <tr>
       <td>
-        {{ "`<h6></h6>`" | markdownify }}
+        {{< markdown >}}`<h6></h6>`{{< /markdown >}}
       </td>
       <td><span class="h6">h6. Bootstrap heading</span></td>
     </tr>
   </tbody>
 </table>
 
-{% highlight html %}
+```html
 <h1>h1. Bootstrap heading</h1>
 <h2>h2. Bootstrap heading</h2>
 <h3>h3. Bootstrap heading</h3>
 <h4>h4. Bootstrap heading</h4>
 <h5>h5. Bootstrap heading</h5>
 <h6>h6. Bootstrap heading</h6>
-{% endhighlight %}
+```
 
 `.h1` through `.h6` classes are also available, for when you want to match the font styling of a heading but cannot use the associated HTML element.
 
-{% capture example %}
+{{< example >}}
 <p class="h1">h1. Bootstrap heading</p>
 <p class="h2">h2. Bootstrap heading</p>
 <p class="h3">h3. Bootstrap heading</p>
 <p class="h4">h4. Bootstrap heading</p>
 <p class="h5">h5. Bootstrap heading</p>
 <p class="h6">h6. Bootstrap heading</p>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Customizing headings
 
 Use the included utility classes to recreate the small secondary heading text from Bootstrap 3.
 
-{% capture example %}
+{{< example >}}
 <h3>
   Fancy display heading
   <small class="text-muted">With faded secondary text</small>
 </h3>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Display headings
 
@@ -125,29 +123,28 @@ Traditional heading elements are designed to work best in the meat of your page
   </table>
 </div>
 
-{% highlight html %}
+```html
 <h1 class="display-1">Display 1</h1>
 <h1 class="display-2">Display 2</h1>
 <h1 class="display-3">Display 3</h1>
 <h1 class="display-4">Display 4</h1>
-{% endhighlight %}
+```
 
 ## Lead
 
 Make a paragraph stand out by adding `.lead`.
 
-{% capture example %}
+{{< example >}}
 <p class="lead">
   Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus.
 </p>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Inline text elements
 
 Styling for common inline HTML5 elements.
 
-{% capture example %}
+{{< example >}}
 <p>You can use the mark tag to <mark>highlight</mark> text.</p>
 <p><del>This line of text is meant to be treated as deleted text.</del></p>
 <p><s>This line of text is meant to be treated as no longer accurate.</s></p>
@@ -156,8 +153,7 @@ Styling for common inline HTML5 elements.
 <p><small>This line of text is meant to be treated as fine print.</small></p>
 <p><strong>This line rendered as bold text.</strong></p>
 <p><em>This line rendered as italicized text.</em></p>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 `.mark` and `.small` classes are also available to apply the same styles as `<mark>` and `<small>` while avoiding any unwanted semantic implications that the tags would bring.
 
@@ -165,7 +161,7 @@ While not shown above, feel free to use `<b>` and `<i>` in HTML5. `<b>` is meant
 
 ## Text utilities
 
-Change text alignment, transform, style, weight, and color with our [text utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/text/) and [color utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/colors/).
+Change text alignment, transform, style, weight, and color with our [text utilities]({{< docsref "/utilities/text" >}}) and [color utilities]({{< docsref "/utilities/colors" >}}).
 
 ## Abbreviations
 
@@ -173,54 +169,49 @@ Stylized implementation of HTML's `<abbr>` element for abbreviations and acronym
 
 Add `.initialism` to an abbreviation for a slightly smaller font-size.
 
-{% capture example %}
+{{< example >}}
 <p><abbr title="attribute">attr</abbr></p>
 <p><abbr title="HyperText Markup Language" class="initialism">HTML</abbr></p>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Blockquotes
 
 For quoting blocks of content from another source within your document. Wrap `<blockquote class="blockquote">` around any <abbr title="HyperText Markup Language">HTML</abbr> as the quote.
 
-{% capture example %}
+{{< example >}}
 <blockquote class="blockquote">
   <p class="mb-0">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
 </blockquote>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Naming a source
 
 Add a `<footer class="blockquote-footer">` for identifying the source. Wrap the name of the source work in `<cite>`.
 
-{% capture example %}
+{{< example >}}
 <blockquote class="blockquote">
   <p class="mb-0">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
   <footer class="blockquote-footer">Someone famous in <cite title="Source Title">Source Title</cite></footer>
 </blockquote>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Alignment
 
 Use text utilities as needed to change the alignment of your blockquote.
 
-{% capture example %}
+{{< example >}}
 <blockquote class="blockquote text-center">
   <p class="mb-0">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
   <footer class="blockquote-footer">Someone famous in <cite title="Source Title">Source Title</cite></footer>
 </blockquote>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <blockquote class="blockquote text-right">
   <p class="mb-0">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
   <footer class="blockquote-footer">Someone famous in <cite title="Source Title">Source Title</cite></footer>
 </blockquote>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Lists
 
@@ -228,7 +219,7 @@ Use text utilities as needed to change the alignment of your blockquote.
 
 Remove the default `list-style` and left margin on list items (immediate children only). **This only applies to immediate children list items**, meaning you will need to add the class for any nested lists as well.
 
-{% capture example %}
+{{< example >}}
 <ul class="list-unstyled">
   <li>Lorem ipsum dolor sit amet</li>
   <li>Consectetur adipiscing elit</li>
@@ -246,27 +237,25 @@ Remove the default `list-style` and left margin on list items (immediate childre
   <li>Aenean sit amet erat nunc</li>
   <li>Eget porttitor lorem</li>
 </ul>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Inline
 
 Remove a list's bullets and apply some light `margin` with a combination of two classes, `.list-inline` and `.list-inline-item`.
 
-{% capture example %}
+{{< example >}}
 <ul class="list-inline">
   <li class="list-inline-item">Lorem ipsum</li>
   <li class="list-inline-item">Phasellus iaculis</li>
   <li class="list-inline-item">Nulla volutpat</li>
 </ul>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Description list alignment
 
 Align terms and descriptions horizontally by using our grid system's predefined classes (or semantic mixins). For longer terms, you can optionally add a `.text-truncate` class to truncate the text with an ellipsis.
 
-{% capture example %}
+{{< example >}}
 <dl class="row">
   <dt class="col-sm-3">Description lists</dt>
   <dd class="col-sm-9">A description list is perfect for defining terms.</dd>
@@ -291,8 +280,7 @@ Align terms and descriptions horizontally by using our grid system's predefined
     </dl>
   </dd>
 </dl>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Responsive font sizes
 
diff --git a/site/content/docs/4.5/examples/_index.md b/site/content/docs/4.5/examples/_index.md
new file mode 100644 (file)
index 0000000..62a7a2a
--- /dev/null
@@ -0,0 +1,31 @@
+---
+layout: single
+title: Examples
+description: Quickly get a project started with any of our examples ranging from using parts of the framework to custom components and layouts.
+aliases: "/examples/"
+---
+
+{{< list-examples.inline >}}
+{{ range $entry := $.Site.Data.examples -}}
+  <h2>{{ $entry.category }}</h2>
+  <p>{{ $entry.description }}</p>
+
+  {{ range $i, $example := $entry.examples -}}
+    {{- $len := len $entry.examples -}}
+    {{ if (eq $i 0) }}<div class="row">{{ end }}
+      <div class="col-sm-6 col-md-4 col-xl-3 mb-3">
+        <a href="/docs/{{ $.Site.Params.docs_version }}/examples/{{ $example.name | urlize }}/">
+          <img class="img-thumbnail mb-3" srcset="/docs/{{ $.Site.Params.docs_version }}/assets/img/examples/{{ $example.name | urlize }}.png,
+                                                  /docs/{{ $.Site.Params.docs_version }}/assets/img/examples/{{ $example.name | urlize }}@2x.png 2x"
+                                          src="/docs/{{ $.Site.Params.docs_version }}/assets/img/examples/{{ $example.name | urlize }}.png"
+                                          alt=""
+                                          width="480" height="300"
+                                          loading="lazy">
+          <h3 class="h5 mb-1">{{ $example.name }}</h3>
+        </a>
+        <p class="text-muted">{{ $example.description }}</p>
+      </div>
+    {{ if (eq (add $i 1) $len) }}</div>{{ end }}
+  {{ end -}}
+{{ end -}}
+{{< /list-examples.inline >}}
similarity index 85%
rename from site/docs/4.5/examples/album/index.html
rename to site/content/docs/4.5/examples/album/index.html
index 145abeb5f63f3dc205564155d161b61676d47191..0ea52a79531ac53f62fafd8afc5697ac69bd8838 100644 (file)
@@ -1,7 +1,8 @@
 ---
 layout: examples
 title: Album example
-extra_css: "album.css"
+extra_css:
+  - "album.css"
 ---
 
 <header>
@@ -55,7 +56,7 @@ extra_css: "album.css"
       <div class="row">
         <div class="col-md-4">
           <div class="card mb-4 shadow-sm">
-            {% include icons/placeholder.svg width="100%" height="225" background="#55595c" color="#eceeef" class="card-img-top" text="Thumbnail" %}
+            {{< placeholder width="100%" height="225" background="#55595c" color="#eceeef" class="card-img-top" text="Thumbnail" >}}
             <div class="card-body">
               <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
               <div class="d-flex justify-content-between align-items-center">
@@ -70,7 +71,7 @@ extra_css: "album.css"
         </div>
         <div class="col-md-4">
           <div class="card mb-4 shadow-sm">
-            {% include icons/placeholder.svg width="100%" height="225" background="#55595c" color="#eceeef" class="card-img-top" text="Thumbnail" %}
+            {{< placeholder width="100%" height="225" background="#55595c" color="#eceeef" class="card-img-top" text="Thumbnail" >}}
             <div class="card-body">
               <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
               <div class="d-flex justify-content-between align-items-center">
@@ -85,7 +86,7 @@ extra_css: "album.css"
         </div>
         <div class="col-md-4">
           <div class="card mb-4 shadow-sm">
-            {% include icons/placeholder.svg width="100%" height="225" background="#55595c" color="#eceeef" class="card-img-top" text="Thumbnail" %}
+            {{< placeholder width="100%" height="225" background="#55595c" color="#eceeef" class="card-img-top" text="Thumbnail" >}}
             <div class="card-body">
               <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
               <div class="d-flex justify-content-between align-items-center">
@@ -101,7 +102,7 @@ extra_css: "album.css"
 
         <div class="col-md-4">
           <div class="card mb-4 shadow-sm">
-            {% include icons/placeholder.svg width="100%" height="225" background="#55595c" color="#eceeef" class="card-img-top" text="Thumbnail" %}
+            {{< placeholder width="100%" height="225" background="#55595c" color="#eceeef" class="card-img-top" text="Thumbnail" >}}
             <div class="card-body">
               <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
               <div class="d-flex justify-content-between align-items-center">
@@ -116,7 +117,7 @@ extra_css: "album.css"
         </div>
         <div class="col-md-4">
           <div class="card mb-4 shadow-sm">
-            {% include icons/placeholder.svg width="100%" height="225" background="#55595c" color="#eceeef" class="card-img-top" text="Thumbnail" %}
+            {{< placeholder width="100%" height="225" background="#55595c" color="#eceeef" class="card-img-top" text="Thumbnail" >}}
             <div class="card-body">
               <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
               <div class="d-flex justify-content-between align-items-center">
@@ -131,7 +132,7 @@ extra_css: "album.css"
         </div>
         <div class="col-md-4">
           <div class="card mb-4 shadow-sm">
-            {% include icons/placeholder.svg width="100%" height="225" background="#55595c" color="#eceeef" class="card-img-top" text="Thumbnail" %}
+            {{< placeholder width="100%" height="225" background="#55595c" color="#eceeef" class="card-img-top" text="Thumbnail" >}}
             <div class="card-body">
               <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
               <div class="d-flex justify-content-between align-items-center">
@@ -147,7 +148,7 @@ extra_css: "album.css"
 
         <div class="col-md-4">
           <div class="card mb-4 shadow-sm">
-            {% include icons/placeholder.svg width="100%" height="225" background="#55595c" color="#eceeef" class="card-img-top" text="Thumbnail" %}
+            {{< placeholder width="100%" height="225" background="#55595c" color="#eceeef" class="card-img-top" text="Thumbnail" >}}
             <div class="card-body">
               <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
               <div class="d-flex justify-content-between align-items-center">
@@ -162,7 +163,7 @@ extra_css: "album.css"
         </div>
         <div class="col-md-4">
           <div class="card mb-4 shadow-sm">
-            {% include icons/placeholder.svg width="100%" height="225" background="#55595c" color="#eceeef" class="card-img-top" text="Thumbnail" %}
+            {{< placeholder width="100%" height="225" background="#55595c" color="#eceeef" class="card-img-top" text="Thumbnail" >}}
             <div class="card-body">
               <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
               <div class="d-flex justify-content-between align-items-center">
@@ -177,7 +178,7 @@ extra_css: "album.css"
         </div>
         <div class="col-md-4">
           <div class="card mb-4 shadow-sm">
-            {% include icons/placeholder.svg width="100%" height="225" background="#55595c" color="#eceeef" class="card-img-top" text="Thumbnail" %}
+            {{< placeholder width="100%" height="225" background="#55595c" color="#eceeef" class="card-img-top" text="Thumbnail" >}}
             <div class="card-body">
               <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
               <div class="d-flex justify-content-between align-items-center">
@@ -202,6 +203,6 @@ extra_css: "album.css"
       <a href="#">Back to top</a>
     </p>
     <p>Album example is &copy; Bootstrap, but please download and customize it for yourself!</p>
-    <p>New to Bootstrap? <a href="{{ site.url }}/">Visit the homepage</a> or read our <a href="{{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/introduction/">getting started guide</a>.</p>
+    <p>New to Bootstrap? <a href="/">Visit the homepage</a> or read our <a href="{{< docsref "/getting-started/introduction" >}}">getting started guide</a>.</p>
   </div>
 </footer>
similarity index 97%
rename from site/docs/4.5/examples/blog/index.html
rename to site/content/docs/4.5/examples/blog/index.html
index 6b197dd48be4e7d6345f0c093b9c686cde1c9e65..a82a99b97be216516a4c98a65ffde0eb1dd14cae 100644 (file)
@@ -61,7 +61,7 @@ include_js: false
           <a href="#" class="stretched-link">Continue reading</a>
         </div>
         <div class="col-auto d-none d-lg-block">
-          {% include icons/placeholder.svg width="200" height="250" background="#55595c" color="#eceeef" text="Thumbnail" %}
+          {{< placeholder width="200" height="250" background="#55595c" color="#eceeef" text="Thumbnail" >}}
         </div>
       </div>
     </div>
@@ -75,7 +75,7 @@ include_js: false
           <a href="#" class="stretched-link">Continue reading</a>
         </div>
         <div class="col-auto d-none d-lg-block">
-          {% include icons/placeholder.svg width="200" height="250" background="#55595c" color="#eceeef" text="Thumbnail" %}
+          {{< placeholder width="200" height="250" background="#55595c" color="#eceeef" text="Thumbnail" >}}
         </div>
       </div>
     </div>
similarity index 83%
rename from site/docs/4.5/examples/carousel/index.html
rename to site/content/docs/4.5/examples/carousel/index.html
index 5f63fa35fcf23dc759001663f7d24ae349d7d637..12a4bf83cb9cb4721007db3fab8241618e1a048b 100644 (file)
@@ -1,7 +1,8 @@
 ---
 layout: examples
 title: Carousel Template
-extra_css: "carousel.css"
+extra_css:
+  - "carousel.css"
 ---
 
 <header>
@@ -40,7 +41,7 @@ extra_css: "carousel.css"
     </ol>
     <div class="carousel-inner">
       <div class="carousel-item active">
-        {% include icons/placeholder.svg width="100%" height="100%" background="#777" color="#777" text=" " title=" " %}
+        {{< placeholder width="100%" height="100%" background="#777" color="#777" text=" " title=" " >}}
         <div class="container">
           <div class="carousel-caption text-left">
             <h1>Example headline.</h1>
@@ -50,7 +51,7 @@ extra_css: "carousel.css"
         </div>
       </div>
       <div class="carousel-item">
-        {% include icons/placeholder.svg width="100%" height="100%" background="#777" color="#777" text=" " title=" " %}
+        {{< placeholder width="100%" height="100%" background="#777" color="#777" text=" " title=" " >}}
         <div class="container">
           <div class="carousel-caption">
             <h1>Another example headline.</h1>
@@ -60,7 +61,7 @@ extra_css: "carousel.css"
         </div>
       </div>
       <div class="carousel-item">
-        {% include icons/placeholder.svg width="100%" height="100%" background="#777" color="#777" text=" " title=" " %}
+        {{< placeholder width="100%" height="100%" background="#777" color="#777" text=" " title=" " >}}
         <div class="container">
           <div class="carousel-caption text-right">
             <h1>One more for good measure.</h1>
@@ -90,19 +91,19 @@ extra_css: "carousel.css"
     <!-- Three columns of text below the carousel -->
     <div class="row">
       <div class="col-lg-4">
-        {% include icons/placeholder.svg width="140" height="140" background="#777" color="#777" class="rounded-circle" %}
+        {{< placeholder width="140" height="140" background="#777" color="#777" class="rounded-circle" >}}
         <h2>Heading</h2>
         <p>Donec sed odio dui. Etiam porta sem malesuada magna mollis euismod. Nullam id dolor id nibh ultricies vehicula ut id elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Praesent commodo cursus magna.</p>
         <p><a class="btn btn-secondary" href="#" role="button">View details &raquo;</a></p>
       </div><!-- /.col-lg-4 -->
       <div class="col-lg-4">
-        {% include icons/placeholder.svg width="140" height="140" background="#777" color="#777" class="rounded-circle" %}
+        {{< placeholder width="140" height="140" background="#777" color="#777" class="rounded-circle" >}}
         <h2>Heading</h2>
         <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh.</p>
         <p><a class="btn btn-secondary" href="#" role="button">View details &raquo;</a></p>
       </div><!-- /.col-lg-4 -->
       <div class="col-lg-4">
-        {% include icons/placeholder.svg width="140" height="140" background="#777" color="#777" class="rounded-circle" %}
+        {{< placeholder width="140" height="140" background="#777" color="#777" class="rounded-circle" >}}
         <h2>Heading</h2>
         <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>
         <p><a class="btn btn-secondary" href="#" role="button">View details &raquo;</a></p>
@@ -120,7 +121,7 @@ extra_css: "carousel.css"
         <p class="lead">Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod semper. Praesent commodo cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus commodo.</p>
       </div>
       <div class="col-md-5">
-        {% include icons/placeholder.svg width="500" height="500" background="#eee" color="#aaa" class="bd-placeholder-img-lg featurette-image img-fluid mx-auto" %}
+        {{< placeholder width="500" height="500" background="#eee" color="#aaa" class="bd-placeholder-img-lg featurette-image img-fluid mx-auto" >}}
       </div>
     </div>
 
@@ -132,7 +133,7 @@ extra_css: "carousel.css"
         <p class="lead">Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod semper. Praesent commodo cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus commodo.</p>
       </div>
       <div class="col-md-5 order-md-1">
-        {% include icons/placeholder.svg width="500" height="500" background="#eee" color="#aaa" class="bd-placeholder-img-lg featurette-image img-fluid mx-auto" %}
+        {{< placeholder width="500" height="500" background="#eee" color="#aaa" class="bd-placeholder-img-lg featurette-image img-fluid mx-auto" >}}
       </div>
     </div>
 
@@ -144,7 +145,7 @@ extra_css: "carousel.css"
         <p class="lead">Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod semper. Praesent commodo cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus commodo.</p>
       </div>
       <div class="col-md-5">
-        {% include icons/placeholder.svg width="500" height="500" background="#eee" color="#aaa" class="bd-placeholder-img-lg featurette-image img-fluid mx-auto" %}
+        {{< placeholder width="500" height="500" background="#eee" color="#aaa" class="bd-placeholder-img-lg featurette-image img-fluid mx-auto" >}}
       </div>
     </div>
 
@@ -158,6 +159,6 @@ extra_css: "carousel.css"
   <!-- FOOTER -->
   <footer class="container">
     <p class="float-right"><a href="#">Back to top</a></p>
-    <p>&copy; 2017-{{ site.time | date: "%Y" }} Company, Inc. &middot; <a href="#">Privacy</a> &middot; <a href="#">Terms</a></p>
+    <p>&copy; 2017-{{< year >}} Company, Inc. &middot; <a href="#">Privacy</a> &middot; <a href="#">Terms</a></p>
   </footer>
 </main>
similarity index 96%
rename from site/docs/4.5/examples/checkout/index.html
rename to site/content/docs/4.5/examples/checkout/index.html
index 396270e742afff713243eb4d722528b28fc885e9..353111883f37a73ca46b1b708f3220e26d9c9169 100644 (file)
@@ -1,14 +1,16 @@
 ---
 layout: examples
 title: Checkout example
-extra_css: "form-validation.css"
-extra_js: "form-validation.js"
+extra_css:
+  - "form-validation.css"
+extra_js:
+  - "form-validation.js"
 body_class: "bg-light"
 ---
 
 <div class="container">
   <div class="py-5 text-center">
-    <img class="d-block mx-auto mb-4" src="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/brand/bootstrap-solid.svg" alt="" width="72" height="72">
+    <img class="d-block mx-auto mb-4" src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-solid.svg" alt="" width="72" height="72">
     <h2>Checkout form</h2>
     <p class="lead">Below is an example form built entirely with Bootstrap’s form controls. Each required form group has a validation state that can be triggered by attempting to submit the form without completing it.</p>
   </div>
@@ -213,7 +215,7 @@ body_class: "bg-light"
   </div>
 
   <footer class="my-5 pt-5 text-muted text-center text-small">
-    <p class="mb-1">&copy; 2017-{{ site.time | date: "%Y" }} Company Name</p>
+    <p class="mb-1">&copy; 2017-{{< year >}} Company Name</p>
     <ul class="list-inline">
       <li class="list-inline-item"><a href="#">Privacy</a></li>
       <li class="list-inline-item"><a href="#">Terms</a></li>
similarity index 97%
rename from site/docs/4.5/examples/cover/index.html
rename to site/content/docs/4.5/examples/cover/index.html
index 0b74e4fae97943f72faa41d33f9aaba0fba7bf1b..67d8e85387a07558bae86639e24c5bde838664b4 100644 (file)
@@ -1,7 +1,8 @@
 ---
 layout: examples
 title: Cover Template
-extra_css: "cover.css"
+extra_css:
+  - "cover.css"
 body_class: "text-center"
 include_js: false
 ---
similarity index 99%
rename from site/docs/4.5/examples/dashboard/index.html
rename to site/content/docs/4.5/examples/dashboard/index.html
index 65071bed9dee5537ee3c985069e00b03e159cd30..37614209e82e4ab3d7b0a0852d4e1aa6468f575a 100644 (file)
@@ -1,7 +1,8 @@
 ---
 layout: examples
 title: Dashboard Template
-extra_css: "dashboard.css"
+extra_css:
+  - "dashboard.css"
 extra_js:
   - "https://cdnjs.cloudflare.com/ajax/libs/feather-icons/4.9.0/feather.min.js"
   - "https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.min.js"
similarity index 79%
rename from site/docs/4.5/examples/floating-labels/index.html
rename to site/content/docs/4.5/examples/floating-labels/index.html
index 473cf4164dd82547ad110262bebd906058259b97..7e6201629ee0c0357e85bc38c5e217c526ad4d1d 100644 (file)
@@ -1,13 +1,14 @@
 ---
 layout: examples
 title: Floating labels example
-extra_css: "floating-labels.css"
+extra_css:
+  - "floating-labels.css"
 include_js: false
 ---
 
 <form class="form-signin">
   <div class="text-center mb-4">
-    <img class="mb-4" src="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/brand/bootstrap-solid.svg" alt="" width="72" height="72">
+    <img class="mb-4" src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-solid.svg" alt="" width="72" height="72">
     <h1 class="h3 mb-3 font-weight-normal">Floating labels</h1>
     <p>Build form controls with floating labels via the <code>:placeholder-shown</code> pseudo-element. <a href="https://caniuse.com/css-placeholder-shown">Works in latest Chrome, Safari, Firefox, and IE 10/11 (prefixed).</a></p>
   </div>
@@ -28,5 +29,5 @@ include_js: false
     </label>
   </div>
   <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
-  <p class="mt-5 mb-3 text-muted text-center">&copy; 2017-{{ site.time | date: "%Y" }}</p>
+  <p class="mt-5 mb-3 text-muted text-center">&copy; 2017-{{< year >}}</p>
 </form>
similarity index 99%
rename from site/docs/4.5/examples/grid/index.html
rename to site/content/docs/4.5/examples/grid/index.html
index 9cc673d7ed71467e17c9b8ed8e1bcb654196d43e..1440cb73457a5f5bbc65daafd1b394b03cfe1ed0 100644 (file)
@@ -1,7 +1,8 @@
 ---
 layout: examples
 title: Grid Template
-extra_css: "grid.css"
+extra_css:
+  - "grid.css"
 body_class: "py-4"
 include_js: false
 ---
similarity index 97%
rename from site/docs/4.5/examples/jumbotron/index.html
rename to site/content/docs/4.5/examples/jumbotron/index.html
index a2e5140322fa9ea568b9344123315c551e8fe498..87449d3979dc100d092c2491aabe312589e8d964 100644 (file)
@@ -1,7 +1,8 @@
 ---
 layout: examples
 title: Jumbotron Template
-extra_css: "jumbotron.css"
+extra_css:
+  - "jumbotron.css"
 ---
 
 <nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
@@ -75,5 +76,5 @@ extra_css: "jumbotron.css"
 </main>
 
 <footer class="container">
-  <p>&copy; Company 2017-{{ site.time | date: "%Y" }}</p>
+  <p>&copy; Company 2017-{{< year >}}</p>
 </footer>
similarity index 90%
rename from site/docs/4.5/examples/navbar-bottom/index.html
rename to site/content/docs/4.5/examples/navbar-bottom/index.html
index 06e7465fb0a525351c84ec9ef1e75f29002e01ee..8364303ea6218ffe7256a20f546ce21722aaef7d 100644 (file)
@@ -7,7 +7,7 @@ title: Bottom navbar example
   <div class="jumbotron mt-3">
     <h1>Bottom Navbar example</h1>
     <p class="lead">This example is a quick exercise to illustrate how the bottom navbar works.</p>
-    <a class="btn btn-lg btn-primary" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/components/navbar/" role="button">View navbar docs &raquo;</a>
+    <a class="btn btn-lg btn-primary" href="{{< docsref "/components/navbar" >}}" role="button">View navbar docs &raquo;</a>
   </div>
 </div>
 <nav class="navbar fixed-bottom navbar-expand-sm navbar-dark bg-dark">
similarity index 88%
rename from site/docs/4.5/examples/navbar-fixed/index.html
rename to site/content/docs/4.5/examples/navbar-fixed/index.html
index b456d768b55cd969f4bd2385b9a74c53dbc83023..2ab51e3480f1948c5f145eeb0019efa6ef10e68a 100644 (file)
@@ -1,7 +1,8 @@
 ---
 layout: examples
 title: Fixed top navbar example
-extra_css: "navbar-top-fixed.css"
+extra_css:
+  - "navbar-top-fixed.css"
 ---
 
 <nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
@@ -32,6 +33,6 @@ extra_css: "navbar-top-fixed.css"
   <div class="jumbotron">
     <h1>Navbar example</h1>
     <p class="lead">This example is a quick exercise to illustrate how fixed to top navbar works. As you scroll, it will remain fixed to the top of your browser’s viewport.</p>
-    <a class="btn btn-lg btn-primary" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/components/navbar/" role="button">View navbar docs &raquo;</a>
+    <a class="btn btn-lg btn-primary" href="{{< docsref "/components/navbar" >}}" role="button">View navbar docs &raquo;</a>
   </div>
 </main>
similarity index 88%
rename from site/docs/4.5/examples/navbar-static/index.html
rename to site/content/docs/4.5/examples/navbar-static/index.html
index 2f887c3454b02bdf4412d84b649de910879abe6e..f0ee429a76057fe452396028c20de545352355bc 100644 (file)
@@ -1,7 +1,8 @@
 ---
 layout: examples
 title: Top navbar example
-extra_css: "navbar-top.css"
+extra_css:
+  - "navbar-top.css"
 ---
 
 <nav class="navbar navbar-expand-md navbar-dark bg-dark mb-4">
@@ -32,6 +33,6 @@ extra_css: "navbar-top.css"
   <div class="jumbotron">
     <h1>Navbar example</h1>
     <p class="lead">This example is a quick exercise to illustrate how the top-aligned navbar works. As you scroll, this navbar remains in its original position and moves with the rest of the page.</p>
-    <a class="btn btn-lg btn-primary" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/components/navbar/" role="button">View navbar docs &raquo;</a>
+    <a class="btn btn-lg btn-primary" href="{{< docsref "/components/navbar" >}}" role="button">View navbar docs &raquo;</a>
   </div>
 </main>
similarity index 97%
rename from site/docs/4.5/examples/navbars/index.html
rename to site/content/docs/4.5/examples/navbars/index.html
index cc30c2448cdcbe3b39434da880a22e1fc91f633f..db84f1468a61a05067bc1582f599c74ed0f86e81 100644 (file)
@@ -1,7 +1,8 @@
 ---
 layout: examples
 title: Navbar Template
-extra_css: "navbar.css"
+extra_css:
+  - "navbar.css"
 ---
 
 <nav class="navbar navbar-dark bg-dark">
@@ -350,10 +351,10 @@ extra_css: "navbar.css"
     <div class="jumbotron">
       <div class="col-sm-8 mx-auto">
         <h1>Navbar examples</h1>
-        <p>This example is a quick exercise to illustrate how the navbar and its contents work. Some navbars extend the width of the viewport, others are confined within a <code>.container</code>. For positioning of navbars, checkout the <a href="{{ site.baseurl }}/docs/{{ site.docs_version }}/examples/navbar-static/">top</a> and <a href="{{ site.baseurl }}/docs/{{ site.docs_version }}/examples/navbar-fixed/">fixed top</a> examples.</p>
+        <p>This example is a quick exercise to illustrate how the navbar and its contents work. Some navbars extend the width of the viewport, others are confined within a <code>.container</code>. For positioning of navbars, checkout the <a href="{{< docsref "/examples/navbar-static" >}}">top</a> and <a href="{{< docsref "/examples/navbar-fixed" >}}">fixed top</a> examples.</p>
         <p>At the smallest breakpoint, the collapse plugin is used to hide the links and show a menu button to toggle the collapsed content.</p>
         <p>
-          <a class="btn btn-primary" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/components/navbar/" role="button">View navbar docs &raquo;</a>
+          <a class="btn btn-primary" href="{{< docsref "/components/navbar" >}}" role="button">View navbar docs &raquo;</a>
         </p>
       </div>
     </div>
similarity index 84%
rename from site/docs/4.5/examples/offcanvas/index.html
rename to site/content/docs/4.5/examples/offcanvas/index.html
index 015d1df321b0ca2c289f60c7efd95c70e5885bb3..f185caae684c07340d3a4ffa10dcd394409f8347 100644 (file)
@@ -1,8 +1,10 @@
 ---
 layout: examples
 title: Offcanvas template
-extra_css: "offcanvas.css"
-extra_js: "offcanvas.js"
+extra_css:
+  - "offcanvas.css"
+extra_js:
+  - "offcanvas.js"
 body_class: "bg-light"
 ---
 
@@ -61,7 +63,7 @@ body_class: "bg-light"
 
 <main role="main" class="container">
   <div class="d-flex align-items-center p-3 my-3 text-white-50 bg-purple rounded shadow-sm">
-    <img class="mr-3" src="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/brand/bootstrap-outline.svg" alt="" width="48" height="48">
+    <img class="mr-3" src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-outline.svg" alt="" width="48" height="48">
     <div class="lh-100">
       <h6 class="mb-0 text-white lh-100">Bootstrap</h6>
       <small>Since 2011</small>
@@ -71,21 +73,21 @@ body_class: "bg-light"
   <div class="my-3 p-3 bg-white rounded shadow-sm">
     <h6 class="border-bottom border-gray pb-2 mb-0">Recent updates</h6>
     <div class="media text-muted pt-3">
-      {% include icons/placeholder.svg width="32" height="32" background="#007bff" color="#007bff" class="mr-2 rounded" %}
+      {{< placeholder width="32" height="32" background="#007bff" color="#007bff" class="mr-2 rounded" >}}
       <p class="media-body pb-3 mb-0 small lh-125 border-bottom border-gray">
         <strong class="d-block text-gray-dark">@username</strong>
         Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.
       </p>
     </div>
     <div class="media text-muted pt-3">
-      {% include icons/placeholder.svg width="32" height="32" background="#e83e8c" color="#e83e8c" class="mr-2 rounded" %}
+      {{< placeholder width="32" height="32" background="#e83e8c" color="#e83e8c" class="mr-2 rounded" >}}
       <p class="media-body pb-3 mb-0 small lh-125 border-bottom border-gray">
         <strong class="d-block text-gray-dark">@username</strong>
         Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.
       </p>
     </div>
     <div class="media text-muted pt-3">
-      {% include icons/placeholder.svg width="32" height="32" background="#6f42c1" color="#6f42c1" class="mr-2 rounded" %}
+      {{< placeholder width="32" height="32" background="#6f42c1" color="#6f42c1" class="mr-2 rounded" >}}
       <p class="media-body pb-3 mb-0 small lh-125 border-bottom border-gray">
         <strong class="d-block text-gray-dark">@username</strong>
         Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.
@@ -99,7 +101,7 @@ body_class: "bg-light"
   <div class="my-3 p-3 bg-white rounded shadow-sm">
     <h6 class="border-bottom border-gray pb-2 mb-0">Suggestions</h6>
     <div class="media text-muted pt-3">
-      {% include icons/placeholder.svg width="32" height="32" background="#007bff" color="#007bff" class="mr-2 rounded" %}
+      {{< placeholder width="32" height="32" background="#007bff" color="#007bff" class="mr-2 rounded" >}}
       <div class="media-body pb-3 mb-0 small lh-125 border-bottom border-gray">
         <div class="d-flex justify-content-between align-items-center w-100">
           <strong class="text-gray-dark">Full Name</strong>
@@ -109,7 +111,7 @@ body_class: "bg-light"
       </div>
     </div>
     <div class="media text-muted pt-3">
-      {% include icons/placeholder.svg width="32" height="32" background="#007bff" color="#007bff" class="mr-2 rounded" %}
+      {{< placeholder width="32" height="32" background="#007bff" color="#007bff" class="mr-2 rounded" >}}
       <div class="media-body pb-3 mb-0 small lh-125 border-bottom border-gray">
         <div class="d-flex justify-content-between align-items-center w-100">
           <strong class="text-gray-dark">Full Name</strong>
@@ -119,7 +121,7 @@ body_class: "bg-light"
       </div>
     </div>
     <div class="media text-muted pt-3">
-      {% include icons/placeholder.svg width="32" height="32" background="#007bff" color="#007bff" class="mr-2 rounded" %}
+      {{< placeholder width="32" height="32" background="#007bff" color="#007bff" class="mr-2 rounded" >}}
       <div class="media-body pb-3 mb-0 small lh-125 border-bottom border-gray">
         <div class="d-flex justify-content-between align-items-center w-100">
           <strong class="text-gray-dark">Full Name</strong>
similarity index 94%
rename from site/docs/4.5/examples/pricing/index.html
rename to site/content/docs/4.5/examples/pricing/index.html
index 395242d6bd4d068c9fb51e139dd9289d90dfcc62..5cd295a80eb35a528712d8cffe643657a5b91f38 100644 (file)
@@ -1,7 +1,8 @@
 ---
 layout: examples
 title: Pricing example
-extra_css: "pricing.css"
+extra_css:
+  - "pricing.css"
 include_js: false
 ---
 
@@ -73,8 +74,8 @@ include_js: false
   <footer class="pt-4 my-md-5 pt-md-5 border-top">
     <div class="row">
       <div class="col-12 col-md">
-        <img class="mb-2" src="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/brand/bootstrap-solid.svg" alt="" width="24" height="24">
-        <small class="d-block mb-3 text-muted">&copy; 2017-{{ site.time | date: "%Y" }}</small>
+        <img class="mb-2" src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-solid.svg" alt="" width="24" height="24">
+        <small class="d-block mb-3 text-muted">&copy; 2017-{{< year >}}</small>
       </div>
       <div class="col-6 col-md">
         <h5>Features</h5>
similarity index 98%
rename from site/docs/4.5/examples/product/index.html
rename to site/content/docs/4.5/examples/product/index.html
index c5dd4a7efdaf51d19e3adab8f6fc654b21f14693..53aff66214f574f5d6cfc9c7853f4104f49050ba 100644 (file)
@@ -1,7 +1,8 @@
 ---
 layout: examples
 title: Product example
-extra_css: "product.css"
+extra_css:
+  - "product.css"
 ---
 
 <nav class="site-header sticky-top py-1">
@@ -101,7 +102,7 @@ extra_css: "product.css"
   <div class="row">
     <div class="col-12 col-md">
       <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="d-block mb-2" role="img" viewBox="0 0 24 24" focusable="false"><title>Product</title><circle cx="12" cy="12" r="10"/><path d="M14.31 8l5.74 9.94M9.69 8h11.48M7.38 12l5.74-9.94M9.69 16L3.95 6.06M14.31 16H2.83m13.79-4l-5.74 9.94"/></svg>
-      <small class="d-block mb-3 text-muted">&copy; 2017-{{ site.time | date: "%Y" }}</small>
+      <small class="d-block mb-3 text-muted">&copy; 2017-{{< year >}}</small>
     </div>
     <div class="col-6 col-md">
       <h5>Features</h5>
similarity index 75%
rename from site/docs/4.5/examples/sign-in/index.html
rename to site/content/docs/4.5/examples/sign-in/index.html
index ac480c8172d98443286eae87f23f5d919732dd08..c49ad12b0a15836cc73a27251ed651d6eb36feeb 100644 (file)
@@ -1,13 +1,14 @@
 ---
 layout: examples
 title: Signin Template
-extra_css: "signin.css"
+extra_css:
+  - "signin.css"
 body_class: "text-center"
 include_js: false
 ---
 
 <form class="form-signin">
-  <img class="mb-4" src="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/brand/bootstrap-solid.svg" alt="" width="72" height="72">
+  <img class="mb-4" src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-solid.svg" alt="" width="72" height="72">
   <h1 class="h3 mb-3 font-weight-normal">Please sign in</h1>
   <label for="inputEmail" class="sr-only">Email address</label>
   <input type="email" id="inputEmail" class="form-control" placeholder="Email address" required autofocus>
@@ -19,5 +20,5 @@ include_js: false
     </label>
   </div>
   <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
-  <p class="mt-5 mb-3 text-muted">&copy; 2017-{{ site.time | date: "%Y" }}</p>
+  <p class="mt-5 mb-3 text-muted">&copy; 2017-{{< year >}}</p>
 </form>
similarity index 98%
rename from site/docs/4.5/examples/starter-template/index.html
rename to site/content/docs/4.5/examples/starter-template/index.html
index d90f50b85f035563e439a2742740862ba02cb76f..568891437c027bb7fecf7e0de399dfadfbcc36d6 100644 (file)
@@ -1,7 +1,8 @@
 ---
 layout: examples
 title: Starter Template
-extra_css: "starter-template.css"
+extra_css:
+  - "starter-template.css"
 ---
 
 <nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-top">
similarity index 90%
rename from site/docs/4.5/examples/sticky-footer-navbar/index.html
rename to site/content/docs/4.5/examples/sticky-footer-navbar/index.html
index cd01e0bbdb52dab7047d61ca1cf54f6517341d9e..2d412a587a405c017c4cecc23ac6dd25753d8827 100644 (file)
@@ -1,7 +1,8 @@
 ---
 layout: examples
 title: Sticky Footer Navbar Template
-extra_css: "sticky-footer-navbar.css"
+extra_css:
+  - "sticky-footer-navbar.css"
 html_class: "h-100"
 body_class: "d-flex flex-column h-100"
 ---
@@ -38,7 +39,7 @@ body_class: "d-flex flex-column h-100"
   <div class="container">
     <h1 class="mt-5">Sticky footer with fixed navbar</h1>
     <p class="lead">Pin a footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS. A fixed navbar has been added with <code>padding-top: 60px;</code> on the <code>main &gt; .container</code>.</p>
-    <p>Back to <a href="{{ site.baseurl }}/docs/{{ site.docs_version }}/examples/sticky-footer/">the default sticky footer</a> minus the navbar.</p>
+    <p>Back to <a href="{{< docsref "/examples/sticky-footer" >}}">the default sticky footer</a> minus the navbar.</p>
   </div>
 </main>
 
similarity index 74%
rename from site/docs/4.5/examples/sticky-footer/index.html
rename to site/content/docs/4.5/examples/sticky-footer/index.html
index 0d684ce924418485a09e89640504cd266d9b0270..441e499424fe271801c173b5745914acb2f89f50 100644 (file)
@@ -1,7 +1,8 @@
 ---
 layout: examples
 title: Sticky Footer Template
-extra_css: "sticky-footer.css"
+extra_css:
+  - "sticky-footer.css"
 html_class: "h-100"
 body_class: "d-flex flex-column h-100"
 include_js: false
@@ -12,7 +13,7 @@ include_js: false
   <div class="container">
     <h1 class="mt-5">Sticky footer</h1>
     <p class="lead">Pin a footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS.</p>
-    <p>Use <a href="{{ site.baseurl }}/docs/{{ site.docs_version }}/examples/sticky-footer-navbar/">the sticky footer with a fixed navbar</a> if need be, too.</p>
+    <p>Use <a href="{{< docsref "/examples/sticky-footer-navbar" >}}">the sticky footer with a fixed navbar</a> if need be, too.</p>
   </div>
 </main>
 
similarity index 94%
rename from site/docs/4.5/extend/approach.md
rename to site/content/docs/4.5/extend/approach.md
index 06ade2becff4dd87f82907071bae36a68e5ec6f1..19e3e0658a78209190d3bf163d672bf9cf2440c5 100644 (file)
@@ -3,12 +3,12 @@ layout: docs
 title: Approach
 description: Learn about the guiding principles, strategies, and techniques used to build and maintain Bootstrap so you can more easily customize and extend it yourself.
 group: extend
-redirect_from: "/docs/4.5/extend/"
+aliases: "/docs/4.5/extend/"
 ---
 
 While the getting started pages provide an introductory tour of the project and what it offers, this document focuses on _why_ we do the things we do in Bootstrap. It explains our philosophy to building on the web so that others can learn from us, contribute with us, and help us improve.
 
-See something that doesn't sound right, or perhaps could be done better? [Open an issue]({{ site.repo }}/issues/new)—we'd love to discuss it with you.
+See something that doesn't sound right, or perhaps could be done better? [Open an issue]({{< param repo >}}/issues/new)—we'd love to discuss it with you.
 
 ## Summary
 
@@ -54,13 +54,13 @@ Bootstrap includes several components that function as an overlay of some kind.
 
 Each overlay component increases its `z-index` value slightly in such a way that common UI principles allow user focused or hovered elements to remain in view at all times. For example, a modal is document blocking (e.g., you cannot take any other action save for the modal's action), so we put that above our navbars.
 
-Learn more about this in our [`z-index` layout page]({{ site.baseurl }}/docs/{{ site.docs_version }}/layout/overview/#z-index).
+Learn more about this in our [`z-index` layout page]({{< docsref "/layout/overview#z-index" >}}).
 
 ## HTML and CSS over JS
 
 Whenever possible, we prefer to write HTML and CSS over JavaScript. In general, HTML and CSS are more prolific and accessible to more people of all different experience levels. HTML and CSS are also faster in your browser than JavaScript, and your browser generally provides a great deal of functionality for you.
 
-This principle is our first-class JavaScript API using `data` attributes. You don't need to write nearly any JavaScript to use our JavaScript plugins; instead, write HTML. Read more about this in [our JavaScript overview page]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/javascript/#data-attributes).
+This principle is our first-class JavaScript API using `data` attributes. You don't need to write nearly any JavaScript to use our JavaScript plugins; instead, write HTML. Read more about this in [our JavaScript overview page]({{< docsref "/getting-started/javascript#data-attributes" >}}).
 
 Lastly, our styles build on the fundamental behaviors of common web elements. Whenever possible, we prefer to use what the browser provides. For example, you can put a `.btn` class on nearly any element, but most elements don't provide any semantic value or browser functionality. So instead, we use `<button>`s and `<a>`s.
 
similarity index 64%
rename from site/docs/4.5/extend/icons.md
rename to site/content/docs/4.5/extend/icons.md
index 0fe036dcff4f1800e759d42e565cf0106bfadb69..3fc9dffe07ddc51c901892bc26d04b011bd47a10 100644 (file)
@@ -7,13 +7,13 @@ group: extend
 
 ## Bootstrap Icons
 
-While you won't find a built-in icon library in Bootstrap, our separate [Bootstrap Icons]({{ site.icons }}) projects is a growing set of open source SVGs you can use. While they're designed first and foremost to work with our components and documentation, you can use them in any project.
+While you won't find a built-in icon library in Bootstrap, our separate [Bootstrap Icons]({{< param icons >}}) projects is a growing set of open source SVGs you can use. While they're designed first and foremost to work with our components and documentation, you can use them in any project.
 
-<a href="{{ site.icons }}" class="btn btn-bd-primary">Get Bootstrap Icons</a>
+<a href="{{< param icons >}}" class="btn btn-bd-primary">Get Bootstrap Icons</a>
 
-<img class="img-fluid mt-3 mx-auto" srcset="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/bootstrap-icons.png,
-                                            {{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/bootstrap-icons@2x.png 2x"
-                                            src="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/bootstrap-icons.png"
+<img class="img-fluid mt-3 mx-auto" srcset="/docs/{{< param docs_version >}}/assets/img/bootstrap-icons.png,
+                                            /docs/{{< param docs_version >}}/assets/img/bootstrap-icons@2x.png 2x"
+                                            src="/docs/{{< param docs_version >}}/assets/img/bootstrap-icons.png"
                                             alt="Bootstrap Icons" width="966" height="600" loading="lazy">
 
 
similarity index 98%
rename from site/docs/4.5/getting-started/accessibility.md
rename to site/content/docs/4.5/getting-started/accessibility.md
index 62675c96354401e3e1c5fa83ff02520e41e1d17c..e8fe841267edd671f8451adc4aad11872424b20d 100644 (file)
@@ -30,18 +30,18 @@ Most colors that currently make up Bootstrap's default palette—used throughout
 
 Content which should be visually hidden, but remain accessible to assistive technologies such as screen readers, can be styled using the `.sr-only` class. This can be useful in situations where additional visual information or cues (such as meaning denoted through the use of color) need to also be conveyed to non-visual users.
 
-{% highlight html %}
+```html
 <p class="text-danger">
   <span class="sr-only">Danger: </span>
   This action is not reversible
 </p>
-{% endhighlight %}
+```
 
 For visually hidden interactive controls, such as traditional "skip" links, `.sr-only` can be combined with the `.sr-only-focusable` class. This will ensure that the control becomes visible once focused (for sighted keyboard users).
 
-{% highlight html %}
+```html
 <a class="sr-only sr-only-focusable" href="#content">Skip to main content</a>
-{% endhighlight %}
+```
 
 ### Reduced motion
 
similarity index 86%
rename from site/docs/4.5/getting-started/best-practices.md
rename to site/content/docs/4.5/getting-started/best-practices.md
index 1e7af39ee9091e30af0cef863ab2a85a1d5261ec..e17fc1290a4d86b9c635f4138605bc78b287382e 100644 (file)
@@ -7,10 +7,9 @@ group: getting-started
 
 We've designed and developed Bootstrap to work in a number of environments. Here are some of the best practices we've gathered from years of working on and using it ourselves.
 
-{% capture callout %}
+{{< callout info >}}
 **Heads up!** This copy is a work in progress.
-{% endcapture %}
-{% include callout.html content=callout type="info" %}
+{{< /callout >}}
 
 ### General outline
 
similarity index 93%
rename from site/docs/4.5/getting-started/browsers-devices.md
rename to site/content/docs/4.5/getting-started/browsers-devices.md
index 403ac54e698611b926ca274eed62bb3cae1b8d4a..e6cdd8fe2ee39e446c9a88ec532df724d71016a9 100644 (file)
@@ -12,22 +12,12 @@ Bootstrap supports the **latest, stable releases** of all major browsers and pla
 
 Alternative browsers which use the latest version of WebKit, Blink, or Gecko, whether directly or via the platform's web view API, are not explicitly supported. However, Bootstrap should (in most cases) display and function correctly in these browsers as well. More specific support information is provided below.
 
-You can find our supported range of browsers and their versions [in our `.browserslistrc file`]({{ site.repo }}/blob/v{{ site.current_version }}/.browserslistrc):
+You can find our supported range of browsers and their versions [in our `.browserslistrc file`]({{< param repo >}}/blob/v{{< param current_version >}}/.browserslistrc):
 
-```
-# https://github.com/browserslist/browserslist#readme
-
->= 1%
-last 1 major version
-not dead
-Chrome >= 45
-Firefox >= 38
-Edge >= 12
-Explorer >= 10
-iOS >= 9
-Safari >= 9
-Android >= 4.4
-Opera >= 30
+```text
+{{< rf.inline >}}
+{{- readFile ".browserslistrc" | chomp | htmlEscape -}}
+{{< /rf.inline >}}
 ```
 
 We use [Autoprefixer](https://github.com/postcss/autoprefixer) to handle intended browser support via CSS prefixes, which uses [Browserslist](https://github.com/browserslist/browserslist) to manage these browser versions. Consult their documentation for how to integrate these tools into your projects.
@@ -117,7 +107,7 @@ For Firefox, in addition to the latest normal stable release, we also support th
 
 Unofficially, Bootstrap should look and behave well enough in Chromium and Chrome for Linux, Firefox for Linux, and Internet Explorer 9, though they are not officially supported.
 
-For a list of some of the browser bugs that Bootstrap has to grapple with, see our [Wall of browser bugs]({{ site.baseurl }}/docs/{{ site.docs_version }}/browser-bugs/).
+For a list of some of the browser bugs that Bootstrap has to grapple with, see our [Wall of browser bugs]({{< docsref "/browser-bugs" >}}).
 
 ## Internet Explorer
 
@@ -151,15 +141,15 @@ Throughout our v4 alpha and beta releases, we included incomplete and commented
 
 Even in some modern browsers, printing can be quirky.
 
-As of Safari v8.0, use of the fixed-width `.container` class can cause Safari to use an unusually small font size when printing. See [issue #14868]({{ site.repo }}/issues/14868) and [WebKit bug #138192](https://bugs.webkit.org/show_bug.cgi?id=138192) for more details. One potential workaround is the following CSS:
+As of Safari v8.0, use of the fixed-width `.container` class can cause Safari to use an unusually small font size when printing. See [issue #14868]({{< param repo >}}/issues/14868) and [WebKit bug #138192](https://bugs.webkit.org/show_bug.cgi?id=138192) for more details. One potential workaround is the following CSS:
 
-{% highlight css %}
+```css
 @media print {
   .container {
     width: auto;
   }
 }
-{% endhighlight %}
+```
 
 ## Android stock browser
 
@@ -169,7 +159,7 @@ Out of the box, Android 4.1 (and even some newer releases apparently) ship with
 
 On `<select>` elements, the Android stock browser will not display the side controls if there is a `border-radius` and/or `border` applied. (See [this StackOverflow question](https://stackoverflow.com/questions/14744437/html-select-box-not-showing-drop-down-arrow-on-android-version-4-0-when-set-with) for details.) Use the snippet of code below to remove the offending CSS and render the `<select>` as an unstyled element on the Android stock browser. The user agent sniffing avoids interference with Chrome, Safari, and Mozilla browsers.
 
-{% highlight html %}
+```html
 <script>
 $(function () {
   var nua = navigator.userAgent
@@ -179,7 +169,7 @@ $(function () {
   }
 })
 </script>
-{% endhighlight %}
+```
 
 Want to see an example? [Check out this JS Bin demo](http://jsbin.com/OyaqoDO/2).
 
similarity index 53%
rename from site/docs/4.5/getting-started/build-tools.md
rename to site/content/docs/4.5/getting-started/build-tools.md
index 58b5af285c430c62ea8b20bc0389dbff3c076f19..4045f7d60e3028084d772f1bfd6425846c4f09db 100644 (file)
@@ -8,30 +8,25 @@ toc: true
 
 ## Tooling setup
 
-Bootstrap uses [npm scripts](https://docs.npmjs.com/misc/scripts/) for its build system. Our [package.json]({{ site.repo }}/blob/v{{ site.current_version }}/package.json) includes convenient methods for working with the framework, including compiling code, running tests, and more.
+Bootstrap uses [npm scripts](https://docs.npmjs.com/misc/scripts/) for its build system. Our [package.json]({{< param repo >}}/blob/v{{< param current_version >}}/package.json) includes convenient methods for working with the framework, including compiling code, running tests, and more.
 
 To use our build system and run our documentation locally, you'll need a copy of Bootstrap's source files and Node. Follow these steps and you should be ready to rock:
 
 1. [Download and install Node.js](https://nodejs.org/en/download/), which we use to manage our dependencies.
-2. Either [download Bootstrap's sources]({{ site.download.source }}) or fork [Bootstrap's repository]({{ site.repo }}).
-3. Navigate to the root `/bootstrap` directory and run `npm install` to install our local dependencies listed in [package.json]({{ site.repo }}/blob/v{{ site.current_version }}/package.json).
-4. [Install Ruby][install-ruby], install [Bundler][gembundler] with `gem install bundler`, and finally run `bundle install`. This will install all Ruby dependencies, such as Jekyll and plugins.
-  - **Windows users:** Read [this guide](https://jekyllrb.com/docs/windows/) to get Jekyll up and running without problems.
+2. Either [download Bootstrap's sources]({{< param "download.source" >}}) or fork [Bootstrap's repository]({{< param repo >}}).
+3. Navigate to the root `/bootstrap` directory and run `npm install` to install our local dependencies listed in [package.json]({{< param repo >}}/blob/v{{< param current_version >}}/package.json).
 
 When completed, you'll be able to run the various commands provided from the command line.
 
-[install-ruby]: https://www.ruby-lang.org/en/documentation/installation/
-[gembundler]: https://bundler.io/
-
 ## Using npm scripts
 
-Our [package.json]({{ site.repo }}/blob/v{{ site.current_version }}/package.json) includes the following commands and tasks:
+Our [package.json]({{< param repo >}}/blob/v{{< param current_version >}}/package.json) includes the following commands and tasks:
 
 | Task | Description |
 | --- | --- |
 | `npm run dist` | `npm run dist` creates the `/dist/` directory with compiled files. **Uses [Sass](https://sass-lang.com/), [Autoprefixer][autoprefixer], and [terser](https://github.com/terser/terser).** |
-| `npm test` | Same as `npm run dist` plus it runs tests locally |
-| `npm run docs` | Builds and lints CSS and JavaScript for docs. You can then run the documentation locally via `npm run docs-serve`. |
+| `npm test` | Runs tests locally after running `npm run dist` |
+| `npm run docs-serve` | Builds and runs the documentation locally. |
 
 Run `npm run` to see all the npm scripts.
 
@@ -39,17 +34,17 @@ Run `npm run` to see all the npm scripts.
 
 Bootstrap uses [Autoprefixer][autoprefixer] (included in our build process) to automatically add vendor prefixes to some CSS properties at build time. Doing so saves us time and code by allowing us to write key parts of our CSS a single time while eliminating the need for vendor mixins like those found in v3.
 
-We maintain the list of browsers supported through Autoprefixer in a separate file within our GitHub repository. See [.browserslistrc]({{ site.repo }}/blob/v{{ site.current_version }}/.browserslistrc) for details.
+We maintain the list of browsers supported through Autoprefixer in a separate file within our GitHub repository. See [.browserslistrc]({{< param repo >}}/blob/v{{< param current_version >}}/.browserslistrc) for details.
 
 ## Local documentation
 
-Running our documentation locally requires the use of Jekyll, a decently flexible static site generator that provides us: basic includes, Markdown-based files, templates, and more. Here's how to get it started:
+Running our documentation locally requires the use of Hugo, which gets installed via the [hugo-bin](https://www.npmjs.com/package/hugo-bin) npm package. Hugo is a blazingly fast and quite extensible static site generator that provides us: basic includes, Markdown-based files, templates, and more. Here's how to get it started:
 
-1. Run through the [tooling setup](#tooling-setup) above to install Jekyll (the site builder) and other Ruby dependencies with `bundle install`.
+1. Run through the [tooling setup](#tooling-setup) above to install all dependencies.
 2. From the root `/bootstrap` directory, run `npm run docs-serve` in the command line.
-3. Open `http://localhost:9001` in your browser, and voilà.
+3. Open `http://localhost:9001/` in your browser, and voilà.
 
-Learn more about using Jekyll by reading its [documentation](https://jekyllrb.com/docs/).
+Learn more about using Hugo by reading its [documentation](https://gohugo.io/documentation/).
 
 ## Troubleshooting
 
similarity index 90%
rename from site/docs/4.5/getting-started/contents.md
rename to site/content/docs/4.5/getting-started/contents.md
index a161e409ecabf16b500d59d9f255608dfbeab8ff..55163641df840478f6cd20dc100bf8ad260dd35c 100644 (file)
@@ -12,7 +12,7 @@ Once downloaded, unzip the compressed folder and you'll see something like this:
 
 <!-- NOTE: This info is intentionally duplicated in the README. Copy any changes made here over to the README too, but be sure to keep in mind to add the `dist` folder. -->
 
-{% highlight plaintext %}
+```text
 bootstrap/
 ├── css/
 │   ├── bootstrap-grid.css
@@ -36,7 +36,7 @@ bootstrap/
     ├── bootstrap.js.map
     ├── bootstrap.min.js
     └── bootstrap.min.js.map
-{% endhighlight %}
+```
 
 This is the most basic form of Bootstrap: precompiled files for quick drop-in usage in nearly any web project. We provide compiled CSS and JS (`bootstrap.*`), as well as compiled and minified CSS and JS (`bootstrap.min.*`). [source maps](https://developers.google.com/web/tools/chrome-devtools/javascript/source-maps) (`bootstrap.*.map`) are available for use with certain browsers' developer tools. Bundled JS files (`bootstrap.bundle.js` and minified `bootstrap.bundle.min.js`) include [Popper](https://popper.js.org/), but not [jQuery](https://jquery.com/).
 
@@ -70,10 +70,10 @@ Bootstrap includes a handful of options for including some or all of our compile
         <div><code class="font-weight-normal text-nowrap">bootstrap-grid.css</code></div>
         <div><code class="font-weight-normal text-nowrap">bootstrap-grid.min.css</code></div>
       </th>
-      <td><a class="text-warning" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/layout/grid/">Only grid system</a></td>
+      <td><a class="text-warning" href="{{< docsref "/layout/grid" >}}">Only grid system</a></td>
       <td class="bg-light text-muted">Not included</td>
       <td class="bg-light text-muted">Not included</td>
-      <td><a class="text-warning" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/flex/">Only flex utilities</a></td>
+      <td><a class="text-warning" href="{{< docsref "/utilities/flex" >}}">Only flex utilities</a></td>
     </tr>
     <tr>
       <th scope="row">
@@ -81,7 +81,7 @@ Bootstrap includes a handful of options for including some or all of our compile
         <div><code class="font-weight-normal text-nowrap">bootstrap-reboot.min.css</code></div>
       </th>
       <td class="bg-light text-muted">Not included</td>
-      <td><a class="text-warning" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/content/reboot/">Only Reboot</a></td>
+      <td><a class="text-warning" href="{{< docsref "/content/reboot" >}}">Only Reboot</a></td>
       <td class="bg-light text-muted">Not included</td>
       <td class="bg-light text-muted">Not included</td>
     </tr>
@@ -124,17 +124,18 @@ Similarly, we have options for including some or all of our compiled JavaScript.
 
 The Bootstrap source code download includes the precompiled CSS and JavaScript assets, along with source Sass, JavaScript, and documentation. More specifically, it includes the following and more:
 
-{% highlight plaintext %}
+```text
 bootstrap/
 ├── dist/
 │   ├── css/
 │   └── js/
 ├── site/
-│   └──docs/
-│      └── 4.5/
-│          └── examples/
+│   └──content/
+|      └──docs/
+|         └── 4.5/
+|             └── examples/
 ├── js/
 └── scss/
-{% endhighlight %}
+```
 
 The `scss/` and `js/` are the source code for our CSS and JavaScript. The `dist/` folder includes everything listed in the precompiled download section above. The `site/docs/` folder includes the source code for our documentation, and `examples/` of Bootstrap usage. Beyond that, any other included file provides support for packages, license information, and development.
similarity index 58%
rename from site/docs/4.5/getting-started/download.md
rename to site/content/docs/4.5/getting-started/download.md
index b0dd5d29dae19a4c0e291a901283713088a56267..4f5d3615dc621529a7c5dc07d784317170a58864 100644 (file)
@@ -8,14 +8,14 @@ toc: true
 
 ## Compiled CSS and JS
 
-Download ready-to-use compiled code for **Bootstrap v{{ site.current_version}}** to easily drop into your project, which includes:
+Download ready-to-use compiled code for **Bootstrap v{{< param current_version >}}** to easily drop into your project, which includes:
 
-- Compiled and minified CSS bundles (see [CSS files comparison]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/contents/#css-files))
-- Compiled and minified JavaScript plugins (see [JS files comparison]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/contents/#js-files))
+- Compiled and minified CSS bundles (see [CSS files comparison]({{< docsref "/getting-started/contents#css-files" >}}))
+- Compiled and minified JavaScript plugins (see [JS files comparison]({{< docsref "/getting-started/contents#js-files" >}}))
 
 This doesn't include documentation, source files, or any optional JavaScript dependencies (jQuery and Popper.js).
 
-<a href="{{ site.download.dist }}" class="btn btn-bd-primary" onclick="ga('send', 'event', 'Getting started', 'Download', 'Download Bootstrap');">Download</a>
+<a href="{{< param "download.dist" >}}" class="btn btn-bd-primary" onclick="ga('send', 'event', 'Getting started', 'Download', 'Download Bootstrap');">Download</a>
 
 ## Source files
 
@@ -24,32 +24,32 @@ Compile Bootstrap with your own asset pipeline by downloading our source Sass, J
 - Sass compiler (Libsass or Ruby Sass is supported) for compiling your CSS.
 - [Autoprefixer](https://github.com/postcss/autoprefixer) for CSS vendor prefixing
 
-Should you require [build tools]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/build-tools/#tooling-setup), they are included for developing Bootstrap and its docs, but they're likely unsuitable for your own purposes.
+Should you require [build tools]({{< docsref "/getting-started/build-tools#tooling-setup" >}}), they are included for developing Bootstrap and its docs, but they're likely unsuitable for your own purposes.
 
-<a href="{{ site.download.source }}" class="btn btn-bd-primary" onclick="ga('send', 'event', 'Getting started', 'Download', 'Download source');">Download source</a>
+<a href="{{< param "download.source" >}}" class="btn btn-bd-primary" onclick="ga('send', 'event', 'Getting started', 'Download', 'Download source');">Download source</a>
 
 ## Examples
 
-If you want to download and examine our [examples]({{ site.baseurl }}/docs/{{ site.docs_version }}/examples/), you can grab the already built examples:
+If you want to download and examine our [examples]({{< docsref "/examples" >}}), you can grab the already built examples:
 
-<a href="{{ site.download.dist_examples }}" class="btn btn-bd-primary" onclick="ga('send', 'event', 'Getting started', 'Download', 'Download Examples');">Download Examples</a>
+<a href="{{< param "download.dist_examples" >}}" class="btn btn-bd-primary" onclick="ga('send', 'event', 'Getting started', 'Download', 'Download Examples');">Download Examples</a>
 
 ## jsDelivr
 
 Skip the download with [jsDelivr](https://www.jsdelivr.com/) to deliver cached version of Bootstrap's compiled CSS and JS to your project.
 
-{% highlight html %}
-<link rel="stylesheet" href="{{ site.cdn.css }}" integrity="{{ site.cdn.css_hash }}" crossorigin="anonymous">
-<script src="{{ site.cdn.js_bundle }}" integrity="{{ site.cdn.js_bundle_hash }}" crossorigin="anonymous"></script>
-{% endhighlight %}
+```html
+<link rel="stylesheet" href="{{< param "cdn.css" >}}" integrity="{{< param "cdn.css_hash" >}}" crossorigin="anonymous">
+<script src="{{< param "cdn.js_bundle" >}}" integrity="{{< param "cdn.js_bundle_hash" >}}" crossorigin="anonymous"></script>
+```
 
 If you're using our compiled JavaScript and prefer to include Popper.js separately, add Popper.js before our JS, via a CDN preferably.
 
-{% highlight html %}
-<script src="{{ site.cdn.jquery }}" integrity="{{ site.cdn.jquery_hash }}" crossorigin="anonymous"></script>
-<script src="{{ site.cdn.popper }}" integrity="{{ site.cdn.popper_hash }}" crossorigin="anonymous"></script>
-<script src="{{ site.cdn.js }}" integrity="{{ site.cdn.js_hash }}" crossorigin="anonymous"></script>
-{% endhighlight %}
+```html
+<script src="{{< param "cdn.jquery" >}}" integrity="{{< param "cdn.jquery_hash" >}}" crossorigin="anonymous"></script>
+<script src="{{< param "cdn.popper" >}}" integrity="{{< param "cdn.popper_hash" >}}" crossorigin="anonymous"></script>
+<script src="{{< param "cdn.js" >}}" integrity="{{< param "cdn.js_hash" >}}" crossorigin="anonymous"></script>
+```
 
 ## Package managers
 
@@ -59,9 +59,9 @@ Pull in Bootstrap's **source files** into nearly any project with some of the mo
 
 Install Bootstrap in your Node.js powered apps with [the npm package](https://www.npmjs.com/package/bootstrap):
 
-{% highlight sh %}
+```sh
 npm install bootstrap
-{% endhighlight %}
+```
 
 `require('bootstrap')` will load all of Bootstrap's jQuery plugins onto the jQuery object. The `bootstrap` module itself does not export anything. You can manually load Bootstrap's jQuery plugins individually by loading the `/js/*.js` files under the package's top-level directory.
 
@@ -74,23 +74,23 @@ Bootstrap's `package.json` contains some additional metadata under the following
 
 Install Bootstrap in your Node.js powered apps with [the yarn package](https://yarnpkg.com/en/package/bootstrap):
 
-{% highlight sh %}
+```sh
 yarn add bootstrap
-{% endhighlight %}
+```
 
 ### RubyGems
 
 Install Bootstrap in your Ruby apps using [Bundler](https://bundler.io/) (**recommended**) and [RubyGems](https://rubygems.org/) by adding the following line to your [`Gemfile`](https://bundler.io/gemfile.html):
 
-{% highlight ruby %}
-gem 'bootstrap', '~> {{ site.current_ruby_version }}'
-{% endhighlight %}
+```ruby
+gem 'bootstrap', '~> {{< param current_ruby_version >}}'
+```
 
 Alternatively, if you're not using Bundler, you can install the gem by running this command:
 
-{% highlight sh %}
-gem install bootstrap -v {{ site.current_ruby_version }}
-{% endhighlight %}
+```sh
+gem install bootstrap -v {{< param current_ruby_version >}}
+```
 
 [See the gem's README](https://github.com/twbs/bootstrap-rubygem/blob/master/README.md) for further details.
 
@@ -98,18 +98,18 @@ gem install bootstrap -v {{ site.current_ruby_version }}
 
 You can also install and manage Bootstrap's Sass and JavaScript using [Composer](https://getcomposer.org/):
 
-{% highlight sh %}
-composer require twbs/bootstrap:{{ site.current_version }}
-{% endhighlight %}
+```sh
+composer require twbs/bootstrap:{{< param current_version >}}
+```
 
 ### NuGet
 
 If you develop in .NET, you can also install and manage Bootstrap's [CSS](https://www.nuget.org/packages/bootstrap/) or [Sass](https://www.nuget.org/packages/bootstrap.sass/) and JavaScript using [NuGet](https://www.nuget.org/):
 
-{% highlight powershell %}
+```powershell
 Install-Package bootstrap
-{% endhighlight %}
+```
 
-{% highlight powershell %}
+```powershell
 Install-Package bootstrap.sass
-{% endhighlight %}
+```
similarity index 67%
rename from site/docs/4.5/getting-started/introduction.md
rename to site/content/docs/4.5/getting-started/introduction.md
index 969b6da8592d16cb7f2caed1a960e96ca1528edb..06ccc0ba149cfff10956cab3656968479c1e97e3 100644 (file)
@@ -3,9 +3,7 @@ layout: docs
 title: Introduction
 description: Get started with Bootstrap, the world's most popular framework for building responsive, mobile-first sites, with jsDelivr and a template starter page.
 group: getting-started
-redirect_from:
-  - "/docs/"
-  - "/docs/4.5/"
+aliases:
   - "/docs/4.5/getting-started/"
   - "/docs/getting-started/"
   - "/getting-started/"
@@ -14,15 +12,15 @@ toc: true
 
 ## Quick start
 
-Looking to quickly add Bootstrap to your project? Use jsDelivr, a free open source CDN. Using a package manager or need to download the source files? [Head to the downloads page]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/download/).
+Looking to quickly add Bootstrap to your project? Use jsDelivr, a free open source CDN. Using a package manager or need to download the source files? [Head to the downloads page]({{< docsref "/getting-started/download" >}}).
 
 ### CSS
 
 Copy-paste the stylesheet `<link>` into your `<head>` before all other stylesheets to load our CSS.
 
-{% highlight html %}
-<link rel="stylesheet" href="{{ site.cdn.css }}" integrity="{{ site.cdn.css_hash }}" crossorigin="anonymous">
-{% endhighlight %}
+```html
+<link rel="stylesheet" href="{{< param "cdn.css" >}}" integrity="{{< param "cdn.css_hash" >}}" crossorigin="anonymous">
+```
 
 ### JS
 
@@ -32,22 +30,22 @@ Place **one of the following `<script>`s** near the end of your pages, right bef
 
 #### Bundle
 
-Include every Bootstrap JavaScript plugin with one of our two bundles. Both `bootstrap.bundle.js` and `bootstrap.bundle.min.js` include [Popper](https://popper.js.org/) for our tooltips and popovers, but not [jQuery](https://jquery.com/). Include jQuery first, then a Bootstrap JavaScript bundle. For more information about what's included in Bootstrap, please see our [contents]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/contents/#precompiled-bootstrap) section.
+Include every Bootstrap JavaScript plugin with one of our two bundles. Both `bootstrap.bundle.js` and `bootstrap.bundle.min.js` include [Popper](https://popper.js.org/) for our tooltips and popovers, but not [jQuery](https://jquery.com/). Include jQuery first, then a Bootstrap JavaScript bundle. For more information about what's included in Bootstrap, please see our [contents]({{< docsref "/getting-started/contents#precompiled-bootstrap" >}}) section.
 
-{% highlight html %}
-<script src="{{ site.cdn.jquery }}" integrity="{{ site.cdn.jquery_hash }}" crossorigin="anonymous"></script>
-<script src="{{ site.cdn.js_bundle }}" integrity="{{ site.cdn.js_bundle_hash }}" crossorigin="anonymous"></script>
-{% endhighlight %}
+```html
+<script src="{{< param "cdn.jquery" >}}" integrity="{{< param "cdn.jquery_hash" >}}" crossorigin="anonymous"></script>
+<script src="{{< param "cdn.js_bundle" >}}" integrity="{{< param "cdn.js_bundle_hash" >}}" crossorigin="anonymous"></script>
+```
 
 #### Separate
 
 If you decide to go with the separate scripts solution, Popper.js must come first (if you're using tooltips or popovers), and then our JavaScript plugins.
 
-{% highlight html %}
-<script src="{{ site.cdn.jquery }}" integrity="{{ site.cdn.jquery_hash }}" crossorigin="anonymous"></script>
-<script src="{{ site.cdn.popper }}" integrity="{{ site.cdn.popper_hash }}" crossorigin="anonymous"></script>
-<script src="{{ site.cdn.js }}" integrity="{{ site.cdn.js_hash }}" crossorigin="anonymous"></script>
-{% endhighlight %}
+```html
+<script src="{{< param "cdn.jquery" >}}" integrity="{{< param "cdn.jquery_hash" >}}" crossorigin="anonymous"></script>
+<script src="{{< param "cdn.popper" >}}" integrity="{{< param "cdn.popper_hash" >}}" crossorigin="anonymous"></script>
+<script src="{{< param "cdn.js" >}}" integrity="{{< param "cdn.js_hash" >}}" crossorigin="anonymous"></script>
+```
 
 #### Components
 
@@ -55,7 +53,7 @@ Curious which components explicitly require jQuery, our JavaScript, and Popper.j
 
 <details>
 <summary class="text-primary mb-3">Show components requiring JavaScript</summary>
-{% capture markdown %}
+{{< markdown >}}
 - Alerts for dismissing
 - Buttons for toggling states and checkbox/radio functionality
 - Carousel for all slide behaviors, controls, and indicators
@@ -63,18 +61,16 @@ Curious which components explicitly require jQuery, our JavaScript, and Popper.j
 - Dropdowns for displaying and positioning (also requires [Popper.js](https://popper.js.org/))
 - Modals for displaying, positioning, and scroll behavior
 - Navbar for extending our Collapse plugin to implement responsive behavior
-- Toasts for displaying and dismissing
 - Tooltips and popovers for displaying and positioning (also requires [Popper.js](https://popper.js.org/))
 - Scrollspy for scroll behavior and navigation updates
-{% endcapture %}
-{{ markdown | markdownify }}
+{{< /markdown >}}
 </details>
 
 ## Starter template
 
 Be sure to have your pages set up with the latest design and development standards. That means using an HTML5 doctype and including a viewport meta tag for proper responsive behaviors. Put it all together and your pages should look like this:
 
-{% highlight html %}
+```html
 <!doctype html>
 <html lang="en">
   <head>
@@ -83,7 +79,7 @@ Be sure to have your pages set up with the latest design and development standar
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
 
     <!-- Bootstrap CSS -->
-    <link rel="stylesheet" href="{{ site.cdn.css }}" integrity="{{ site.cdn.css_hash }}" crossorigin="anonymous">
+    <link rel="stylesheet" href="{{< param "cdn.css" >}}" integrity="{{< param "cdn.css_hash" >}}" crossorigin="anonymous">
 
     <title>Hello, world!</title>
   </head>
@@ -93,19 +89,19 @@ Be sure to have your pages set up with the latest design and development standar
     <!-- Optional JavaScript; choose one of the two! -->
 
     <!-- Option 1: jQuery and Bootstrap Bundle (includes Popper) -->
-    <script src="{{ site.cdn.jquery }}" integrity="{{ site.cdn.jquery_hash }}" crossorigin="anonymous"></script>
-    <script src="{{ site.cdn.js_bundle }}" integrity="{{ site.cdn.js_bundle_hash }}" crossorigin="anonymous"></script>
+    <script src="{{< param "cdn.jquery" >}}" integrity="{{< param "cdn.jquery_hash" >}}" crossorigin="anonymous"></script>
+    <script src="{{< param "cdn.js_bundle" >}}" integrity="{{< param "cdn.js_bundle_hash" >}}" crossorigin="anonymous"></script>
 
     <!-- Option 2: jQuery, Popper.js, and Bootstrap JS
-    <script src="{{ site.cdn.jquery }}" integrity="{{ site.cdn.jquery_hash }}" crossorigin="anonymous"></script>
-    <script src="{{ site.cdn.popper }}" integrity="{{ site.cdn.popper_hash }}" crossorigin="anonymous"></script>
-    <script src="{{ site.cdn.js }}" integrity="{{ site.cdn.js_hash }}" crossorigin="anonymous"></script>
+    <script src="{{< param "cdn.jquery" >}}" integrity="{{< param "cdn.jquery_hash" >}}" crossorigin="anonymous"></script>
+    <script src="{{< param "cdn.popper" >}}" integrity="{{< param "cdn.popper_hash" >}}" crossorigin="anonymous"></script>
+    <script src="{{< param "cdn.js" >}}" integrity="{{< param "cdn.js_hash" >}}" crossorigin="anonymous"></script>
     -->
   </body>
 </html>
-{% endhighlight %}
+```
 
-That's all you need for overall page requirements. Visit the [Layout docs]({{ site.baseurl }}/docs/{{ site.docs_version }}/layout/overview/) or [our official examples]({{ site.baseurl }}/docs/{{ site.docs_version }}/examples/) to start laying out your site's content and components.
+That's all you need for overall page requirements. Visit the [Layout docs]({{< docsref "/layout/overview" >}}) or [our official examples]({{< docsref "/examples" >}}) to start laying out your site's content and components.
 
 ## Important globals
 
@@ -115,20 +111,20 @@ Bootstrap employs a handful of important global styles and settings that you'll
 
 Bootstrap requires the use of the HTML5 doctype. Without it, you'll see some funky incomplete styling, but including it shouldn't cause any considerable hiccups.
 
-{% highlight html %}
+```html
 <!doctype html>
 <html lang="en">
   ...
 </html>
-{% endhighlight %}
+```
 
 ### Responsive meta tag
 
 Bootstrap is developed *mobile first*, a strategy in which we optimize code for mobile devices first and then scale up components as necessary using CSS media queries. To ensure proper rendering and touch zooming for all devices, **add the responsive viewport meta tag** to your `<head>`.
 
-{% highlight html %}
+```html
 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
-{% endhighlight %}
+```
 
 You can see an example of this in action in the [starter template](#starter-template).
 
@@ -138,11 +134,11 @@ For more straightforward sizing in CSS, we switch the global `box-sizing` value
 
 On the rare occasion you need to override it, use something like the following:
 
-{% highlight css %}
+```css
 .selector-for-some-widget {
   box-sizing: content-box;
 }
-{% endhighlight %}
+```
 
 With the above snippet, nested elements—including generated content via `::before` and `::after`—will all inherit the specified `box-sizing` for that `.selector-for-some-widget`.
 
@@ -150,17 +146,17 @@ Learn more about [box model and sizing at CSS Tricks](https://css-tricks.com/box
 
 ### Reboot
 
-For improved cross-browser rendering, we use [Reboot]({{ site.baseurl }}/docs/{{ site.docs_version }}/content/reboot/) to correct inconsistencies across browsers and devices while providing slightly more opinionated resets to common HTML elements.
+For improved cross-browser rendering, we use [Reboot]({{< docsref "/content/reboot" >}}) to correct inconsistencies across browsers and devices while providing slightly more opinionated resets to common HTML elements.
 
 ## Community
 
 Stay up to date on the development of Bootstrap and reach out to the community with these helpful resources.
 
-- Follow [@getbootstrap on Twitter](https://twitter.com/{{ site.twitter }}).
-- Read and subscribe to [The Official Bootstrap Blog]({{ site.blog }}/).
-- Join [the official Slack room]({{ site.slack }}/).
+- Follow [@getbootstrap on Twitter](https://twitter.com/{{< param twitter >}}).
+- Read and subscribe to [The Official Bootstrap Blog]({{< param blog >}}).
+- Join [the official Slack room]({{< param slack >}}).
 - Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##bootstrap` channel.
 - Implementation help may be found at Stack Overflow (tagged [`bootstrap-4`](https://stackoverflow.com/questions/tagged/bootstrap-4)).
 - Developers should use the keyword `bootstrap` on packages which modify or add to the functionality of Bootstrap when distributing through [npm](https://www.npmjs.com/search?q=keywords:bootstrap) or similar delivery mechanisms for maximum discoverability.
 
-You can also follow [@getbootstrap on Twitter](https://twitter.com/{{ site.twitter }}) for the latest gossip and awesome music videos.
+You can also follow [@getbootstrap on Twitter](https://twitter.com/{{< param twitter >}}) for the latest gossip and awesome music videos.
similarity index 89%
rename from site/docs/4.5/getting-started/javascript.md
rename to site/content/docs/4.5/getting-started/javascript.md
index 058737f91c48bf71c3fc4f3c15fdbe709b03c611..015ea5fdb2eaa69abfb60104aa1cae27a2fd25c9 100644 (file)
@@ -14,7 +14,7 @@ If you use a bundler (Webpack, Rollup...), you can use `/js/dist/*.js` files whi
 
 ## Dependencies
 
-Some plugins and CSS components depend on other plugins. If you include plugins individually, make sure to check for these dependencies in the docs. Also note that **all plugins depend on jQuery** (this means jQuery must be included **before** the plugin files). [Consult our `package.json`]({{ site.repo }}/blob/v{{ site.current_version }}/package.json) to see which versions of jQuery are supported.
+Some plugins and CSS components depend on other plugins. If you include plugins individually, make sure to check for these dependencies in the docs. Also note that **all plugins depend on jQuery** (this means jQuery must be included **before** the plugin files). [Consult our `package.json`]({{< param repo >}}/blob/v{{< param current_version >}}/package.json) to see which versions of jQuery are supported.
 
 Our dropdowns, popovers and tooltips also depend on [Popper.js](https://popper.js.org/).
 
@@ -24,23 +24,22 @@ Nearly all Bootstrap plugins can be enabled and configured through HTML alone wi
 
 However, in some situations it may be desirable to disable this functionality. To disable the data attribute API, unbind all events on the document namespaced with `data-api` like so:
 
-{% highlight js %}
+```js
 $(document).off('.data-api')
-{% endhighlight %}
+```
 
 Alternatively, to target a specific plugin, just include the plugin's name as a namespace along with the data-api namespace like this:
 
-{% highlight js %}
+```js
 $(document).off('.alert.data-api')
-{% endhighlight %}
+```
 
-{% capture callout %}
+{{< callout warning >}}
 ## Selectors
 
 Currently to query DOM elements we use the native methods `querySelector` and `querySelectorAll` for performance reasons, so you have to use [valid selectors](https://www.w3.org/TR/CSS21/syndata.html#value-def-identifier).
 If you use special selectors, for example: `collapse:Example` be sure to escape them.
-{% endcapture %}
-{% include callout.html content=callout type="warning" %}
+{{< /callout >}}
 
 ## Events
 
@@ -48,29 +47,29 @@ Bootstrap provides custom events for most plugins' unique actions. Generally, th
 
 All infinitive events provide [`preventDefault()`](https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault) functionality. This provides the ability to stop the execution of an action before it starts. Returning false from an event handler will also automatically call `preventDefault()`.
 
-{% highlight js %}
+```js
 $('#myModal').on('show.bs.modal', function (e) {
   if (!data) {
     return e.preventDefault() // stops modal from being shown
   }
 })
-{% endhighlight %}
+```
 
 ## Programmatic API
 
 We also believe you should be able to use all Bootstrap plugins purely through the JavaScript API. All public APIs are single, chainable methods, and return the collection acted upon.
 
-{% highlight js %}
+```js
 $('.btn.danger').button('toggle').addClass('fat')
-{% endhighlight %}
+```
 
 All methods should accept an optional options object, a string which targets a particular method, or nothing (which initiates a plugin with default behavior):
 
-{% highlight js %}
+```js
 $('#myModal').modal() // initialized with defaults
 $('#myModal').modal({ keyboard: false }) // initialized with no keyboard
 $('#myModal').modal('show') // initializes and invokes show immediately
-{% endhighlight %}
+```
 
 Each plugin also exposes its raw constructor on a `Constructor` property: `$.fn.popover.Constructor`. If you'd like to get a particular plugin instance, retrieve it directly from an element: `$('[rel="popover"]').data('popover')`.
 
@@ -80,59 +79,58 @@ All programmatic API methods are **asynchronous** and return to the caller once
 
 In order to execute an action once the transition is complete, you can listen to the corresponding event.
 
-{% highlight js %}
+```js
 $('#myCollapse').on('shown.bs.collapse', function (e) {
   // Action to execute once the collapsible area is expanded
 })
-{% endhighlight %}
+```
 
 In addition a method call on a **transitioning component will be ignored**.
 
-{% highlight js %}
+```js
 $('#myCarousel').on('slid.bs.carousel', function (e) {
   $('#myCarousel').carousel('2') // Will slide to the slide 2 as soon as the transition to slide 1 is finished
 })
 
 $('#myCarousel').carousel('1') // Will start sliding to the slide 1 and returns to the caller
 $('#myCarousel').carousel('2') // !! Will be ignored, as the transition to the slide 1 is not finished !!
-{% endhighlight %}
+```
 
 ### Default settings
 
 You can change the default settings for a plugin by modifying the plugin's `Constructor.Default` object:
 
-{% highlight js %}
+```js
 // changes default for the modal plugin's `keyboard` option to false
 $.fn.modal.Constructor.Default.keyboard = false
-{% endhighlight %}
+```
 
 ## No conflict
 
 Sometimes it is necessary to use Bootstrap plugins with other UI frameworks. In these circumstances, namespace collisions can occasionally occur. If this happens, you may call `.noConflict` on the plugin you wish to revert the value of.
 
-{% highlight js %}
+```js
 var bootstrapButton = $.fn.button.noConflict() // return $.fn.button to previously assigned value
 $.fn.bootstrapBtn = bootstrapButton // give $().bootstrapBtn the Bootstrap functionality
-{% endhighlight %}
+```
 
 ## Version numbers
 
 The version of each of Bootstrap's jQuery plugins can be accessed via the `VERSION` property of the plugin's constructor. For example, for the tooltip plugin:
 
-{% highlight js %}
-$.fn.tooltip.Constructor.VERSION // => "{{ site.current_version }}"
-{% endhighlight %}
+```js
+$.fn.tooltip.Constructor.VERSION // => "{{< param current_version >}}"
+```
 
 ## No special fallbacks when JavaScript is disabled
 
 Bootstrap's plugins don't fall back particularly gracefully when JavaScript is disabled. If you care about the user experience in this case, use [`<noscript>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/noscript) to explain the situation (and how to re-enable JavaScript) to your users, and/or add your own custom fallbacks.
 
-{% capture callout %}
+{{< callout warning >}}
 ##### Third-party libraries
 
 **Bootstrap does not officially support third-party JavaScript libraries** like Prototype or jQuery UI. Despite `.noConflict` and namespaced events, there may be compatibility problems that you need to fix on your own.
-{% endcapture %}
-{% include callout.html content=callout type="warning" %}
+{{< /callout >}}
 
 ## Util
 
@@ -146,7 +144,7 @@ Tooltips and Popovers use our built-in sanitizer to sanitize options which accep
 
 The default `whiteList` value is the following:
 
-{% highlight js %}
+```js
 var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i
 var DefaultWhitelist = {
   // Global attributes allowed on any supplied element below.
@@ -181,11 +179,11 @@ var DefaultWhitelist = {
   u: [],
   ul: []
 }
-{% endhighlight %}
+```
 
 If you want to add new values to this default `whiteList` you can do the following:
 
-{% highlight js %}
+```js
 var myDefaultWhiteList = $.fn.tooltip.Constructor.Default.whiteList
 
 // To allow table elements
@@ -198,14 +196,14 @@ myDefaultWhiteList.td = ['data-option']
 // Be careful about your regular expressions being too lax
 var myCustomRegex = /^data-my-app-[\w-]+/
 myDefaultWhiteList['*'].push(myCustomRegex)
-{% endhighlight %}
+```
 
 If you want to bypass our sanitizer because you prefer to use a dedicated library, for example [DOMPurify](https://www.npmjs.com/package/dompurify), you should do the following:
 
-{% highlight js %}
+```js
 $('#yourTooltip').tooltip({
   sanitizeFn: function (content) {
     return DOMPurify.sanitize(content)
   }
 })
-{% endhighlight %}
+```
similarity index 84%
rename from site/docs/4.5/getting-started/theming.md
rename to site/content/docs/4.5/getting-started/theming.md
index 8f4b00c3766c716af6e6373b2a6752710c7eb01e..7e942001700d153a8d5be7995e7e24a7d20c21c3 100644 (file)
@@ -20,7 +20,7 @@ Utilize our source Sass files to take advantage of variables, maps, mixins, and
 
 Whenever possible, avoid modifying Bootstrap's core files. For Sass, that means creating your own stylesheet that imports Bootstrap so you can modify and extend it. Assuming you're using a package manager like npm, you'll have a file structure that looks like this:
 
-{% highlight plaintext %}
+```text
 your-project/
 ├── scss
 │   └── custom.scss
@@ -28,31 +28,31 @@ your-project/
     └── bootstrap
         ├── js
         └── scss
-{% endhighlight %}
+```
 
 If you've downloaded our source files and aren't using a package manager, you'll want to manually setup something similar to that structure, keeping Bootstrap's source files separate from your own.
 
-{% highlight plaintext %}
+```text
 your-project/
 ├── scss
 │   └── custom.scss
 └── bootstrap/
     ├── js
     └── scss
-{% endhighlight %}
+```
 
 ### Importing
 
 In your `custom.scss`, you'll import Bootstrap's source Sass files. You have two options: include all of Bootstrap, or pick the parts you need. We encourage the latter, though be aware there are some requirements and dependencies across our components. You also will need to include some JavaScript for our plugins.
 
-{% highlight scss %}
+```scss
 // Custom.scss
 // Option A: Include all of Bootstrap
 
 @import "../node_modules/bootstrap/scss/bootstrap";
-{% endhighlight %}
+```
 
-{% highlight scss %}
+```scss
 // Custom.scss
 // Option B: Include parts of Bootstrap
 
@@ -67,7 +67,7 @@ In your `custom.scss`, you'll import Bootstrap's source Sass files. You have two
 @import "../node_modules/bootstrap/scss/images";
 @import "../node_modules/bootstrap/scss/code";
 @import "../node_modules/bootstrap/scss/grid";
-{% endhighlight %}
+```
 
 With that setup in place, you can begin to modify any of the Sass variables and maps in your `custom.scss`. You can also start to add parts of Bootstrap under the `// Optional` section as needed. We suggest using the full import stack from our `bootstrap.scss` file as your starting point.
 
@@ -81,14 +81,14 @@ Variable overrides within the same Sass file can come before or after the defaul
 
 Here's an example that changes the `background-color` and `color` for the `<body>` when importing and compiling Bootstrap via npm:
 
-{% highlight scss %}
+```scss
 // Your variable overrides
 $body-bg: #000;
 $body-color: #111;
 
 // Bootstrap and its default variables
 @import "../node_modules/bootstrap/scss/bootstrap";
-{% endhighlight %}
+```
 
 Repeat as necessary for any variable in Bootstrap, including the global options below.
 
@@ -102,28 +102,28 @@ Some of our Sass maps are merged into empty ones by default. This is done to all
 
 To modify an existing color in our `$theme-colors` map, add the following to your custom Sass file:
 
-{% highlight scss %}
+```scss
 $theme-colors: (
   "primary": #0074d9,
   "danger": #ff4136
 );
-{% endhighlight %}
+```
 
 #### Add to map
 
 To add a new color to `$theme-colors`, add the new key and value:
 
-{% highlight scss %}
+```scss
 $theme-colors: (
   "custom-color": #900
 );
-{% endhighlight %}
+```
 
 #### Remove from map
 
 To remove colors from `$theme-colors`, or any other map, use `map-remove`. Be aware you must insert it between our requirements and options:
 
-{% highlight scss %}
+```scss
 // Required
 @import "../node_modules/bootstrap/scss/functions";
 @import "../node_modules/bootstrap/scss/variables";
@@ -136,7 +136,7 @@ $theme-colors: map-remove($theme-colors, "info", "light", "dark");
 @import "../node_modules/bootstrap/scss/reboot";
 @import "../node_modules/bootstrap/scss/type";
 ...
-{% endhighlight %}
+```
 
 #### Required keys
 
@@ -148,7 +148,7 @@ For example, we use the `primary`, `success`, and `danger` keys from `$theme-col
 
 Bootstrap utilizes several Sass functions, but only a subset are applicable to general theming. We've included three functions for getting values from the color maps:
 
-{% highlight scss %}
+```scss
 @function color($key: "blue") {
   @return map-get($colors, $key);
 }
@@ -160,20 +160,20 @@ Bootstrap utilizes several Sass functions, but only a subset are applicable to g
 @function gray($key: "100") {
   @return map-get($grays, $key);
 }
-{% endhighlight %}
+```
 
 These allow you to pick one color from a Sass map much like how you'd use a color variable from v3.
 
-{% highlight scss %}
+```scss
 .custom-element {
   color: gray("100");
   background-color: theme-color("dark");
 }
-{% endhighlight %}
+```
 
 We also have another function for getting a particular _level_ of color from the `$theme-colors` map. Negative level values will lighten the color, while higher levels will darken.
 
-{% highlight scss %}
+```scss
 @function theme-color-level($color-name: "primary", $level: 0) {
   $color: theme-color($color-name);
   $color-base: if($level > 0, #000, #fff);
@@ -181,15 +181,15 @@ We also have another function for getting a particular _level_ of color from the
 
   @return mix($color-base, $color, $level * $theme-color-interval);
 }
-{% endhighlight %}
+```
 
 In practice, you'd call the function and pass in two parameters: the name of the color from `$theme-colors` (e.g., primary or danger) and a numeric level.
 
-{% highlight scss %}
+```scss
 .custom-element {
   color: theme-color-level(primary, -10);
 }
-{% endhighlight %}
+```
 
 Additional functions could be added in the future or your own custom Sass to create level functions for additional Sass maps, or even a generic one if you wanted to be more verbose.
 
@@ -199,29 +199,29 @@ An additional function we include in Bootstrap is the color contrast function, `
 
 For example, to generate color swatches from our `$theme-colors` map:
 
-{% highlight scss %}
+```scss
 @each $color, $value in $theme-colors {
   .swatch-#{$color} {
     color: color-yiq($value);
   }
 }
-{% endhighlight %}
+```
 
 It can also be used for one-off contrast needs:
 
-{% highlight scss %}
+```scss
 .custom-element {
   color: color-yiq(#000); // returns `color: #fff`
 }
-{% endhighlight %}
+```
 
 You can also specify a base color with our color map functions:
 
-{% highlight scss %}
+```scss
 .custom-element {
   color: color-yiq(theme-color("dark")); // returns `color: #fff`
 }
-{% endhighlight %}
+```
 
 #### Escape SVG
 
@@ -233,7 +233,7 @@ We use the `add` and `subtract` functions to wrap the CSS `calc` function. The p
 
 Example where the calc is valid:
 
-{% highlight scss %}
+```scss
 $border-radius: .25rem;
 $border-width: 1px;
 
@@ -246,11 +246,11 @@ $border-width: 1px;
   // Output the same calc(.25rem - 1px) as above
   border-radius: subtract($border-radius, $border-width);
 }
-{% endhighlight %}
+```
 
 Example where the calc is invalid:
 
-{% highlight scss %}
+```scss
 $border-radius: .25rem;
 $border-width: 0;
 
@@ -263,7 +263,7 @@ $border-width: 0;
   // Output .25rem
   border-radius: subtract($border-radius, $border-width);
 }
-{% endhighlight %}
+```
 
 ## Sass options
 
@@ -273,18 +273,18 @@ You can find and customize these variables for key global options in Bootstrap's
 
 | Variable                                     | Values                             | Description                                                                            |
 | -------------------------------------------- | ---------------------------------- | -------------------------------------------------------------------------------------- |
-| `$spacer`                                    | `1rem` (default), or any value > 0 | Specifies the default spacer value to programmatically generate our [spacer utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/spacing/). |
+| `$spacer`                                    | `1rem` (default), or any value > 0 | Specifies the default spacer value to programmatically generate our [spacer utilities]({{< docsref "/utilities/spacing" >}}). |
 | `$enable-rounded`                            | `true` (default) or `false`        | Enables predefined `border-radius` styles on various components. |
 | `$enable-shadows`                            | `true` or `false` (default)        | Enables predefined `box-shadow` styles on various components. |
 | `$enable-gradients`                          | `true` or `false` (default)        | Enables predefined gradients via `background-image` styles on various components. |
 | `$enable-transitions`                        | `true` (default) or `false`        | Enables predefined `transition`s on various components. |
-| `$enable-prefers-reduced-motion-media-query` | `true` (default) or `false`        | Enables the [`prefers-reduced-motion` media query]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/accessibility/#reduced-motion), which suppresses certain animations/transitions based on the users' browser/operating system preferences. |
+| `$enable-prefers-reduced-motion-media-query` | `true` (default) or `false`        | Enables the [`prefers-reduced-motion` media query]({{< docsref "/getting-started/accessibility#reduced-motion" >}}), which suppresses certain animations/transitions based on the users' browser/operating system preferences. |
 | `$enable-hover-media-query`                  | `true` or `false` (default)        | **Deprecated** |
 | `$enable-grid-classes`                       | `true` (default) or `false`        | Enables the generation of CSS classes for the grid system (e.g., `.container`, `.row`, `.col-md-1`, etc.). |
 | `$enable-caret`                              | `true` (default) or `false`        | Enables pseudo element caret on `.dropdown-toggle`. |
 | `$enable-pointer-cursor-for-buttons`         | `true` (default) or `false`        | Add "hand" cursor to non-disabled button elements. |
 | `$enable-print-styles`                       | `true` (default) or `false`        | Enables styles for optimizing printing. |
-| `$enable-responsive-font-sizes`              | `true` or `false` (default)        | Enables [responsive font sizes]({{ site.baseurl }}/docs/{{ site.docs_version }}/content/typography/#responsive-font-sizes). |
+| `$enable-responsive-font-sizes`              | `true` or `false` (default)        | Enables [responsive font sizes]({{< docsref "/content/typography#responsive-font-sizes" >}}). |
 | `$enable-validation-icons`                   | `true` (default) or `false`        | Enables `background-image` icons within textual inputs and some custom forms for validation states. |
 | `$enable-deprecation-messages`               | `true` or `false` (default)        | Set to `true` to show warnings when using any of the deprecated mixins and functions that are planned to be removed in `v5`. |
 
@@ -297,42 +297,45 @@ Many of Bootstrap's various components and utilities are built through a series
 All colors available in Bootstrap 4, are available as Sass variables and a Sass map in `scss/_variables.scss` file. This will be expanded upon in subsequent minor releases to add additional shades, much like the [grayscale palette](#grays) we already include.
 
 <div class="row">
-  {% for color in site.data.colors %}
-    {% unless color.name == "white" or color.name == "gray" or color.name == "gray-dark" %}
+  {{< theme-colors.inline >}}
+  {{- range $.Site.Data.colors }}
+    {{- if (and (not (eq .name "white")) (not (eq .name "gray")) (not (eq .name "gray-dark"))) }}
     <div class="col-md-4">
-        <div class="p-3 mb-3 swatch-{{ color.name }}">{{ color.name | capitalize }}</div>
+      <div class="p-3 mb-3 swatch-{{ .name }}">{{ .name | title }}</div>
     </div>
-    {% endunless %}
-  {% endfor %}
+    {{ end -}}
+  {{ end -}}
+  {{< /theme-colors.inline >}}
 </div>
 
 Here's how you can use these in your Sass:
 
-{% highlight scss %}
+```scss
 // With variable
 .alpha { color: $purple; }
 
 // From the Sass map with our `color()` function
 .beta { color: color("purple"); }
-{% endhighlight %}
+```
 
-[Color utility classes]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/colors/) are also available for setting `color` and `background-color`.
+[Color utility classes]({{< docsref "/utilities/colors" >}}) are also available for setting `color` and `background-color`.
 
-{% capture callout %}
+{{< callout info >}}
 In the future, we'll aim to provide Sass maps and variables for shades of each color as we've done with the grayscale colors below.
-{% endcapture %}
-{% include callout.html content=callout type="info" %}
+{{< /callout >}}
 
 ### Theme colors
 
 We use a subset of all colors to create a smaller color palette for generating color schemes, also available as Sass variables and a Sass map in Bootstrap's `scss/_variables.scss` file.
 
 <div class="row">
-  {% for color in site.data.theme-colors %}
+  {{< theme-colors.inline >}}
+  {{- range (index $.Site.Data "theme-colors") }}
     <div class="col-md-4">
-      <div class="p-3 mb-3 bg-{{ color.name }} {% if color.name == "light" or color.name == "warning" %}text-dark{% else %}text-white{% endif %}">{{ color.name | capitalize }}</div>
+      <div class="p-3 mb-3 bg-{{ .name }} {{ if (or (eq .name "light") (eq .name "warning")) }}text-dark{{ else }}text-white{{ end }}">{{ .name | title }}</div>
     </div>
-  {% endfor %}
+  {{ end -}}
+  {{< /theme-colors.inline >}}
 </div>
 
 ### Grays
@@ -341,15 +344,17 @@ An expansive set of gray variables and a Sass map in `scss/_variables.scss` for
 
 <div class="row mb-3">
   <div class="col-md-4">
-    {% for color in site.data.grays %}
-      <div class="p-3 swatch-{{ color.name }}">{{ color.name | capitalize }}</div>
-    {% endfor %}
+    {{< theme-colors.inline >}}
+    {{- range $.Site.Data.grays }}
+      <div class="p-3 swatch-{{ .name }}">{{ .name | title }}</div>
+    {{ end -}}
+  {{< /theme-colors.inline >}}
   </div>
 </div>
 
 Within `scss/_variables.scss`, you'll find Bootstrap's color variables and Sass map. Here's an example of the `$colors` Sass map:
 
-{% highlight scss %}
+```scss
 $colors: (
   "blue": $blue,
   "indigo": $indigo,
@@ -365,7 +370,7 @@ $colors: (
   "gray": $gray-600,
   "gray-dark": $gray-800
 ) !default;
-{% endhighlight %}
+```
 
 Add, remove, or modify values within the map to update how they're used in many other components. Unfortunately at this time, not _every_ component utilizes this Sass map. Future updates will strive to improve upon this. Until then, plan on making use of the `${color}` variables and this Sass map.
 
@@ -379,7 +384,7 @@ Many of Bootstrap's components are built with a base-modifier class approach. Th
 
 Here are two examples of how we loop over the `$theme-colors` map to generate modifiers to the `.alert` component and all our `.bg-*` background utilities.
 
-{% highlight scss %}
+```scss
 // Generate alert modifier classes
 @each $color, $value in $theme-colors {
   .alert-#{$color} {
@@ -391,13 +396,13 @@ Here are two examples of how we loop over the `$theme-colors` map to generate mo
 @each $color, $value in $theme-colors {
   @include bg-variant('.bg-#{$color}', $value);
 }
-{% endhighlight %}
+```
 
 ### Responsive
 
 These Sass loops aren't limited to color maps, either. You can also generate responsive variations of your components or utilities. Take for example our responsive text alignment utilities where we mix an `@each` loop for the `$grid-breakpoints` Sass map with a media query include.
 
-{% highlight scss %}
+```scss
 @each $breakpoint in map-keys($grid-breakpoints) {
   @include media-breakpoint-up($breakpoint) {
     $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
@@ -407,7 +412,7 @@ These Sass loops aren't limited to color maps, either. You can also generate res
     .text#{$infix}-center { text-align: center !important; }
   }
 }
-{% endhighlight %}
+```
 
 Should you need to modify your `$grid-breakpoints`, your changes will apply to all the loops iterating over that map.
 
@@ -419,51 +424,32 @@ Bootstrap 4 includes around two dozen [CSS custom properties (variables)](https:
 
 Here are the variables we include (note that the `:root` is required). They're located in our `_root.scss` file.
 
-{% highlight css %}
-:root {
-  --blue: #007bff;
-  --indigo: #6610f2;
-  --purple: #6f42c1;
-  --pink: #e83e8c;
-  --red: #dc3545;
-  --orange: #fd7e14;
-  --yellow: #ffc107;
-  --green: #28a745;
-  --teal: #20c997;
-  --cyan: #17a2b8;
-  --white: #fff;
-  --gray: #6c757d;
-  --gray-dark: #343a40;
-  --primary: #007bff;
-  --secondary: #6c757d;
-  --success: #28a745;
-  --info: #17a2b8;
-  --warning: #ffc107;
-  --danger: #dc3545;
-  --light: #f8f9fa;
-  --dark: #343a40;
-  --breakpoint-xs: 0;
-  --breakpoint-sm: 576px;
-  --breakpoint-md: 768px;
-  --breakpoint-lg: 992px;
-  --breakpoint-xl: 1200px;
-  --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
-  --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
-}
-{% endhighlight %}
+```css
+{{< root.inline >}}
+{{- $css := readFile "dist/css/bootstrap.css" -}}
+{{- $match := findRE ":root {([^}]*)}" $css 1 -}}
+
+{{- if (eq (len $match) 0) -}}
+{{- errorf "Got no matches for :root in %q!" $.Page.Path -}}
+{{- end -}}
+
+{{- index $match 0 -}}
+
+{{< /root.inline >}}
+```
 
 ### Examples
 
 CSS variables offer similar flexibility to Sass's variables, but without the need for compilation before being served to the browser. For example, here we're resetting our page's font and link styles with CSS variables.
 
-{% highlight css %}
+```css
 body {
   font: 1rem/1.5 var(--font-family-sans-serif);
 }
 a {
   color: var(--blue);
 }
-{% endhighlight %}
+```
 
 ### Breakpoint variables
 
@@ -471,18 +457,18 @@ While we originally included breakpoints in our CSS variables (e.g., `--breakpoi
 
 Here's an example of **what's not supported:**
 
-{% highlight css %}
+```css
 @media (min-width: var(--breakpoint-sm)) {
   ...
 }
-{% endhighlight %}
+```
 
 And here's an example of **what is supported:**
 
-{% highlight css %}
+```css
 @media (min-width: 768px) {
   .custom-element {
     color: var(--primary);
   }
 }
-{% endhighlight %}
+```
similarity index 76%
rename from site/docs/4.5/getting-started/webpack.md
rename to site/content/docs/4.5/getting-started/webpack.md
index f58e434d6e81c5b2551eb89c574e78c3821dcc32..737f8eaa97b8de7763b89f6927d6386d5dba56d9 100644 (file)
@@ -8,23 +8,23 @@ toc: true
 
 ## Installing Bootstrap
 
-[Install bootstrap]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/download/#npm) as a Node.js module using npm.
+[Install bootstrap]({{< docsref "/getting-started/download#npm" >}}) as a Node.js module using npm.
 
 ## Importing JavaScript
 
-Import [Bootstrap's JavaScript]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/javascript/) by adding this line to your app's entry point (usually `index.js` or `app.js`):
+Import [Bootstrap's JavaScript]({{< docsref "/getting-started/javascript" >}}) by adding this line to your app's entry point (usually `index.js` or `app.js`):
 
-{% highlight js %}
+```js
 import 'bootstrap';
-{% endhighlight %}
+```
 
 Alternatively, you may **import plugins individually** as needed:
 
-{% highlight js %}
+```js
 import 'bootstrap/js/dist/util';
 import 'bootstrap/js/dist/alert';
 ...
-{% endhighlight %}
+```
 
 Bootstrap depends on [jQuery](https://jquery.com/) and [Popper](https://popper.js.org/),
 which are specified in the `peerDependencies` property; this means that you will have to make sure to add both of them
@@ -36,16 +36,16 @@ to your `package.json` using `npm install --save jquery popper.js`.
 
 To enjoy the full potential of Bootstrap and customize it to your needs, use the source files as a part of your project's bundling process.
 
-First, create your own `_custom.scss` and use it to override the [built-in custom variables]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/theming/). Then, use your main Sass file to import your custom variables, followed by Bootstrap:
+First, create your own `_custom.scss` and use it to override the [built-in custom variables]({{< docsref "/getting-started/theming" >}}). Then, use your main Sass file to import your custom variables, followed by Bootstrap:
 
-{% highlight scss %}
+```scss
 @import "custom";
 @import "~bootstrap/scss/bootstrap";
-{% endhighlight %}
+```
 
 For Bootstrap to compile, make sure you install and use the required loaders: [sass-loader](https://github.com/webpack-contrib/sass-loader), [postcss-loader](https://github.com/webpack-contrib/postcss-loader) with [Autoprefixer](https://github.com/postcss/autoprefixer#webpack). With minimal setup, your webpack config should include this rule or similar:
 
-{% highlight js %}
+```js
 ...
 {
   test: /\.(scss)$/,
@@ -67,19 +67,19 @@ For Bootstrap to compile, make sure you install and use the required loaders: [s
   }]
 },
 ...
-{% endhighlight %}
+```
 
 ### Importing Compiled CSS
 
 Alternatively, you may use Bootstrap's ready-to-use CSS by simply adding this line to your project's entry point:
 
-{% highlight js %}
+```js
 import 'bootstrap/dist/css/bootstrap.min.css';
-{% endhighlight %}
+```
 
 In this case you may use your existing rule for `css` without any special modifications to webpack config, except you don't need `sass-loader` just [style-loader](https://github.com/webpack-contrib/style-loader) and [css-loader](https://github.com/webpack-contrib/css-loader).
 
-{% highlight js %}
+```js
 ...
 module: {
   rules: [
@@ -90,4 +90,4 @@ module: {
   ]
 }
 ...
-{% endhighlight %}
+```
similarity index 88%
rename from site/docs/4.5/layout/grid.md
rename to site/content/docs/4.5/layout/grid.md
index d6c4679fe58015ac2cf2b80ea9d72696c0a4be59..1fbdb4d231bcb2c346fe54d08d95b77c22c6557c 100644 (file)
@@ -13,7 +13,7 @@ Bootstrap's grid system uses a series of containers, rows, and columns to layout
 **New to or unfamiliar with flexbox?** [Read this CSS Tricks flexbox guide](https://css-tricks.com/snippets/css/a-guide-to-flexbox/#flexbox-background) for background, terminology, guidelines, and code snippets.
 
 <div class="bd-example-row">
-{% capture example %}
+{{< example >}}
 <div class="container">
   <div class="row">
     <div class="col-sm">
@@ -27,8 +27,7 @@ Bootstrap's grid system uses a series of containers, rows, and columns to layout
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
 The above example creates three equal-width columns on small, medium, large, and extra large devices using our predefined grid classes. Those columns are centered in the page with the parent `.container`.
@@ -42,7 +41,7 @@ Breaking it down, here's how it works:
 - Column classes indicate the number of columns you'd like to use out of the possible 12 per row. So, if you want three equal-width columns across, you can use `.col-4`.
 - Column `width`s are set in percentages, so they're always fluid and sized relative to their parent element.
 - Columns have horizontal `padding` to create the gutters between individual columns, however, you can remove the `margin` from rows and `padding` from columns with `.no-gutters` on the `.row`.
-- To make the grid responsive, there are five grid breakpoints, one for each [responsive breakpoint]({{ site.baseurl }}/docs/{{ site.docs_version }}/layout/overview/#responsive-breakpoints): all breakpoints (extra small), small, medium, large, and extra large.
+- To make the grid responsive, there are five grid breakpoints, one for each [responsive breakpoint]({{< docsref "/layout/overview#responsive-breakpoints" >}}): all breakpoints (extra small), small, medium, large, and extra large.
 - Grid breakpoints are based on minimum width media queries, meaning **they apply to that one breakpoint and all those above it** (e.g., `.col-sm-4` applies to small, medium, large, and extra large devices, but not the first `xs` breakpoint).
 - You can use predefined grid classes (like `.col-4`) or [Sass mixins](#sass-mixins) for more semantic markup.
 
@@ -125,7 +124,7 @@ Utilize breakpoint-specific column classes for easy column sizing without an exp
 For example, here are two grid layouts that apply to every device and viewport, from `xs` to `xl`. Add any number of unit-less classes for each breakpoint you need and every column will be the same width.
 
 <div class="bd-example-row">
-{% capture example %}
+{{< example >}}
 <div class="container">
   <div class="row">
     <div class="col">
@@ -147,18 +146,17 @@ For example, here are two grid layouts that apply to every device and viewport,
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
 ### Equal-width multi-line
 
-Create equal-width columns that span multiple lines by inserting a `.w-100` where you want the columns to break to a new line. Make the breaks responsive by mixing `.w-100` with some [responsive display utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/display/).
+Create equal-width columns that span multiple lines by inserting a `.w-100` where you want the columns to break to a new line. Make the breaks responsive by mixing `.w-100` with some [responsive display utilities]({{< docsref "/utilities/display" >}}).
 
 There was a [Safari flexbox bug](https://github.com/philipwalton/flexbugs#flexbug-11) that prevented this from working without an explicit `flex-basis` or `border`. There are workarounds for older browser versions, but they shouldn't be necessary if your target browsers don't fall into the buggy versions.
 
 <div class="bd-example-row">
-{% capture example %}
+{{< example >}}
 <div class="container">
   <div class="row">
     <div class="col">col</div>
@@ -168,8 +166,7 @@ There was a [Safari flexbox bug](https://github.com/philipwalton/flexbugs#flexbu
     <div class="col">col</div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
 ### Setting one column width
@@ -177,7 +174,7 @@ There was a [Safari flexbox bug](https://github.com/philipwalton/flexbugs#flexbu
 Auto-layout for flexbox grid columns also means you can set the width of one column and have the sibling columns automatically resize around it. You may use predefined grid classes (as shown below), grid mixins, or inline widths. Note that the other columns will resize no matter the width of the center column.
 
 <div class="bd-example-row">
-{% capture example %}
+{{< example >}}
 <div class="container">
   <div class="row">
     <div class="col">
@@ -202,8 +199,7 @@ Auto-layout for flexbox grid columns also means you can set the width of one col
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
 ### Variable width content
@@ -211,7 +207,7 @@ Auto-layout for flexbox grid columns also means you can set the width of one col
 Use `col-{breakpoint}-auto` classes to size columns based on the natural width of their content.
 
 <div class="bd-example-row">
-{% capture example %}
+{{< example >}}
 <div class="container">
   <div class="row justify-content-md-center">
     <div class="col col-lg-2">
@@ -236,8 +232,7 @@ Use `col-{breakpoint}-auto` classes to size columns based on the natural width o
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
 ## Responsive classes
@@ -249,7 +244,7 @@ Bootstrap's grid includes five tiers of predefined classes for building complex
 For grids that are the same from the smallest of devices to the largest, use the `.col` and `.col-*` classes. Specify a numbered class when you need a particularly sized column; otherwise, feel free to stick to `.col`.
 
 <div class="bd-example-row">
-{% capture example %}
+{{< example >}}
 <div class="container">
   <div class="row">
     <div class="col">col</div>
@@ -262,8 +257,7 @@ For grids that are the same from the smallest of devices to the largest, use the
     <div class="col-4">col-4</div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
 ### Stacked to horizontal
@@ -271,7 +265,7 @@ For grids that are the same from the smallest of devices to the largest, use the
 Using a single set of `.col-sm-*` classes, you can create a basic grid system that starts out stacked and becomes horizontal at the small breakpoint (`sm`).
 
 <div class="bd-example-row">
-{% capture example %}
+{{< example >}}
 <div class="container">
   <div class="row">
     <div class="col-sm-8">col-sm-8</div>
@@ -283,8 +277,7 @@ Using a single set of `.col-sm-*` classes, you can create a basic grid system th
     <div class="col-sm">col-sm</div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
 ### Mix and match
@@ -292,7 +285,7 @@ Using a single set of `.col-sm-*` classes, you can create a basic grid system th
 Don't want your columns to simply stack in some grid tiers? Use a combination of different classes for each tier as needed. See the example below for a better idea of how it all works.
 
 <div class="bd-example-row">
-{% capture example %}
+{{< example >}}
 <div class="container">
   <!-- Stack the columns on mobile by making one full-width and the other half-width -->
   <div class="row">
@@ -313,8 +306,7 @@ Don't want your columns to simply stack in some grid tiers? Use a combination of
     <div class="col-6">.col-6</div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
 ### Gutters
@@ -323,15 +315,14 @@ Gutters can be responsively adjusted by breakpoint-specific padding and negative
 
 Here's an example of customizing the Bootstrap grid at the large (`lg`) breakpoint and above. We've increased the `.col` padding with `.px-lg-5`, counteracted that with `.mx-lg-n5` on the parent `.row` and then adjusted the `.container` wrapper with `.px-lg-5`.
 
-{% capture example %}
+{{< example >}}
 <div class="container px-lg-5">
   <div class="row mx-lg-n5">
     <div class="col py-3 px-lg-5 border bg-light">Custom column padding</div>
     <div class="col py-3 px-lg-5 border bg-light">Custom column padding</div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### Row columns
 
@@ -340,7 +331,7 @@ Use the responsive `.row-cols-*` classes to quickly set the number of columns th
 Use these row columns classes to quickly create basic grid layouts or to control your card layouts.
 
 <div class="bd-example-row">
-{% capture example %}
+{{< example >}}
 <div class="container">
   <div class="row row-cols-2">
     <div class="col">Column</div>
@@ -349,12 +340,11 @@ Use these row columns classes to quickly create basic grid layouts or to control
     <div class="col">Column</div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
 <div class="bd-example-row">
-{% capture example %}
+{{< example >}}
 <div class="container">
   <div class="row row-cols-3">
     <div class="col">Column</div>
@@ -363,12 +353,11 @@ Use these row columns classes to quickly create basic grid layouts or to control
     <div class="col">Column</div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
 <div class="bd-example-row">
-{% capture example %}
+{{< example >}}
 <div class="container">
   <div class="row row-cols-4">
     <div class="col">Column</div>
@@ -377,12 +366,11 @@ Use these row columns classes to quickly create basic grid layouts or to control
     <div class="col">Column</div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
 <div class="bd-example-row">
-{% capture example %}
+{{< example >}}
 <div class="container">
   <div class="row row-cols-4">
     <div class="col">Column</div>
@@ -391,12 +379,11 @@ Use these row columns classes to quickly create basic grid layouts or to control
     <div class="col">Column</div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
 <div class="bd-example-row">
-{% capture example %}
+{{< example >}}
 <div class="container">
   <div class="row row-cols-1 row-cols-sm-2 row-cols-md-4">
     <div class="col">Column</div>
@@ -405,13 +392,12 @@ Use these row columns classes to quickly create basic grid layouts or to control
     <div class="col">Column</div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
 You can also use the accompanying Sass mixin, `row-cols()`:
 
-{% highlight scss %}
+```scss
 .element {
   // Three columns to start
   @include row-cols(3);
@@ -421,7 +407,7 @@ You can also use the accompanying Sass mixin, `row-cols()`:
     @include row-cols(5);
   }
 }
-{% endhighlight %}
+```
 
 ## Alignment
 
@@ -430,7 +416,7 @@ Use flexbox alignment utilities to vertically and horizontally align columns. **
 ### Vertical alignment
 
 <div class="bd-example-row bd-example-row-flex-cols">
-{% capture example %}
+{{< example >}}
 <div class="container">
   <div class="row align-items-start">
     <div class="col">
@@ -466,12 +452,11 @@ Use flexbox alignment utilities to vertically and horizontally align columns. **
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
 <div class="bd-example-row bd-example-row-flex-cols">
-{% capture example %}
+{{< example >}}
 <div class="container">
   <div class="row">
     <div class="col align-self-start">
@@ -485,14 +470,13 @@ Use flexbox alignment utilities to vertically and horizontally align columns. **
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
 ### Horizontal alignment
 
 <div class="bd-example-row">
-{% capture example %}
+{{< example >}}
 <div class="container">
   <div class="row justify-content-start">
     <div class="col-4">
@@ -535,19 +519,18 @@ Use flexbox alignment utilities to vertically and horizontally align columns. **
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
 ### No gutters
 
 The gutters between columns in our predefined grid classes can be removed with `.no-gutters`. This removes the negative `margin`s from `.row` and the horizontal `padding` from all immediate children columns.
 
-Here's the source code for creating these styles. Note that column overrides are scoped to only the first children columns and are targeted via [attribute selector](https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors). While this generates a more specific selector, column padding can still be further customized with [spacing utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/spacing/).
+Here's the source code for creating these styles. Note that column overrides are scoped to only the first children columns and are targeted via [attribute selector](https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors). While this generates a more specific selector, column padding can still be further customized with [spacing utilities]({{< docsref "/utilities/spacing" >}}).
 
 **Need an edge-to-edge design?** Drop the parent `.container` or `.container-fluid`.
 
-{% highlight sass %}
+```sass
 .no-gutters {
   margin-right: 0;
   margin-left: 0;
@@ -558,18 +541,17 @@ Here's the source code for creating these styles. Note that column overrides are
     padding-left: 0;
   }
 }
-{% endhighlight %}
+```
 
 In practice, here's how it looks. Note you can continue to use this with all other predefined grid classes (including column widths, responsive tiers, reorders, and more).
 
 <div class="bd-example-row">
-{% capture example %}
+{{< example >}}
 <div class="row no-gutters">
   <div class="col-sm-6 col-md-8">.col-sm-6 .col-md-8</div>
   <div class="col-6 col-md-4">.col-6 .col-md-4</div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
 ### Column wrapping
@@ -577,7 +559,7 @@ In practice, here's how it looks. Note you can continue to use this with all oth
 If more than 12 columns are placed within a single row, each group of extra columns will, as one unit, wrap onto a new line.
 
 <div class="bd-example-row">
-{% capture example %}
+{{< example >}}
 <div class="container">
   <div class="row">
     <div class="col-9">.col-9</div>
@@ -585,8 +567,7 @@ If more than 12 columns are placed within a single row, each group of extra colu
     <div class="col-6">.col-6<br>Subsequent columns continue along the new line.</div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
 ### Column breaks
@@ -594,7 +575,7 @@ If more than 12 columns are placed within a single row, each group of extra colu
 Breaking columns to a new line in flexbox requires a small hack: add an element with `width: 100%` wherever you want to wrap your columns to a new line. Normally this is accomplished with multiple `.row`s, but not every implementation method can account for this.
 
 <div class="bd-example-row">
-{% capture example %}
+{{< example >}}
 <div class="container">
   <div class="row">
     <div class="col-6 col-sm-3">.col-6 .col-sm-3</div>
@@ -607,14 +588,13 @@ Breaking columns to a new line in flexbox requires a small hack: add an element
     <div class="col-6 col-sm-3">.col-6 .col-sm-3</div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
-You may also apply this break at specific breakpoints with our [responsive display utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/display/).
+You may also apply this break at specific breakpoints with our [responsive display utilities]({{< docsref "/utilities/display" >}}).
 
 <div class="bd-example-row">
-{% capture example %}
+{{< example >}}
 <div class="container">
   <div class="row">
     <div class="col-6 col-sm-4">.col-6 .col-sm-4</div>
@@ -627,8 +607,7 @@ You may also apply this break at specific breakpoints with our [responsive displ
     <div class="col-6 col-sm-4">.col-6 .col-sm-4</div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
 ## Reordering
@@ -638,7 +617,7 @@ You may also apply this break at specific breakpoints with our [responsive displ
 Use `.order-` classes for controlling the **visual order** of your content. These classes are responsive, so you can set the `order` by breakpoint (e.g., `.order-1.order-md-2`). Includes support for `1` through `12` across all five grid tiers.
 
 <div class="bd-example-row">
-{% capture example %}
+{{< example >}}
 <div class="container">
   <div class="row">
     <div class="col">
@@ -652,14 +631,13 @@ Use `.order-` classes for controlling the **visual order** of your content. Thes
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
 There are also responsive `.order-first` and `.order-last` classes that change the `order` of an element by applying `order: -1` and `order: 13` (`order: $columns + 1`), respectively. These classes can also be intermixed with the numbered `.order-*` classes as needed.
 
 <div class="bd-example-row">
-{% capture example %}
+{{< example >}}
 <div class="container">
   <div class="row">
     <div class="col order-last">
@@ -673,20 +651,19 @@ There are also responsive `.order-first` and `.order-last` classes that change t
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
 ### Offsetting columns
 
-You can offset grid columns in two ways: our responsive `.offset-` grid classes and our [margin utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/spacing/). Grid classes are sized to match columns while margins are more useful for quick layouts where the width of the offset is variable.
+You can offset grid columns in two ways: our responsive `.offset-` grid classes and our [margin utilities]({{< docsref "/utilities/spacing" >}}). Grid classes are sized to match columns while margins are more useful for quick layouts where the width of the offset is variable.
 
 #### Offset classes
 
 Move columns to the right using `.offset-md-*` classes. These classes increase the left margin of a column by `*` columns. For example, `.offset-md-4` moves `.col-md-4` over four columns.
 
 <div class="bd-example-row">
-{% capture example %}
+{{< example >}}
 <div class="container">
   <div class="row">
     <div class="col-md-4">.col-md-4</div>
@@ -700,14 +677,13 @@ Move columns to the right using `.offset-md-*` classes. These classes increase t
     <div class="col-md-6 offset-md-3">.col-md-6 .offset-md-3</div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
-In addition to column clearing at responsive breakpoints, you may need to reset offsets. See this in action in [the grid example]({{ site.baseurl }}/docs/{{ site.docs_version }}/examples/grid/).
+In addition to column clearing at responsive breakpoints, you may need to reset offsets. See this in action in [the grid example]({{< docsref "/examples/grid" >}}).
 
 <div class="bd-example-row">
-{% capture example %}
+{{< example >}}
 <div class="container">
   <div class="row">
     <div class="col-sm-5 col-md-6">.col-sm-5 .col-md-6</div>
@@ -718,8 +694,7 @@ In addition to column clearing at responsive breakpoints, you may need to reset
     <div class="col-sm-6 col-md-5 offset-md-2 col-lg-6 offset-lg-0">.col-sm-6 .col-md-5 .offset-md-2 .col-lg-6 .offset-lg-0</div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
 #### Margin utilities
@@ -727,7 +702,7 @@ In addition to column clearing at responsive breakpoints, you may need to reset
 With the move to flexbox in v4, you can use margin utilities like `.mr-auto` to force sibling columns away from one another.
 
 <div class="bd-example-row">
-{% capture example %}
+{{< example >}}
 <div class="container">
   <div class="row">
     <div class="col-md-4">.col-md-4</div>
@@ -742,8 +717,7 @@ With the move to flexbox in v4, you can use margin utilities like `.mr-auto` to
     <div class="col-auto">.col-auto</div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
 ## Nesting
@@ -751,7 +725,7 @@ With the move to flexbox in v4, you can use margin utilities like `.mr-auto` to
 To nest your content with the default grid, add a new `.row` and set of `.col-sm-*` columns within an existing `.col-sm-*` column. Nested rows should include a set of columns that add up to 12 or fewer (it is not required that you use all 12 available columns).
 
 <div class="bd-example-row">
-{% capture example %}
+{{< example >}}
 <div class="container">
   <div class="row">
     <div class="col-sm-9">
@@ -767,8 +741,7 @@ To nest your content with the default grid, add a new `.row` and set of `.col-sm
     </div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 </div>
 
 ## Sass mixins
@@ -779,7 +752,7 @@ When using Bootstrap's source Sass files, you have the option of using Sass vari
 
 Variables and maps determine the number of columns, the gutter width, and the media query point at which to begin floating columns. We use these to generate the predefined grid classes documented above, as well as for the custom mixins listed below.
 
-{% highlight scss %}
+```scss
 $grid-columns:      12;
 $grid-gutter-width: 30px;
 
@@ -802,13 +775,13 @@ $container-max-widths: (
   lg: 960px,
   xl: 1140px
 );
-{% endhighlight %}
+```
 
 ### Mixins
 
 Mixins are used in conjunction with the grid variables to generate semantic CSS for individual grid columns.
 
-{% highlight scss %}
+```scss
 // Creates a wrapper for a series of columns
 @include make-row();
 
@@ -818,13 +791,13 @@ Mixins are used in conjunction with the grid variables to generate semantic CSS
 
 // Get fancy by offsetting, or changing the sort order
 @include make-col-offset($size, $columns: $grid-columns);
-{% endhighlight %}
+```
 
 ### Example usage
 
 You can modify the variables to your own custom values, or just use the mixins with their default values. Here's an example of using the default settings to create a two-column layout with a gap between.
 
-{% highlight scss %}
+```scss
 .example-container {
   @include make-container();
   // Make sure to define this width after the mixin to override
@@ -857,17 +830,16 @@ You can modify the variables to your own custom values, or just use the mixins w
     @include make-col(4);
   }
 }
-{% endhighlight %}
+```
 
-{% capture example %}
+{{< example >}}
 <div class="example-container">
   <div class="example-row">
     <div class="example-content-main">Main content</div>
     <div class="example-content-secondary">Secondary content</div>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Customizing the grid
 
@@ -877,16 +849,16 @@ Using our built-in grid Sass variables and maps, it's possible to completely cus
 
 The number of grid columns can be modified via Sass variables. `$grid-columns` is used to generate the widths (in percent) of each individual column while `$grid-gutter-width` sets the width for the column gutters.
 
-{% highlight scss %}
+```scss
 $grid-columns: 12 !default;
 $grid-gutter-width: 30px !default;
-{% endhighlight %}
+```
 
 ### Grid tiers
 
 Moving beyond the columns themselves, you may also customize the number of grid tiers. If you wanted just four grid tiers, you'd update the `$grid-breakpoints` and `$container-max-widths` to something like this:
 
-{% highlight scss %}
+```scss
 $grid-breakpoints: (
   xs: 0,
   sm: 480px,
@@ -899,6 +871,6 @@ $container-max-widths: (
   md: 720px,
   lg: 960px
 );
-{% endhighlight %}
+```
 
 When making any changes to the Sass variables or maps, you'll need to save your changes and recompile. Doing so will output a brand new set of predefined grid classes for column widths, offsets, and ordering. Responsive visibility utilities will also be updated to use the custom breakpoints. Make sure to set grid values in `px` (not `rem`, `em`, or `%`).
similarity index 92%
rename from site/docs/4.5/layout/overview.md
rename to site/content/docs/4.5/layout/overview.md
index 2f6efc65afc3599e7173a1a99fe95b2b544e26fa..627a73a03ac2a1e6c9525515aad7e0a50e22bbe8 100644 (file)
@@ -3,7 +3,7 @@ layout: docs
 title: Overview
 description: Components and options for laying out your Bootstrap project, including wrapping containers, a powerful grid system, a flexible media object, and responsive utility classes.
 group: layout
-redirect_from: "/docs/4.5/layout/"
+aliases: "/docs/4.5/layout/"
 toc: true
 ---
 
@@ -19,7 +19,7 @@ Bootstrap comes with three different containers:
 
 The table below illustrates how each container's `max-width` compares to the original `.container` and `.container-fluid` across each breakpoint.
 
-See them in action and compare them in our [Grid example]({{ site.baseurl }}/docs/{{ site.docs_version }}/examples/grid/#containers).
+See them in action and compare them in our [Grid example]({{< docsref "/examples/grid#containers" >}}).
 
 <table class="table text-left">
   <thead>
@@ -103,32 +103,32 @@ See them in action and compare them in our [Grid example]({{ site.baseurl }}/doc
 
 Our default `.container` class is a responsive, fixed-width container, meaning its `max-width` changes at each breakpoint.
 
-{% highlight html %}
+```html
 <div class="container">
   <!-- Content here -->
 </div>
-{% endhighlight %}
+```
 
 ### Fluid
 
 Use `.container-fluid` for a full width container, spanning the entire width of the viewport.
 
-{% highlight html %}
+```html
 <div class="container-fluid">
   ...
 </div>
-{% endhighlight %}
+```
 
 ### Responsive
 
 Responsive containers are new in Bootstrap v4.4. They allow you to specify a class that is 100% wide until the specified breakpoint is reached, after which we apply `max-width`s for each of the higher breakpoints. For example, `.container-sm` is 100% wide to start until the `sm` breakpoint is reached, where it will scale up with `md`, `lg`, and `xl`.
 
-{% highlight html %}
+```html
 <div class="container-sm">100% wide until small breakpoint</div>
 <div class="container-md">100% wide until medium breakpoint</div>
 <div class="container-lg">100% wide until large breakpoint</div>
 <div class="container-xl">100% wide until extra large breakpoint</div>
-{% endhighlight %}
+```
 
 ## Responsive breakpoints
 
@@ -136,7 +136,7 @@ Since Bootstrap is developed to be mobile first, we use a handful of [media quer
 
 Bootstrap primarily uses the following media query ranges—or breakpoints—in our source Sass files for our layout, grid system, and components.
 
-{% highlight scss %}
+```scss
 // Extra small devices (portrait phones, less than 576px)
 // No media query for `xs` since this is the default in Bootstrap
 
@@ -151,11 +151,11 @@ Bootstrap primarily uses the following media query ranges—or breakpoints—in
 
 // Extra large devices (large desktops, 1200px and up)
 @media (min-width: 1200px) { ... }
-{% endhighlight %}
+```
 
 Since we write our source CSS in Sass, all our media queries are available via Sass mixins:
 
-{% highlight scss %}
+```scss
 // No media query necessary for xs breakpoint as it's effectively `@media (min-width: 0) { ... }`
 @include media-breakpoint-up(sm) { ... }
 @include media-breakpoint-up(md) { ... }
@@ -171,11 +171,11 @@ Since we write our source CSS in Sass, all our media queries are available via S
     display: block;
   }
 }
-{% endhighlight %}
+```
 
 We occasionally use media queries that go in the other direction (the given screen size *or smaller*):
 
-{% highlight scss %}
+```scss
 // Extra small devices (portrait phones, less than 576px)
 @media (max-width: 575.98px) { ... }
 
@@ -190,13 +190,15 @@ We occasionally use media queries that go in the other direction (the given scre
 
 // Extra large devices (large desktops)
 // No media query since the extra-large breakpoint has no upper bound on its width
-{% endhighlight %}
+```
 
-{% include callout-info-mediaqueries-breakpoints.md %}
+{{< callout info >}}
+{{< partial "callout-info-mediaqueries-breakpoints.md" >}}
+{{< /callout >}}
 
 Once again, these media queries are also available via Sass mixins:
 
-{% highlight scss %}
+```scss
 @include media-breakpoint-down(xs) { ... }
 @include media-breakpoint-down(sm) { ... }
 @include media-breakpoint-down(md) { ... }
@@ -209,11 +211,11 @@ Once again, these media queries are also available via Sass mixins:
     display: block;
   }
 }
-{% endhighlight %}
+```
 
 There are also media queries and mixins for targeting a single segment of screen sizes using the minimum and maximum breakpoint widths.
 
-{% highlight scss %}
+```scss
 // Extra small devices (portrait phones, less than 576px)
 @media (max-width: 575.98px) { ... }
 
@@ -228,31 +230,31 @@ There are also media queries and mixins for targeting a single segment of screen
 
 // Extra large devices (large desktops, 1200px and up)
 @media (min-width: 1200px) { ... }
-{% endhighlight %}
+```
 
 These media queries are also available via Sass mixins:
 
-{% highlight scss %}
+```scss
 @include media-breakpoint-only(xs) { ... }
 @include media-breakpoint-only(sm) { ... }
 @include media-breakpoint-only(md) { ... }
 @include media-breakpoint-only(lg) { ... }
 @include media-breakpoint-only(xl) { ... }
-{% endhighlight %}
+```
 
 Similarly, media queries may span multiple breakpoint widths:
 
-{% highlight scss %}
+```scss
 // Example
 // Apply styles starting from medium devices and up to extra large devices
 @media (min-width: 768px) and (max-width: 1199.98px) { ... }
-{% endhighlight %}
+```
 
 The Sass mixin for targeting the same screen size range would be:
 
-{% highlight scss %}
+```scss
 @include media-breakpoint-between(md, xl) { ... }
-{% endhighlight %}
+```
 
 ## Z-index
 
@@ -262,7 +264,7 @@ These higher values start at an arbitrary number, high and specific enough to id
 
 We don't encourage customization of these individual values; should you change one, you likely need to change them all.
 
-{% highlight scss %}
+```scss
 $zindex-dropdown:          1000 !default;
 $zindex-sticky:            1020 !default;
 $zindex-fixed:             1030 !default;
@@ -270,6 +272,6 @@ $zindex-modal-backdrop:    1040 !default;
 $zindex-modal:             1050 !default;
 $zindex-popover:           1060 !default;
 $zindex-tooltip:           1070 !default;
-{% endhighlight %}
+```
 
 To handle overlapping borders within components (e.g., buttons and inputs in input groups), we use low single digit `z-index` values of `1`, `2`, and `3` for default, hover, and active states. On hover/focus/active, we bring a particular element to the forefront with a higher `z-index` value to show their border over the sibling elements.
diff --git a/site/content/docs/4.5/layout/utilities-for-layout.md b/site/content/docs/4.5/layout/utilities-for-layout.md
new file mode 100644 (file)
index 0000000..80c2d79
--- /dev/null
@@ -0,0 +1,25 @@
+---
+layout: docs
+title: Utilities for layout
+description: For faster mobile-friendly and responsive development, Bootstrap includes dozens of utility classes for showing, hiding, aligning, and spacing content.
+group: layout
+toc: true
+---
+
+## Changing `display`
+
+Use our [display utilities]({{< docsref "/utilities/display" >}}) for responsively toggling common values of the `display` property. Mix it with our grid system, content, or components to show or hide them across specific viewports.
+
+## Flexbox options
+
+Bootstrap 4 is built with flexbox, but not every element's `display` has been changed to `display: flex` as this would add many unnecessary overrides and unexpectedly change key browser behaviors. Most of [our components]({{< docsref "/components/alerts" >}}) are built with flexbox enabled.
+
+Should you need to add `display: flex` to an element, do so with `.d-flex` or one of the responsive variants (e.g., `.d-sm-flex`). You'll need this class or `display` value to allow the use of our extra [flexbox utilities]({{< docsref "/utilities/flex" >}}) for sizing, alignment, spacing, and more.
+
+## Margin and padding
+
+Use the `margin` and `padding` [spacing utilities]({{< docsref "/utilities/spacing" >}}) to control how elements and components are spaced and sized. Bootstrap 4 includes a five-level scale for spacing utilities, based on a `1rem` value default `$spacer` variable. Choose values for all viewports (e.g., `.mr-3` for `margin-right: 1rem`), or pick responsive variants to target specific viewports (e.g., `.mr-md-3` for `margin-right: 1rem` starting at the `md` breakpoint).
+
+## Toggle `visibility`
+
+When toggling `display` isn't needed, you can toggle the `visibility` of an element with our [visibility utilities]({{< docsref "/utilities/visibility" >}}). Invisible elements will still affect the layout of the page, but are visually hidden from visitors.
similarity index 90%
rename from site/docs/4.5/migration.md
rename to site/content/docs/4.5/migration.md
index af76b022cfd1d691a14c3cbc85fdb1d36dfb668a..3ca4bea85440cd5a2aaeb9af3b3a0987a95af03b 100644 (file)
@@ -3,7 +3,7 @@ layout: docs
 title: Migrating to v4
 description: Bootstrap 4 is a major rewrite of the entire project. The most notable changes are summarized below, followed by more specific changes to relevant components.
 group: migration
-redirect_from: "/migration/"
+aliases: "/migration/"
 toc: true
 ---
 
@@ -89,7 +89,7 @@ Here are the big ticket items you'll want to be aware of when moving from v3 to
 - Build system overhauled to use a series of npm scripts instead of Grunt. See `package.json` for all scripts, or our project readme for local development needs.
 - Non-responsive usage of Bootstrap is no longer supported.
 - Dropped the online Customizer in favor of more extensive setup documentation and customized builds.
-- Added dozens of new [utility classes]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/) for common CSS property-value pairs and margin/padding spacing shortcuts.
+- Added dozens of new [utility classes](/docs/{{< param docs_version >}}/utilities/) for common CSS property-value pairs and margin/padding spacing shortcuts.
 
 ### Grid system
 
@@ -108,12 +108,12 @@ Here are the big ticket items you'll want to be aware of when moving from v3 to
 
 ### Components
 
-- **Dropped panels, thumbnails, and wells** for a new all-encompassing component, [cards]({{ site.baseurl }}/docs/{{ site.docs_version }}/components/card/).
+- **Dropped panels, thumbnails, and wells** for a new all-encompassing component, [cards]({{< docsref "/components/card" >}}).
 - **Dropped the Glyphicons icon font.** If you need icons, some options are:
   - the upstream version of [Glyphicons](https://www.glyphicons.com/)
   - [Octicons](https://octicons.github.com/)
   - [Font Awesome](https://fontawesome.com/)
-  - See the [Extend page]({{ site.baseurl }}/docs/{{ site.docs_version }}/extend/icons/) for a list of alternatives. Have additional suggestions? Please open an issue or PR.
+  - See the [Extend page]({{< docsref "/extend/icons" >}}) for a list of alternatives. Have additional suggestions? Please open an issue or PR.
 - **Dropped the Affix jQuery plugin.**
   - We recommend using `position: sticky` instead. [See the HTML5 Please entry](https://html5please.com/#sticky) for details and specific polyfill recommendations. One suggestion is to use an `@supports` rule for implementing it (e.g., `@supports (position: sticky) { ... }`)
   - If you were using Affix to apply additional, non-`position` styles, the polyfills might not support your use case. One option for such uses is the third-party [ScrollPos-Styler](https://github.com/acch/scrollpos-styler) library.
@@ -126,7 +126,7 @@ This list highlights key changes by component between v3.x.x and v4.0.0.
 
 ### Reboot
 
-New to Bootstrap 4 is the [Reboot]({{ site.baseurl }}/docs/{{ site.docs_version }}/content/reboot/), a new stylesheet that builds on Normalize with our own somewhat opinionated reset styles. Selectors appearing in this file only use elements—there are no classes here. This isolates our reset styles from our component styles for a more modular approach. Some of the most important resets this includes are the `box-sizing: border-box` change, moving from `em` to `rem` units on many elements, link styles, and many form element resets.
+New to Bootstrap 4 is the [Reboot]({{< docsref "/content/reboot" >}}), a new stylesheet that builds on Normalize with our own somewhat opinionated reset styles. Selectors appearing in this file only use elements—there are no classes here. This isolates our reset styles from our component styles for a more modular approach. Some of the most important resets this includes are the `box-sizing: border-box` change, moving from `em` to `rem` units on many elements, link styles, and many form element resets.
 
 ### Typography
 
@@ -172,7 +172,7 @@ New to Bootstrap 4 is the [Reboot]({{ site.baseurl }}/docs/{{ site.docs_version
 
 - Renamed `.btn-default` to `.btn-secondary`.
 - Dropped the `.btn-xs` class entirely as `.btn-sm` is proportionally much smaller than v3's.
-- The [stateful button]({{ site.url }}/docs/3.3/javascript/#buttons-stateful) feature of the `button.js` jQuery plugin has been dropped. This includes the `$().button(string)` and `$().button('reset')` methods. We advise using a tiny bit of custom JavaScript instead, which will have the benefit of behaving exactly the way you want it to.
+- The [stateful button](https://getbootstrap.com/docs/3.3/javascript/#buttons-stateful) feature of the `button.js` jQuery plugin has been dropped. This includes the `$().button(string)` and `$().button('reset')` methods. We advise using a tiny bit of custom JavaScript instead, which will have the benefit of behaving exactly the way you want it to.
   - Note that the other features of the plugin (button checkboxes, button radios, single-toggle buttons) have been retained in v4.
 - Change buttons' `[disabled]` to `:disabled` as IE9+ supports `:disabled`. However `fieldset[disabled]` is still necessary because [native disabled fieldsets are still buggy in IE11](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/fieldset#Browser_compatibility).
 
@@ -225,7 +225,7 @@ The navbar has been entirely rewritten in flexbox with improved support for alig
 
 - Responsive navbar behaviors are now applied to the `.navbar` class via the **required** `.navbar-expand-{breakpoint}` where you choose where to collapse the navbar. Previously this was a Less variable modification and required recompiling.
 - `.navbar-default` is now `.navbar-light`, though `.navbar-dark` remains the same. **One of these is required on each navbar.** However, these classes no longer set `background-color`s; instead they essentially only affect `color`.
-- Navbars now require a background declaration of some kind. Choose from our background utilities (`.bg-*`) or set your own with the light/inverse classes above [for mad customization]({{ site.baseurl }}/docs/{{ site.docs_version }}/components/navbar/#color-schemes).
+- Navbars now require a background declaration of some kind. Choose from our background utilities (`.bg-*`) or set your own with the light/inverse classes above [for mad customization]({{< docsref "/components/navbar#color-schemes" >}}).
 - Given flexbox styles, navbars can now use flexbox utilities for easy alignment options.
 - `.navbar-toggle` is now `.navbar-toggler` and has different styles and inner markup (no more three `<span>`s).
 - Dropped the `.navbar-form` class entirely. It's no longer necessary; instead, just use `.form-inline` and apply margin utilities as necessary.
@@ -259,7 +259,7 @@ Dropped entirely for the new card component.
 - `.panel-default` removed and no replacement.
 - `.panel-group` removed and no replacement. `.card-group` is not a replacement, it is different.
 - `.panel-heading` to `.card-header`
-- `.panel-title` to `.card-title`. Depending on the desired look, you may also want to use [heading elements or classes]({{ site.baseurl }}/docs/{{ site.docs_version }}/content/typography/#headings) (e.g. `<h3>`, `.h3`) or bold elements or classes (e.g. `<strong>`, `<b>`, [`.font-weight-bold`]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/text/#font-weight-and-italics)). Note that `.card-title`, while similarly named, produces a different look than `.panel-title`.
+- `.panel-title` to `.card-title`. Depending on the desired look, you may also want to use [heading elements or classes]({{< docsref "/content/typography#headings" >}}) (e.g. `<h3>`, `.h3`) or bold elements or classes (e.g. `<strong>`, `<b>`, [`.font-weight-bold`]({{< docsref "/utilities/text#font-weight-and-italics" >}})). Note that `.card-title`, while similarly named, produces a different look than `.panel-title`.
 - `.panel-body` to `.card-body`
 - `.panel-footer` to `.card-footer`
 - `.panel-primary`, `.panel-success`, `.panel-info`, `.panel-warning`, and `.panel-danger` have been dropped for `.bg-`, `.text-`, and `.border` utilities generated from our `$theme-colors` Sass map.
@@ -289,13 +289,13 @@ Dropped entirely for the new card component.
 
 - **Display, hidden, and more:**
   - Made display utilities responsive (e.g., `.d-none` and `d-{sm,md,lg,xl}-none`).
-  - Dropped the bulk of `.hidden-*` utilities for new [display utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/display/). For example, instead of `.hidden-sm-up`, use `.d-sm-none`. Renamed the `.hidden-print` utilities to use the display utility naming scheme. More info under the [Responsive utilities](#responsive-utilities) section of this page.
+  - Dropped the bulk of `.hidden-*` utilities for new [display utilities]({{< docsref "/utilities/display" >}}). For example, instead of `.hidden-sm-up`, use `.d-sm-none`. Renamed the `.hidden-print` utilities to use the display utility naming scheme. More info under the [Responsive utilities](#responsive-utilities) section of this page.
   - Added `.float-{sm,md,lg,xl}-{left,right,none}` classes for responsive floats and removed `.pull-left` and `.pull-right` since they're redundant to `.float-left` and `.float-right`.
 - **Type:**
   - Added responsive variations to our text alignment classes `.text-{sm,md,lg,xl}-{left,center,right}`.
 - **Alignment and spacing:**
-  - Added new [responsive margin and padding utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/spacing/) for all sides, plus vertical and horizontal shorthands.
-  - Added boatload of [flexbox utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/flex/).
+  - Added new [responsive margin and padding utilities]({{< docsref "/utilities/spacing" >}}) for all sides, plus vertical and horizontal shorthands.
+  - Added boatload of [flexbox utilities]({{< docsref "/utilities/flex" >}}).
   - Dropped `.center-block` for the new `.mx-auto` class.
 - Clearfix updated to drop support for older browser versions.
 
@@ -310,7 +310,7 @@ Removed the following mixins: `animation`, `animation-delay`, `animation-directi
 Our documentation received an upgrade across the board as well. Here's the low down:
 
 - We're still using Jekyll, but we have plugins in the mix:
-  - `bugify.rb` is used to efficiently list out the entries on our [browser bugs]({{ site.baseurl }}/docs/{{ site.docs_version }}/browser-bugs/) page.
+  - `bugify.rb` is used to efficiently list out the entries on our [browser bugs]({{< docsref "/browser-bugs" >}}) page.
   - `example.rb` is a custom fork of the default `highlight.rb` plugin, allowing for easier example-code handling.
   - `callout.rb` is a similar custom fork of that, but designed for our special docs callouts.
   - [jekyll-toc](https://github.com/toshimaru/jekyll-toc) is used to generate our table of contents.
diff --git a/site/content/docs/4.5/utilities/borders.md b/site/content/docs/4.5/utilities/borders.md
new file mode 100644 (file)
index 0000000..2e7541f
--- /dev/null
@@ -0,0 +1,89 @@
+---
+layout: docs
+title: Borders
+description: Use border utilities to quickly style the border and border-radius of an element. Great for images, buttons, or any other element.
+group: utilities
+aliases: "/docs/4.5/utilities/"
+toc: true
+---
+
+## Border
+
+Use border utilities to add or remove an element's borders. Choose from all borders or one at a time.
+
+### Additive
+
+<div class="bd-example-border-utils">
+{{< example >}}
+<span class="border"></span>
+<span class="border-top"></span>
+<span class="border-right"></span>
+<span class="border-bottom"></span>
+<span class="border-left"></span>
+{{< /example >}}
+</div>
+
+### Subtractive
+
+<div class="bd-example-border-utils bd-example-border-utils-0">
+{{< example >}}
+<span class="border-0"></span>
+<span class="border-top-0"></span>
+<span class="border-right-0"></span>
+<span class="border-bottom-0"></span>
+<span class="border-left-0"></span>
+{{< /example >}}
+</div>
+
+## Border color
+
+Change the border color using utilities built on our theme colors.
+
+{{< example class="bd-example-border-utils" >}}
+{{< border.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<span class="border border-{{ .name }}"></span>
+{{- end -}}
+{{< /border.inline >}}
+<span class="border border-white"></span>
+{{< /example >}}
+
+## Border-radius
+
+Add classes to an element to easily round its corners.
+
+<div class="bd-example bd-example-images">
+  {{< placeholder width="75" height="75" class="rounded" title="Example rounded image" >}}
+  {{< placeholder width="75" height="75" class="rounded-top" title="Example top rounded image" >}}
+  {{< placeholder width="75" height="75" class="rounded-right" title="Example right rounded image" >}}
+  {{< placeholder width="75" height="75" class="rounded-bottom" title="Example bottom rounded image" >}}
+  {{< placeholder width="75" height="75" class="rounded-left" title="Example left rounded image" >}}
+  {{< placeholder width="75" height="75" class="rounded-circle" title="Completely round image" >}}
+  {{< placeholder width="150" height="75" class="rounded-pill" title="Rounded pill image" >}}
+  {{< placeholder width="75" height="75" class="rounded-0" title="Example non-rounded image (overrides rounding applied elsewhere)" >}}
+</div>
+
+```html
+<img src="..." alt="..." class="rounded">
+<img src="..." alt="..." class="rounded-top">
+<img src="..." alt="..." class="rounded-right">
+<img src="..." alt="..." class="rounded-bottom">
+<img src="..." alt="..." class="rounded-left">
+<img src="..." alt="..." class="rounded-circle">
+<img src="..." alt="..." class="rounded-pill">
+<img src="..." alt="..." class="rounded-0">
+```
+
+## Sizes
+
+Use `.rounded-lg` or `.rounded-sm` for larger or smaller border-radius.
+
+<div class="bd-example bd-example-images">
+  {{< placeholder width="75" height="75" class="rounded-sm" title="Example small rounded image" >}}
+  {{< placeholder width="75" height="75" class="rounded-lg" title="Example large rounded image" >}}
+</div>
+
+```html
+<img src="..." alt="..." class="rounded-sm">
+<img src="..." alt="..." class="rounded-lg">
+```
similarity index 84%
rename from site/docs/4.5/utilities/clearfix.md
rename to site/content/docs/4.5/utilities/clearfix.md
index dcf93e9bbf1f27f947bc0f4c7d50d4155dc5a5d3..c2f129a7150876f1c43e5cba12c548dc7e67836b 100644 (file)
@@ -7,11 +7,11 @@ group: utilities
 
 Easily clear `float`s by adding `.clearfix` **to the parent element**. Can also be used as a mixin.
 
-{% highlight html %}
+```html
 <div class="clearfix">...</div>
-{% endhighlight %}
+```
 
-{% highlight scss %}
+```scss
 // Mixin itself
 @mixin clearfix() {
   &::after {
@@ -25,14 +25,13 @@ Easily clear `float`s by adding `.clearfix` **to the parent element**. Can also
 .element {
   @include clearfix;
 }
-{% endhighlight %}
+```
 
 The following example shows how the clearfix can be used. Without the clearfix the wrapping div would not span around the buttons which would cause a broken layout.
 
-{% capture example %}
+{{< example >}}
 <div class="bg-info clearfix">
   <button type="button" class="btn btn-secondary float-left">Example Button floated left</button>
   <button type="button" class="btn btn-secondary float-right">Example Button floated right</button>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
similarity index 80%
rename from site/docs/4.5/utilities/close-icon.md
rename to site/content/docs/4.5/utilities/close-icon.md
index 3a8cb3c4451f7c150ef84a8aa3070304561f5767..8329fd94b02bfa3767f057bfacb4aed8fa21054f 100644 (file)
@@ -7,9 +7,8 @@ group: utilities
 
 **Be sure to include text for screen readers**, as we've done with `aria-label`.
 
-{% capture example %}
+{{< example >}}
 <button type="button" class="close" aria-label="Close">
   <span aria-hidden="true">&times;</span>
 </button>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
similarity index 56%
rename from site/docs/4.5/utilities/colors.md
rename to site/content/docs/4.5/utilities/colors.md
index bbe22d10bafaca047d211aea1eba36fa9dbba38a..9474117476af9fd9ab5b5bcd9071fef191ecae45 100644 (file)
@@ -6,53 +6,65 @@ group: utilities
 toc: true
 ---
 
-{% capture callout %}
+{{< callout info >}}
 #### Dealing with specificity
 
 Sometimes contextual classes cannot be applied due to the specificity of another selector. In some cases, a sufficient workaround is to wrap your element's content in a `<div>` with the class.
-{% endcapture %}
-{% include callout.html content=callout type="info" %}
+{{< /callout >}}
 
-{% include callout-warning-color-assistive-technologies.md %}
+{{< callout warning >}}
+{{< partial "callout-warning-color-assistive-technologies.md" >}}
+{{< /callout >}}
 
 ## Color
 
-{% capture example %}
-{% for color in site.data.theme-colors %}
-<p class="text-{{ color.name }}{% if color.name == "light" %} bg-dark{% endif %}">.text-{{ color.name }}</p>{% endfor %}
+{{< example >}}
+{{< colors.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<p class="text-{{ .name }}{{ if eq .name "light" }} bg-dark{{ end }}">.text-{{ .name }}</p>
+{{- end -}}
+{{< /colors.inline >}}
 <p class="text-body">.text-body</p>
 <p class="text-muted">.text-muted</p>
 <p class="text-white bg-dark">.text-white</p>
 <p class="text-black-50">.text-black-50</p>
 <p class="text-white-50 bg-dark">.text-white-50</p>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Contextual text classes also work well on anchors with the provided hover and focus states. **Note that the `.text-white` and `.text-muted` class has no additional link styling beyond underline.**
 
-{% capture example %}
-{% for color in site.data.theme-colors %}
-<p><a href="#" class="text-{{ color.name }}{% if color.name == "light" %} bg-dark{% endif %}">{{ color.name | capitalize }} link</a></p>{% endfor %}
+{{< example >}}
+{{< colors.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<p><a href="#" class="text-{{ .name }}{{ if eq .name "light" }} bg-dark{{ end }}">{{ .name | title }} link</a></p>
+{{- end -}}
+{{< /colors.inline >}}
 <p><a href="#" class="text-muted">Muted link</a></p>
 <p><a href="#" class="text-white bg-dark">White link</a></p>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Background color
 
 Similar to the contextual text color classes, easily set the background of an element to any contextual class. Anchor components will darken on hover, just like the text classes. Background utilities **do not set `color`**, so in some cases you'll want to use `.text-*` utilities.
 
-{% capture example %}
-{% for color in site.data.theme-colors %}
-<div class="p-3 mb-2 bg-{{ color.name }} {% if color.name == "light" or color.name == "warning" %}text-dark{% else %}text-white{% endif %}">.bg-{{ color.name }}</div>{% endfor %}
+{{< example >}}
+{{< colors.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<div class="p-3 mb-2 bg-{{ .name }} {{ if or (eq .name "light") (eq .name "warning") }}text-dark{{ else }}text-white{{ end }}">.bg-{{ .name }}</div>
+{{- end -}}
+{{< /colors.inline >}}
 <div class="p-3 mb-2 bg-white text-dark">.bg-white</div>
 <div class="p-3 mb-2 bg-transparent text-dark">.bg-transparent</div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Background gradient
 
-When `$enable-gradients` is set to `true` (default is `false`), you can use `.bg-gradient-` utility classes. [Learn about our Sass options]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/theming/#sass-options) to enable these classes and more.
+When `$enable-gradients` is set to `true` (default is `false`), you can use `.bg-gradient-` utility classes. [Learn about our Sass options]({{< docsref "/getting-started/theming#sass-options" >}}) to enable these classes and more.
 
-{% for color in site.data.theme-colors %}
-- `.bg-gradient-{{ color.name }}`{% endfor %}
+{{< markdown >}}
+{{< colors.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+- `.bg-gradient-{{ .name }}`
+{{- end -}}
+{{< /colors.inline >}}
+{{< /markdown >}}
similarity index 82%
rename from site/docs/4.5/utilities/display.md
rename to site/content/docs/4.5/utilities/display.md
index 454a099484f9a1ea0878f31b16674662d3d418b1..f5ef2bb74e22c8be747cbe911d8962d48131a1f7 100644 (file)
@@ -12,7 +12,7 @@ Change the value of the [`display` property](https://developer.mozilla.org/en-US
 
 ## Notation
 
-Display utility classes that apply to all [breakpoints]({{ site.baseurl }}/docs/{{ site.docs_version }}/layout/overview/#responsive-breakpoints), from `xs` to `xl`, have no breakpoint abbreviation in them. This is because those classes are applied from `min-width: 0;` and up, and thus are not bound by a media query. The remaining breakpoints, however, do include a breakpoint abbreviation.
+Display utility classes that apply to all [breakpoints]({{< docsref "/layout/overview#responsive-breakpoints" >}}), from `xs` to `xl`, have no breakpoint abbreviation in them. This is because those classes are applied from `min-width: 0;` and up, and thus are not bound by a media query. The remaining breakpoints, however, do include a breakpoint abbreviation.
 
 As such, the classes are named using the format:
 
@@ -37,17 +37,15 @@ The media queries affect screen widths with the given breakpoint *or larger*. Fo
 
 ## Examples
 
-{% capture example %}
+{{< example >}}
 <div class="d-inline p-2 bg-primary text-white">d-inline</div>
 <div class="d-inline p-2 bg-dark text-white">d-inline</div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <span class="d-block p-2 bg-primary text-white">d-block</span>
 <span class="d-block p-2 bg-dark text-white">d-block</span>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Hiding elements
 
@@ -72,11 +70,10 @@ To show an element only on a given interval of screen sizes you can combine one
 | Visible only on lg | `.d-none .d-lg-block .d-xl-none` |
 | Visible only on xl | `.d-none .d-xl-block` |
 
-{% capture example %}
+{{< example >}}
 <div class="d-lg-none">hide on lg and wider screens</div>
 <div class="d-none d-lg-block">hide on screens smaller than lg</div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Display in print
 
@@ -94,9 +91,8 @@ Change the `display` value of elements when printing with our print display util
 
 The print and display classes can be combined.
 
-{% capture example %}
+{{< example >}}
 <div class="d-print-none">Screen Only (Hide on print only)</div>
 <div class="d-none d-print-block">Print Only (Hide on screen only)</div>
 <div class="d-none d-lg-block d-print-block">Hide up to large on screen, but always show on print</div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
similarity index 91%
rename from site/docs/4.5/utilities/embed.md
rename to site/content/docs/4.5/utilities/embed.md
index 1f686807467870c817f826a000db34fd6bf03fbf..860ea195321e524f853c8ef212632af62020d5ca 100644 (file)
@@ -16,18 +16,17 @@ Rules are directly applied to `<iframe>`, `<embed>`, `<video>`, and `<object>` e
 
 Wrap any embed like an `<iframe>` in a parent element with `.embed-responsive` and an aspect ratio. The `.embed-responsive-item` isn't strictly required, but we encourage it.
 
-{% capture example %}
+{{< example >}}
 <div class="embed-responsive embed-responsive-16by9">
   <iframe class="embed-responsive-item" src="https://www.youtube.com/embed/zpOULjyy-n8?rel=0" allowfullscreen></iframe>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Aspect ratios
 
 Aspect ratios can be customized with modifier classes. By default the following ratio classes are provided:
 
-{% highlight html %}
+```html
 <!-- 21:9 aspect ratio -->
 <div class="embed-responsive embed-responsive-21by9">
   <iframe class="embed-responsive-item" src="..."></iframe>
@@ -47,15 +46,15 @@ Aspect ratios can be customized with modifier classes. By default the following
 <div class="embed-responsive embed-responsive-1by1">
   <iframe class="embed-responsive-item" src="..."></iframe>
 </div>
-{% endhighlight %}
+```
 
 Within `_variables.scss`, you can change the aspect ratios you want to use. Here's an example of the `$embed-responsive-aspect-ratios` list:
 
-{% highlight scss %}
+```scss
 $embed-responsive-aspect-ratios: (
   (21 9),
   (16 9),
   (4 3),
   (1 1)
 ) !default;
-{% endhighlight %}
+```
similarity index 86%
rename from site/docs/4.5/utilities/flex.md
rename to site/content/docs/4.5/utilities/flex.md
index 647499d11fb753246eacd5c15b759f9896401746..5cdadb76263cd55c8402058616eb337b92b18191 100644 (file)
@@ -10,21 +10,24 @@ toc: true
 
 Apply `display` utilities to create a flexbox container and transform **direct children elements** into flex items. Flex containers and items are able to be modified further with additional flex properties.
 
-{% capture example %}
+{{< example >}}
 <div class="d-flex p-2 bd-highlight">I'm a flexbox container!</div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <div class="d-inline-flex p-2 bd-highlight">I'm an inline flexbox container!</div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Responsive variations also exist for `.d-flex` and `.d-inline-flex`.
 
-{% for bp in site.data.breakpoints %}
-- `.d{{ bp.abbr }}-flex`
-- `.d{{ bp.abbr }}-inline-flex`{% endfor %}
+{{< markdown >}}
+{{< flex.inline >}}
+{{- range $.Site.Data.breakpoints }}
+- `.d{{ .abbr }}-flex`
+- `.d{{ .abbr }}-inline-flex`
+{{- end -}}
+{{< /flex.inline >}}
+{{< /markdown >}}
 
 ## Direction
 
@@ -32,7 +35,7 @@ Set the direction of flex items in a flex container with direction utilities. In
 
 Use `.flex-row` to set a horizontal direction (the browser default), or `.flex-row-reverse` to start the horizontal direction from the opposite side.
 
-{% capture example %}
+{{< example >}}
 <div class="d-flex flex-row bd-highlight mb-3">
   <div class="p-2 bd-highlight">Flex item 1</div>
   <div class="p-2 bd-highlight">Flex item 2</div>
@@ -43,12 +46,11 @@ Use `.flex-row` to set a horizontal direction (the browser default), or `.flex-r
   <div class="p-2 bd-highlight">Flex item 2</div>
   <div class="p-2 bd-highlight">Flex item 3</div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Use `.flex-column` to set a vertical direction, or `.flex-column-reverse`  to start the vertical direction from the opposite side.
 
-{% capture example %}
+{{< example >}}
 <div class="d-flex flex-column bd-highlight mb-3">
   <div class="p-2 bd-highlight">Flex item 1</div>
   <div class="p-2 bd-highlight">Flex item 2</div>
@@ -59,16 +61,20 @@ Use `.flex-column` to set a vertical direction, or `.flex-column-reverse`  to st
   <div class="p-2 bd-highlight">Flex item 2</div>
   <div class="p-2 bd-highlight">Flex item 3</div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Responsive variations also exist for `flex-direction`.
 
-{% for bp in site.data.breakpoints %}
-- `.flex{{ bp.abbr }}-row`
-- `.flex{{ bp.abbr }}-row-reverse`
-- `.flex{{ bp.abbr }}-column`
-- `.flex{{ bp.abbr }}-column-reverse`{% endfor %}
+{{< markdown >}}
+{{< flex.inline >}}
+{{- range $.Site.Data.breakpoints }}
+- `.flex{{ .abbr }}-row`
+- `.flex{{ .abbr }}-row-reverse`
+- `.flex{{ .abbr }}-column`
+- `.flex{{ .abbr }}-column-reverse`
+{{- end -}}
+{{< /flex.inline >}}
+{{< /markdown >}}
 
 ## Justify content
 
@@ -102,22 +108,27 @@ Use `justify-content` utilities on flexbox containers to change the alignment of
   </div>
 </div>
 
-{% highlight html %}
+```html
 <div class="d-flex justify-content-start">...</div>
 <div class="d-flex justify-content-end">...</div>
 <div class="d-flex justify-content-center">...</div>
 <div class="d-flex justify-content-between">...</div>
 <div class="d-flex justify-content-around">...</div>
-{% endhighlight %}
+```
 
 Responsive variations also exist for `justify-content`.
 
-{% for bp in site.data.breakpoints %}
-- `.justify-content{{ bp.abbr }}-start`
-- `.justify-content{{ bp.abbr }}-end`
-- `.justify-content{{ bp.abbr }}-center`
-- `.justify-content{{ bp.abbr }}-between`
-- `.justify-content{{ bp.abbr }}-around`{% endfor %}
+{{< markdown >}}
+{{< flex.inline >}}
+{{- range $.Site.Data.breakpoints }}
+- `.justify-content{{ .abbr }}-start`
+- `.justify-content{{ .abbr }}-end`
+- `.justify-content{{ .abbr }}-center`
+- `.justify-content{{ .abbr }}-between`
+- `.justify-content{{ .abbr }}-around`
+{{- end -}}
+{{< /flex.inline >}}
+{{< /markdown >}}
 
 ## Align items
 
@@ -151,22 +162,27 @@ Use `align-items` utilities on flexbox containers to change the alignment of fle
   </div>
 </div>
 
-{% highlight html %}
+```html
 <div class="d-flex align-items-start">...</div>
 <div class="d-flex align-items-end">...</div>
 <div class="d-flex align-items-center">...</div>
 <div class="d-flex align-items-baseline">...</div>
 <div class="d-flex align-items-stretch">...</div>
-{% endhighlight %}
+```
 
 Responsive variations also exist for `align-items`.
 
-{% for bp in site.data.breakpoints %}
-- `.align-items{{ bp.abbr }}-start`
-- `.align-items{{ bp.abbr }}-end`
-- `.align-items{{ bp.abbr }}-center`
-- `.align-items{{ bp.abbr }}-baseline`
-- `.align-items{{ bp.abbr }}-stretch`{% endfor %}
+{{< markdown >}}
+{{< flex.inline >}}
+{{- range $.Site.Data.breakpoints }}
+- `.align-items{{ .abbr }}-start`
+- `.align-items{{ .abbr }}-end`
+- `.align-items{{ .abbr }}-center`
+- `.align-items{{ .abbr }}-baseline`
+- `.align-items{{ .abbr }}-stretch`
+{{- end -}}
+{{< /flex.inline >}}
+{{< /markdown >}}
 
 ## Align self
 
@@ -200,69 +216,81 @@ Use `align-self` utilities on flexbox items to individually change their alignme
   </div>
 </div>
 
-{% highlight html %}
+```html
 <div class="align-self-start">Aligned flex item</div>
 <div class="align-self-end">Aligned flex item</div>
 <div class="align-self-center">Aligned flex item</div>
 <div class="align-self-baseline">Aligned flex item</div>
 <div class="align-self-stretch">Aligned flex item</div>
-{% endhighlight %}
+```
 
 Responsive variations also exist for `align-self`.
 
-{% for bp in site.data.breakpoints %}
-- `.align-self{{ bp.abbr }}-start`
-- `.align-self{{ bp.abbr }}-end`
-- `.align-self{{ bp.abbr }}-center`
-- `.align-self{{ bp.abbr }}-baseline`
-- `.align-self{{ bp.abbr }}-stretch`{% endfor %}
+{{< markdown >}}
+{{< flex.inline >}}
+{{- range $.Site.Data.breakpoints }}
+- `.align-self{{ .abbr }}-start`
+- `.align-self{{ .abbr }}-end`
+- `.align-self{{ .abbr }}-center`
+- `.align-self{{ .abbr }}-baseline`
+- `.align-self{{ .abbr }}-stretch`
+{{- end -}}
+{{< /flex.inline >}}
+{{< /markdown >}}
 
 ## Fill
 
 Use the `.flex-fill` class on a series of sibling elements to force them into widths equal to their content (or equal widths if their content does not surpass their border-boxes) while taking up all available horizontal space.
 
-{% capture example %}
+{{< example >}}
 <div class="d-flex bd-highlight">
   <div class="p-2 flex-fill bd-highlight">Flex item with a lot of content</div>
   <div class="p-2 flex-fill bd-highlight">Flex item</div>
   <div class="p-2 flex-fill bd-highlight">Flex item</div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Responsive variations also exist for `flex-fill`.
 
-{% for bp in site.data.breakpoints %}
-- `.flex{{ bp.abbr }}-fill`{% endfor %}
+{{< markdown >}}
+{{< flex.inline >}}
+{{- range $.Site.Data.breakpoints }}
+- `.flex{{ .abbr }}-fill`
+{{- end -}}
+{{< /flex.inline >}}
+{{< /markdown >}}
 
 ## Grow and shrink
 
 Use `.flex-grow-*` utilities to toggle a flex item's ability to grow to fill available space. In the example below, the `.flex-grow-1` elements uses all available space it can, while allowing the remaining two flex items their necessary space.
 
-{% capture example %}
+{{< example >}}
 <div class="d-flex bd-highlight">
   <div class="p-2 flex-grow-1 bd-highlight">Flex item</div>
   <div class="p-2 bd-highlight">Flex item</div>
   <div class="p-2 bd-highlight">Third flex item</div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Use `.flex-shrink-*` utilities to toggle a flex item's ability to shrink if necessary. In the example below, the second flex item with `.flex-shrink-1` is forced to wrap its contents to a new line, "shrinking" to allow more space for the previous flex item with `.w-100`.
 
-{% capture example %}
+{{< example >}}
 <div class="d-flex bd-highlight">
   <div class="p-2 w-100 bd-highlight">Flex item</div>
   <div class="p-2 flex-shrink-1 bd-highlight">Flex item</div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Responsive variations also exist for `flex-grow` and `flex-shrink`.
 
-{% for bp in site.data.breakpoints %}
-- `.flex{{ bp.abbr }}-{grow|shrink}-0`
-- `.flex{{ bp.abbr }}-{grow|shrink}-1`{% endfor %}
+{{< markdown >}}
+{{< flex.inline >}}
+{{- range $.Site.Data.breakpoints }}
+- `.flex{{ .abbr }}-{grow|shrink}-0`
+- `.flex{{ .abbr }}-{grow|shrink}-1`
+{{- end -}}
+{{< /flex.inline >}}
+{{< /markdown >}}
 
 ## Auto margins
 
@@ -270,7 +298,7 @@ Flexbox can do some pretty awesome things when you mix flex alignments with auto
 
 **Unfortunately, IE10 and IE11 do not properly support auto margins on flex items whose parent has a non-default `justify-content` value.** [See this StackOverflow answer](https://stackoverflow.com/a/37535548) for more details.
 
-{% capture example %}
+{{< example >}}
 <div class="d-flex bd-highlight mb-3">
   <div class="p-2 bd-highlight">Flex item</div>
   <div class="p-2 bd-highlight">Flex item</div>
@@ -288,14 +316,13 @@ Flexbox can do some pretty awesome things when you mix flex alignments with auto
   <div class="p-2 bd-highlight">Flex item</div>
   <div class="ml-auto p-2 bd-highlight">Flex item</div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ### With align-items
 
 Vertically move one flex item to the top or bottom of a container by mixing `align-items`, `flex-direction: column`, and `margin-top: auto` or `margin-bottom: auto`.
 
-{% capture example %}
+{{< example >}}
 <div class="d-flex align-items-start flex-column bd-highlight mb-3" style="height: 200px;">
   <div class="mb-auto p-2 bd-highlight">Flex item</div>
   <div class="p-2 bd-highlight">Flex item</div>
@@ -307,8 +334,7 @@ Vertically move one flex item to the top or bottom of a container by mixing `ali
   <div class="p-2 bd-highlight">Flex item</div>
   <div class="mt-auto p-2 bd-highlight">Flex item</div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Wrap
 
@@ -324,11 +350,11 @@ Change how flex items wrap in a flex container. Choose from no wrapping at all (
   </div>
 </div>
 
-{% highlight html %}
+```html
 <div class="d-flex flex-nowrap">
   ...
 </div>
-{% endhighlight %}
+```
 
 <div class="bd-example">
   <div class="d-flex flex-wrap bd-highlight">
@@ -350,11 +376,11 @@ Change how flex items wrap in a flex container. Choose from no wrapping at all (
   </div>
 </div>
 
-{% highlight html %}
+```html
 <div class="d-flex flex-wrap">
   ...
 </div>
-{% endhighlight %}
+```
 
 <div class="bd-example">
   <div class="d-flex flex-wrap-reverse bd-highlight">
@@ -376,37 +402,49 @@ Change how flex items wrap in a flex container. Choose from no wrapping at all (
   </div>
 </div>
 
-{% highlight html %}
+```html
 <div class="d-flex flex-wrap-reverse">
   ...
 </div>
-{% endhighlight %}
+```
 
 
 Responsive variations also exist for `flex-wrap`.
 
-{% for bp in site.data.breakpoints %}
-- `.flex{{ bp.abbr }}-nowrap`
-- `.flex{{ bp.abbr }}-wrap`
-- `.flex{{ bp.abbr }}-wrap-reverse`{% endfor %}
+{{< markdown >}}
+{{< flex.inline >}}
+{{- range $.Site.Data.breakpoints }}
+- `.flex{{ .abbr }}-nowrap`
+- `.flex{{ .abbr }}-wrap`
+- `.flex{{ .abbr }}-wrap-reverse`
+{{- end -}}
+{{< /flex.inline >}}
+{{< /markdown >}}
 
 ## Order
 
 Change the _visual_ order of specific flex items with a handful of `order` utilities. We only provide options for making an item first or last, as well as a reset to use the DOM order. As `order` takes any integer value (e.g., `5`), add custom CSS for any additional values needed.
 
-{% capture example %}
+{{< example >}}
 <div class="d-flex flex-nowrap bd-highlight">
   <div class="order-3 p-2 bd-highlight">First flex item</div>
   <div class="order-2 p-2 bd-highlight">Second flex item</div>
   <div class="order-1 p-2 bd-highlight">Third flex item</div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Responsive variations also exist for `order`.
 
-{% for bp in site.data.breakpoints %}{% for i in (0..12) %}
-- `.order{{ bp.abbr }}-{{ i }}`{% endfor %}{% endfor %}
+{{< markdown >}}
+{{< flex.inline >}}
+{{- range $bp := $.Site.Data.breakpoints -}}
+{{- range (seq 0 12) }}
+- `.order{{ $bp.abbr }}-{{ . }}`
+{{- end -}}
+{{- end -}}
+{{< /flex.inline >}}
+{{< /markdown >}}
+
 
 ## Align content
 
@@ -434,11 +472,11 @@ Use `align-content` utilities on flexbox containers to align flex items *togethe
   </div>
 </div>
 
-{% highlight html %}
+```html
 <div class="d-flex align-content-start flex-wrap">
   ...
 </div>
-{% endhighlight %}
+```
 
 <div class="bd-example">
   <div class="d-flex align-content-end flex-wrap bd-highlight mb-3" style="height: 200px">
@@ -460,9 +498,9 @@ Use `align-content` utilities on flexbox containers to align flex items *togethe
   </div>
 </div>
 
-{% highlight html %}
+```html
 <div class="d-flex align-content-end flex-wrap">...</div>
-{% endhighlight %}
+```
 
 <div class="bd-example">
   <div class="d-flex align-content-center flex-wrap bd-highlight mb-3" style="height: 200px">
@@ -484,9 +522,9 @@ Use `align-content` utilities on flexbox containers to align flex items *togethe
   </div>
 </div>
 
-{% highlight html %}
+```html
 <div class="d-flex align-content-center flex-wrap">...</div>
-{% endhighlight %}
+```
 
 <div class="bd-example">
   <div class="d-flex align-content-between flex-wrap bd-highlight mb-3" style="height: 200px">
@@ -508,9 +546,9 @@ Use `align-content` utilities on flexbox containers to align flex items *togethe
   </div>
 </div>
 
-{% highlight html %}
+```html
 <div class="d-flex align-content-between flex-wrap">...</div>
-{% endhighlight %}
+```
 
 <div class="bd-example">
   <div class="d-flex align-content-around flex-wrap bd-highlight mb-3" style="height: 200px">
@@ -532,9 +570,9 @@ Use `align-content` utilities on flexbox containers to align flex items *togethe
   </div>
 </div>
 
-{% highlight html %}
+```html
 <div class="d-flex align-content-around flex-wrap">...</div>
-{% endhighlight %}
+```
 
 <div class="bd-example">
   <div class="d-flex align-content-stretch flex-wrap bd-highlight mb-3" style="height: 200px">
@@ -556,15 +594,20 @@ Use `align-content` utilities on flexbox containers to align flex items *togethe
   </div>
 </div>
 
-{% highlight html %}
+```html
 <div class="d-flex align-content-stretch flex-wrap">...</div>
-{% endhighlight %}
+```
 
 Responsive variations also exist for `align-content`.
 
-{% for bp in site.data.breakpoints %}
-- `.align-content{{ bp.abbr }}-start`
-- `.align-content{{ bp.abbr }}-end`
-- `.align-content{{ bp.abbr }}-center`
-- `.align-content{{ bp.abbr }}-around`
-- `.align-content{{ bp.abbr }}-stretch`{% endfor %}
+{{< markdown >}}
+{{< flex.inline >}}
+{{- range $.Site.Data.breakpoints }}
+- `.align-content{{ .abbr }}-start`
+- `.align-content{{ .abbr }}-end`
+- `.align-content{{ .abbr }}-center`
+- `.align-content{{ .abbr }}-around`
+- `.align-content{{ .abbr }}-stretch`
+{{- end -}}
+{{< /flex.inline >}}
+{{< /markdown >}}
similarity index 80%
rename from site/docs/4.5/utilities/float.md
rename to site/content/docs/4.5/utilities/float.md
index 977beaeaf84fc87201d15b22af518981ce77bc9d..be35d729d12ebdbab633f7cfcaa4062ad68f8a1b 100644 (file)
@@ -14,18 +14,17 @@ These utility classes float an element to the left or right, or disable floating
 
 Toggle a float with a class:
 
-{% capture example %}
+{{< example >}}
 <div class="float-left">Float left on all viewport sizes</div><br>
 <div class="float-right">Float right on all viewport sizes</div><br>
 <div class="float-none">Don't float on all viewport sizes</div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Mixins
 
 Or by Sass mixin:
 
-{% highlight scss %}
+```scss
 .element {
   @include float-left;
 }
@@ -35,23 +34,27 @@ Or by Sass mixin:
 .one-more {
   @include float-none;
 }
-{% endhighlight %}
+```
 
 ## Responsive
 
 Responsive variations also exist for each `float` value.
 
-{% capture example %}
+{{< example >}}
 <div class="float-sm-left">Float left on viewports sized SM (small) or wider</div><br>
 <div class="float-md-left">Float left on viewports sized MD (medium) or wider</div><br>
 <div class="float-lg-left">Float left on viewports sized LG (large) or wider</div><br>
 <div class="float-xl-left">Float left on viewports sized XL (extra-large) or wider</div><br>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Here are all the support classes;
 
-{% for bp in site.data.breakpoints %}
-- `.float{{ bp.abbr }}-left`
-- `.float{{ bp.abbr }}-right`
-- `.float{{ bp.abbr }}-none`{% endfor %}
+{{< markdown >}}
+{{< float.inline >}}
+{{- range $.Site.Data.breakpoints }}
+- `.float{{ .abbr }}-left`
+- `.float{{ .abbr }}-right`
+- `.float{{ .abbr }}-none`
+{{- end -}}
+{{< /float.inline >}}
+{{< /markdown >}}
similarity index 64%
rename from site/docs/4.5/utilities/image-replacement.md
rename to site/content/docs/4.5/utilities/image-replacement.md
index 4c7decac5576e97c1411b82ea913bc931db6eabd..d3bdf63aa5823f0f2792ed20f9237a5da852453a 100644 (file)
@@ -5,32 +5,31 @@ description: Swap text for background images with the image replacement class.
 group: utilities
 ---
 
-{% capture callout %}
+{{< callout warning >}}
 ##### Warning
 
 The `text-hide()` class and mixin has been deprecated as of v4.1. It will be removed entirely in v5.
-{% endcapture %}
-{% include callout.html content=callout type="warning" %}
+{{< /callout >}}
 
 Utilize the `.text-hide` class or mixin to help replace an element's text content with a background image.
 
-{% highlight html %}
+```html
 <h1 class="text-hide">Custom heading</h1>
-{% endhighlight %}
+```
 
-{% highlight scss %}
+```scss
 // Usage as a mixin
 .heading {
   @include text-hide;
 }
-{% endhighlight %}
+```
 
 Use the `.text-hide` class to maintain the accessibility and SEO benefits of heading tags, but want to utilize a `background-image` instead of text.
 
 <div class="bd-example">
-  <h1 class="text-hide" style="background-image: url('{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/brand/bootstrap-solid.svg'); width: 50px; height: 50px;">Bootstrap</h1>
+  <h1 class="text-hide" style="background-image: url('/docs/{{< param docs_version >}}/assets/brand/bootstrap-solid.svg'); width: 50px; height: 50px;">Bootstrap</h1>
 </div>
 
-{% highlight html %}
+```html
 <h1 class="text-hide" style="background-image: url('...');">Bootstrap</h1>
-{% endhighlight %}
+```
similarity index 90%
rename from site/docs/4.5/utilities/interactions.md
rename to site/content/docs/4.5/utilities/interactions.md
index 024d796a1106ab1ec0f12a683897fee23f053335..b808dc5b6027326bcf0bacb9baec1412269f6a7e 100644 (file)
@@ -9,11 +9,10 @@ group: utilities
 
 Change how the content is selected when the user interacts with it. Note that Internet Explorer and Legacy Edge have no support for the `all` value for `user-select`, and as such, **`.user-select-all` is not supported by either browser.**
 
-{% capture example %}
+{{< example >}}
 <p class="user-select-all">This paragraph will be entirely selected when clicked by the user.</p>
 <p class="user-select-auto">This paragraph has the default select behavior.</p>
 <p class="user-select-none">This paragraph will not be selectable when clicked by the user.</p>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Customize the available classes by changing the `$user-selects` Sass list in `_variables.scss`.
similarity index 96%
rename from site/docs/4.5/utilities/overflow.md
rename to site/content/docs/4.5/utilities/overflow.md
index 2877c85b7435adb690a12867cb215365cc4e004d..079da225ec757d7532971175a4f843d43aa55b54 100644 (file)
@@ -16,9 +16,9 @@ Barebones `overflow` functionality is provided for two values by default, and th
   </div>
 </div>
 
-{% highlight html %}
+```html
 <div class="overflow-auto">...</div>
 <div class="overflow-hidden">...</div>
-{% endhighlight %}
+```
 
 Using Sass variables, you may customize the overflow utilities by changing the `$overflows` variable in `_variables.scss`.
similarity index 89%
rename from site/docs/4.5/utilities/position.md
rename to site/content/docs/4.5/utilities/position.md
index c819df080db09edf24f1c56ea2d1a70702a67ac2..2fe04d9741ecb002bb0ca367a92bab05d3ec0452 100644 (file)
@@ -10,29 +10,29 @@ toc: true
 
 Quick positioning classes are available, though they are not responsive.
 
-{% highlight html %}
+```html
 <div class="position-static">...</div>
 <div class="position-relative">...</div>
 <div class="position-absolute">...</div>
 <div class="position-fixed">...</div>
 <div class="position-sticky">...</div>
-{% endhighlight %}
+```
 
 ## Fixed top
 
 Position an element at the top of the viewport, from edge to edge. Be sure you understand the ramifications of fixed position in your project; you may need to add additional CSS.
 
-{% highlight html %}
+```html
 <div class="fixed-top">...</div>
-{% endhighlight %}
+```
 
 ## Fixed bottom
 
 Position an element at the bottom of the viewport, from edge to edge. Be sure you understand the ramifications of fixed position in your project; you may need to add additional CSS.
 
-{% highlight html %}
+```html
 <div class="fixed-bottom">...</div>
-{% endhighlight %}
+```
 
 ## Sticky top
 
@@ -40,6 +40,6 @@ Position an element at the top of the viewport, from edge to edge, but only afte
 
 **IE11 and IE10 will render `position: sticky` as `position: relative`.** As such, we wrap the styles in a `@supports` query, limiting the stickiness to only browsers that can render it properly.
 
-{% highlight html %}
+```html
 <div class="sticky-top">...</div>
-{% endhighlight %}
+```
similarity index 65%
rename from site/docs/4.5/utilities/screen-readers.md
rename to site/content/docs/4.5/utilities/screen-readers.md
index c38ba3e65eb697dc2b590fcf9562c2c2e3261ec0..4e2260914a81226e2b0c724997e964b3ed53db20 100644 (file)
@@ -7,19 +7,14 @@ group: utilities
 
 Hide an element to all devices **except screen readers** with `.sr-only`. Combine `.sr-only` with `.sr-only-focusable` to show the element again when it's focused (e.g. by a keyboard-only user). Can also be used as mixins.
 
-{%- comment -%}
-Necessary for following [accessibility best practices]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/#accessibility).
-{%- endcomment -%}
-
-{% capture example %}
+{{< example >}}
 <a class="sr-only sr-only-focusable" href="#content">Skip to main content</a>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% highlight scss %}
+```scss
 // Usage as a mixin
 .skip-navigation {
   @include sr-only;
   @include sr-only-focusable;
 }
-{% endhighlight %}
+```
similarity index 89%
rename from site/docs/4.5/utilities/shadows.md
rename to site/content/docs/4.5/utilities/shadows.md
index 9c3e580440c833ff1587dacb127f8e3d407e020e..2803031d6602f49ad82e212055b5320acb690d29 100644 (file)
@@ -9,10 +9,9 @@ group: utilities
 
 While shadows on components are disabled by default in Bootstrap and can be enabled via `$enable-shadows`, you can also quickly add or remove a shadow with our `box-shadow` utility classes. Includes support for `.shadow-none` and three default sizes (which have associated variables to match).
 
-{% capture example %}
+{{< example >}}
 <div class="shadow-none p-3 mb-5 bg-light rounded">No shadow</div>
 <div class="shadow-sm p-3 mb-5 bg-white rounded">Small shadow</div>
 <div class="shadow p-3 mb-5 bg-white rounded">Regular shadow</div>
 <div class="shadow-lg p-3 mb-5 bg-white rounded">Larger shadow</div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
similarity index 80%
rename from site/docs/4.5/utilities/sizing.md
rename to site/content/docs/4.5/utilities/sizing.md
index 1b0acf07ac51c21723e624707d664181b3d59a65..c5e8654a127538b2a759ca5afc4d7e245718ddac 100644 (file)
@@ -10,16 +10,15 @@ toc: true
 
 Width and height utilities are generated from the `$sizes` Sass map in `_variables.scss`. Includes support for `25%`, `50%`, `75%`, `100%`, and `auto` by default. Modify those values as you need to generate different utilities here.
 
-{% capture example %}
+{{< example >}}
 <div class="w-25 p-3" style="background-color: #eee;">Width 25%</div>
 <div class="w-50 p-3" style="background-color: #eee;">Width 50%</div>
 <div class="w-75 p-3" style="background-color: #eee;">Width 75%</div>
 <div class="w-100 p-3" style="background-color: #eee;">Width 100%</div>
 <div class="w-auto p-3" style="background-color: #eee;">Width auto</div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <div style="height: 100px; background-color: rgba(255,0,0,0.1);">
   <div class="h-25 d-inline-block" style="width: 120px; background-color: rgba(0,0,255,.1)">Height 25%</div>
   <div class="h-50 d-inline-block" style="width: 120px; background-color: rgba(0,0,255,.1)">Height 50%</div>
@@ -27,30 +26,27 @@ Width and height utilities are generated from the `$sizes` Sass map in `_variabl
   <div class="h-100 d-inline-block" style="width: 120px; background-color: rgba(0,0,255,.1)">Height 100%</div>
   <div class="h-auto d-inline-block" style="width: 120px; background-color: rgba(0,0,255,.1)">Height auto</div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 You can also use `max-width: 100%;` and `max-height: 100%;` utilities as needed.
 
-{% capture example %}
-{% include icons/placeholder.svg width="100%" height="100" class="mw-100" text="Max-width 100%" %}
-{% endcapture %}
-{% include example.html content=example %}
+{{< example >}}
+{{< placeholder width="100%" height="100" class="mw-100" text="Max-width 100%" >}}
+{{< /example >}}
 
-{% capture example %}
+{{< example >}}
 <div style="height: 100px; background-color: rgba(255,0,0,0.1);">
   <div class="mh-100" style="width: 100px; height: 200px; background-color: rgba(0,0,255,0.1);">Max-height 100%</div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Relative to the viewport
 
 You can also use utilities to set the width and height relative to the viewport.
 
-{% highlight html %}
+```html
 <div class="min-vw-100">Min-width 100vw</div>
 <div class="min-vh-100">Min-height 100vh</div>
 <div class="vw-100">Width 100vw</div>
 <div class="vh-100">Height 100vh</div>
-{% endhighlight %}
+```
similarity index 95%
rename from site/docs/4.5/utilities/spacing.md
rename to site/content/docs/4.5/utilities/spacing.md
index 09e17e0445371b59cbd8a768af3902a4e5831490..01eeac67d3b34845ee65283d2c9d0273269c6d81 100644 (file)
@@ -47,7 +47,7 @@ Where *size* is one of:
 
 Here are some representative examples of these classes:
 
-{% highlight scss %}
+```scss
 .mt-0 {
   margin-top: 0 !important;
 }
@@ -64,7 +64,7 @@ Here are some representative examples of these classes:
 .p-3 {
   padding: $spacer !important;
 }
-{% endhighlight %}
+```
 
 ### Horizontal centering
 
@@ -76,11 +76,11 @@ Additionally, Bootstrap also includes an `.mx-auto` class for horizontally cente
   </div>
 </div>
 
-{% highlight html %}
+```html
 <div class="mx-auto" style="width: 200px;">
   Centered element
 </div>
-{% endhighlight %}
+```
 
 ### Negative margin
 
@@ -88,18 +88,17 @@ In CSS, `margin` properties can utilize negative values (`padding` cannot). As o
 
 The syntax is nearly the same as the default, positive margin utilities, but with the addition of `n` before the requested size. Here's an example class that's the opposite of `.mt-1`:
 
-{% highlight scss %}
+```scss
 .mt-n1 {
   margin-top: -0.25rem !important;
 }
-{% endhighlight %}
+```
 
 Here's an example of customizing the Bootstrap grid at the medium (`md`) breakpoint and above. We've increased the `.col` padding with `.px-md-5` and then counteracted that with `.mx-md-n5` on the parent `.row`.
 
-{% capture example %}
+{{< example >}}
 <div class="row mx-md-n5">
   <div class="col px-md-5"><div class="p-3 border bg-light">Custom column padding</div></div>
   <div class="col px-md-5"><div class="p-3 border bg-light">Custom column padding</div></div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
similarity index 82%
rename from site/docs/4.5/utilities/stretched-link.md
rename to site/content/docs/4.5/utilities/stretched-link.md
index 1d4d2ad317ccf4ff4616c9a3e6aeabcec3955053..fa951248913e0bb3332116a42ddc665a4838f2bd 100644 (file)
@@ -11,38 +11,36 @@ Cards have `position: relative` by default in Bootstrap, so in this case you can
 
 Multiple links and tap targets are not recommended with stretched links. However, some `position` and `z-index` styles can help should this be required.
 
-{% capture example %}
+{{< example >}}
 <div class="card" style="width: 18rem;">
-  {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text=" " title="Card image cap" %}
+  {{< placeholder width="100%" height="180" class="card-img-top" text=" " title="Card image cap" >}}
   <div class="card-body">
     <h5 class="card-title">Card with stretched link</h5>
     <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
     <a href="#" class="btn btn-primary stretched-link">Go somewhere</a>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Media objects do not have `position: relative` by default, so we need to add the `.position-relative` here to prevent the link from stretching outside the media object.
 
-{% capture example %}
+{{< example >}}
 <div class="media position-relative">
-  {% include icons/placeholder.svg width="144" height="144" class="mr-3" text=" " title="Generic placeholder image" %}
+  {{< placeholder width="144" height="144" class="mr-3" text=" " title="Generic placeholder image" >}}
   <div class="media-body">
     <h5 class="mt-0">Media with stretched link</h5>
     <p>Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.</p>
     <a href="#" class="stretched-link">Go somewhere</a>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Columns are `position: relative` by default, so clickable columns only require the `.stretched-link` class on a link. However, stretching a link over an entire `.row` requires `.position-static` on the column and `.position-relative` on the row.
 
-{% capture example %}
+{{< example >}}
 <div class="row no-gutters bg-light position-relative">
   <div class="col-md-6 mb-md-0 p-md-4">
-    {% include icons/placeholder.svg width="100%" height="200" class="w-100" text=" " title="Generic placeholder image" %}
+    {{< placeholder width="100%" height="200" class="w-100" text=" " title="Generic placeholder image" >}}
   </div>
   <div class="col-md-6 position-static p-4 pl-md-0">
     <h5 class="mt-0">Columns with stretched link</h5>
@@ -50,8 +48,7 @@ Columns are `position: relative` by default, so clickable columns only require t
     <a href="#" class="stretched-link">Go somewhere</a>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Identifying the containing block
 
@@ -62,9 +59,9 @@ If the stretched link doesn't seem to work, the [containing block](https://devel
 - A `will-change` value of `transform` or `perspective`
 - A `filter` value other than `none` or a `will-change` value of `filter` (only works on Firefox)
 
-{% capture example %}
+{{< example >}}
 <div class="card" style="width: 18rem;">
-  {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text=" " title="Card image cap" %}
+  {{< placeholder width="100%" height="180" class="card-img-top" text=" " title="Card image cap" >}}
   <div class="card-body">
     <h5 class="card-title">Card with stretched links</h5>
     <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
@@ -76,5 +73,4 @@ If the stretched link doesn't seem to work, the [containing block](https://devel
     </p>
   </div>
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
similarity index 81%
rename from site/docs/4.5/utilities/text.md
rename to site/content/docs/4.5/utilities/text.md
index f9c73cff7d65c6785d5b868490ee633837f1b40c..df6ea4fa6a39bb4f11ce9b73b7ae4c8e30ce52a2 100644 (file)
@@ -10,14 +10,13 @@ toc: true
 
 Easily realign text to components with text alignment classes.
 
-{% capture example %}
+{{< example >}}
 <p class="text-justify">Ambitioni dedisse scripsisse iudicaretur. Cras mattis iudicium purus sit amet fermentum. Donec sed odio operae, eu vulputate felis rhoncus. Praeterea iter est quasdam res quas ex communi. At nos hinc posthac, sitientis piros Afros. Petierunt uti sibi concilium totius Galliae in diem certam indicere. Cras mattis iudicium purus sit amet fermentum.</p>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 For left, right, and center alignment, responsive classes are available that use the same viewport width breakpoints as the grid system.
 
-{% capture example %}
+{{< example >}}
 <p class="text-left">Left aligned text on all viewport sizes.</p>
 <p class="text-center">Center aligned text on all viewport sizes.</p>
 <p class="text-right">Right aligned text on all viewport sizes.</p>
@@ -26,32 +25,29 @@ For left, right, and center alignment, responsive classes are available that use
 <p class="text-md-left">Left aligned text on viewports sized MD (medium) or wider.</p>
 <p class="text-lg-left">Left aligned text on viewports sized LG (large) or wider.</p>
 <p class="text-xl-left">Left aligned text on viewports sized XL (extra-large) or wider.</p>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Text wrapping and overflow
 
 Wrap text with a `.text-wrap` class.
 
-{% capture example %}
+{{< example >}}
 <div class="badge badge-primary text-wrap" style="width: 6rem;">
   This text should wrap.
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Prevent text from wrapping with a `.text-nowrap` class.
 
-{% capture example %}
+{{< example >}}
 <div class="text-nowrap bd-highlight" style="width: 8rem;">
   This text should overflow the parent.
 </div>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 For longer content, you can add a `.text-truncate` class to truncate the text with an ellipsis. **Requires `display: inline-block` or `display: block`.**
 
-{% capture example %}
+{{< example >}}
 <!-- Block level -->
 <div class="row">
   <div class="col-2 text-truncate">
@@ -63,28 +59,25 @@ For longer content, you can add a `.text-truncate` class to truncate the text wi
 <span class="d-inline-block text-truncate" style="max-width: 150px;">
   Praeterea iter est quasdam res quas ex communi.
 </span>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Word break
 
 Prevent long strings of text from breaking your components' layout by using `.text-break` to set `word-wrap: break-word` and `word-break: break-word`. We use `word-wrap` instead of the more common `overflow-wrap` for wider browser support, and add the deprecated `word-break: break-word` to avoid issues with flex containers.
 
-{% capture example %}
+{{< example >}}
 <p class="text-break">mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm</p>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Text transform
 
 Transform text in components with text capitalization classes.
 
-{% capture example %}
+{{< example >}}
 <p class="text-lowercase">Lowercased text.</p>
 <p class="text-uppercase">Uppercased text.</p>
 <p class="text-capitalize">CapiTaliZed text.</p>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 Note how `.text-capitalize` only changes the first letter of each word, leaving the case of any other letters unaffected.
 
@@ -92,41 +85,37 @@ Note how `.text-capitalize` only changes the first letter of each word, leaving
 
 Quickly change the weight (boldness) of text or italicize text.
 
-{% capture example %}
+{{< example >}}
 <p class="font-weight-bold">Bold text.</p>
 <p class="font-weight-bolder">Bolder weight text (relative to the parent element).</p>
 <p class="font-weight-normal">Normal weight text.</p>
 <p class="font-weight-light">Light weight text.</p>
 <p class="font-weight-lighter">Lighter weight text (relative to the parent element).</p>
 <p class="font-italic">Italic text.</p>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Monospace
 
 Change a selection to our monospace font stack with `.text-monospace`.
 
-{% capture example %}
+{{< example >}}
 <p class="text-monospace">This is in monospace</p>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Reset color
 
 Reset a text or link's color with `.text-reset`, so that it inherits the color from its parent.
 
-{% capture example %}
+{{< example >}}
 <p class="text-muted">
   Muted text with a <a href="#" class="text-reset">reset link</a>.
 </p>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 ## Text decoration
 
 Remove a text decoration with a `.text-decoration-none` class.
 
-{% capture example %}
+{{< example >}}
 <a href="#" class="text-decoration-none">Non-underlined link</a>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
similarity index 88%
rename from site/docs/4.5/utilities/vertical-align.md
rename to site/content/docs/4.5/utilities/vertical-align.md
index bc4f0b950a9bf437b588b5a2c826a01e93a0c659..b2c16b569c12edf3a4c51d523aaf56f2955c9024 100644 (file)
@@ -11,19 +11,18 @@ Choose from `.align-baseline`, `.align-top`, `.align-middle`, `.align-bottom`, `
 
 With inline elements:
 
-{% capture example %}
+{{< example >}}
 <span class="align-baseline">baseline</span>
 <span class="align-top">top</span>
 <span class="align-middle">middle</span>
 <span class="align-bottom">bottom</span>
 <span class="align-text-top">text-top</span>
 <span class="align-text-bottom">text-bottom</span>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
 
 With table cells:
 
-{% capture example %}
+{{< example >}}
 <table style="height: 100px;">
   <tbody>
     <tr>
@@ -36,5 +35,4 @@ With table cells:
     </tr>
   </tbody>
 </table>
-{% endcapture %}
-{% include example.html content=example %}
+{{< /example >}}
similarity index 91%
rename from site/docs/4.5/utilities/visibility.md
rename to site/content/docs/4.5/utilities/visibility.md
index bbfc0cbbc69ffadde04b57f86e1b162efa581771..68f8508fd5caca8e3e510c69a7627378f5d8dd8f 100644 (file)
@@ -9,12 +9,12 @@ Set the `visibility` of elements with our visibility utilities. These utility cl
 
 Apply `.visible` or `.invisible` as needed.
 
-{% highlight html %}
+```html
 <div class="visible">...</div>
 <div class="invisible">...</div>
-{% endhighlight %}
+```
 
-{% highlight scss %}
+```scss
 // Class
 .visible {
   visibility: visible !important;
@@ -31,4 +31,4 @@ Apply `.visible` or `.invisible` as needed.
 .element {
   @include invisible(hidden);
 }
-{% endhighlight %}
+```
diff --git a/site/content/docs/_index.html b/site/content/docs/_index.html
new file mode 100644 (file)
index 0000000..7db8e4c
--- /dev/null
@@ -0,0 +1,5 @@
+---
+layout: redirect
+sitemap_exclude: true
+redirect: "/docs/4.5/getting-started/introduction/"
+---
diff --git a/site/content/docs/versions.md b/site/content/docs/versions.md
new file mode 100644 (file)
index 0000000..2f93188
--- /dev/null
@@ -0,0 +1,28 @@
+---
+layout: single
+title: Versions
+description: An appendix of hosted documentation for nearly every release of Bootstrap, from v1 through v4.
+---
+
+{{< list-versions.inline >}}
+<div class="row">
+  {{- range $release := sort (index $.Site.Data "docs-versions") "group" "desc" }}
+  <div class="col-md-6 col-lg-4 col-xl mb-4">
+    <h2>{{ $release.group }}</h2>
+    <p>{{ $release.description }}</p>
+    {{- $versions := sort $release.versions "v" "desc" -}}
+    {{- range $i, $version := $versions }}
+      {{- $len := len $versions -}}
+      {{ if (eq $i 0) }}<div class="list-group">{{ end }}
+        <a class="list-group-item list-group-item-action py-2 text-primary{{ if (eq $version.v $.Site.Params.docs_version) }} d-flex justify-content-between align-items-center{{ end }}" href="{{ $release.baseurl }}/{{ $version.v }}/">
+          {{ $version.v }}
+          {{ if (eq $version.v $.Site.Params.docs_version) -}}
+          <span class="badge badge-primary">Latest</span>
+          {{- end }}
+        </a>
+      {{ if (eq (add $i 1) $len) }}</div>{{ end }}
+    {{ end -}}
+  </div>
+  {{ end -}}
+</div>
+{{< /list-versions.inline >}}
similarity index 99%
rename from site/_data/browser-bugs.yml
rename to site/data/browser-bugs.yml
index 7138c75b4287c787eab14a3b08362e48138fe5f3..c4fa93a1f1a7ebc210f32f8b10e4486e7717fe52 100644 (file)
   upstream_bug: >
     Chromium#419108
   origin: >
-    Offshoot of Bootstrap#8350 & Chromium#337668
+    Bootstrap#8350, Chromium#337668
 
 -
   browser: >
similarity index 78%
rename from site/_data/colors.yml
rename to site/data/colors.yml
index 202270cdcb79ca3a982623e354052bffc0bacf21..0afcb307a94f9de51b62bcace896da8f8d83ab0e 100644 (file)
@@ -1,11 +1,11 @@
 - name: blue
-  hex: "#007bff"
+  hex: "#0d6efd"
 - name: indigo
   hex: "#6610f2"
 - name: purple
   hex: "#6f42c1"
 - name: pink
-  hex: "#e83e8c"
+  hex: "#d63384"
 - name: red
   hex: "#dc3545"
 - name: orange
 - name: yellow
   hex: "#ffc107"
 - name: green
-  hex: "#28a745"
+  hex: "#198754"
 - name: teal
   hex: "#20c997"
 - name: cyan
-  hex: "#17a2b8"
+  hex: "#0dcaf0"
 - name: white
   hex: "#fff"
 - name: gray
-  hex: "#868e96"
+  hex: "#6c757d"
 - name: gray-dark
   hex: "#343a40"
diff --git a/site/data/docs-versions.yml b/site/data/docs-versions.yml
new file mode 100644 (file)
index 0000000..30c2f5a
--- /dev/null
@@ -0,0 +1,46 @@
+- group: v1.x
+  baseurl: "https://getbootstrap.com"
+  description: "Every minor and patch release from v1 is listed below."
+  versions:
+    - v: "1.0.0"
+    - v: "1.1.0"
+    - v: "1.1.1"
+    - v: "1.2.0"
+    - v: "1.3.0"
+    - v: "1.4.0"
+
+- group: v2.x
+  baseurl: "https://getbootstrap.com"
+  description: "Every minor and patch release from v2 is listed below."
+  versions:
+    - v: "2.0.0"
+    - v: "2.0.1"
+    - v: "2.0.2"
+    - v: "2.0.3"
+    - v: "2.0.4"
+    - v: "2.1.0"
+    - v: "2.1.1"
+    - v: "2.2.0"
+    - v: "2.2.1"
+    - v: "2.2.2"
+    - v: "2.3.0"
+    - v: "2.3.1"
+    - v: "2.3.2"
+
+- group: v3.x
+  baseurl: "https://getbootstrap.com/docs"
+  description: "Every minor and patch release from v3 is listed below. Last update was v3.4.1."
+  versions:
+    - v: "3.3"
+    - v: "3.4"
+
+- group: v4.x
+  baseurl: "https://getbootstrap.com/docs"
+  description: "Current major release and its minor versions. Last update was v4.5.3."
+  versions:
+    - v: "4.0"
+    - v: "4.1"
+    - v: "4.2"
+    - v: "4.3"
+    - v: "4.4"
+    - v: "4.5"
similarity index 98%
rename from site/_data/examples.yml
rename to site/data/examples.yml
index 673fde40b656621b3f689de3627a4ac91240ffe6..6fb65d7f6ba2793e6879807f3b3b2ca324acad0c 100644 (file)
@@ -1,4 +1,4 @@
-- category: Custom components
+- category: Custom Components
   description: "Brand new components and templates to help folks quickly get started with Bootstrap and demonstrate best practices for adding onto the framework."
   examples:
     - name: Album
similarity index 100%
rename from site/_data/grays.yml
rename to site/data/grays.yml
similarity index 100%
rename from site/_data/nav.yml
rename to site/data/sidebar.yml
diff --git a/site/docs/4.5/about/team.md b/site/docs/4.5/about/team.md
deleted file mode 100644 (file)
index 231e315..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
----
-layout: docs
-title: Team
-description: An overview of the founding team and core contributors to Bootstrap.
-group: about
----
-
-Bootstrap is maintained by the founding team and a small group of invaluable core contributors, with the massive support and involvement of our community.
-
-<div class="list-group mb-3">
-  {% for member in site.data.core-team %}
-    <a class="list-group-item list-group-item-action d-flex align-items-center" href="https://github.com/{{ member.user }}">
-      <img src="https://github.com/{{ member.user }}.png" alt="@{{ member.user }}" width="32" height="32" class="rounded mr-2" loading="lazy">
-      <span>
-        <strong>{{ member.name }}</strong> @{{ member.user }}
-      </span>
-    </a>
-  {% endfor %}
-</div>
-
-Get involved with Bootstrap development by [opening an issue]({{ site.repo }}/issues/new) or submitting a pull request. Read our [contributing guidelines]({{ site.repo }}/blob/v{{ site.current_version }}/.github/CONTRIBUTING.md) for information on how we develop.
diff --git a/site/docs/4.5/assets/css/docs.min.css b/site/docs/4.5/assets/css/docs.min.css
deleted file mode 100644 (file)
index 7beb358..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/*!
- * Bootstrap Docs (https://getbootstrap.com/)
- * Copyright 2011-2020 The Bootstrap Authors
- * Copyright 2011-2020 Twitter, Inc.
- * Licensed under the Creative Commons Attribution 3.0 Unported License.
- * For details, see https://creativecommons.org/licenses/by/3.0/.
- */.bd-navbar{min-height:4rem;background-color:#7952b3;box-shadow:0 .5rem 1rem rgba(0,0,0,.05),inset 0 -1px 0 rgba(0,0,0,.1)}@media (max-width:991.98px){.bd-navbar{padding-right:.5rem;padding-left:.5rem}.bd-navbar .navbar-nav-scroll{max-width:100%;height:2.5rem;margin-top:.25rem;overflow:hidden}.bd-navbar .navbar-nav-scroll .navbar-nav{padding-bottom:2rem;overflow-x:auto;white-space:nowrap;-webkit-overflow-scrolling:touch}}@media (min-width:768px){@supports ((position:-webkit-sticky) or (position:sticky)){.bd-navbar{position:-webkit-sticky;position:sticky;top:0;z-index:1071}}}.bd-navbar .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem;color:rgba(255,255,255,.85)}.bd-navbar .navbar-nav .nav-link.active,.bd-navbar .navbar-nav .nav-link:hover{color:#fff;background-color:transparent}.bd-navbar .navbar-nav .nav-link.active{font-weight:600}.bd-navbar .navbar-nav-svg{display:inline-block;width:1rem;height:1rem;vertical-align:text-top}.bd-navbar .dropdown-menu{font-size:.875rem}.bd-navbar .dropdown-item.active{font-weight:600;color:#212529;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23292b2c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") no-repeat .4rem .6rem/.75rem .75rem}.bd-masthead{position:relative;padding:3rem 15px;background:linear-gradient(to right bottom,#f7f5fb 50%,#fff 50%)}.bd-masthead h1{font-size:4rem;line-height:1}@media (max-width:1200px){.bd-masthead h1{font-size:calc(1.525rem + 3.3vw)}}.bd-masthead .lead{font-size:1.5rem;font-weight:400;color:#495057}@media (max-width:1200px){.bd-masthead .lead{font-size:calc(1.275rem + .3vw)}}.bd-masthead .btn{padding:.8rem 2rem;font-weight:600;font-size:1.25rem}.bd-masthead .carbonad{margin-top:0!important;margin-bottom:-3rem!important}@media (min-width:576px){.bd-masthead{padding-top:5rem;padding-bottom:5rem}.bd-masthead .carbonad{margin-bottom:0!important}}@media (min-width:768px){.bd-masthead .carbonad{margin-top:3rem!important}}.masthead-followup .bd-clipboard{display:none}.masthead-followup h2{font-size:2.5rem}@media (max-width:1200px){.masthead-followup h2{font-size:calc(1.375rem + 1.5vw)}}.masthead-followup .highlight{border-radius:.5rem}.masthead-followup .highlight pre::-webkit-scrollbar{display:none}.masthead-followup .highlight pre code{display:inline-block;white-space:pre}.masthead-followup .highlight pre code::before{display:none}.masthead-followup-icon{padding:.75rem;background-image:linear-gradient(to bottom right,rgba(255,255,255,.2),rgba(255,255,255,.01));border-radius:.75rem;box-shadow:0 .125rem .25rem rgba(0,0,0,.1)}.masthead-followup-svg{-webkit-filter:drop-shadow(0 1px 0 rgba(0, 0, 0, .125));filter:drop-shadow(0 1px 0 rgba(0, 0, 0, .125))}#carbonads{position:static;display:block;max-width:400px;padding:15px 15px 15px 160px;margin:2rem 0;overflow:hidden;font-size:.8125rem;line-height:1.4;text-align:left;background-color:rgba(0,0,0,.05)}#carbonads a{color:#333;text-decoration:none}@media (min-width:576px){#carbonads{max-width:330px;border-radius:4px}}.carbon-img{float:left;margin-left:-145px}.carbon-poweredby{display:block;margin-top:.75rem;color:#777!important}.bd-content{-ms-flex-order:1;order:1}.bd-content>h2[id],.bd-content>h3[id],.bd-content>h4[id]{pointer-events:none}.bd-content>h2[id]::before,.bd-content>h3[id]::before,.bd-content>h4[id]::before{display:block;height:6rem;margin-top:-6rem;content:""}.bd-content>table{width:100%;max-width:100%;margin-bottom:1rem}@media (max-width:991.98px){.bd-content>table{display:block;overflow-x:auto}.bd-content>table.table-bordered{border:0}}.bd-content>table>tbody>tr>td,.bd-content>table>tbody>tr>th,.bd-content>table>tfoot>tr>td,.bd-content>table>tfoot>tr>th,.bd-content>table>thead>tr>td,.bd-content>table>thead>tr>th{padding:.75rem;vertical-align:top;border:1px solid #dee2e6}.bd-content>table>tbody>tr>td>p:last-child,.bd-content>table>tbody>tr>th>p:last-child,.bd-content>table>tfoot>tr>td>p:last-child,.bd-content>table>tfoot>tr>th>p:last-child,.bd-content>table>thead>tr>td>p:last-child,.bd-content>table>thead>tr>th>p:last-child{margin-bottom:0}.bd-content>table td:first-child>code{white-space:nowrap}.bd-content-title{display:block;pointer-events:auto}.bd-content>h2{font-size:2rem}@media (max-width:1200px){.bd-content>h2{font-size:calc(1.325rem + .9vw)}}.bd-content>h3{font-size:1.75rem}@media (max-width:1200px){.bd-content>h3{font-size:calc(1.3rem + .6vw)}}.bd-content>h4{font-size:1.5rem}@media (max-width:1200px){.bd-content>h4{font-size:calc(1.275rem + .3vw)}}.bd-content>h2:not(:first-child){margin-top:3rem}.bd-content>h3{margin-top:1.5rem}.bd-content>ol li,.bd-content>ul li{margin-bottom:.25rem}@media (min-width:992px){.bd-content>ol,.bd-content>p,.bd-content>ul{max-width:80%}}.bd-title{margin-top:1rem;margin-bottom:.5rem;font-size:3rem}@media (max-width:1200px){.bd-title{font-size:calc(1.425rem + 2.1vw)}}.bd-lead{font-size:1.5rem;font-weight:300}@media (max-width:1200px){.bd-lead{font-size:calc(1.275rem + .3vw)}}@media (min-width:992px){.bd-lead{max-width:80%}}.bd-text-purple{color:#563d7c}.bd-text-purple-bright{color:#7952b3}.bd-bg-purple-bright{background-color:#7952b3}.skippy{background-color:#563d7c}.skippy a{color:#fff}.skippy:focus-within a{position:static!important;width:auto!important;height:auto!important;padding:.5rem!important;margin:.25rem!important;overflow:visible!important;clip:auto!important;white-space:normal!important}.bd-toc{-ms-flex-order:2;order:2;padding-top:1.5rem;padding-bottom:1.5rem;font-size:.875rem}@supports ((position:-webkit-sticky) or (position:sticky)){.bd-toc{position:-webkit-sticky;position:sticky;top:4rem;height:calc(100vh - 4rem);overflow-y:auto}}.section-nav{padding-left:0;border-left:1px solid #eee}.section-nav ul{padding-left:1rem}.toc-entry{display:block}.toc-entry a{display:block;padding:.125rem 1.5rem;color:#77757a}.toc-entry a:hover{color:#007bff;text-decoration:none}.bd-sidebar{-ms-flex-order:0;order:0;border-bottom:1px solid rgba(0,0,0,.1)}@media (min-width:768px){.bd-sidebar{border-right:1px solid rgba(0,0,0,.1)}@supports ((position:-webkit-sticky) or (position:sticky)){.bd-sidebar{position:-webkit-sticky;position:sticky;top:4rem;z-index:1000;height:calc(100vh - 4rem)}}}@media (min-width:1200px){.bd-sidebar{-ms-flex:0 1 320px;flex:0 1 320px}}.bd-links{padding-top:1rem;padding-bottom:1rem;margin-right:-15px;margin-left:-15px}@media (min-width:768px){@supports ((position:-webkit-sticky) or (position:sticky)){.bd-links{max-height:calc(100vh - 9rem);overflow-y:auto}}}@media (min-width:768px){.bd-links{display:block!important}}.bd-search{position:relative;padding:1rem 15px;margin-right:-15px;margin-left:-15px;border-bottom:1px solid rgba(0,0,0,.05)}.bd-search .form-control:focus{border-color:#7952b3;box-shadow:0 0 0 3px rgba(121,82,179,.25)}.bd-search-docs-toggle{color:#212529}.bd-sidenav{display:none}.bd-toc-link{display:block;padding:.25rem 1.5rem;font-weight:600;color:rgba(0,0,0,.65)}.bd-toc-link:hover{color:rgba(0,0,0,.85);text-decoration:none}.bd-toc-item.active{margin-bottom:1rem}.bd-toc-item.active:not(:first-child){margin-top:1rem}.bd-toc-item.active>.bd-toc-link{color:rgba(0,0,0,.85)}.bd-toc-item.active>.bd-toc-link:hover{background-color:transparent}.bd-toc-item.active>.bd-sidenav{display:block}.bd-sidebar .nav>li>a{display:block;padding:.25rem 1.5rem;font-size:90%;color:rgba(0,0,0,.65)}.bd-sidebar .nav>li>a:hover{color:rgba(0,0,0,.85);text-decoration:none;background-color:transparent}.bd-sidebar .nav>.active:hover>a,.bd-sidebar .nav>.active>a{font-weight:600;color:rgba(0,0,0,.85);background-color:transparent}.bd-footer{font-size:.875rem;text-align:center;background-color:#f7f7f7}.bd-footer a{font-weight:600;color:#495057}.bd-footer a:focus,.bd-footer a:hover{color:#007bff}.bd-footer p{margin-bottom:0}@media (min-width:576px){.bd-footer{text-align:left}}.bd-footer-links{padding-left:0;margin-bottom:1rem}.bd-footer-links li{display:inline-block}.bd-footer-links li+li{margin-left:1rem}.bd-example-row .row>.col,.bd-example-row .row>[class^=col-]{padding-top:.75rem;padding-bottom:.75rem;background-color:rgba(86,61,124,.15);border:1px solid rgba(86,61,124,.2)}.bd-example-row .row+.row{margin-top:1rem}.bd-example-row .flex-items-bottom,.bd-example-row .flex-items-middle,.bd-example-row .flex-items-top{min-height:6rem;background-color:rgba(255,0,0,.1)}.bd-example-row-flex-cols .row{min-height:10rem;background-color:rgba(255,0,0,.1)}.bd-highlight{background-color:rgba(86,61,124,.15);border:1px solid rgba(86,61,124,.15)}.bd-example-responsive-containers [class^=container]{padding-top:.75rem;padding-bottom:.75rem;background-color:rgba(86,61,124,.15);border:1px solid rgba(86,61,124,.2)}.example-container{width:800px;width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.example-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.example-content-main{position:relative;width:100%;padding-right:15px;padding-left:15px}@media (min-width:576px){.example-content-main{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}}@media (min-width:992px){.example-content-main{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}}.example-content-secondary{position:relative;width:100%;padding-right:15px;padding-left:15px}@media (min-width:576px){.example-content-secondary{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}}@media (min-width:992px){.example-content-secondary{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}}.bd-example{position:relative;padding:1rem;margin:1rem -15px 0;border:solid #f8f9fa;border-width:.2rem 0 0}.bd-example::after{display:block;clear:both;content:""}@media (min-width:576px){.bd-example{padding:1.5rem;margin-right:0;margin-left:0;border-width:.2rem}}.bd-example+.clipboard+.highlight,.bd-example+.highlight{margin-top:0}.bd-example+p{margin-top:2rem}.bd-example .custom-file-input:lang(es)~.custom-file-label::after{content:"Elegir"}.bd-example>.form-control+.form-control{margin-top:.5rem}.bd-example>.alert+.alert,.bd-example>.nav+.nav,.bd-example>.navbar+.navbar,.bd-example>.progress+.btn,.bd-example>.progress+.progress{margin-top:1rem}.bd-example>.dropdown-menu:first-child{position:static;display:block}.bd-example>.form-group:last-child{margin-bottom:0}.bd-example>.close{float:none}.bd-example-type .table td{padding:1rem 0;border-color:#eee}.bd-example-type .table tr:first-child td{border-top:0}.bd-example-type h1,.bd-example-type h2,.bd-example-type h3,.bd-example-type h4,.bd-example-type h5,.bd-example-type h6{margin-top:0;margin-bottom:0}.bd-example-bg-classes p{padding:1rem}.bd-example>img+img,.bd-example>svg+svg{margin-left:.5rem}.bd-example>.btn,.bd-example>.btn-group{margin-top:.25rem;margin-bottom:.25rem}.bd-example>.btn-toolbar+.btn-toolbar{margin-top:.5rem}.bd-example-control-sizing input[type=text]+input[type=text],.bd-example-control-sizing select{margin-top:.5rem}.bd-example-form .input-group{margin-bottom:.5rem}.bd-example>textarea.form-control{resize:vertical}.bd-example>.list-group{max-width:400px}.bd-example>[class*=list-group-horizontal]{max-width:100%}.bd-example .fixed-top,.bd-example .sticky-top{position:static;margin:-1rem -1rem 1rem}.bd-example .fixed-bottom{position:static;margin:1rem -1rem -1rem}@media (min-width:576px){.bd-example .fixed-top,.bd-example .sticky-top{margin:-1.5rem -1.5rem 1rem}.bd-example .fixed-bottom{margin:1rem -1.5rem -1.5rem}}.bd-example .pagination{margin-top:.5rem;margin-bottom:.5rem}.modal{z-index:1072}.modal .popover,.modal .tooltip{z-index:1073}.modal-backdrop{z-index:1071}.bd-example-modal{background-color:#fafafa}.bd-example-modal .modal{position:relative;top:auto;right:auto;bottom:auto;left:auto;z-index:1;display:block}.bd-example-modal .modal-dialog{left:auto;margin-right:auto;margin-left:auto}.bd-example-tabs .nav-tabs{margin-bottom:1rem}.bd-example-popover-static{padding-bottom:1.5rem;background-color:#f9f9f9}.bd-example-popover-static .popover{position:relative;display:block;float:left;width:260px;margin:1.25rem}.tooltip-demo a{white-space:nowrap}.bd-example-tooltip-static .tooltip{position:relative;display:inline-block;margin:10px 20px;opacity:1}.scrollspy-example{position:relative;height:200px;margin-top:.5rem;overflow:auto}.scrollspy-example-2{position:relative;height:350px;overflow:auto}.bd-example-border-utils [class^=border]{display:inline-block;width:5rem;height:5rem;margin:.25rem;background-color:#f5f5f5}.bd-example-border-utils-0 [class^=border]{border:1px solid #dee2e6}.bd-example-forms-input-group-workaround .fix-rounded-right{border-top-right-radius:.2rem!important;border-bottom-right-radius:.2rem!important}.highlight{padding:1rem;margin-top:1rem;margin-bottom:1rem;background-color:#f8f9fa;-ms-overflow-style:-ms-autohiding-scrollbar}@media (min-width:576px){.highlight{padding:1.5rem}}.bd-content .highlight{margin-right:-15px;margin-left:-15px}@media (min-width:576px){.bd-content .highlight{margin-right:0;margin-left:0}}.highlight pre{padding:0;margin-top:.65rem;margin-bottom:.65rem;background-color:transparent;border:0}.highlight pre code{font-size:inherit;color:#212529}.btn-bd-primary{font-weight:600;color:#fff;background-color:#7952b3;border-color:#7952b3}.btn-bd-primary:active,.btn-bd-primary:hover{color:#fff;background-color:#614092;border-color:#614092}.btn-bd-primary:focus{box-shadow:0 0 0 3px rgba(121,82,179,.25)}.btn-bd-download{font-weight:600;color:#ffe484;border-color:#ffe484}.btn-bd-download:active,.btn-bd-download:hover{color:#2a2730;background-color:#ffe484;border-color:#ffe484}.btn-bd-download:focus{box-shadow:0 0 0 3px rgba(255,228,132,.25)}.btn-bd-light{color:#6c757d;border-color:#dee2e6}.btn-bd-light:active,.btn-bd-light:hover,.show>.btn-bd-light{color:#7952b3;background-color:#fff;border-color:#7952b3}.btn-bd-light:focus{box-shadow:0 0 0 3px rgba(121,82,179,.25)}.bd-callout{padding:1.25rem;margin-top:1.25rem;margin-bottom:1.25rem;border:1px solid #eee;border-left-width:.25rem;border-radius:.25rem}.bd-callout h4{margin-top:0;margin-bottom:.25rem}.bd-callout p:last-child{margin-bottom:0}.bd-callout code{border-radius:.25rem}.bd-callout+.bd-callout{margin-top:-.25rem}.bd-callout-info{border-left-color:#5bc0de}.bd-callout-info h4{color:#5bc0de}.bd-callout-warning{border-left-color:#f0ad4e}.bd-callout-warning h4{color:#f0ad4e}.bd-callout-danger{border-left-color:#d9534f}.bd-callout-danger h4{color:#d9534f}.bd-browser-bugs td p{margin-bottom:0}.bd-browser-bugs th:first-child{width:18%}.bd-brand-logos{display:table;width:100%;margin-bottom:1rem;overflow:hidden;color:#563d7c;background-color:#f9f9f9;border-radius:.25rem}.bd-brand-logos .inverse{color:#fff;background-color:#563d7c}.bd-brand-item{padding:4rem 0;text-align:center}.bd-brand-item+.bd-brand-item{border-top:1px solid #fff}.bd-brand-item h1,.bd-brand-item h3{margin-top:0;margin-bottom:0}@media (min-width:768px){.bd-brand-item{display:table-cell;width:1%}.bd-brand-item+.bd-brand-item{border-top:0;border-left:1px solid #fff}.bd-brand-item h1{font-size:4rem}}@media (min-width:768px) and (max-width:1200px){.bd-brand-item h1{font-size:calc(1.525rem + 3.3vw)}}.color-swatches{margin:0 -5px;overflow:hidden}.color-swatches .bd-purple{background-color:#563d7c}.color-swatches .bd-purple-light{background-color:#cbbde2}.color-swatches .bd-purple-lighter{background-color:#e5e1ea}.color-swatches .bd-gray{background-color:#f9f9f9}.color-swatch{float:left;width:4rem;height:4rem;margin-right:.25rem;margin-left:.25rem;border-radius:.25rem}@media (min-width:768px){.color-swatch{width:6rem;height:6rem}}.swatch-blue{color:#fff;background-color:#007bff}.swatch-indigo{color:#fff;background-color:#6610f2}.swatch-purple{color:#fff;background-color:#6f42c1}.swatch-pink{color:#fff;background-color:#e83e8c}.swatch-red{color:#fff;background-color:#dc3545}.swatch-orange{color:#212529;background-color:#fd7e14}.swatch-yellow{color:#212529;background-color:#ffc107}.swatch-green{color:#fff;background-color:#28a745}.swatch-teal{color:#fff;background-color:#20c997}.swatch-cyan{color:#fff;background-color:#17a2b8}.swatch-white{color:#212529;background-color:#fff}.swatch-gray{color:#fff;background-color:#6c757d}.swatch-gray-dark{color:#fff;background-color:#343a40}.swatch-100{color:#212529;background-color:#f8f9fa}.swatch-200{color:#212529;background-color:#e9ecef}.swatch-300{color:#212529;background-color:#dee2e6}.swatch-400{color:#212529;background-color:#ced4da}.swatch-500{color:#212529;background-color:#adb5bd}.swatch-600{color:#fff;background-color:#6c757d}.swatch-700{color:#fff;background-color:#495057}.swatch-800{color:#fff;background-color:#343a40}.swatch-900{color:#fff;background-color:#212529}.bd-clipboard{position:relative;display:none;float:right}.bd-clipboard+.highlight{margin-top:0}@media (min-width:768px){.bd-clipboard{display:block}}.btn-clipboard{position:absolute;top:.65rem;right:.65rem;z-index:10;display:block;padding:.25rem .5rem;font-size:65%;color:#007bff;background-color:#fff;border:1px solid;border-radius:.25rem}.btn-clipboard:hover{color:#fff;background-color:#007bff}.bd-placeholder-img{font-size:1.125rem;text-anchor:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.bd-placeholder-img-lg{font-size:3.5rem}@media (max-width:1200px){.bd-placeholder-img-lg{font-size:calc(1.475rem + 2.7vw)}}.hll{background-color:#ffc}.c{color:#727272}.k{color:#069}.o{color:#555}.cm{color:#727272}.cp{color:#008085}.c1{color:#727272}.cs{color:#727272}.gd{background-color:#fcc;border:1px solid #c00}.ge{font-style:italic}.gr{color:red}.gh{color:#030}.gi{background-color:#cfc;border:1px solid #0c0}.go{color:#aaa}.gp{color:#009}.gu{color:#030}.gt{color:#9c6}.kc{color:#069}.kd{color:#069}.kn{color:#069}.kp{color:#069}.kr{color:#069}.kt{color:#078}.m{color:#c24f19}.s{color:#d73038}.na{color:#006ee0}.nb{color:#366}.nc{color:#168174}.no{color:#360}.nd{color:#6b62de}.ni{color:#727272}.ne{color:#c00}.nf{color:#b715f4}.nl{color:#6b62de}.nn{color:#007ca5}.nt{color:#2f6f9f}.nv{color:#033}.ow{color:#000}.w{color:#bbb}.mf{color:#c24f19}.mh{color:#c24f19}.mi{color:#c24f19}.mo{color:#c24f19}.sb{color:#c30}.sc{color:#c30}.sd{font-style:italic;color:#c30}.s2{color:#c30}.se{color:#c30}.sh{color:#c30}.si{color:#a00}.sx{color:#c30}.sr{color:#337e7e}.s1{color:#c30}.ss{color:#fc3}.bp{color:#366}.vc{color:#033}.vg{color:#033}.vi{color:#033}.il{color:#c24f19}.css .nt+.nt,.css .o,.css .o+.nt{color:#727272}.language-bash::before,.language-sh::before{color:#009;content:"$ ";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.language-powershell::before{color:#009;content:"PM> ";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.anchorjs-link{font-weight:400;color:rgba(0,123,255,.5);transition:color .15s ease-in-out,opacity .15s ease-in-out}@media (prefers-reduced-motion:reduce){.anchorjs-link{transition:none}}.anchorjs-link:hover{color:#007bff;text-decoration:none}.algolia-autocomplete{display:block!important;-ms-flex:1;flex:1}.algolia-autocomplete .ds-dropdown-menu{width:100%;min-width:0!important;max-width:none!important;padding:.75rem 0!important;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .5rem 1rem rgba(0,0,0,.175)}@media (min-width:768px){.algolia-autocomplete .ds-dropdown-menu{width:175%}}.algolia-autocomplete .ds-dropdown-menu::before{display:none!important}.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-]{padding:0!important;overflow:visible!important;background-color:transparent!important;border:0!important}.algolia-autocomplete .ds-dropdown-menu .ds-suggestions{margin-top:0!important}.algolia-autocomplete .algolia-docsearch-suggestion{padding:0!important;overflow:visible!important}.algolia-autocomplete .algolia-docsearch-suggestion--category-header{padding:.125rem 1rem!important;margin-top:0!important;font-size:.875rem!important;font-weight:600!important;color:#7952b3!important;border-bottom:0!important}.algolia-autocomplete .algolia-docsearch-suggestion--wrapper{float:none!important;padding-top:0!important}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column{float:none!important;width:auto!important;padding:0!important;text-align:left!important}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-inline{display:block!important;font-size:.875rem;color:#495057}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-inline::after{padding:0 .25rem;content:"/"}.algolia-autocomplete .algolia-docsearch-suggestion--content{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;float:none!important;width:100%!important;padding:.25rem 1rem!important}.algolia-autocomplete .algolia-docsearch-suggestion--content::before{display:none!important}.algolia-autocomplete .ds-suggestion:not(:first-child) .algolia-docsearch-suggestion--category-header{padding-top:.75rem!important;margin-top:.75rem!important;border-top:1px solid rgba(0,0,0,.1)}.algolia-autocomplete .ds-suggestion .algolia-docsearch-suggestion--subcategory-column{display:none!important}.algolia-autocomplete .algolia-docsearch-suggestion--title{display:block;margin-bottom:0!important;font-size:.875rem!important;font-weight:400!important}.algolia-autocomplete .algolia-docsearch-suggestion--text{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%;padding:.2rem 0;font-size:.8125rem!important;font-weight:400;line-height:1.25!important;color:#6c757d}.algolia-autocomplete .algolia-docsearch-footer{float:none!important;width:auto!important;height:auto!important;padding:.75rem 1rem 0;font-size:.75rem!important;line-height:1!important;color:#767676!important;border-top:1px solid rgba(0,0,0,.1)}.algolia-autocomplete .algolia-docsearch-footer--logo{display:inline!important;overflow:visible!important;color:inherit!important;text-indent:0!important;background:0 0!important}.algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#5f2dab;background-color:rgba(154,132,187,.12)}.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{box-shadow:inset 0 -2px 0 0 rgba(95,45,171,.5)!important}.algolia-autocomplete .ds-suggestion.ds-cursor .algolia-docsearch-suggestion--content{background-color:rgba(208,189,236,.15)!important}
-/*# sourceMappingURL=docs.min.css.map */
\ No newline at end of file
diff --git a/site/docs/4.5/assets/css/docs.min.css.map b/site/docs/4.5/assets/css/docs.min.css.map
deleted file mode 100644 (file)
index e478273..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../scss/docs.scss","../scss/_nav.scss","../../../../../scss/mixins/_breakpoints.scss","../../../../../scss/vendor/_rfs.scss","../scss/_masthead.scss","../../../../../scss/mixins/_border-radius.scss","../scss/_ads.scss","../scss/_content.scss","site/docs/4.5/assets/css/docs.min.css","../scss/_skippy.scss","../scss/_sidebar.scss","../scss/_footer.scss","../scss/_component-examples.scss","../../../../../scss/mixins/_grid.scss","../../../../../scss/mixins/_clearfix.scss","../scss/_buttons.scss","../scss/_callouts.scss","../scss/_browser-bugs.scss","../scss/_brand.scss","../scss/_colors.scss","../scss/_clipboard-js.scss","../scss/_placeholder-img.scss","../scss/_syntax.scss","../scss/_anchor.scss","../../../../../scss/mixins/_transition.scss","../scss/_algolia.scss"],"names":[],"mappings":"AAAA;;;;;;ACIA,WACE,WAAA,KACA,iBAAA,QACA,WAAA,EAAA,MAAA,KAAA,eAAA,CAAA,MAAA,EAAA,KAAA,EAAA,eCkEE,4BDrEJ,WAMI,cAAA,MACA,aAAA,MAPJ,8BAUM,UAAA,KACA,OAAA,OACA,WAAA,OACA,SAAA,OAbN,0CAgBQ,eAAA,KACA,WAAA,KACA,YAAA,OACA,2BAAA,OCqCJ,yBD/B4B,2DAzBhC,WA0BM,SAAA,eAAA,SAAA,OACA,IAAA,EACA,QAAA,OA5BN,iCAkCM,cAAA,MACA,aAAA,MACA,MAAA,sBApCN,wCAAA,uCAwCQ,MAAA,KACA,iBAAA,YAzCR,wCA6CQ,YAAA,IA7CR,2BAmDI,QAAA,aACA,MAAA,KACA,OAAA,KACA,eAAA,SAtDJ,0BE2HM,UAAA,QF3HN,iCA8DI,YAAA,IACA,MAAA,QACA,WAAA,2OAAA,UAAA,MAAA,KAAA,CAAA,OAAA,OGlEJ,aACE,SAAA,SACA,QAAA,KAAA,KACA,WAAA,sDAHF,gBDuJQ,UAAA,KChJJ,YAAA,EDsKI,0BC7KR,gBDqLY,UAAA,wBCrLZ,mBDuJQ,UAAA,OC3IJ,YAAA,IACA,MAAA,QDgKI,0BC7KR,mBDqLY,UAAA,uBCrLZ,kBAiBI,QAAA,MAAA,KACA,YAAA,ID2GE,UAAA,QC7HN,uBAuBI,WAAA,YACA,cAAA,gBFkCA,yBE1DJ,aA4BI,YAAA,KACA,eAAA,KA7BJ,uBAgCM,cAAA,aF0BF,yBE1DJ,uBAsCM,WAAA,gBAKN,iCACkB,QAAA,KADlB,sBD4GQ,UAAA,OAsBA,0BClIR,sBD0IY,UAAA,wBC1IZ,8BC3BI,cAAA,MD2BJ,qDAWM,QAAA,KAXN,uCAeM,QAAA,aACA,YAAA,IAhBN,+CAmBQ,QAAA,KAMR,wBACE,QAAA,OACA,iBAAA,4ECtDE,cAAA,ODwDF,WAAA,EAAA,QAAA,OAAA,eAGF,uBACE,eAAA,yCAAA,OAAA,yCExEF,WACE,SAAA,OACA,QAAA,MACA,UAAA,MACA,QAAA,KAAA,KAAA,KAAA,MACA,OAAA,KAAA,EACA,SAAA,OHmHI,UAAA,SGjHJ,YAAA,IACA,WAAA,KACA,iBAAA,gBAVF,aAaI,MAAA,KACA,gBAAA,KJwCA,yBItDJ,WAkBI,UAAA,MDNA,cAAA,KCWJ,YACE,MAAA,KACA,YAAA,OAGF,kBACE,QAAA,MACA,WAAA,OACA,MAAA,eC/BF,YACE,eAAA,EAAA,MAAA,EADF,mBCkNA,mBACA,mBD5MI,eAAA,KAPJ,2BCwNA,2BACA,2BD/MM,QAAA,MACA,OAAA,KACA,WAAA,MACA,QAAA,GAbN,kBAkBI,MAAA,KACA,UAAA,KACA,cAAA,KL+CA,4BKnEJ,kBAuBM,QAAA,MACA,WAAA,KAxBN,iCA2BQ,OAAA,GCwNR,8BADA,8BAGA,8BADA,8BAHA,8BDjPA,8BAsCU,QAAA,OACA,eAAA,IACA,OAAA,IAAA,MAAA,QCsNV,2CADA,2CAGA,2CADA,2CAHA,2CD5PA,2CA2CY,cAAA,EA3CZ,sCAmDM,YAAA,OAKN,kBACE,QAAA,MACA,eAAA,KAOF,eJkFQ,UAAA,KAsBA,0BIxGR,eJgHY,UAAA,uBIhHZ,eJkFQ,UAAA,QAsBA,0BIxGR,eJgHY,UAAA,qBIhHZ,eJkFQ,UAAA,OAsBA,0BIxGR,eJgHY,UAAA,uBIhHZ,iCAcI,WAAA,KAdJ,eAkBI,WAAA,OCiOJ,kBDnPA,kBAuBI,cAAA,OLlCA,yBMoQF,eACA,cD1PF,eA8BM,UAAA,KAKN,UACE,WAAA,KACA,cAAA,MJ6CM,UAAA,KAsBA,0BIrER,UJ6EY,UAAA,wBIvEZ,SJyCQ,UAAA,OIvCN,YAAA,IJ6DM,0BI/DR,SJuEY,UAAA,uBD3HR,yBKoDJ,SAKI,UAAA,KAIJ,gBAAkB,MAAA,QAClB,uBAAyB,MAAA,QAEzB,qBACE,iBAAA,QE3HF,QACE,iBAAA,QADF,UAII,MAAA,KAJJ,uBAQI,SAAA,iBACA,MAAA,eACA,OAAA,eACA,QAAA,gBACA,OAAA,iBACA,SAAA,kBACA,KAAA,eACA,YAAA,iBCXJ,QAOE,eAAA,EAAA,MAAA,EACA,YAAA,OACA,eAAA,OPgHI,UAAA,QOxHwB,2DAD9B,QAEI,SAAA,eAAA,SAAA,OACA,IAAA,KACA,OAAA,mBACA,WAAA,MAQJ,aACE,aAAA,EACA,YAAA,IAAA,MAAA,KAFF,gBAKI,aAAA,KAIJ,WACE,QAAA,MADF,aAII,QAAA,MACA,QAAA,QAAA,OACA,MAAA,QANJ,mBASM,MAAA,QACA,gBAAA,KASN,YACE,eAAA,EAAA,MAAA,EAEA,cAAA,IAAA,MAAA,eRUE,yBQbJ,YAYI,aAAA,IAAA,MAAA,eAN4B,2DANhC,YAOM,SAAA,eAAA,SAAA,OACA,IAAA,KACA,QAAA,KACA,OAAA,qBRGF,0BQbJ,YAgBI,SAAA,EAAA,EAAA,MAAA,KAAA,EAAA,EAAA,OAIJ,UACE,YAAA,KACA,eAAA,KACA,aAAA,MACA,YAAA,MRXE,yBQc4B,2DAPhC,UAQM,WAAA,mBACA,WAAA,ORhBF,yBQOJ,UAeI,QAAA,iBAIJ,WACE,SAAA,SACA,QAAA,KAAA,KACA,aAAA,MACA,YAAA,MACA,cAAA,IAAA,MAAA,gBALF,+BAQI,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,IAAA,qBAIJ,uBACE,MAAA,QAGF,YACE,QAAA,KAGF,aACE,QAAA,MACA,QAAA,OAAA,OACA,YAAA,IACA,MAAA,gBAJF,mBAOI,MAAA,gBACA,gBAAA,KAIJ,oBAEI,cAAA,KAFJ,sCAKM,WAAA,KALN,iCASM,MAAA,gBATN,uCAYQ,iBAAA,YAZR,gCAiBM,QAAA,MAMN,sBACE,QAAA,MACA,QAAA,OAAA,OPxEE,UAAA,IO0EF,MAAA,gBAGF,4BACE,MAAA,gBACA,gBAAA,KACA,iBAAA,YFyYF,iCEtYA,2BAEE,YAAA,IACA,MAAA,gBACA,iBAAA,YC3JF,WR2HM,UAAA,QQzHJ,WAAA,OACA,iBAAA,QAHF,aAMI,YAAA,IACA,MAAA,QAPJ,mBAAA,mBAWM,MAAA,QAXN,aAgBI,cAAA,ETwCA,yBSxDJ,WAoBI,WAAA,MAIJ,iBACE,aAAA,EACA,cAAA,KAFF,oBAKI,QAAA,aALJ,uBAQM,YAAA,KC9BN,0BJwkBA,mCIpkBM,YAAA,OACA,eAAA,OACA,iBAAA,oBACA,OAAA,IAAA,MAAA,mBAPN,0BAYI,WAAA,KJykBJ,mCADA,mCIplBA,gCAkBI,WAAA,KACA,iBAAA,iBAIJ,+BACE,WAAA,MACA,iBAAA,iBAGF,cACE,iBAAA,oBACA,OAAA,IAAA,MAAA,oBAGF,qDAEI,YAAA,OACA,eAAA,OACA,iBAAA,oBACA,OAAA,IAAA,MAAA,mBAKJ,mBACE,MAAA,MC7CA,MAAA,KACA,cAAA,KACA,aAAA,KACA,aAAA,KACA,YAAA,KD6CF,aCzCE,QAAA,YAAA,QAAA,KACA,cAAA,KAAA,UAAA,KACA,aAAA,MACA,YAAA,MD0CF,sBC5BE,SAAA,SAIA,MAAA,KACA,cAAA,KACA,aAAA,KXwBE,yBUFJ,sBClBE,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,KXgBE,yBUFJ,sBClBE,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,YD0BF,2BCxCE,SAAA,SAIA,MAAA,KACA,cAAA,KACA,aAAA,KXwBE,yBUUJ,2BC9BE,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,KXgBE,yBUUJ,2BC9BE,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,YD2CF,YACE,SAAA,SACA,QAAA,KACA,OAAA,KAAA,MAAA,EACA,OAAA,MAAA,QACA,aAAA,MAAA,EAAA,EE3FA,mBACE,QAAA,MACA,MAAA,KACA,QAAA,GZwDA,yBU2BJ,YASI,QAAA,OACA,aAAA,EACA,YAAA,EACA,aAAA,OJsmBJ,kCIlnBA,uBAiBI,WAAA,EAjBJ,cAqBI,WAAA,KArBJ,kEAyBI,QAAA,SAzBJ,wCA8BM,WAAA,MJqmBN,0BInoBA,sBJooBA,4BAEA,2BADA,gCI9lBI,WAAA,KAvCJ,uCA2CI,SAAA,OACA,QAAA,MA5CJ,mCAgDI,cAAA,EAhDJ,mBAoDI,MAAA,KAKJ,2BAGM,QAAA,KAAA,EACA,aAAA,KAJN,0CAOM,WAAA,EAPN,oBJwmBA,oBACA,oBACA,oBACA,oBACA,oBI3lBI,WAAA,EACA,cAAA,EAKJ,yBACE,QAAA,KJ8lBF,oBI1lBA,oBAGI,YAAA,MAKJ,iBJulBA,uBIplBI,WAAA,OACA,cAAA,OAJJ,sCAOI,WAAA,MJ0lBJ,6DIrlBA,kCAEE,WAAA,MAEF,8BACE,cAAA,MAEF,kCACE,OAAA,SAIF,wBACE,UAAA,MAEF,2CACE,UAAA,KAIF,uBJslBA,wBInlBI,SAAA,OACA,OAAA,MAAA,MAAA,KAJJ,0BAOI,SAAA,OACA,OAAA,KAAA,MAAA,MVhKA,yBUwJJ,uBJkmBE,wBIplBI,OAAA,QAAA,QAAA,KAdN,0BAiBM,OAAA,KAAA,QAAA,SAMN,wBACE,WAAA,MACA,cAAA,MAIF,OACE,QAAA,KJslBF,gBIvlBA,gBAKI,QAAA,KAIJ,gBACE,QAAA,KAGF,kBACE,iBAAA,QADF,yBAII,SAAA,SACA,IAAA,KACA,MAAA,KACA,OAAA,KACA,KAAA,KACA,QAAA,EACA,QAAA,MAVJ,gCAcI,KAAA,KACA,aAAA,KACA,YAAA,KAKJ,2BACE,cAAA,KAIF,2BACE,eAAA,OACA,iBAAA,QAFF,oCAKI,SAAA,SACA,QAAA,MACA,MAAA,KACA,MAAA,MACA,OAAA,QAKJ,gBACE,YAAA,OAGF,oCACE,SAAA,SACA,QAAA,aACA,OAAA,KAAA,KACA,QAAA,EAIF,mBACE,SAAA,SACA,OAAA,MACA,WAAA,MACA,SAAA,KAGF,qBACE,SAAA,SACA,OAAA,MACA,SAAA,KAGF,yCAEI,QAAA,aACA,MAAA,KACA,OAAA,KACA,OAAA,OACA,iBAAA,QAIJ,2CAEI,OAAA,IAAA,MAAA,QAIJ,4DP7SI,wBAAA,gBACA,2BAAA,gBOoTJ,WACE,QAAA,KACA,WAAA,KACA,cAAA,KACA,iBAAA,QACA,mBAAA,yBVhSE,yBU2RJ,WAQI,QAAA,QAIJ,uBACE,aAAA,MACA,YAAA,MVzSE,yBUuSJ,uBAKI,aAAA,EACA,YAAA,GAIJ,eAEI,QAAA,EACA,WAAA,OACA,cAAA,OACA,iBAAA,YACA,OAAA,EANJ,oBTrSI,UAAA,QS+SA,MAAA,QGnXJ,gBACE,YAAA,IACA,MAAA,KACA,iBAAA,QACA,aAAA,QAJF,uBAAA,sBAQI,MAAA,KACA,iBAAA,QACA,aAAA,QAVJ,sBAcI,WAAA,EAAA,EAAA,EAAA,IAAA,qBAIJ,iBACE,YAAA,IACA,MAAA,QACA,aAAA,QAHF,wBAAA,uBAOI,MAAA,QACA,iBAAA,QACA,aAAA,QATJ,uBAaI,WAAA,EAAA,EAAA,EAAA,IAAA,sBAIJ,cACE,MAAA,QACA,aAAA,QAEA,qBAAA,oBAAA,oBAGE,MAAA,QACA,iBAAA,KACA,aAAA,QATJ,oBAaI,WAAA,EAAA,EAAA,EAAA,IAAA,qBChDJ,YACE,QAAA,QACA,WAAA,QACA,cAAA,QACA,OAAA,IAAA,MAAA,KACA,kBAAA,OXSE,cAAA,OWdJ,eASI,WAAA,EACA,cAAA,OAVJ,yBAcI,cAAA,EAdJ,iBXcI,cAAA,OWdJ,wBAsBI,WAAA,QAWJ,iBALE,kBAAA,QAEA,oBAAK,MAAA,QAIP,oBANE,kBAAA,QAEA,uBAAK,MAAA,QAKP,mBAPE,kBAAA,QAEA,sBAAK,MAAA,QC9BP,sBAEI,cAAA,EAFJ,gCAKI,MAAA,ICJJ,gBACE,QAAA,MACA,MAAA,KACA,cAAA,KACA,SAAA,OACA,MAAA,QACA,iBAAA,QbOE,cAAA,OabJ,yBAUI,MAAA,KACA,iBAAA,QAKJ,eACE,QAAA,KAAA,EACA,WAAA,OAFF,8BAKI,WAAA,IAAA,MAAA,KALJ,kBVmjCA,kBUxiCI,WAAA,EACA,cAAA,EhB2BA,yBgBvCJ,eAgBI,QAAA,WACA,MAAA,GAjBJ,8BAoBM,WAAA,EACA,YAAA,IAAA,MAAA,KArBN,kBfoIQ,UAAA,MAsBA,gDe1JR,kBfkKY,UAAA,wBe/HZ,gBACE,OAAA,EAAA,KACA,SAAA,OAFF,2BAMI,iBAAA,QANJ,iCASI,iBAAA,QATJ,mCAYI,iBAAA,QAZJ,yBAeI,iBAAA,QAIJ,cACE,MAAA,KACA,MAAA,KACA,OAAA,KACA,aAAA,OACA,YAAA,Ob9DE,cAAA,OH0CA,yBgBeJ,cASI,MAAA,KACA,OAAA,MChFF,aACE,MAAA,KACA,iBAAA,QAFF,eACE,MAAA,KACA,iBAAA,QAFF,eACE,MAAA,KACA,iBAAA,QAFF,aACE,MAAA,KACA,iBAAA,QAFF,YACE,MAAA,KACA,iBAAA,QAFF,eACE,MAAA,QACA,iBAAA,QAFF,eACE,MAAA,QACA,iBAAA,QAFF,cACE,MAAA,KACA,iBAAA,QAFF,aACE,MAAA,KACA,iBAAA,QAFF,aACE,MAAA,KACA,iBAAA,QAFF,cACE,MAAA,QACA,iBAAA,KAFF,aACE,MAAA,KACA,iBAAA,QAFF,kBACE,MAAA,KACA,iBAAA,QAKF,YACE,MAAA,QACA,iBAAA,QAFF,YACE,MAAA,QACA,iBAAA,QAFF,YACE,MAAA,QACA,iBAAA,QAFF,YACE,MAAA,QACA,iBAAA,QAFF,YACE,MAAA,QACA,iBAAA,QAFF,YACE,MAAA,KACA,iBAAA,QAFF,YACE,MAAA,KACA,iBAAA,QAFF,YACE,MAAA,KACA,iBAAA,QAFF,YACE,MAAA,KACA,iBAAA,QCVJ,cACE,SAAA,SACA,QAAA,KACA,MAAA,MAHF,yBAMI,WAAA,ElBkDA,yBkBxDJ,cAUI,QAAA,OAIJ,eACE,SAAA,SACA,IAAA,OACA,MAAA,OACA,QAAA,GACA,QAAA,MACA,QAAA,OAAA,MjBgDE,UAAA,IiB9CF,MAAA,QACA,iBAAA,KACA,OAAA,IAAA,MfVE,cAAA,OeAJ,qBAcI,MAAA,KACA,iBAAA,QC3BJ,oBlByHM,UAAA,SkBvHJ,YAAA,OACA,oBAAA,KAAA,iBAAA,KAAA,gBAAA,KAAA,YAAA,KAGF,uBlB6IQ,UAAA,OAsBA,0BkBnKR,uBlB2KY,UAAA,wBmBrLZ,KAAO,iBAAA,KACP,GAAK,MAAA,QACL,GAAK,MAAA,KACL,GAAK,MAAA,KACL,IAAM,MAAA,QACN,IAAM,MAAA,QACN,IAAM,MAAA,QACN,IAAM,MAAA,QACN,IAAM,iBAAA,KAAwB,OAAA,IAAA,MAAA,KAC9B,IAAM,WAAA,OACN,IAAM,MAAA,IACN,IAAM,MAAA,KACN,IAAM,iBAAA,KAAwB,OAAA,IAAA,MAAA,KAC9B,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,GAAK,MAAA,QACL,GAAK,MAAA,QACL,IAAM,MAAA,QACN,IAAM,MAAA,KACN,IAAM,MAAA,QACN,IAAM,MAAA,KACN,IAAM,MAAA,QACN,IAAM,MAAA,QACN,IAAM,MAAA,KACN,IAAM,MAAA,QACN,IAAM,MAAA,QACN,IAAM,MAAA,QACN,IAAM,MAAA,QACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,GAAK,MAAA,KACL,IAAM,MAAA,QACN,IAAM,MAAA,QACN,IAAM,MAAA,QACN,IAAM,MAAA,QACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,WAAA,OAAoB,MAAA,KAC1B,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,QACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,KACN,IAAM,MAAA,Qd+9CN,ac79CA,Qd49CA,Yc19CiB,MAAA,QAEjB,uBd89CA,qBc59CE,MAAA,KACA,QAAA,KACA,oBAAA,KAAA,iBAAA,KAAA,gBAAA,KAAA,YAAA,KAGF,6BACE,MAAA,KACA,QAAA,OACA,oBAAA,KAAA,iBAAA,KAAA,gBAAA,KAAA,YAAA,KC5EF,eACE,YAAA,IACA,MAAA,mBCcI,WAAA,MAAA,KAAA,WAAA,CAAA,QAAA,KAAA,YAIA,uCDpBN,eCqBQ,WAAA,MDrBR,qBAMI,MAAA,QACA,gBAAA,KEFJ,sBACE,QAAA,gBACA,SAAA,EAAA,KAAA,EAFF,wCAMI,MAAA,KACA,UAAA,YACA,UAAA,eACA,QAAA,OAAA,YACA,iBAAA,KACA,gBAAA,YACA,OAAA,IAAA,MAAA,eACA,WAAA,EAAA,MAAA,KAAA,iBvB0CA,yBuBvDJ,wCAgBM,MAAA,MAhBN,gDAqBM,QAAA,eArBN,6DAyBM,QAAA,YACA,SAAA,kBACA,iBAAA,sBACA,OAAA,YA5BN,wDAgCM,WAAA,YAhCN,oDAqCI,QAAA,YACA,SAAA,kBAtCJ,qEA0CI,QAAA,QAAA,eACA,WAAA,YtB+EE,UAAA,kBsB7EF,YAAA,cACA,MAAA,kBACA,cAAA,YA/CJ,6DAmDI,MAAA,eACA,YAAA,YApDJ,wEAyDI,MAAA,eACA,MAAA,eACA,QAAA,YACA,WAAA,eA5DJ,wEAgEI,QAAA,gBtB0DE,UAAA,QsBxDF,MAAA,QAlEJ,+EAqEM,QAAA,EAAA,OACA,QAAA,IAtEN,6DA2EI,QAAA,YAAA,QAAA,KACA,cAAA,KAAA,UAAA,KACA,MAAA,eACA,MAAA,eACA,QAAA,OAAA,eA/EJ,qEAmFM,QAAA,eAnFN,sGA0FQ,YAAA,iBACA,WAAA,iBACA,WAAA,IAAA,MAAA,eA5FR,uFAiGM,QAAA,eAjGN,2DAsGI,QAAA,MACA,cAAA,YtBmBE,UAAA,kBsBjBF,YAAA,cAzGJ,0DA6GI,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,UAAA,KACA,QAAA,MAAA,EtBWE,UAAA,mBsBTF,YAAA,IACA,YAAA,eACA,MAAA,QAnHJ,gDAuHI,MAAA,eACA,MAAA,eACA,OAAA,eACA,QAAA,OAAA,KAAA,EtBAE,UAAA,iBsBEF,YAAA,YACA,MAAA,kBACA,WAAA,IAAA,MAAA,eA9HJ,sDAkII,QAAA,iBACA,SAAA,kBACA,MAAA,kBACA,YAAA,YACA,WAAA,cAtIJ,+DA0II,MAAA,QACA,iBAAA,sBA3IJ,mGA+II,WAAA,MAAA,EAAA,KAAA,EAAA,EAAA,6BA/IJ,sFAmJI,iBAAA","sourcesContent":["/*!\n * Bootstrap Docs (https://getbootstrap.com/)\n * Copyright 2011-2020 The Bootstrap Authors\n * Copyright 2011-2020 Twitter, Inc.\n * Licensed under the Creative Commons Attribution 3.0 Unported License.\n * For details, see https://creativecommons.org/licenses/by/3.0/.\n */\n\n// Dev notes\n//\n// Background information on nomenclature and architecture decisions here.\n//\n// - Bootstrap functions, variables, and mixins are included for easy reuse.\n//   Doing so gives us access to the same core utilities provided by Bootstrap.\n//   For example, consistent media queries through those mixins.\n//\n// - Bootstrap's **docs variables** are prefixed with `$bd-`.\n//   These custom colors avoid collision with the components Bootstrap provides.\n//\n// - Classes are prefixed with `.bd-`.\n//   These classes indicate custom-built or modified components for the design\n//   and layout of the Bootstrap docs. They are not included in our builds.\n//\n// Happy Bootstrapping!\n\n// Load Bootstrap variables and mixins\n@import \"../../../../../scss/functions\";\n@import \"../../../../../scss/variables\";\n@import \"../../../../../scss/mixins\";\n\n// Load docs components\n@import \"variables\";\n@import \"nav\";\n@import \"masthead\";\n@import \"ads\";\n@import \"content\";\n@import \"skippy\";\n@import \"sidebar\";\n@import \"footer\";\n@import \"component-examples\";\n@import \"buttons\";\n@import \"callouts\";\n@import \"browser-bugs\";\n@import \"brand\";\n@import \"colors\";\n@import \"clipboard-js\";\n@import \"placeholder-img\";\n\n// Load docs dependencies\n@import \"syntax\";\n@import \"anchor\";\n@import \"algolia\";\n","//\n// Main navbar\n//\n\n.bd-navbar {\n  min-height: 4rem;\n  background-color: $bd-purple-bright;\n  box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .05), inset 0 -1px 0 rgba(0, 0, 0, .1);\n\n  @include media-breakpoint-down(md) {\n    padding-right: .5rem;\n    padding-left: .5rem;\n\n    .navbar-nav-scroll {\n      max-width: 100%;\n      height: 2.5rem;\n      margin-top: .25rem;\n      overflow: hidden;\n\n      .navbar-nav {\n        padding-bottom: 2rem;\n        overflow-x: auto;\n        white-space: nowrap;\n        -webkit-overflow-scrolling: touch;\n      }\n    }\n  }\n\n  @include media-breakpoint-up(md) {\n    @supports (position: sticky) {\n      position: sticky;\n      top: 0;\n      z-index: 1071; // over everything in bootstrap\n    }\n  }\n\n  .navbar-nav {\n    .nav-link {\n      padding-right: .5rem;\n      padding-left: .5rem;\n      color: rgba($white, .85);\n\n      &.active,\n      &:hover {\n        color: $white;\n        background-color: transparent;\n      }\n\n      &.active {\n        font-weight: 600;\n      }\n    }\n  }\n\n  .navbar-nav-svg {\n    display: inline-block;\n    width: 1rem;\n    height: 1rem;\n    vertical-align: text-top;\n  }\n\n  .dropdown-menu {\n    @include font-size(.875rem);\n  }\n\n  .dropdown-item.active {\n    font-weight: 600;\n    color: $gray-900;\n    background: escape-svg($dropdown-active-icon) no-repeat .4rem .6rem/.75rem .75rem;\n  }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n//    (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n//    >> breakpoint-next(sm)\n//    md\n//    >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n//    md\n//    >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n//    md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n  $n: index($breakpoint-names, $name);\n  @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n//    >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n//    576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n  $min: map-get($breakpoints, $name);\n  @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n//    >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n//    767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n  $next: breakpoint-next($name, $breakpoints);\n  @return if($next, breakpoint-min($next, $breakpoints) - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n//    >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n//    \"\"  (Returns a blank string)\n//    >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n//    \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n  @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n  $min: breakpoint-min($name, $breakpoints);\n  @if $min {\n    @media (min-width: $min) {\n      @content;\n    }\n  } @else {\n    @content;\n  }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n  $max: breakpoint-max($name, $breakpoints);\n  @if $max {\n    @media (max-width: $max) {\n      @content;\n    }\n  } @else {\n    @content;\n  }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n  $min: breakpoint-min($lower, $breakpoints);\n  $max: breakpoint-max($upper, $breakpoints);\n\n  @if $min != null and $max != null {\n    @media (min-width: $min) and (max-width: $max) {\n      @content;\n    }\n  } @else if $max == null {\n    @include media-breakpoint-up($lower, $breakpoints) {\n      @content;\n    }\n  } @else if $min == null {\n    @include media-breakpoint-down($upper, $breakpoints) {\n      @content;\n    }\n  }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n  $min: breakpoint-min($name, $breakpoints);\n  $max: breakpoint-max($name, $breakpoints);\n\n  @if $min != null and $max != null {\n    @media (min-width: $min) and (max-width: $max) {\n      @content;\n    }\n  } @else if $max == null {\n    @include media-breakpoint-up($name, $breakpoints) {\n      @content;\n    }\n  } @else if $min == null {\n    @include media-breakpoint-down($name, $breakpoints) {\n      @content;\n    }\n  }\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated font-resizing\n//\n// See https://github.com/twbs/rfs\n\n// Configuration\n\n// Base font size\n$rfs-base-font-size: 1.25rem !default;\n$rfs-font-size-unit: rem !default;\n\n// Breakpoint at where font-size starts decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n// Resize font-size based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != \"number\" or $rfs-factor <= 1 {\n  @error \"`#{$rfs-factor}` is not a valid  $rfs-factor, it must be greater than 1.\";\n}\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-responsive-font-sizes to false\n$enable-responsive-font-sizes: true !default;\n\n// Cache $rfs-base-font-size unit\n$rfs-base-font-size-unit: unit($rfs-base-font-size);\n\n// Remove px-unit from $rfs-base-font-size for calculations\n@if $rfs-base-font-size-unit == \"px\" {\n  $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1);\n}\n@else if $rfs-base-font-size-unit == \"rem\" {\n  $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1 / $rfs-rem-value);\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == \"px\" {\n  $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == \"rem\" or $rfs-breakpoint-unit-cache == \"em\" {\n  $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1 / $rfs-rem-value);\n}\n\n// Responsive font-size mixin\n@mixin rfs($fs, $important: false) {\n  // Cache $fs unit\n  $fs-unit: if(type-of($fs) == \"number\", unit($fs), false);\n\n  // Add !important suffix if needed\n  $rfs-suffix: if($important, \" !important\", \"\");\n\n  // If $fs isn't a number (like inherit) or $fs has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n  @if not $fs-unit or $fs-unit != \"\" and $fs-unit != \"px\" and $fs-unit != \"rem\" or $fs == 0 {\n    font-size: #{$fs}#{$rfs-suffix};\n  }\n  @else {\n    // Variables for storing static and fluid rescaling\n    $rfs-static: null;\n    $rfs-fluid: null;\n\n    // Remove px-unit from $fs for calculations\n    @if $fs-unit == \"px\" {\n      $fs: $fs / ($fs * 0 + 1);\n    }\n    @else if $fs-unit == \"rem\" {\n      $fs: $fs / ($fs * 0 + 1 / $rfs-rem-value);\n    }\n\n    // Set default font-size\n    @if $rfs-font-size-unit == rem {\n      $rfs-static: #{$fs / $rfs-rem-value}rem#{$rfs-suffix};\n    }\n    @else if $rfs-font-size-unit == px {\n      $rfs-static: #{$fs}px#{$rfs-suffix};\n    }\n    @else {\n      @error \"`#{$rfs-font-size-unit}` is not a valid unit for $rfs-font-size-unit. Use `px` or `rem`.\";\n    }\n\n    // Only add media query if font-size is bigger as the minimum font-size\n    // If $rfs-factor == 1, no rescaling will take place\n    @if $fs > $rfs-base-font-size and $enable-responsive-font-sizes {\n      $min-width: null;\n      $variable-unit: null;\n\n      // Calculate minimum font-size for given font-size\n      $fs-min: $rfs-base-font-size + ($fs - $rfs-base-font-size) / $rfs-factor;\n\n      // Calculate difference between given font-size and minimum font-size for given font-size\n      $fs-diff: $fs - $fs-min;\n\n      // Base font-size formatting\n      // No need to check if the unit is valid, because we did that before\n      $min-width: if($rfs-font-size-unit == rem, #{$fs-min / $rfs-rem-value}rem, #{$fs-min}px);\n\n      // If two-dimensional, use smallest of screen width and height\n      $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n      // Calculate the variable width between 0 and $rfs-breakpoint\n      $variable-width: #{$fs-diff * 100 / $rfs-breakpoint}#{$variable-unit};\n\n      // Set the calculated font-size.\n      $rfs-fluid: calc(#{$min-width} + #{$variable-width}) #{$rfs-suffix};\n    }\n\n    // Rendering\n    @if $rfs-fluid == null {\n      // Only render static font-size if no fluid font-size is available\n      font-size: $rfs-static;\n    }\n    @else {\n      $mq-value: null;\n\n      // RFS breakpoint formatting\n      @if $rfs-breakpoint-unit == em or $rfs-breakpoint-unit == rem {\n        $mq-value: #{$rfs-breakpoint / $rfs-rem-value}#{$rfs-breakpoint-unit};\n      }\n      @else if $rfs-breakpoint-unit == px {\n        $mq-value: #{$rfs-breakpoint}px;\n      }\n      @else {\n        @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n      }\n\n      @if $rfs-class == \"disable\" {\n        // Adding an extra class increases specificity,\n        // which prevents the media query to override the font size\n        &,\n        .disable-responsive-font-size &,\n        &.disable-responsive-font-size {\n          font-size: $rfs-static;\n        }\n      }\n      @else {\n        font-size: $rfs-static;\n      }\n\n      @if $rfs-two-dimensional {\n        @media (max-width: #{$mq-value}), (max-height: #{$mq-value}) {\n          @if $rfs-class == \"enable\" {\n            .enable-responsive-font-size &,\n            &.enable-responsive-font-size {\n              font-size: $rfs-fluid;\n            }\n          }\n          @else {\n            font-size: $rfs-fluid;\n          }\n\n          @if $rfs-safari-iframe-resize-bug-fix {\n            // stylelint-disable-next-line length-zero-no-unit\n            min-width: 0vw;\n          }\n        }\n      }\n      @else {\n        @media (max-width: #{$mq-value}) {\n          @if $rfs-class == \"enable\" {\n            .enable-responsive-font-size &,\n            &.enable-responsive-font-size {\n              font-size: $rfs-fluid;\n            }\n          }\n          @else {\n            font-size: $rfs-fluid;\n          }\n\n          @if $rfs-safari-iframe-resize-bug-fix {\n            // stylelint-disable-next-line length-zero-no-unit\n            min-width: 0vw;\n          }\n        }\n      }\n    }\n  }\n}\n\n// The font-size & responsive-font-size mixin uses RFS to rescale font sizes\n@mixin font-size($fs, $important: false) {\n  @include rfs($fs, $important);\n}\n\n@mixin responsive-font-size($fs, $important: false) {\n  @include rfs($fs, $important);\n}\n","// stylelint-disable declaration-no-important\n\n.bd-masthead {\n  position: relative;\n  padding: 3rem ($grid-gutter-width / 2);\n  background: linear-gradient(to right bottom, lighten($bd-purple-light, 16%) 50%, #fff 50%);\n\n  h1 {\n    @include font-size(4rem);\n    line-height: 1;\n  }\n\n  .lead {\n    @include font-size(1.5rem);\n    font-weight: 400;\n    color: $gray-700;\n  }\n\n  .btn {\n    padding: .8rem 2rem;\n    font-weight: 600;\n    @include font-size(1.25rem);\n  }\n\n  .carbonad {\n    margin-top: 0 !important;\n    margin-bottom: -3rem !important;\n  }\n\n  @include media-breakpoint-up(sm) {\n    padding-top: 5rem;\n    padding-bottom: 5rem;\n\n    .carbonad {\n      margin-bottom: 0 !important;\n    }\n  }\n\n  @include media-breakpoint-up(md) {\n    .carbonad {\n      margin-top: 3rem !important;\n    }\n  }\n}\n\n.masthead-followup {\n  .bd-clipboard { display: none; }\n\n  h2 {\n    @include font-size(2.5rem);\n  }\n\n  .highlight {\n    @include border-radius(.5rem);\n\n    pre::-webkit-scrollbar {\n      display: none;\n    }\n\n    pre code {\n      display: inline-block;\n      white-space: pre;\n\n      &::before {\n        display: none;\n      }\n    }\n  }\n}\n\n.masthead-followup-icon {\n  padding: .75rem;\n  background-image: linear-gradient(to bottom right, rgba(255, 255, 255, .2), rgba(255, 255, 255, .01));\n  @include border-radius(.75rem);\n  box-shadow: 0 .125rem .25rem rgba(0, 0, 0, .1);\n}\n\n.masthead-followup-svg {\n  filter: drop-shadow(0 1px 0 rgba(0, 0, 0, .125));\n}\n","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n  $return: ();\n  @each $value in $radius {\n    @if type-of($value) == number {\n      $return: append($return, max($value, 0));\n    } @else {\n      $return: append($return, $value);\n    }\n  }\n  @return $return;\n}\n\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n  @if $enable-rounded {\n    border-radius: valid-radius($radius);\n  }\n  @else if $fallback-border-radius != false {\n    border-radius: $fallback-border-radius;\n  }\n}\n\n@mixin border-top-radius($radius) {\n  @if $enable-rounded {\n    border-top-left-radius: valid-radius($radius);\n    border-top-right-radius: valid-radius($radius);\n  }\n}\n\n@mixin border-right-radius($radius) {\n  @if $enable-rounded {\n    border-top-right-radius: valid-radius($radius);\n    border-bottom-right-radius: valid-radius($radius);\n  }\n}\n\n@mixin border-bottom-radius($radius) {\n  @if $enable-rounded {\n    border-bottom-right-radius: valid-radius($radius);\n    border-bottom-left-radius: valid-radius($radius);\n  }\n}\n\n@mixin border-left-radius($radius) {\n  @if $enable-rounded {\n    border-top-left-radius: valid-radius($radius);\n    border-bottom-left-radius: valid-radius($radius);\n  }\n}\n\n@mixin border-top-left-radius($radius) {\n  @if $enable-rounded {\n    border-top-left-radius: valid-radius($radius);\n  }\n}\n\n@mixin border-top-right-radius($radius) {\n  @if $enable-rounded {\n    border-top-right-radius: valid-radius($radius);\n  }\n}\n\n@mixin border-bottom-right-radius($radius) {\n  @if $enable-rounded {\n    border-bottom-right-radius: valid-radius($radius);\n  }\n}\n\n@mixin border-bottom-left-radius($radius) {\n  @if $enable-rounded {\n    border-bottom-left-radius: valid-radius($radius);\n  }\n}\n","// stylelint-disable declaration-no-important, selector-max-id\n\n//\n// Carbon ads\n//\n\n#carbonads {\n  position: static;\n  display: block;\n  max-width: 400px;\n  padding: 15px 15px 15px 160px;\n  margin: 2rem 0;\n  overflow: hidden;\n  @include font-size(.8125rem);\n  line-height: 1.4;\n  text-align: left;\n  background-color: rgba(0, 0, 0, .05);\n\n  a {\n    color: #333;\n    text-decoration: none;\n  }\n\n  @include media-breakpoint-up(sm) {\n    max-width: 330px;\n    @include border-radius(4px);\n  }\n}\n\n.carbon-img {\n  float: left;\n  margin-left: -145px;\n}\n\n.carbon-poweredby {\n  display: block;\n  margin-top: .75rem;\n  color: #777 !important;\n}\n","// stylelint-disable no-duplicate-selectors, selector-max-combinators, selector-max-compound-selectors, selector-max-type, selector-no-qualifying-type\n\n//\n// Automatically style Markdown-based tables like a Bootstrap `.table`.\n//\n\n.bd-content {\n  order: 1;\n\n  // Hack the sticky header\n  > h2[id],\n  > h3[id],\n  > h4[id] {\n    pointer-events: none;\n\n    &::before {\n      display: block;\n      height: 6rem;\n      margin-top: -6rem;\n      content: \"\";\n    }\n  }\n\n  > table {\n    width: 100%;\n    max-width: 100%;\n    margin-bottom: 1rem;\n\n    @include media-breakpoint-down(md) {\n      display: block;\n      overflow-x: auto;\n\n      &.table-bordered {\n        border: 0;\n      }\n    }\n\n    // Cells\n    > thead,\n    > tbody,\n    > tfoot {\n      > tr {\n        > th,\n        > td {\n          padding: $table-cell-padding;\n          vertical-align: top;\n          border: 1px solid $table-border-color;\n\n          > p:last-child {\n            margin-bottom: 0;\n          }\n        }\n      }\n    }\n\n    // Prevent breaking of code (e.g., Grunt tasks list)\n    td:first-child > code {\n      white-space: nowrap;\n    }\n  }\n}\n\n.bd-content-title {\n  display: block;\n  pointer-events: auto;\n}\n\n//\n// Docs sections\n//\n\n.bd-content {\n  > h2 {\n    @include font-size($h2-font-size);\n  }\n\n  > h3 {\n    @include font-size($h3-font-size);\n  }\n\n  > h4 {\n    @include font-size($h4-font-size);\n  }\n\n  > h2:not(:first-child) {\n    margin-top: 3rem;\n  }\n\n  > h3 {\n    margin-top: 1.5rem;\n  }\n\n  > ul li,\n  > ol li {\n    margin-bottom: .25rem;\n  }\n\n  @include media-breakpoint-up(lg) {\n    > ul,\n    > ol,\n    > p {\n      max-width: 80%;\n    }\n  }\n}\n\n.bd-title {\n  margin-top: 1rem;\n  margin-bottom: .5rem;\n  @include font-size(3rem);\n}\n\n.bd-lead {\n  @include font-size(1.5rem);\n  font-weight: 300;\n\n  @include media-breakpoint-up(lg) {\n    max-width: 80%;\n  }\n}\n\n.bd-text-purple { color: $bd-purple; }\n.bd-text-purple-bright { color: $bd-purple-bright; }\n\n.bd-bg-purple-bright {\n  background-color: $bd-purple-bright;\n}\n","/*!\n * Bootstrap Docs (https://getbootstrap.com/)\n * Copyright 2011-2020 The Bootstrap Authors\n * Copyright 2011-2020 Twitter, Inc.\n * Licensed under the Creative Commons Attribution 3.0 Unported License.\n * For details, see https://creativecommons.org/licenses/by/3.0/.\n */\n.bd-navbar {\n  min-height: 4rem;\n  background-color: #7952b3;\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.05), inset 0 -1px 0 rgba(0, 0, 0, 0.1);\n}\n\n@media (max-width: 991.98px) {\n  .bd-navbar {\n    padding-right: .5rem;\n    padding-left: .5rem;\n  }\n  .bd-navbar .navbar-nav-scroll {\n    max-width: 100%;\n    height: 2.5rem;\n    margin-top: .25rem;\n    overflow: hidden;\n  }\n  .bd-navbar .navbar-nav-scroll .navbar-nav {\n    padding-bottom: 2rem;\n    overflow-x: auto;\n    white-space: nowrap;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (min-width: 768px) {\n  @supports ((position: -webkit-sticky) or (position: sticky)) {\n    .bd-navbar {\n      position: -webkit-sticky;\n      position: sticky;\n      top: 0;\n      z-index: 1071;\n    }\n  }\n}\n\n.bd-navbar .navbar-nav .nav-link {\n  padding-right: .5rem;\n  padding-left: .5rem;\n  color: rgba(255, 255, 255, 0.85);\n}\n\n.bd-navbar .navbar-nav .nav-link.active, .bd-navbar .navbar-nav .nav-link:hover {\n  color: #fff;\n  background-color: transparent;\n}\n\n.bd-navbar .navbar-nav .nav-link.active {\n  font-weight: 600;\n}\n\n.bd-navbar .navbar-nav-svg {\n  display: inline-block;\n  width: 1rem;\n  height: 1rem;\n  vertical-align: text-top;\n}\n\n.bd-navbar .dropdown-menu {\n  font-size: 0.875rem;\n}\n\n.bd-navbar .dropdown-item.active {\n  font-weight: 600;\n  color: #212529;\n  background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23292b2c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") no-repeat 0.4rem 0.6rem/0.75rem 0.75rem;\n}\n\n.bd-masthead {\n  position: relative;\n  padding: 3rem 15px;\n  background: linear-gradient(to right bottom, #f7f5fb 50%, #fff 50%);\n}\n\n.bd-masthead h1 {\n  font-size: 4rem;\n  line-height: 1;\n}\n\n@media (max-width: 1200px) {\n  .bd-masthead h1 {\n    font-size: calc(1.525rem + 3.3vw) ;\n  }\n}\n\n.bd-masthead .lead {\n  font-size: 1.5rem;\n  font-weight: 400;\n  color: #495057;\n}\n\n@media (max-width: 1200px) {\n  .bd-masthead .lead {\n    font-size: calc(1.275rem + 0.3vw) ;\n  }\n}\n\n.bd-masthead .btn {\n  padding: .8rem 2rem;\n  font-weight: 600;\n  font-size: 1.25rem;\n}\n\n.bd-masthead .carbonad {\n  margin-top: 0 !important;\n  margin-bottom: -3rem !important;\n}\n\n@media (min-width: 576px) {\n  .bd-masthead {\n    padding-top: 5rem;\n    padding-bottom: 5rem;\n  }\n  .bd-masthead .carbonad {\n    margin-bottom: 0 !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .bd-masthead .carbonad {\n    margin-top: 3rem !important;\n  }\n}\n\n.masthead-followup .bd-clipboard {\n  display: none;\n}\n\n.masthead-followup h2 {\n  font-size: 2.5rem;\n}\n\n@media (max-width: 1200px) {\n  .masthead-followup h2 {\n    font-size: calc(1.375rem + 1.5vw) ;\n  }\n}\n\n.masthead-followup .highlight {\n  border-radius: 0.5rem;\n}\n\n.masthead-followup .highlight pre::-webkit-scrollbar {\n  display: none;\n}\n\n.masthead-followup .highlight pre code {\n  display: inline-block;\n  white-space: pre;\n}\n\n.masthead-followup .highlight pre code::before {\n  display: none;\n}\n\n.masthead-followup-icon {\n  padding: .75rem;\n  background-image: linear-gradient(to bottom right, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.01));\n  border-radius: 0.75rem;\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.1);\n}\n\n.masthead-followup-svg {\n  -webkit-filter: drop-shadow(0 1px 0 rgba(0, 0, 0, 0.125));\n  filter: drop-shadow(0 1px 0 rgba(0, 0, 0, 0.125));\n}\n\n#carbonads {\n  position: static;\n  display: block;\n  max-width: 400px;\n  padding: 15px 15px 15px 160px;\n  margin: 2rem 0;\n  overflow: hidden;\n  font-size: 0.8125rem;\n  line-height: 1.4;\n  text-align: left;\n  background-color: rgba(0, 0, 0, 0.05);\n}\n\n#carbonads a {\n  color: #333;\n  text-decoration: none;\n}\n\n@media (min-width: 576px) {\n  #carbonads {\n    max-width: 330px;\n    border-radius: 4px;\n  }\n}\n\n.carbon-img {\n  float: left;\n  margin-left: -145px;\n}\n\n.carbon-poweredby {\n  display: block;\n  margin-top: .75rem;\n  color: #777 !important;\n}\n\n.bd-content {\n  -ms-flex-order: 1;\n  order: 1;\n}\n\n.bd-content > h2[id],\n.bd-content > h3[id],\n.bd-content > h4[id] {\n  pointer-events: none;\n}\n\n.bd-content > h2[id]::before,\n.bd-content > h3[id]::before,\n.bd-content > h4[id]::before {\n  display: block;\n  height: 6rem;\n  margin-top: -6rem;\n  content: \"\";\n}\n\n.bd-content > table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 1rem;\n}\n\n@media (max-width: 991.98px) {\n  .bd-content > table {\n    display: block;\n    overflow-x: auto;\n  }\n  .bd-content > table.table-bordered {\n    border: 0;\n  }\n}\n\n.bd-content > table > thead > tr > th,\n.bd-content > table > thead > tr > td,\n.bd-content > table > tbody > tr > th,\n.bd-content > table > tbody > tr > td,\n.bd-content > table > tfoot > tr > th,\n.bd-content > table > tfoot > tr > td {\n  padding: 0.75rem;\n  vertical-align: top;\n  border: 1px solid #dee2e6;\n}\n\n.bd-content > table > thead > tr > th > p:last-child,\n.bd-content > table > thead > tr > td > p:last-child,\n.bd-content > table > tbody > tr > th > p:last-child,\n.bd-content > table > tbody > tr > td > p:last-child,\n.bd-content > table > tfoot > tr > th > p:last-child,\n.bd-content > table > tfoot > tr > td > p:last-child {\n  margin-bottom: 0;\n}\n\n.bd-content > table td:first-child > code {\n  white-space: nowrap;\n}\n\n.bd-content-title {\n  display: block;\n  pointer-events: auto;\n}\n\n.bd-content > h2 {\n  font-size: 2rem;\n}\n\n@media (max-width: 1200px) {\n  .bd-content > h2 {\n    font-size: calc(1.325rem + 0.9vw) ;\n  }\n}\n\n.bd-content > h3 {\n  font-size: 1.75rem;\n}\n\n@media (max-width: 1200px) {\n  .bd-content > h3 {\n    font-size: calc(1.3rem + 0.6vw) ;\n  }\n}\n\n.bd-content > h4 {\n  font-size: 1.5rem;\n}\n\n@media (max-width: 1200px) {\n  .bd-content > h4 {\n    font-size: calc(1.275rem + 0.3vw) ;\n  }\n}\n\n.bd-content > h2:not(:first-child) {\n  margin-top: 3rem;\n}\n\n.bd-content > h3 {\n  margin-top: 1.5rem;\n}\n\n.bd-content > ul li,\n.bd-content > ol li {\n  margin-bottom: .25rem;\n}\n\n@media (min-width: 992px) {\n  .bd-content > ul,\n  .bd-content > ol,\n  .bd-content > p {\n    max-width: 80%;\n  }\n}\n\n.bd-title {\n  margin-top: 1rem;\n  margin-bottom: .5rem;\n  font-size: 3rem;\n}\n\n@media (max-width: 1200px) {\n  .bd-title {\n    font-size: calc(1.425rem + 2.1vw) ;\n  }\n}\n\n.bd-lead {\n  font-size: 1.5rem;\n  font-weight: 300;\n}\n\n@media (max-width: 1200px) {\n  .bd-lead {\n    font-size: calc(1.275rem + 0.3vw) ;\n  }\n}\n\n@media (min-width: 992px) {\n  .bd-lead {\n    max-width: 80%;\n  }\n}\n\n.bd-text-purple {\n  color: #563d7c;\n}\n\n.bd-text-purple-bright {\n  color: #7952b3;\n}\n\n.bd-bg-purple-bright {\n  background-color: #7952b3;\n}\n\n.skippy {\n  background-color: #563d7c;\n}\n\n.skippy a {\n  color: #fff;\n}\n\n.skippy:focus-within a {\n  position: static !important;\n  width: auto !important;\n  height: auto !important;\n  padding: 0.5rem !important;\n  margin: 0.25rem !important;\n  overflow: visible !important;\n  clip: auto !important;\n  white-space: normal !important;\n}\n\n.bd-toc {\n  -ms-flex-order: 2;\n  order: 2;\n  padding-top: 1.5rem;\n  padding-bottom: 1.5rem;\n  font-size: 0.875rem;\n}\n\n@supports ((position: -webkit-sticky) or (position: sticky)) {\n  .bd-toc {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 4rem;\n    height: calc(100vh - 4rem);\n    overflow-y: auto;\n  }\n}\n\n.section-nav {\n  padding-left: 0;\n  border-left: 1px solid #eee;\n}\n\n.section-nav ul {\n  padding-left: 1rem;\n}\n\n.toc-entry {\n  display: block;\n}\n\n.toc-entry a {\n  display: block;\n  padding: .125rem 1.5rem;\n  color: #77757a;\n}\n\n.toc-entry a:hover {\n  color: #007bff;\n  text-decoration: none;\n}\n\n.bd-sidebar {\n  -ms-flex-order: 0;\n  order: 0;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n@media (min-width: 768px) {\n  .bd-sidebar {\n    border-right: 1px solid rgba(0, 0, 0, 0.1);\n  }\n  @supports ((position: -webkit-sticky) or (position: sticky)) {\n    .bd-sidebar {\n      position: -webkit-sticky;\n      position: sticky;\n      top: 4rem;\n      z-index: 1000;\n      height: calc(100vh - 4rem);\n    }\n  }\n}\n\n@media (min-width: 1200px) {\n  .bd-sidebar {\n    -ms-flex: 0 1 320px;\n    flex: 0 1 320px;\n  }\n}\n\n.bd-links {\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n@media (min-width: 768px) {\n  @supports ((position: -webkit-sticky) or (position: sticky)) {\n    .bd-links {\n      max-height: calc(100vh - 9rem);\n      overflow-y: auto;\n    }\n  }\n}\n\n@media (min-width: 768px) {\n  .bd-links {\n    display: block !important;\n  }\n}\n\n.bd-search {\n  position: relative;\n  padding: 1rem 15px;\n  margin-right: -15px;\n  margin-left: -15px;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\n.bd-search .form-control:focus {\n  border-color: #7952b3;\n  box-shadow: 0 0 0 3px rgba(121, 82, 179, 0.25);\n}\n\n.bd-search-docs-toggle {\n  color: #212529;\n}\n\n.bd-sidenav {\n  display: none;\n}\n\n.bd-toc-link {\n  display: block;\n  padding: .25rem 1.5rem;\n  font-weight: 600;\n  color: rgba(0, 0, 0, 0.65);\n}\n\n.bd-toc-link:hover {\n  color: rgba(0, 0, 0, 0.85);\n  text-decoration: none;\n}\n\n.bd-toc-item.active {\n  margin-bottom: 1rem;\n}\n\n.bd-toc-item.active:not(:first-child) {\n  margin-top: 1rem;\n}\n\n.bd-toc-item.active > .bd-toc-link {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n.bd-toc-item.active > .bd-toc-link:hover {\n  background-color: transparent;\n}\n\n.bd-toc-item.active > .bd-sidenav {\n  display: block;\n}\n\n.bd-sidebar .nav > li > a {\n  display: block;\n  padding: .25rem 1.5rem;\n  font-size: 90%;\n  color: rgba(0, 0, 0, 0.65);\n}\n\n.bd-sidebar .nav > li > a:hover {\n  color: rgba(0, 0, 0, 0.85);\n  text-decoration: none;\n  background-color: transparent;\n}\n\n.bd-sidebar .nav > .active > a,\n.bd-sidebar .nav > .active:hover > a {\n  font-weight: 600;\n  color: rgba(0, 0, 0, 0.85);\n  background-color: transparent;\n}\n\n.bd-footer {\n  font-size: 0.875rem;\n  text-align: center;\n  background-color: #f7f7f7;\n}\n\n.bd-footer a {\n  font-weight: 600;\n  color: #495057;\n}\n\n.bd-footer a:hover, .bd-footer a:focus {\n  color: #007bff;\n}\n\n.bd-footer p {\n  margin-bottom: 0;\n}\n\n@media (min-width: 576px) {\n  .bd-footer {\n    text-align: left;\n  }\n}\n\n.bd-footer-links {\n  padding-left: 0;\n  margin-bottom: 1rem;\n}\n\n.bd-footer-links li {\n  display: inline-block;\n}\n\n.bd-footer-links li + li {\n  margin-left: 1rem;\n}\n\n.bd-example-row .row > .col,\n.bd-example-row .row > [class^=\"col-\"] {\n  padding-top: .75rem;\n  padding-bottom: .75rem;\n  background-color: rgba(86, 61, 124, 0.15);\n  border: 1px solid rgba(86, 61, 124, 0.2);\n}\n\n.bd-example-row .row + .row {\n  margin-top: 1rem;\n}\n\n.bd-example-row .flex-items-top,\n.bd-example-row .flex-items-middle,\n.bd-example-row .flex-items-bottom {\n  min-height: 6rem;\n  background-color: rgba(255, 0, 0, 0.1);\n}\n\n.bd-example-row-flex-cols .row {\n  min-height: 10rem;\n  background-color: rgba(255, 0, 0, 0.1);\n}\n\n.bd-highlight {\n  background-color: rgba(86, 61, 124, 0.15);\n  border: 1px solid rgba(86, 61, 124, 0.15);\n}\n\n.bd-example-responsive-containers [class^=\"container\"] {\n  padding-top: .75rem;\n  padding-bottom: .75rem;\n  background-color: rgba(86, 61, 124, 0.15);\n  border: 1px solid rgba(86, 61, 124, 0.2);\n}\n\n.example-container {\n  width: 800px;\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.example-row {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n.example-content-main {\n  position: relative;\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n\n@media (min-width: 576px) {\n  .example-content-main {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n}\n\n@media (min-width: 992px) {\n  .example-content-main {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n}\n\n.example-content-secondary {\n  position: relative;\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n\n@media (min-width: 576px) {\n  .example-content-secondary {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n}\n\n@media (min-width: 992px) {\n  .example-content-secondary {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n}\n\n.bd-example {\n  position: relative;\n  padding: 1rem;\n  margin: 1rem -15px 0;\n  border: solid #f8f9fa;\n  border-width: .2rem 0 0;\n}\n\n.bd-example::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n@media (min-width: 576px) {\n  .bd-example {\n    padding: 1.5rem;\n    margin-right: 0;\n    margin-left: 0;\n    border-width: .2rem;\n  }\n}\n\n.bd-example + .highlight,\n.bd-example + .clipboard + .highlight {\n  margin-top: 0;\n}\n\n.bd-example + p {\n  margin-top: 2rem;\n}\n\n.bd-example .custom-file-input:lang(es) ~ .custom-file-label::after {\n  content: \"Elegir\";\n}\n\n.bd-example > .form-control + .form-control {\n  margin-top: .5rem;\n}\n\n.bd-example > .nav + .nav,\n.bd-example > .alert + .alert,\n.bd-example > .navbar + .navbar,\n.bd-example > .progress + .progress,\n.bd-example > .progress + .btn {\n  margin-top: 1rem;\n}\n\n.bd-example > .dropdown-menu:first-child {\n  position: static;\n  display: block;\n}\n\n.bd-example > .form-group:last-child {\n  margin-bottom: 0;\n}\n\n.bd-example > .close {\n  float: none;\n}\n\n.bd-example-type .table td {\n  padding: 1rem 0;\n  border-color: #eee;\n}\n\n.bd-example-type .table tr:first-child td {\n  border-top: 0;\n}\n\n.bd-example-type h1,\n.bd-example-type h2,\n.bd-example-type h3,\n.bd-example-type h4,\n.bd-example-type h5,\n.bd-example-type h6 {\n  margin-top: 0;\n  margin-bottom: 0;\n}\n\n.bd-example-bg-classes p {\n  padding: 1rem;\n}\n\n.bd-example > svg + svg,\n.bd-example > img + img {\n  margin-left: .5rem;\n}\n\n.bd-example > .btn,\n.bd-example > .btn-group {\n  margin-top: .25rem;\n  margin-bottom: .25rem;\n}\n\n.bd-example > .btn-toolbar + .btn-toolbar {\n  margin-top: .5rem;\n}\n\n.bd-example-control-sizing select,\n.bd-example-control-sizing input[type=\"text\"] + input[type=\"text\"] {\n  margin-top: .5rem;\n}\n\n.bd-example-form .input-group {\n  margin-bottom: .5rem;\n}\n\n.bd-example > textarea.form-control {\n  resize: vertical;\n}\n\n.bd-example > .list-group {\n  max-width: 400px;\n}\n\n.bd-example > [class*=\"list-group-horizontal\"] {\n  max-width: 100%;\n}\n\n.bd-example .fixed-top,\n.bd-example .sticky-top {\n  position: static;\n  margin: -1rem -1rem 1rem;\n}\n\n.bd-example .fixed-bottom {\n  position: static;\n  margin: 1rem -1rem -1rem;\n}\n\n@media (min-width: 576px) {\n  .bd-example .fixed-top,\n  .bd-example .sticky-top {\n    margin: -1.5rem -1.5rem 1rem;\n  }\n  .bd-example .fixed-bottom {\n    margin: 1rem -1.5rem -1.5rem;\n  }\n}\n\n.bd-example .pagination {\n  margin-top: .5rem;\n  margin-bottom: .5rem;\n}\n\n.modal {\n  z-index: 1072;\n}\n\n.modal .tooltip,\n.modal .popover {\n  z-index: 1073;\n}\n\n.modal-backdrop {\n  z-index: 1071;\n}\n\n.bd-example-modal {\n  background-color: #fafafa;\n}\n\n.bd-example-modal .modal {\n  position: relative;\n  top: auto;\n  right: auto;\n  bottom: auto;\n  left: auto;\n  z-index: 1;\n  display: block;\n}\n\n.bd-example-modal .modal-dialog {\n  left: auto;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.bd-example-tabs .nav-tabs {\n  margin-bottom: 1rem;\n}\n\n.bd-example-popover-static {\n  padding-bottom: 1.5rem;\n  background-color: #f9f9f9;\n}\n\n.bd-example-popover-static .popover {\n  position: relative;\n  display: block;\n  float: left;\n  width: 260px;\n  margin: 1.25rem;\n}\n\n.tooltip-demo a {\n  white-space: nowrap;\n}\n\n.bd-example-tooltip-static .tooltip {\n  position: relative;\n  display: inline-block;\n  margin: 10px 20px;\n  opacity: 1;\n}\n\n.scrollspy-example {\n  position: relative;\n  height: 200px;\n  margin-top: .5rem;\n  overflow: auto;\n}\n\n.scrollspy-example-2 {\n  position: relative;\n  height: 350px;\n  overflow: auto;\n}\n\n.bd-example-border-utils [class^=\"border\"] {\n  display: inline-block;\n  width: 5rem;\n  height: 5rem;\n  margin: .25rem;\n  background-color: #f5f5f5;\n}\n\n.bd-example-border-utils-0 [class^=\"border\"] {\n  border: 1px solid #dee2e6;\n}\n\n.bd-example-forms-input-group-workaround .fix-rounded-right {\n  border-top-right-radius: 0.2rem !important;\n  border-bottom-right-radius: 0.2rem !important;\n}\n\n.highlight {\n  padding: 1rem;\n  margin-top: 1rem;\n  margin-bottom: 1rem;\n  background-color: #f8f9fa;\n  -ms-overflow-style: -ms-autohiding-scrollbar;\n}\n\n@media (min-width: 576px) {\n  .highlight {\n    padding: 1.5rem;\n  }\n}\n\n.bd-content .highlight {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n@media (min-width: 576px) {\n  .bd-content .highlight {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n\n.highlight pre {\n  padding: 0;\n  margin-top: .65rem;\n  margin-bottom: .65rem;\n  background-color: transparent;\n  border: 0;\n}\n\n.highlight pre code {\n  font-size: inherit;\n  color: #212529;\n}\n\n.btn-bd-primary {\n  font-weight: 600;\n  color: #fff;\n  background-color: #7952b3;\n  border-color: #7952b3;\n}\n\n.btn-bd-primary:hover, .btn-bd-primary:active {\n  color: #fff;\n  background-color: #614092;\n  border-color: #614092;\n}\n\n.btn-bd-primary:focus {\n  box-shadow: 0 0 0 3px rgba(121, 82, 179, 0.25);\n}\n\n.btn-bd-download {\n  font-weight: 600;\n  color: #ffe484;\n  border-color: #ffe484;\n}\n\n.btn-bd-download:hover, .btn-bd-download:active {\n  color: #2a2730;\n  background-color: #ffe484;\n  border-color: #ffe484;\n}\n\n.btn-bd-download:focus {\n  box-shadow: 0 0 0 3px rgba(255, 228, 132, 0.25);\n}\n\n.btn-bd-light {\n  color: #6c757d;\n  border-color: #dee2e6;\n}\n\n.show > .btn-bd-light, .btn-bd-light:hover, .btn-bd-light:active {\n  color: #7952b3;\n  background-color: #fff;\n  border-color: #7952b3;\n}\n\n.btn-bd-light:focus {\n  box-shadow: 0 0 0 3px rgba(121, 82, 179, 0.25);\n}\n\n.bd-callout {\n  padding: 1.25rem;\n  margin-top: 1.25rem;\n  margin-bottom: 1.25rem;\n  border: 1px solid #eee;\n  border-left-width: .25rem;\n  border-radius: 0.25rem;\n}\n\n.bd-callout h4 {\n  margin-top: 0;\n  margin-bottom: .25rem;\n}\n\n.bd-callout p:last-child {\n  margin-bottom: 0;\n}\n\n.bd-callout code {\n  border-radius: 0.25rem;\n}\n\n.bd-callout + .bd-callout {\n  margin-top: -.25rem;\n}\n\n.bd-callout-info {\n  border-left-color: #5bc0de;\n}\n\n.bd-callout-info h4 {\n  color: #5bc0de;\n}\n\n.bd-callout-warning {\n  border-left-color: #f0ad4e;\n}\n\n.bd-callout-warning h4 {\n  color: #f0ad4e;\n}\n\n.bd-callout-danger {\n  border-left-color: #d9534f;\n}\n\n.bd-callout-danger h4 {\n  color: #d9534f;\n}\n\n.bd-browser-bugs td p {\n  margin-bottom: 0;\n}\n\n.bd-browser-bugs th:first-child {\n  width: 18%;\n}\n\n.bd-brand-logos {\n  display: table;\n  width: 100%;\n  margin-bottom: 1rem;\n  overflow: hidden;\n  color: #563d7c;\n  background-color: #f9f9f9;\n  border-radius: 0.25rem;\n}\n\n.bd-brand-logos .inverse {\n  color: #fff;\n  background-color: #563d7c;\n}\n\n.bd-brand-item {\n  padding: 4rem 0;\n  text-align: center;\n}\n\n.bd-brand-item + .bd-brand-item {\n  border-top: 1px solid #fff;\n}\n\n.bd-brand-item h1,\n.bd-brand-item h3 {\n  margin-top: 0;\n  margin-bottom: 0;\n}\n\n@media (min-width: 768px) {\n  .bd-brand-item {\n    display: table-cell;\n    width: 1%;\n  }\n  .bd-brand-item + .bd-brand-item {\n    border-top: 0;\n    border-left: 1px solid #fff;\n  }\n  .bd-brand-item h1 {\n    font-size: 4rem;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 1200px) {\n  .bd-brand-item h1 {\n    font-size: calc(1.525rem + 3.3vw) ;\n  }\n}\n\n.color-swatches {\n  margin: 0 -5px;\n  overflow: hidden;\n}\n\n.color-swatches .bd-purple {\n  background-color: #563d7c;\n}\n\n.color-swatches .bd-purple-light {\n  background-color: #cbbde2;\n}\n\n.color-swatches .bd-purple-lighter {\n  background-color: #e5e1ea;\n}\n\n.color-swatches .bd-gray {\n  background-color: #f9f9f9;\n}\n\n.color-swatch {\n  float: left;\n  width: 4rem;\n  height: 4rem;\n  margin-right: .25rem;\n  margin-left: .25rem;\n  border-radius: 0.25rem;\n}\n\n@media (min-width: 768px) {\n  .color-swatch {\n    width: 6rem;\n    height: 6rem;\n  }\n}\n\n.swatch-blue {\n  color: #fff;\n  background-color: #007bff;\n}\n\n.swatch-indigo {\n  color: #fff;\n  background-color: #6610f2;\n}\n\n.swatch-purple {\n  color: #fff;\n  background-color: #6f42c1;\n}\n\n.swatch-pink {\n  color: #fff;\n  background-color: #e83e8c;\n}\n\n.swatch-red {\n  color: #fff;\n  background-color: #dc3545;\n}\n\n.swatch-orange {\n  color: #212529;\n  background-color: #fd7e14;\n}\n\n.swatch-yellow {\n  color: #212529;\n  background-color: #ffc107;\n}\n\n.swatch-green {\n  color: #fff;\n  background-color: #28a745;\n}\n\n.swatch-teal {\n  color: #fff;\n  background-color: #20c997;\n}\n\n.swatch-cyan {\n  color: #fff;\n  background-color: #17a2b8;\n}\n\n.swatch-white {\n  color: #212529;\n  background-color: #fff;\n}\n\n.swatch-gray {\n  color: #fff;\n  background-color: #6c757d;\n}\n\n.swatch-gray-dark {\n  color: #fff;\n  background-color: #343a40;\n}\n\n.swatch-100 {\n  color: #212529;\n  background-color: #f8f9fa;\n}\n\n.swatch-200 {\n  color: #212529;\n  background-color: #e9ecef;\n}\n\n.swatch-300 {\n  color: #212529;\n  background-color: #dee2e6;\n}\n\n.swatch-400 {\n  color: #212529;\n  background-color: #ced4da;\n}\n\n.swatch-500 {\n  color: #212529;\n  background-color: #adb5bd;\n}\n\n.swatch-600 {\n  color: #fff;\n  background-color: #6c757d;\n}\n\n.swatch-700 {\n  color: #fff;\n  background-color: #495057;\n}\n\n.swatch-800 {\n  color: #fff;\n  background-color: #343a40;\n}\n\n.swatch-900 {\n  color: #fff;\n  background-color: #212529;\n}\n\n.bd-clipboard {\n  position: relative;\n  display: none;\n  float: right;\n}\n\n.bd-clipboard + .highlight {\n  margin-top: 0;\n}\n\n@media (min-width: 768px) {\n  .bd-clipboard {\n    display: block;\n  }\n}\n\n.btn-clipboard {\n  position: absolute;\n  top: .65rem;\n  right: .65rem;\n  z-index: 10;\n  display: block;\n  padding: .25rem .5rem;\n  font-size: 65%;\n  color: #007bff;\n  background-color: #fff;\n  border: 1px solid;\n  border-radius: 0.25rem;\n}\n\n.btn-clipboard:hover {\n  color: #fff;\n  background-color: #007bff;\n}\n\n.bd-placeholder-img {\n  font-size: 1.125rem;\n  text-anchor: middle;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n\n.bd-placeholder-img-lg {\n  font-size: 3.5rem;\n}\n\n@media (max-width: 1200px) {\n  .bd-placeholder-img-lg {\n    font-size: calc(1.475rem + 2.7vw) ;\n  }\n}\n\n.hll {\n  background-color: #ffc;\n}\n\n.c {\n  color: #727272;\n}\n\n.k {\n  color: #069;\n}\n\n.o {\n  color: #555;\n}\n\n.cm {\n  color: #727272;\n}\n\n.cp {\n  color: #008085;\n}\n\n.c1 {\n  color: #727272;\n}\n\n.cs {\n  color: #727272;\n}\n\n.gd {\n  background-color: #fcc;\n  border: 1px solid #c00;\n}\n\n.ge {\n  font-style: italic;\n}\n\n.gr {\n  color: #f00;\n}\n\n.gh {\n  color: #030;\n}\n\n.gi {\n  background-color: #cfc;\n  border: 1px solid #0c0;\n}\n\n.go {\n  color: #aaa;\n}\n\n.gp {\n  color: #009;\n}\n\n.gu {\n  color: #030;\n}\n\n.gt {\n  color: #9c6;\n}\n\n.kc {\n  color: #069;\n}\n\n.kd {\n  color: #069;\n}\n\n.kn {\n  color: #069;\n}\n\n.kp {\n  color: #069;\n}\n\n.kr {\n  color: #069;\n}\n\n.kt {\n  color: #078;\n}\n\n.m {\n  color: #c24f19;\n}\n\n.s {\n  color: #d73038;\n}\n\n.na {\n  color: #006ee0;\n}\n\n.nb {\n  color: #366;\n}\n\n.nc {\n  color: #168174;\n}\n\n.no {\n  color: #360;\n}\n\n.nd {\n  color: #6b62de;\n}\n\n.ni {\n  color: #727272;\n}\n\n.ne {\n  color: #c00;\n}\n\n.nf {\n  color: #b715f4;\n}\n\n.nl {\n  color: #6b62de;\n}\n\n.nn {\n  color: #007ca5;\n}\n\n.nt {\n  color: #2f6f9f;\n}\n\n.nv {\n  color: #033;\n}\n\n.ow {\n  color: #000;\n}\n\n.w {\n  color: #bbb;\n}\n\n.mf {\n  color: #c24f19;\n}\n\n.mh {\n  color: #c24f19;\n}\n\n.mi {\n  color: #c24f19;\n}\n\n.mo {\n  color: #c24f19;\n}\n\n.sb {\n  color: #c30;\n}\n\n.sc {\n  color: #c30;\n}\n\n.sd {\n  font-style: italic;\n  color: #c30;\n}\n\n.s2 {\n  color: #c30;\n}\n\n.se {\n  color: #c30;\n}\n\n.sh {\n  color: #c30;\n}\n\n.si {\n  color: #a00;\n}\n\n.sx {\n  color: #c30;\n}\n\n.sr {\n  color: #337e7e;\n}\n\n.s1 {\n  color: #c30;\n}\n\n.ss {\n  color: #fc3;\n}\n\n.bp {\n  color: #366;\n}\n\n.vc {\n  color: #033;\n}\n\n.vg {\n  color: #033;\n}\n\n.vi {\n  color: #033;\n}\n\n.il {\n  color: #c24f19;\n}\n\n.css .o,\n.css .o + .nt,\n.css .nt + .nt {\n  color: #727272;\n}\n\n.language-bash::before,\n.language-sh::before {\n  color: #009;\n  content: \"$ \";\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n\n.language-powershell::before {\n  color: #009;\n  content: \"PM> \";\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n\n.anchorjs-link {\n  font-weight: 400;\n  color: rgba(0, 123, 255, 0.5);\n  transition: color 0.15s ease-in-out, opacity 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .anchorjs-link {\n    transition: none;\n  }\n}\n\n.anchorjs-link:hover {\n  color: #007bff;\n  text-decoration: none;\n}\n\n.algolia-autocomplete {\n  display: block !important;\n  -ms-flex: 1;\n  flex: 1;\n}\n\n.algolia-autocomplete .ds-dropdown-menu {\n  width: 100%;\n  min-width: 0 !important;\n  max-width: none !important;\n  padding: .75rem 0 !important;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.175);\n}\n\n@media (min-width: 768px) {\n  .algolia-autocomplete .ds-dropdown-menu {\n    width: 175%;\n  }\n}\n\n.algolia-autocomplete .ds-dropdown-menu::before {\n  display: none !important;\n}\n\n.algolia-autocomplete .ds-dropdown-menu [class^=\"ds-dataset-\"] {\n  padding: 0 !important;\n  overflow: visible !important;\n  background-color: transparent !important;\n  border: 0 !important;\n}\n\n.algolia-autocomplete .ds-dropdown-menu .ds-suggestions {\n  margin-top: 0 !important;\n}\n\n.algolia-autocomplete .algolia-docsearch-suggestion {\n  padding: 0 !important;\n  overflow: visible !important;\n}\n\n.algolia-autocomplete .algolia-docsearch-suggestion--category-header {\n  padding: .125rem 1rem !important;\n  margin-top: 0 !important;\n  font-size: 0.875rem !important;\n  font-weight: 600 !important;\n  color: #7952b3 !important;\n  border-bottom: 0 !important;\n}\n\n.algolia-autocomplete .algolia-docsearch-suggestion--wrapper {\n  float: none !important;\n  padding-top: 0 !important;\n}\n\n.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column {\n  float: none !important;\n  width: auto !important;\n  padding: 0 !important;\n  text-align: left !important;\n}\n\n.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-inline {\n  display: block !important;\n  font-size: 0.875rem;\n  color: #495057;\n}\n\n.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-inline::after {\n  padding: 0 .25rem;\n  content: \"/\";\n}\n\n.algolia-autocomplete .algolia-docsearch-suggestion--content {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  float: none !important;\n  width: 100% !important;\n  padding: .25rem 1rem !important;\n}\n\n.algolia-autocomplete .algolia-docsearch-suggestion--content::before {\n  display: none !important;\n}\n\n.algolia-autocomplete .ds-suggestion:not(:first-child) .algolia-docsearch-suggestion--category-header {\n  padding-top: .75rem !important;\n  margin-top: .75rem !important;\n  border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n.algolia-autocomplete .ds-suggestion .algolia-docsearch-suggestion--subcategory-column {\n  display: none !important;\n}\n\n.algolia-autocomplete .algolia-docsearch-suggestion--title {\n  display: block;\n  margin-bottom: 0 !important;\n  font-size: 0.875rem !important;\n  font-weight: 400 !important;\n}\n\n.algolia-autocomplete .algolia-docsearch-suggestion--text {\n  -ms-flex: 0 0 100%;\n  flex: 0 0 100%;\n  max-width: 100%;\n  padding: .2rem 0;\n  font-size: 0.8125rem !important;\n  font-weight: 400;\n  line-height: 1.25 !important;\n  color: #6c757d;\n}\n\n.algolia-autocomplete .algolia-docsearch-footer {\n  float: none !important;\n  width: auto !important;\n  height: auto !important;\n  padding: .75rem 1rem 0;\n  font-size: 0.75rem !important;\n  line-height: 1 !important;\n  color: #767676 !important;\n  border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n.algolia-autocomplete .algolia-docsearch-footer--logo {\n  display: inline !important;\n  overflow: visible !important;\n  color: inherit !important;\n  text-indent: 0 !important;\n  background: none !important;\n}\n\n.algolia-autocomplete .algolia-docsearch-suggestion--highlight {\n  color: #5f2dab;\n  background-color: rgba(154, 132, 187, 0.12);\n}\n\n.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight {\n  box-shadow: inset 0 -2px 0 0 rgba(95, 45, 171, 0.5) !important;\n}\n\n.algolia-autocomplete .ds-suggestion.ds-cursor .algolia-docsearch-suggestion--content {\n  background-color: rgba(208, 189, 236, 0.15) !important;\n}\n/*# sourceMappingURL=docs.min.css.map */","// stylelint-disable declaration-no-important\n\n.skippy {\n  background-color: $bd-purple;\n\n  a {\n    color: $white;\n  }\n\n  &:focus-within a {\n    position: static !important;\n    width: auto !important;\n    height: auto !important;\n    padding: $spacer / 2 !important;\n    margin: $spacer / 4 !important;\n    overflow: visible !important;\n    clip: auto !important;\n    white-space: normal !important;\n  }\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Right side table of contents\n//\n\n.bd-toc {\n  @supports (position: sticky) {\n    position: sticky;\n    top: 4rem;\n    height: subtract(100vh, 4rem);\n    overflow-y: auto;\n  }\n  order: 2;\n  padding-top: 1.5rem;\n  padding-bottom: 1.5rem;\n  @include font-size(.875rem);\n}\n\n.section-nav {\n  padding-left: 0;\n  border-left: 1px solid #eee;\n\n  ul {\n    padding-left: 1rem;\n  }\n}\n\n.toc-entry {\n  display: block;\n\n  a {\n    display: block;\n    padding: .125rem 1.5rem;\n    color: #77757a;\n\n    &:hover {\n      color: $blue;\n      text-decoration: none;\n    }\n  }\n}\n\n//\n// Left side navigation\n//\n\n.bd-sidebar {\n  order: 0;\n  // background-color: #f5f2f9;\n  border-bottom: 1px solid rgba(0, 0, 0, .1);\n\n  @include media-breakpoint-up(md) {\n    @supports (position: sticky) {\n      position: sticky;\n      top: 4rem;\n      z-index: 1000;\n      height: subtract(100vh, 4rem);\n    }\n    border-right: 1px solid rgba(0, 0, 0, .1);\n  }\n\n  @include media-breakpoint-up(xl) {\n    flex: 0 1 320px;\n  }\n}\n\n.bd-links {\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n  margin-right: -15px;\n  margin-left: -15px;\n\n  @include media-breakpoint-up(md) {\n    @supports (position: sticky) {\n      max-height: subtract(100vh, 9rem);\n      overflow-y: auto;\n    }\n  }\n\n  // Override collapse behaviors\n  @include media-breakpoint-up(md) {\n    display: block !important;\n  }\n}\n\n.bd-search {\n  position: relative; // To contain the Algolia search\n  padding: 1rem 15px;\n  margin-right: -15px;\n  margin-left: -15px;\n  border-bottom: 1px solid rgba(0, 0, 0, .05);\n\n  .form-control:focus {\n    border-color: $bd-purple-bright;\n    box-shadow: 0 0 0 3px rgba($bd-purple-bright, .25);\n  }\n}\n\n.bd-search-docs-toggle {\n  color: $gray-900;\n}\n\n.bd-sidenav {\n  display: none;\n}\n\n.bd-toc-link {\n  display: block;\n  padding: .25rem 1.5rem;\n  font-weight: 600;\n  color: rgba(0, 0, 0, .65);\n\n  &:hover {\n    color: rgba(0, 0, 0, .85);\n    text-decoration: none;\n  }\n}\n\n.bd-toc-item {\n  &.active {\n    margin-bottom: 1rem;\n\n    &:not(:first-child) {\n      margin-top: 1rem;\n    }\n\n    > .bd-toc-link {\n      color: rgba(0, 0, 0, .85);\n\n      &:hover {\n        background-color: transparent;\n      }\n    }\n\n    > .bd-sidenav {\n      display: block;\n    }\n  }\n}\n\n// All levels of nav\n.bd-sidebar .nav > li > a {\n  display: block;\n  padding: .25rem 1.5rem;\n  @include font-size(90%);\n  color: rgba(0, 0, 0, .65);\n}\n\n.bd-sidebar .nav > li > a:hover {\n  color: rgba(0, 0, 0, .85);\n  text-decoration: none;\n  background-color: transparent;\n}\n\n.bd-sidebar .nav > .active > a,\n.bd-sidebar .nav > .active:hover > a {\n  font-weight: 600;\n  color: rgba(0, 0, 0, .85);\n  background-color: transparent;\n}\n","//\n// Footer\n//\n\n.bd-footer {\n  @include font-size(.875rem);\n  text-align: center;\n  background-color: #f7f7f7;\n\n  a {\n    font-weight: 600;\n    color: $gray-700;\n\n    &:hover,\n    &:focus {\n      color: $link-color;\n    }\n  }\n\n  p {\n    margin-bottom: 0;\n  }\n\n  @include media-breakpoint-up(sm) {\n    text-align: left;\n  }\n}\n\n.bd-footer-links {\n  padding-left: 0;\n  margin-bottom: 1rem;\n\n  li {\n    display: inline-block;\n\n    + li {\n      margin-left: 1rem;\n    }\n  }\n}\n","// stylelint-disable no-duplicate-selectors, selector-no-qualifying-type\n\n//\n// Grid examples\n//\n\n.bd-example-row {\n  .row {\n    > .col,\n    > [class^=\"col-\"] {\n      padding-top: .75rem;\n      padding-bottom: .75rem;\n      background-color: rgba(86, 61, 124, .15);\n      border: 1px solid rgba(86, 61, 124, .2);\n    }\n  }\n\n  .row + .row {\n    margin-top: 1rem;\n  }\n\n  .flex-items-top,\n  .flex-items-middle,\n  .flex-items-bottom {\n    min-height: 6rem;\n    background-color: rgba(255, 0, 0, .1);\n  }\n}\n\n.bd-example-row-flex-cols .row {\n  min-height: 10rem;\n  background-color: rgba(255, 0, 0, .1);\n}\n\n.bd-highlight {\n  background-color: rgba($bd-purple, .15);\n  border: 1px solid rgba($bd-purple, .15);\n}\n\n.bd-example-responsive-containers {\n  [class^=\"container\"] {\n    padding-top: .75rem;\n    padding-bottom: .75rem;\n    background-color: rgba(86, 61, 124, .15);\n    border: 1px solid rgba(86, 61, 124, .2);\n  }\n}\n\n// Grid mixins\n.example-container {\n  width: 800px;\n  @include make-container();\n}\n\n.example-row {\n  @include make-row();\n}\n\n.example-content-main {\n  @include make-col-ready();\n\n  @include media-breakpoint-up(sm) {\n    @include make-col(6);\n  }\n\n  @include media-breakpoint-up(lg) {\n    @include make-col(8);\n  }\n}\n\n.example-content-secondary {\n  @include make-col-ready();\n\n  @include media-breakpoint-up(sm) {\n    @include make-col(6);\n  }\n\n  @include media-breakpoint-up(lg) {\n    @include make-col(4);\n  }\n}\n\n\n//\n// Docs examples\n//\n\n.bd-example {\n  position: relative;\n  padding: 1rem;\n  margin: 1rem (-$grid-gutter-width / 2) 0;\n  border: solid $gray-100;\n  border-width: .2rem 0 0;\n  @include clearfix();\n\n  @include media-breakpoint-up(sm) {\n    padding: 1.5rem;\n    margin-right: 0;\n    margin-left: 0;\n    border-width: .2rem;\n  }\n\n  + .highlight,\n  + .clipboard + .highlight {\n    margin-top: 0;\n  }\n\n  + p {\n    margin-top: 2rem;\n  }\n\n  .custom-file-input:lang(es) ~ .custom-file-label::after {\n    content: \"Elegir\";\n  }\n\n  > .form-control {\n    + .form-control {\n      margin-top: .5rem;\n    }\n  }\n\n  > .nav + .nav,\n  > .alert + .alert,\n  > .navbar + .navbar,\n  > .progress + .progress,\n  > .progress + .btn {\n    margin-top: 1rem;\n  }\n\n  > .dropdown-menu:first-child {\n    position: static;\n    display: block;\n  }\n\n  > .form-group:last-child {\n    margin-bottom: 0;\n  }\n\n  > .close {\n    float: none;\n  }\n}\n\n// Typography\n.bd-example-type {\n  .table {\n    td {\n      padding: 1rem 0;\n      border-color: #eee;\n    }\n    tr:first-child td {\n      border-top: 0;\n    }\n  }\n\n  h1,\n  h2,\n  h3,\n  h4,\n  h5,\n  h6 {\n    margin-top: 0;\n    margin-bottom: 0;\n  }\n}\n\n// Contextual background colors\n.bd-example-bg-classes p {\n  padding: 1rem;\n}\n\n// Images\n.bd-example {\n  > svg + svg,\n  > img + img {\n    margin-left: .5rem;\n  }\n}\n\n// Buttons\n.bd-example {\n  > .btn,\n  > .btn-group {\n    margin-top: .25rem;\n    margin-bottom: .25rem;\n  }\n  > .btn-toolbar + .btn-toolbar {\n    margin-top: .5rem;\n  }\n}\n\n// Forms\n.bd-example-control-sizing select,\n.bd-example-control-sizing input[type=\"text\"] + input[type=\"text\"] {\n  margin-top: .5rem;\n}\n.bd-example-form .input-group {\n  margin-bottom: .5rem;\n}\n.bd-example > textarea.form-control {\n  resize: vertical;\n}\n\n// List groups\n.bd-example > .list-group {\n  max-width: 400px;\n}\n.bd-example > [class*=\"list-group-horizontal\"] {\n  max-width: 100%;\n}\n\n// Navbars\n.bd-example {\n  .fixed-top,\n  .sticky-top {\n    position: static;\n    margin: -1rem -1rem 1rem;\n  }\n  .fixed-bottom {\n    position: static;\n    margin: 1rem -1rem -1rem;\n  }\n\n  @include media-breakpoint-up(sm) {\n    .fixed-top,\n    .sticky-top {\n      margin: -1.5rem -1.5rem 1rem;\n    }\n    .fixed-bottom {\n      margin: 1rem -1.5rem -1.5rem;\n    }\n  }\n}\n\n// Pagination\n.bd-example .pagination {\n  margin-top: .5rem;\n  margin-bottom: .5rem;\n}\n\n// Example modals\n.modal {\n  z-index: 1072;\n\n  .tooltip,\n  .popover {\n    z-index: 1073;\n  }\n}\n\n.modal-backdrop {\n  z-index: 1071;\n}\n\n.bd-example-modal {\n  background-color: #fafafa;\n\n  .modal {\n    position: relative;\n    top: auto;\n    right: auto;\n    bottom: auto;\n    left: auto;\n    z-index: 1;\n    display: block;\n  }\n\n  .modal-dialog {\n    left: auto;\n    margin-right: auto;\n    margin-left: auto;\n  }\n}\n\n// Example tabbable tabs\n.bd-example-tabs .nav-tabs {\n  margin-bottom: 1rem;\n}\n\n// Popovers\n.bd-example-popover-static {\n  padding-bottom: 1.5rem;\n  background-color: #f9f9f9;\n\n  .popover {\n    position: relative;\n    display: block;\n    float: left;\n    width: 260px;\n    margin: 1.25rem;\n  }\n}\n\n// Tooltips\n.tooltip-demo a {\n  white-space: nowrap;\n}\n\n.bd-example-tooltip-static .tooltip {\n  position: relative;\n  display: inline-block;\n  margin: 10px 20px;\n  opacity: 1;\n}\n\n// Scrollspy demo on fixed height div\n.scrollspy-example {\n  position: relative;\n  height: 200px;\n  margin-top: .5rem;\n  overflow: auto;\n}\n\n.scrollspy-example-2 {\n  position: relative;\n  height: 350px;\n  overflow: auto;\n}\n\n.bd-example-border-utils {\n  [class^=\"border\"] {\n    display: inline-block;\n    width: 5rem;\n    height: 5rem;\n    margin: .25rem;\n    background-color: #f5f5f5;\n  }\n}\n\n.bd-example-border-utils-0 {\n  [class^=\"border\"] {\n    border: 1px solid $border-color;\n  }\n}\n\n.bd-example-forms-input-group-workaround .fix-rounded-right {\n  @include border-right-radius(.2rem !important);\n}\n\n//\n// Code snippets\n//\n\n.highlight {\n  padding: 1rem;\n  margin-top: 1rem;\n  margin-bottom: 1rem;\n  background-color: $gray-100;\n  -ms-overflow-style: -ms-autohiding-scrollbar;\n\n  @include media-breakpoint-up(sm) {\n    padding: 1.5rem;\n  }\n}\n\n.bd-content .highlight {\n  margin-right: (-$grid-gutter-width / 2);\n  margin-left: (-$grid-gutter-width / 2);\n\n  @include media-breakpoint-up(sm) {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n\n.highlight {\n  pre {\n    padding: 0;\n    margin-top: .65rem;\n    margin-bottom: .65rem;\n    background-color: transparent;\n    border: 0;\n  }\n  pre code {\n    @include font-size(inherit);\n    color: $gray-900; // Effectively the base text color\n  }\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container($gutter: $grid-gutter-width) {\n  width: 100%;\n  padding-right: $gutter / 2;\n  padding-left: $gutter / 2;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@mixin make-row($gutter: $grid-gutter-width) {\n  display: flex;\n  flex-wrap: wrap;\n  margin-right: -$gutter / 2;\n  margin-left: -$gutter / 2;\n}\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n  @each $breakpoint, $container-max-width in $max-widths {\n    @include media-breakpoint-up($breakpoint, $breakpoints) {\n      max-width: $container-max-width;\n    }\n  }\n  @include deprecate(\"The `make-container-max-widths` mixin\", \"v4.5.2\", \"v5\");\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n  position: relative;\n  // Prevent columns from becoming too narrow when at smaller grid tiers by\n  // always setting `width: 100%;`. This works because we use `flex` values\n  // later on to override this initial width.\n  width: 100%;\n  padding-right: $gutter / 2;\n  padding-left: $gutter / 2;\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n  flex: 0 0 percentage($size / $columns);\n  // Add a `max-width` to ensure content within each column does not blow out\n  // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n  // do not appear to require this.\n  max-width: percentage($size / $columns);\n}\n\n@mixin make-col-auto() {\n  flex: 0 0 auto;\n  width: auto;\n  max-width: 100%; // Reset earlier grid tiers\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n  $num: $size / $columns;\n  margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// numberof columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n  > * {\n    flex: 0 0 100% / $count;\n    max-width: 100% / $count;\n  }\n}\n","@mixin clearfix() {\n  &::after {\n    display: block;\n    clear: both;\n    content: \"\";\n  }\n}\n","// Buttons\n//\n// Custom buttons for the docs.\n\n.btn-bd-primary {\n  font-weight: 600;\n  color: $white;\n  background-color: $bd-purple-bright;\n  border-color: $bd-purple-bright;\n\n  &:hover,\n  &:active {\n    color: $white;\n    background-color: darken($bd-purple-bright, 10%);\n    border-color: darken($bd-purple-bright, 10%);\n  }\n\n  &:focus {\n    box-shadow: 0 0 0 3px rgba($bd-purple-bright, .25);\n  }\n}\n\n.btn-bd-download {\n  font-weight: 600;\n  color: $bd-download;\n  border-color: $bd-download;\n\n  &:hover,\n  &:active {\n    color: $bd-dark;\n    background-color: $bd-download;\n    border-color: $bd-download;\n  }\n\n  &:focus {\n    box-shadow: 0 0 0 3px rgba($bd-download, .25);\n  }\n}\n\n.btn-bd-light {\n  color: $gray-600;\n  border-color: $gray-300;\n\n  .show > &,\n  &:hover,\n  &:active {\n    color: $bd-purple-bright;\n    background-color: $white;\n    border-color: $bd-purple-bright;\n  }\n\n  &:focus {\n    box-shadow: 0 0 0 3px rgba($bd-purple-bright, .25);\n  }\n}\n","//\n// Callouts\n//\n\n.bd-callout {\n  padding: 1.25rem;\n  margin-top: 1.25rem;\n  margin-bottom: 1.25rem;\n  border: 1px solid #eee;\n  border-left-width: .25rem;\n  @include border-radius();\n\n  h4 {\n    margin-top: 0;\n    margin-bottom: .25rem;\n  }\n\n  p:last-child {\n    margin-bottom: 0;\n  }\n\n  code {\n    @include border-radius();\n  }\n\n  + .bd-callout {\n    margin-top: -.25rem;\n  }\n}\n\n// Variations\n@mixin bs-callout-variant($color) {\n  border-left-color: $color;\n\n  h4 { color: $color; }\n}\n\n.bd-callout-info { @include bs-callout-variant($bd-info); }\n.bd-callout-warning { @include bs-callout-variant($bd-warning); }\n.bd-callout-danger { @include bs-callout-variant($bd-danger); }\n","// Wall of Browser Bugs\n//\n// Better display for the responsive table on the Wall of Browser Bugs.\n\n.bd-browser-bugs {\n  td p {\n    margin-bottom: 0;\n  }\n  th:first-child {\n    width: 18%;\n  }\n}\n","//\n// Brand guidelines\n//\n\n// Logo series wrapper\n.bd-brand-logos {\n  display: table;\n  width: 100%;\n  margin-bottom: 1rem;\n  overflow: hidden;\n  color: $bd-purple;\n  background-color: #f9f9f9;\n  @include border-radius();\n\n  .inverse {\n    color: $white;\n    background-color: $bd-purple;\n  }\n}\n\n// Individual items\n.bd-brand-item {\n  padding: 4rem 0;\n  text-align: center;\n\n  + .bd-brand-item {\n    border-top: 1px solid $white;\n  }\n\n  // Heading content within\n  h1,\n  h3 {\n    margin-top: 0;\n    margin-bottom: 0;\n  }\n\n  @include media-breakpoint-up(md) {\n    display: table-cell;\n    width: 1%;\n\n    + .bd-brand-item {\n      border-top: 0;\n      border-left: 1px solid $white;\n    }\n\n    h1 {\n      @include font-size(4rem);\n    }\n  }\n}\n\n\n//\n// Color swatches\n//\n\n.color-swatches {\n  margin: 0 -5px;\n  overflow: hidden; // clearfix\n\n  // Docs colors\n  .bd-purple {\n    background-color: $bd-purple;\n  }\n  .bd-purple-light {\n    background-color: $bd-purple-light;\n  }\n  .bd-purple-lighter {\n    background-color: #e5e1ea;\n  }\n  .bd-gray {\n    background-color: #f9f9f9;\n  }\n}\n\n.color-swatch {\n  float: left;\n  width: 4rem;\n  height: 4rem;\n  margin-right: .25rem;\n  margin-left: .25rem;\n  @include border-radius();\n\n  @include media-breakpoint-up(md) {\n    width: 6rem;\n    height: 6rem;\n  }\n}\n","//\n// Docs color palette classes\n//\n\n@each $color, $value in $colors {\n  .swatch-#{$color} {\n    color: color-yiq($value);\n    background-color: #{$value};\n  }\n}\n\n@each $color, $value in $grays {\n  .swatch-#{$color} {\n    color: color-yiq($value);\n    background-color: #{$value};\n  }\n}\n","// clipboard.js\n//\n// JS-based `Copy` buttons for code snippets.\n\n.bd-clipboard {\n  position: relative;\n  display: none;\n  float: right;\n\n  + .highlight {\n    margin-top: 0;\n  }\n\n  @include media-breakpoint-up(md) {\n    display: block;\n  }\n}\n\n.btn-clipboard {\n  position: absolute;\n  top: .65rem;\n  right: .65rem;\n  z-index: 10;\n  display: block;\n  padding: .25rem .5rem;\n  @include font-size(65%);\n  color: $primary;\n  background-color: $white;\n  border: 1px solid;\n  @include border-radius();\n\n  &:hover {\n    color: $white;\n    background-color: $primary;\n  }\n}\n","//\n// Placeholder svg used in the docs.\n//\n\n// Remember to update `site/_layouts/examples.html` too if this changes!\n\n.bd-placeholder-img {\n  @include font-size(1.125rem);\n  text-anchor: middle;\n  user-select: none;\n}\n\n.bd-placeholder-img-lg {\n  @include font-size(3.5rem);\n}\n","// stylelint-disable declaration-block-single-line-max-declarations, selector-class-pattern\n\n.hll { background-color: #ffc; }\n.c { color: #727272; }\n.k { color: #069; }\n.o { color: #555; }\n.cm { color: #727272; }\n.cp { color: #008085; }\n.c1 { color: #727272; }\n.cs { color: #727272; }\n.gd { background-color: #fcc; border: 1px solid #c00; }\n.ge { font-style: italic; }\n.gr { color: #f00; }\n.gh { color: #030; }\n.gi { background-color: #cfc; border: 1px solid #0c0; }\n.go { color: #aaa; }\n.gp { color: #009; }\n.gu { color: #030; }\n.gt { color: #9c6; }\n.kc { color: #069; }\n.kd { color: #069; }\n.kn { color: #069; }\n.kp { color: #069; }\n.kr { color: #069; }\n.kt { color: #078; }\n.m { color: #c24f19; }\n.s { color: #d73038; }\n.na { color: #006ee0; }\n.nb { color: #366; }\n.nc { color: #168174; }\n.no { color: #360; }\n.nd { color: #6b62de; }\n.ni { color: #727272; }\n.ne { color: #c00; }\n.nf { color: #b715f4; }\n.nl { color: #6b62de; }\n.nn { color: #007ca5; }\n.nt { color: #2f6f9f; }\n.nv { color: #033; }\n.ow { color: #000; }\n.w { color: #bbb; }\n.mf { color: #c24f19; }\n.mh { color: #c24f19; }\n.mi { color: #c24f19; }\n.mo { color: #c24f19; }\n.sb { color: #c30; }\n.sc { color: #c30; }\n.sd { font-style: italic; color: #c30; }\n.s2 { color: #c30; }\n.se { color: #c30; }\n.sh { color: #c30; }\n.si { color: #a00; }\n.sx { color: #c30; }\n.sr { color: #337e7e; }\n.s1 { color: #c30; }\n.ss { color: #fc3; }\n.bp { color: #366; }\n.vc { color: #033; }\n.vg { color: #033; }\n.vi { color: #033; }\n.il { color: #c24f19; }\n\n.css .o,\n.css .o + .nt,\n.css .nt + .nt { color: #727272; }\n\n.language-bash::before,\n.language-sh::before {\n  color: #009;\n  content: \"$ \";\n  user-select: none;\n}\n\n.language-powershell::before {\n  color: #009;\n  content: \"PM> \";\n  user-select: none;\n}\n",".anchorjs-link {\n  font-weight: 400;\n  color: rgba($link-color, .5);\n  @include transition(color .15s ease-in-out, opacity .15s ease-in-out);\n\n  &:hover {\n    color: $link-color;\n    text-decoration: none;\n  }\n}\n","// stylelint-disable property-disallowed-list\n@mixin transition($transition...) {\n  @if length($transition) == 0 {\n    $transition: $transition-base;\n  }\n\n  @if length($transition) > 1 {\n    @each $value in $transition {\n      @if $value == null or $value == none {\n        @warn \"The keyword 'none' or 'null' must be used as a single argument.\";\n      }\n    }\n  }\n\n  @if $enable-transitions {\n    @if nth($transition, 1) != null {\n      transition: $transition;\n    }\n\n    @if $enable-prefers-reduced-motion-media-query and nth($transition, 1) != null and nth($transition, 1) != none {\n      @media (prefers-reduced-motion: reduce) {\n        transition: none;\n      }\n    }\n  }\n}\n","// stylelint-disable declaration-no-important\n\n// Docsearch overrides\n//\n// `!important` indicates overridden properties.\n.algolia-autocomplete {\n  display: block !important;\n  flex: 1;\n\n  // Menu container\n  .ds-dropdown-menu {\n    width: 100%;\n    min-width: 0 !important;\n    max-width: none !important;\n    padding: .75rem 0 !important;\n    background-color: $white;\n    background-clip: padding-box;\n    border: 1px solid rgba(0, 0, 0, .1);\n    box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .175);\n\n    @include media-breakpoint-up(md) {\n      width: 175%;\n    }\n\n    // Caret\n    &::before {\n      display: none !important;\n    }\n\n    [class^=\"ds-dataset-\"] {\n      padding: 0 !important;\n      overflow: visible !important;\n      background-color: transparent !important;\n      border: 0 !important;\n    }\n\n    .ds-suggestions {\n      margin-top: 0 !important;\n    }\n  }\n\n  .algolia-docsearch-suggestion {\n    padding: 0 !important;\n    overflow: visible !important;\n  }\n\n  .algolia-docsearch-suggestion--category-header {\n    padding: .125rem 1rem !important;\n    margin-top: 0 !important;\n    @include font-size(.875rem, true);\n    font-weight: 600 !important;\n    color: $bd-purple-bright !important;\n    border-bottom: 0 !important;\n  }\n\n  .algolia-docsearch-suggestion--wrapper {\n    float: none !important;\n    padding-top: 0 !important;\n  }\n\n  // Section header\n  .algolia-docsearch-suggestion--subcategory-column {\n    float: none !important;\n    width: auto !important;\n    padding: 0 !important;\n    text-align: left !important;\n  }\n\n  .algolia-docsearch-suggestion--subcategory-inline {\n    display: block !important;\n    @include font-size(.875rem);\n    color: $gray-700;\n\n    &::after {\n      padding: 0 .25rem;\n      content: \"/\";\n    }\n  }\n\n  .algolia-docsearch-suggestion--content {\n    display: flex;\n    flex-wrap: wrap;\n    float: none !important;\n    width: 100% !important;\n    padding: .25rem 1rem !important;\n\n    // Vertical divider between column header and content\n    &::before {\n      display: none !important;\n    }\n  }\n\n  .ds-suggestion {\n    &:not(:first-child) {\n      .algolia-docsearch-suggestion--category-header {\n        padding-top: .75rem !important;\n        margin-top: .75rem !important;\n        border-top: 1px solid rgba(0, 0, 0, .1);\n      }\n    }\n\n    .algolia-docsearch-suggestion--subcategory-column {\n      display: none !important;\n    }\n  }\n\n  .algolia-docsearch-suggestion--title {\n    display: block;\n    margin-bottom: 0 !important;\n    @include font-size(.875rem, true);\n    font-weight: 400 !important;\n  }\n\n  .algolia-docsearch-suggestion--text {\n    flex: 0 0 100%;\n    max-width: 100%;\n    padding: .2rem 0;\n    @include font-size(.8125rem, true);\n    font-weight: 400;\n    line-height: 1.25 !important;\n    color: $gray-600;\n  }\n\n  .algolia-docsearch-footer {\n    float: none !important;\n    width: auto !important;\n    height: auto !important;\n    padding: .75rem 1rem 0;\n    @include font-size(.75rem, true);\n    line-height: 1 !important;\n    color: #767676 !important;\n    border-top: 1px solid rgba(0, 0, 0, .1);\n  }\n\n  .algolia-docsearch-footer--logo {\n    display: inline !important;\n    overflow: visible !important;\n    color: inherit !important;\n    text-indent: 0 !important;\n    background: none !important;\n  }\n\n  .algolia-docsearch-suggestion--highlight {\n    color: #5f2dab;\n    background-color: rgba(154, 132, 187, .12);\n  }\n\n  .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight {\n    box-shadow: inset 0 -2px 0 0 rgba(95, 45, 171, .5) !important;\n  }\n\n  .ds-suggestion.ds-cursor .algolia-docsearch-suggestion--content {\n    background-color: rgba(208, 189, 236, .15) !important;\n  }\n}\n"]}
\ No newline at end of file
diff --git a/site/docs/4.5/assets/js/docs.min.js b/site/docs/4.5/assets/js/docs.min.js
deleted file mode 100644 (file)
index 2d5d79d..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-!function(t,e){"use strict";"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():(t.AnchorJS=e(),t.anchors=new t.AnchorJS)}(this,(function(){"use strict";return function(t){function e(t){t.icon=t.hasOwnProperty("icon")?t.icon:"",t.visible=t.hasOwnProperty("visible")?t.visible:"hover",t.placement=t.hasOwnProperty("placement")?t.placement:"right",t.ariaLabel=t.hasOwnProperty("ariaLabel")?t.ariaLabel:"Anchor",t.class=t.hasOwnProperty("class")?t.class:"",t.base=t.hasOwnProperty("base")?t.base:"",t.truncate=t.hasOwnProperty("truncate")?Math.floor(t.truncate):64,t.titleText=t.hasOwnProperty("titleText")?t.titleText:""}function n(t){var e;if("string"==typeof t||t instanceof String)e=[].slice.call(document.querySelectorAll(t));else{if(!(Array.isArray(t)||t instanceof NodeList))throw new Error("The selector provided to AnchorJS was invalid.");e=[].slice.call(t)}return e}this.options=t||{},this.elements=[],e(this.options),this.isTouchDevice=function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)},this.add=function(t){var o,i,r,A,a,l,s,c,u,f,h,d,p=[];if(e(this.options),"touch"===(h=this.options.visible)&&(h=this.isTouchDevice()?"always":"hover"),0===(o=n(t=t||"h2, h3, h4, h5, h6")).length)return this;for(!function(){if(null!==document.head.querySelector("style.anchorjs"))return;var t,e=document.createElement("style");e.className="anchorjs",e.appendChild(document.createTextNode("")),void 0===(t=document.head.querySelector('[rel="stylesheet"], style'))?document.head.appendChild(e):document.head.insertBefore(e,t);e.sheet.insertRule(" .anchorjs-link {   opacity: 0;   text-decoration: none;   -webkit-font-smoothing: antialiased;   -moz-osx-font-smoothing: grayscale; }",e.sheet.cssRules.length),e.sheet.insertRule(" *:hover > .anchorjs-link, .anchorjs-link:focus  {   opacity: 1; }",e.sheet.cssRules.length),e.sheet.insertRule(" [data-anchorjs-icon]::after {   content: attr(data-anchorjs-icon); }",e.sheet.cssRules.length),e.sheet.insertRule(' @font-face {   font-family: "anchorjs-icons";   src: url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype"); }',e.sheet.cssRules.length)}(),i=document.querySelectorAll("[id]"),r=[].map.call(i,(function(t){return t.id})),a=0;a<o.length;a++)if(this.hasAnchorJSLink(o[a]))p.push(a);else{if(o[a].hasAttribute("id"))A=o[a].getAttribute("id");else if(o[a].hasAttribute("data-anchor-id"))A=o[a].getAttribute("data-anchor-id");else{for(u=c=this.urlify(o[a].textContent),s=0;void 0!==l&&(u=c+"-"+s),s+=1,-1!==(l=r.indexOf(u)););l=void 0,r.push(u),o[a].setAttribute("id",u),A=u}(f=document.createElement("a")).className="anchorjs-link "+this.options.class,f.setAttribute("aria-label",this.options.ariaLabel),f.setAttribute("data-anchorjs-icon",this.options.icon),this.options.titleText&&(f.title=this.options.titleText),d=document.querySelector("base")?window.location.pathname+window.location.search:"",d=this.options.base||d,f.href=d+"#"+A,"always"===h&&(f.style.opacity="1"),""===this.options.icon&&(f.style.font="1em/1 anchorjs-icons","left"===this.options.placement&&(f.style.lineHeight="inherit")),"left"===this.options.placement?(f.style.position="absolute",f.style.marginLeft="-1em",f.style.paddingRight="0.5em",o[a].insertBefore(f,o[a].firstChild)):(f.style.paddingLeft="0.375em",o[a].appendChild(f))}for(a=0;a<p.length;a++)o.splice(p[a]-a,1);return this.elements=this.elements.concat(o),this},this.remove=function(t){for(var e,o,i=n(t),r=0;r<i.length;r++)(o=i[r].querySelector(".anchorjs-link"))&&(-1!==(e=this.elements.indexOf(i[r]))&&this.elements.splice(e,1),i[r].removeChild(o));return this},this.removeAll=function(){this.remove(this.elements)},this.urlify=function(t){return this.options.truncate||e(this.options),t.trim().replace(/\'/gi,"").replace(/[& +$,:;=?@"#{}|^~[`%!'<>\]\.\/\(\)\*\\\n\t\b\v]/g,"-").replace(/-{2,}/g,"-").substring(0,this.options.truncate).replace(/^-+|-+$/gm,"").toLowerCase()},this.hasAnchorJSLink=function(t){var e=t.firstChild&&-1<(" "+t.firstChild.className+" ").indexOf(" anchorjs-link "),n=t.lastChild&&-1<(" "+t.lastChild.className+" ").indexOf(" anchorjs-link ");return e||n||!1}}}));
-/*!
- * clipboard.js v2.0.6
- * https://clipboardjs.com/
- * 
- * Licensed MIT © Zeno Rocha
- */
-!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,(function(){return n={},t.m=e=[function(t,e){t.exports=function(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var o=window.getSelection(),i=document.createRange();i.selectNodeContents(t),o.removeAllRanges(),o.addRange(i),e=o.toString()}return e}},function(t,e){function n(){}n.prototype={on:function(t,e,n){var o=this.e||(this.e={});return(o[t]||(o[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){var o=this;function i(){o.off(t,i),e.apply(n,arguments)}return i._=e,this.on(t,i,n)},emit:function(t){for(var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),o=0,i=n.length;o<i;o++)n[o].fn.apply(n[o].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),o=n[t],i=[];if(o&&e)for(var r=0,A=o.length;r<A;r++)o[r].fn!==e&&o[r].fn._!==e&&i.push(o[r]);return i.length?n[t]=i:delete n[t],this}},t.exports=n,t.exports.TinyEmitter=n},function(t,e,n){var o=n(3),i=n(4);t.exports=function(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!o.string(e))throw new TypeError("Second argument must be a String");if(!o.fn(n))throw new TypeError("Third argument must be a Function");if(o.node(t))return f=e,h=n,(u=t).addEventListener(f,h),{destroy:function(){u.removeEventListener(f,h)}};if(o.nodeList(t))return l=t,s=e,c=n,Array.prototype.forEach.call(l,(function(t){t.addEventListener(s,c)})),{destroy:function(){Array.prototype.forEach.call(l,(function(t){t.removeEventListener(s,c)}))}};if(o.string(t))return r=t,A=e,a=n,i(document.body,r,A,a);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList");var r,A,a,l,s,c,u,f,h}},function(t,e){e.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},e.nodeList=function(t){var n=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===n||"[object HTMLCollection]"===n)&&"length"in t&&(0===t.length||e.node(t[0]))},e.string=function(t){return"string"==typeof t||t instanceof String},e.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},function(t,e,n){var o=n(5);function i(t,e,n,i,r){var A=function(t,e,n,i){return function(n){n.delegateTarget=o(n.target,e),n.delegateTarget&&i.call(t,n)}}.apply(this,arguments);return t.addEventListener(n,A,r),{destroy:function(){t.removeEventListener(n,A,r)}}}t.exports=function(t,e,n,o,r){return"function"==typeof t.addEventListener?i.apply(null,arguments):"function"==typeof n?i.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,(function(t){return i(t,e,n,o,r)})))}},function(t,e){if("undefined"!=typeof Element&&!Element.prototype.matches){var n=Element.prototype;n.matches=n.matchesSelector||n.mozMatchesSelector||n.msMatchesSelector||n.oMatchesSelector||n.webkitMatchesSelector}t.exports=function(t,e){for(;t&&9!==t.nodeType;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}},function(t,e,n){"use strict";n.r(e);var o=n(0),i=n.n(o),r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};function A(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}function a(t){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,a),this.resolveOptions(t),this.initSelection()}var l=(function(t,e,n){return e&&A(t.prototype,e),n&&A(t,n),t}(a,[{key:"resolveOptions",value:function(t){var e=0<arguments.length&&void 0!==t?t:{};this.action=e.action,this.container=e.container,this.emitter=e.emitter,this.target=e.target,this.text=e.text,this.trigger=e.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=i()(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=i()(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),document.activeElement.blur(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(t){var e=0<arguments.length&&void 0!==t?t:"copy";if(this._action=e,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":r(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),a),s=n(1),c=n.n(s),u=n(2),f=n.n(u),h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},d=function(t,e,n){return e&&p(t.prototype,e),n&&p(t,n),t};function p(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}var y=(function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(m,c.a),d(m,[{key:"resolveOptions",value:function(t){var e=0<arguments.length&&void 0!==t?t:{};this.action="function"==typeof e.action?e.action:this.defaultAction,this.target="function"==typeof e.target?e.target:this.defaultTarget,this.text="function"==typeof e.text?e.text:this.defaultText,this.container="object"===h(e.container)?e.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=f()(t,"click",(function(t){return e.onClick(t)}))}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new l({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return v("action",t)}},{key:"defaultTarget",value:function(t){var e=v("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return v("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(t){var e=0<arguments.length&&void 0!==t?t:["copy","cut"],n="string"==typeof e?[e]:e,o=!!document.queryCommandSupported;return n.forEach((function(t){o=o&&!!document.queryCommandSupported(t)})),o}}]),m);function m(t,e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,m);var n=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,(m.__proto__||Object.getPrototypeOf(m)).call(this));return n.resolveOptions(e),n.listenClick(t),n}function v(t,e){var n="data-clipboard-"+t;if(e.hasAttribute(n))return e.getAttribute(n)}e.default=y}],t.c=n,t.d=function(e,n,o){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:o})},t.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(t.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var i in e)t.d(o,i,function(t){return e[t]}.bind(null,i));return o},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},t.p="",t(t.s=6).default;function t(o){if(n[o])return n[o].exports;var i=n[o]={i:o,l:!1,exports:{}};return e[o].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var e,n}));
-/*!
- * bsCustomFileInput v1.3.4 (https://github.com/Johann-S/bs-custom-file-input)
- * Copyright 2018 - 2020 Johann-S <johann.servoire@gmail.com>
- * Licensed under MIT (https://github.com/Johann-S/bs-custom-file-input/blob/master/LICENSE)
- */
-!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).bsCustomFileInput=e()}(this,(function(){"use strict";var t={CUSTOMFILE:'.custom-file input[type="file"]',CUSTOMFILELABEL:".custom-file-label",FORM:"form",INPUT:"input"},e=function(t){if(0<t.childNodes.length)for(var e=[].slice.call(t.childNodes),n=0;n<e.length;n++){var o=e[n];if(3!==o.nodeType)return o}return t},n=function(n){var o=n.bsCustomFileInput.defaultText,i=n.parentNode.querySelector(t.CUSTOMFILELABEL);i&&(e(i).textContent=o)},o=!!window.File,i=function(t){if(t.hasAttribute("multiple")&&o)return[].slice.call(t.files).map((function(t){return t.name})).join(", ");if(-1===t.value.indexOf("fakepath"))return t.value;var e=t.value.split("\\");return e[e.length-1]};function r(){var o=this.parentNode.querySelector(t.CUSTOMFILELABEL);if(o){var r=e(o),A=i(this);A.length?r.textContent=A:n(this)}}function A(){for(var e=[].slice.call(this.querySelectorAll(t.INPUT)).filter((function(t){return!!t.bsCustomFileInput})),o=0,i=e.length;o<i;o++)n(e[o])}var a="bsCustomFileInput",l="reset",s="change";return{init:function(e,n){void 0===e&&(e=t.CUSTOMFILE),void 0===n&&(n=t.FORM);for(var o,i,c=[].slice.call(document.querySelectorAll(e)),u=[].slice.call(document.querySelectorAll(n)),f=0,h=c.length;f<h;f++){var d=c[f];Object.defineProperty(d,a,{value:{defaultText:(o=void 0,o="",(i=d.parentNode.querySelector(t.CUSTOMFILELABEL))&&(o=i.textContent),o)},writable:!0}),r.call(d),d.addEventListener(s,r)}for(var p=0,y=u.length;p<y;p++)u[p].addEventListener(l,A),Object.defineProperty(u[p],a,{value:!0,writable:!0})},destroy:function(){for(var e=[].slice.call(document.querySelectorAll(t.FORM)).filter((function(t){return!!t.bsCustomFileInput})),o=[].slice.call(document.querySelectorAll(t.INPUT)).filter((function(t){return!!t.bsCustomFileInput})),i=0,c=o.length;i<c;i++){var u=o[i];n(u),u[a]=void 0,u.removeEventListener(s,r)}for(var f=0,h=e.length;f<h;f++)e[f].removeEventListener(l,A),e[f][a]=void 0}}}));
-/*!
- * JavaScript for Bootstrap's docs (https://getbootstrap.com/)
- * Copyright 2011-2020 The Bootstrap Authors
- * Copyright 2011-2020 Twitter, Inc.
- * Licensed under the Creative Commons Attribution 3.0 Unported License.
- * For details, see https://creativecommons.org/licenses/by/3.0/.
- */
-(function(t){"use strict";t((function(){t(".tooltip-demo").tooltip({selector:'[data-toggle="tooltip"]',container:"body"});t('[data-toggle="popover"]').popover();t(".toast").toast({autohide:false}).toast("show");t(".tooltip-test").tooltip();t(".popover-test").popover();t('.bd-example-indeterminate [type="checkbox"]').prop("indeterminate",true);t('.bd-content [href="#"]').click((function(t){t.preventDefault()}));t("#exampleModal").on("show.bs.modal",(function(e){var n=t(e.relatedTarget);var o=n.data("whatever");var i=t(this);i.find(".modal-title").text("New message to "+o);i.find(".modal-body input").val(o)}));t(".bd-toggle-animated-progress").on("click",(function(){t(this).siblings(".progress").find(".progress-bar-striped").toggleClass("progress-bar-animated")}));t("figure.highlight, div.highlight").each((function(){var e='<div class="bd-clipboard"><button type="button" class="btn-clipboard" title="Copy to clipboard">Copy</button></div>';t(this).before(e);t(".btn-clipboard").tooltip().on("mouseleave",(function(){t(this).tooltip("hide")}))}));var e=new ClipboardJS(".btn-clipboard",{target:function(t){return t.parentNode.nextElementSibling}});e.on("success",(function(e){t(e.trigger).attr("title","Copied!").tooltip("_fixTitle").tooltip("show").attr("title","Copy to clipboard").tooltip("_fixTitle");e.clearSelection()}));e.on("error",(function(e){var n=/mac/i.test(navigator.userAgent)?"⌘":"Ctrl-";var o="Press "+n+"C to copy";t(e.trigger).attr("title",o).tooltip("_fixTitle").tooltip("show").attr("title","Copy to clipboard").tooltip("_fixTitle")}));anchors.options={icon:"#"};anchors.add(".bd-content > h2, .bd-content > h3, .bd-content > h4, .bd-content > h5");t(".bd-content").children("h2, h3, h4, h5").wrapInner('<span class="bd-content-title"></span>');bsCustomFileInput.init()}))})(jQuery);(function(){"use strict";function t(){var t=/MSIE ([\d.]+)/.exec(window.navigator.userAgent);if(t===null){return null}var e=parseInt(t[1],10);var n=Math.floor(e);return n}function e(){var t=new Function("/*@cc_on return @_jscript_version; @*/")();if(typeof t==="undefined"){return 11}if(t<9){return 8}return t}var n=window.navigator.userAgent;if(n.indexOf("Opera")>-1||n.indexOf("Presto")>-1){return}var o=t();if(o===null){return}var i=e();if(o!==i){window.alert("WARNING: You appear to be using IE"+i+" in IE"+o+" emulation mode.\nIE emulation modes can behave significantly differently from ACTUAL older versions of IE.\nPLEASE DON'T FILE BOOTSTRAP BUGS based on testing in IE emulation modes!")}})();(function(){"use strict";if(!window.docsearch){return}var t=document.getElementById("search-input");var e=t.getAttribute("data-docs-version");function n(){var t=window.location;var e=t.origin;if(!e){var n=t.port?":"+t.port:"";e=t.protocol+"//"+t.hostname+n}return e}window.docsearch({apiKey:"5990ad008512000bba2cf951ccf0332f",indexName:"bootstrap",inputSelector:"#search-input",algoliaOptions:{facetFilters:["version:"+e]},transformData:function(t){return t.map((function(t){var e=n();var o="https://getbootstrap.com/";t.url=e.lastIndexOf(o,0)===0?t.url:t.url.replace(o,"/");if(t.anchor==="content"){t.url=t.url.replace(/#content$/,"");t.anchor=null}return t}))},debug:false})})();
\ No newline at end of file
diff --git a/site/docs/4.5/assets/scss/_syntax.scss b/site/docs/4.5/assets/scss/_syntax.scss
deleted file mode 100644 (file)
index 363ff07..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-// stylelint-disable declaration-block-single-line-max-declarations, selector-class-pattern
-
-.hll { background-color: #ffc; }
-.c { color: #727272; }
-.k { color: #069; }
-.o { color: #555; }
-.cm { color: #727272; }
-.cp { color: #008085; }
-.c1 { color: #727272; }
-.cs { color: #727272; }
-.gd { background-color: #fcc; border: 1px solid #c00; }
-.ge { font-style: italic; }
-.gr { color: #f00; }
-.gh { color: #030; }
-.gi { background-color: #cfc; border: 1px solid #0c0; }
-.go { color: #aaa; }
-.gp { color: #009; }
-.gu { color: #030; }
-.gt { color: #9c6; }
-.kc { color: #069; }
-.kd { color: #069; }
-.kn { color: #069; }
-.kp { color: #069; }
-.kr { color: #069; }
-.kt { color: #078; }
-.m { color: #c24f19; }
-.s { color: #d73038; }
-.na { color: #006ee0; }
-.nb { color: #366; }
-.nc { color: #168174; }
-.no { color: #360; }
-.nd { color: #6b62de; }
-.ni { color: #727272; }
-.ne { color: #c00; }
-.nf { color: #b715f4; }
-.nl { color: #6b62de; }
-.nn { color: #007ca5; }
-.nt { color: #2f6f9f; }
-.nv { color: #033; }
-.ow { color: #000; }
-.w { color: #bbb; }
-.mf { color: #c24f19; }
-.mh { color: #c24f19; }
-.mi { color: #c24f19; }
-.mo { color: #c24f19; }
-.sb { color: #c30; }
-.sc { color: #c30; }
-.sd { font-style: italic; color: #c30; }
-.s2 { color: #c30; }
-.se { color: #c30; }
-.sh { color: #c30; }
-.si { color: #a00; }
-.sx { color: #c30; }
-.sr { color: #337e7e; }
-.s1 { color: #c30; }
-.ss { color: #fc3; }
-.bp { color: #366; }
-.vc { color: #033; }
-.vg { color: #033; }
-.vi { color: #033; }
-.il { color: #c24f19; }
-
-.css .o,
-.css .o + .nt,
-.css .nt + .nt { color: #727272; }
-
-.language-bash::before,
-.language-sh::before {
-  color: #009;
-  content: "$ ";
-  user-select: none;
-}
-
-.language-powershell::before {
-  color: #009;
-  content: "PM> ";
-  user-select: none;
-}
diff --git a/site/docs/4.5/examples/index.html b/site/docs/4.5/examples/index.html
deleted file mode 100644 (file)
index 6ac9a67..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
----
-layout: simple
-title: Examples
-description: Quickly get a project started with any of our examples ranging from using parts of the framework to custom components and layouts.
-redirect_from: "/examples/"
----
-
-{% for entry in site.data.examples %}
-  <h2>{{ entry.category | capitalize }}</h2>
-  <p>{{ entry.description }}</p>
-  {% for example in entry.examples %}
-    {% if forloop.first %}<div class="row">{% endif %}
-      <div class="col-sm-6 col-md-4 col-xl-3 mb-3">
-        <a href="{{ site.baseurl }}/docs/{{ site.docs_version }}/examples/{{ example.name | slugify }}/">
-          <img class="img-thumbnail mb-3" srcset="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/examples/{{ example.name | slugify }}.png,
-                                                  {{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/examples/{{ example.name | slugify }}@2x.png 2x"
-                                          src="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/examples/{{ example.name | slugify }}.png"
-                                          alt="{{ example.name }} screenshot" width="480" height="300" loading="lazy">
-          <h5 class="mb-1">{{ example.name }}</h5>
-        </a>
-        <p class="text-muted">{{ example.description }}</p>
-      </div>
-    {% if forloop.last %}</div>{% endif %}
-  {% endfor %}
-{% endfor %}
-
-<hr class="my-5">
-
-<div class="container">
-  <div class="text-center">
-    <div class="masthead-followup-icon d-inline-block mb-2 text-white bg-danger">
-      {% include icons/droplet-fill.svg width="32" height="32" %}
-    </div>
-    <h2>Go further with Bootstrap Themes</h2>
-    <p class="col-md-10 mx-auto lead font-weight-normal">
-      Need something more than these examples? Take Bootstrap to the next level with premium themes from the <a href="{{ site.themes }}">official Bootstrap Themes marketplace</a>. They’re built as their own extended frameworks, rich with new components and plugins, documentation, and powerful build tools.
-    </p>
-    <a href="{{ site.themes }}" class="btn btn-lg btn-outline-primary mb-3">Browse themes</a>
-  </div>
-  <img class="d-block img-fluid mt-3 mx-auto" srcset="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/bootstrap-themes-collage.png,
-                                              {{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/bootstrap-themes-collage@2x.png 2x"
-                                              src="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/bootstrap-themes-collage.png"
-                                              alt="Bootstrap Themes" width="1151" height="320" loading="lazy">
-</div>
diff --git a/site/docs/4.5/layout/utilities-for-layout.md b/site/docs/4.5/layout/utilities-for-layout.md
deleted file mode 100644 (file)
index a62a5ab..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: docs
-title: Utilities for layout
-description: For faster mobile-friendly and responsive development, Bootstrap includes dozens of utility classes for showing, hiding, aligning, and spacing content.
-group: layout
-toc: true
----
-
-## Changing `display`
-
-Use our [display utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/display/) for responsively toggling common values of the `display` property. Mix it with our grid system, content, or components to show or hide them across specific viewports.
-
-## Flexbox options
-
-Bootstrap 4 is built with flexbox, but not every element's `display` has been changed to `display: flex` as this would add many unnecessary overrides and unexpectedly change key browser behaviors. Most of [our components]({{ site.baseurl }}/docs/{{ site.docs_version }}/components/alerts/) are built with flexbox enabled.
-
-Should you need to add `display: flex` to an element, do so with `.d-flex` or one of the responsive variants (e.g., `.d-sm-flex`). You'll need this class or `display` value to allow the use of our extra [flexbox utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/flex/) for sizing, alignment, spacing, and more.
-
-## Margin and padding
-
-Use the `margin` and `padding` [spacing utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/spacing/) to control how elements and components are spaced and sized. Bootstrap 4 includes a five-level scale for spacing utilities, based on a `1rem` value default `$spacer` variable. Choose values for all viewports (e.g., `.mr-3` for `margin-right: 1rem`), or pick responsive variants to target specific viewports (e.g., `.mr-md-3` for `margin-right: 1rem` starting at the `md` breakpoint).
-
-## Toggle `visibility`
-
-When toggling `display` isn't needed, you can toggle the `visibility` of an element with our [visibility utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/visibility/). Invisible elements will still affect the layout of the page, but are visually hidden from visitors.
diff --git a/site/docs/4.5/utilities/borders.md b/site/docs/4.5/utilities/borders.md
deleted file mode 100644 (file)
index 90c9144..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
----
-layout: docs
-title: Borders
-description: Use border utilities to quickly style the border and border-radius of an element. Great for images, buttons, or any other element.
-group: utilities
-redirect_from: "/docs/4.5/utilities/"
-toc: true
----
-
-## Border
-
-Use border utilities to add or remove an element's borders. Choose from all borders or one at a time.
-
-### Additive
-
-<div class="bd-example-border-utils">
-{% capture example %}
-<span class="border"></span>
-<span class="border-top"></span>
-<span class="border-right"></span>
-<span class="border-bottom"></span>
-<span class="border-left"></span>
-{% endcapture %}
-{% include example.html content=example %}
-</div>
-
-### Subtractive
-
-<div class="bd-example-border-utils bd-example-border-utils-0">
-{% capture example %}
-<span class="border-0"></span>
-<span class="border-top-0"></span>
-<span class="border-right-0"></span>
-<span class="border-bottom-0"></span>
-<span class="border-left-0"></span>
-{% endcapture %}
-{% include example.html content=example %}
-</div>
-
-## Border color
-
-Change the border color using utilities built on our theme colors.
-
-<div class="bd-example-border-utils">
-{% capture example %}
-{% for color in site.data.theme-colors %}
-<span class="border border-{{ color.name }}"></span>{% endfor %}
-<span class="border border-white"></span>
-{% endcapture %}
-{% include example.html content=example %}
-</div>
-
-## Border-radius
-
-Add classes to an element to easily round its corners.
-
-<div class="bd-example bd-example-images">
-  {%- include icons/placeholder.svg width="75" height="75" class="rounded" title="Example rounded image" -%}
-  {%- include icons/placeholder.svg width="75" height="75" class="rounded-top" title="Example top rounded image" -%}
-  {%- include icons/placeholder.svg width="75" height="75" class="rounded-right" title="Example right rounded image" -%}
-  {%- include icons/placeholder.svg width="75" height="75" class="rounded-bottom" title="Example bottom rounded image" -%}
-  {%- include icons/placeholder.svg width="75" height="75" class="rounded-left" title="Example left rounded image" -%}
-  {%- include icons/placeholder.svg width="75" height="75" class="rounded-circle" title="Completely round image" -%}
-  {%- include icons/placeholder.svg width="150" height="75" class="rounded-pill" title="Rounded pill image" -%}
-  {%- include icons/placeholder.svg width="75" height="75" class="rounded-0" title="Example non-rounded image (overrides rounding applied elsewhere)" -%}
-</div>
-
-{% highlight html %}
-<img src="..." alt="..." class="rounded">
-<img src="..." alt="..." class="rounded-top">
-<img src="..." alt="..." class="rounded-right">
-<img src="..." alt="..." class="rounded-bottom">
-<img src="..." alt="..." class="rounded-left">
-<img src="..." alt="..." class="rounded-circle">
-<img src="..." alt="..." class="rounded-pill">
-<img src="..." alt="..." class="rounded-0">
-{% endhighlight %}
-
-## Sizes
-
-Use `.rounded-lg` or `.rounded-sm` for larger or smaller border-radius.
-
-<div class="bd-example bd-example-images">
-  {%- include icons/placeholder.svg width="75" height="75" class="rounded-sm" title="Example small rounded image" -%}
-  {%- include icons/placeholder.svg width="75" height="75" class="rounded-lg" title="Example large rounded image" -%}
-</div>
-
-{% highlight html %}
-<img src="..." alt="..." class="rounded-sm">
-<img src="..." alt="..." class="rounded-lg">
-{% endhighlight %}
diff --git a/site/docs/versions.html b/site/docs/versions.html
deleted file mode 100644 (file)
index 085bdb8..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
----
-layout: simple
-title: Versions
-description: An appendix of hosted documentation for nearly every release of Bootstrap, from v1 through v4.
----
-
-<div class="row">
-{% assign releases = site.data.docs-versions | reverse %}
-{% for release in releases %}
-  <div class="col-md-6 col-lg-4 col-xl mb-4">
-    <h2>{{ release.group }}</h2>
-    <p>{{ release.description }}</p>
-    {% assign versions = release.versions | reverse %}
-    {% for version in versions %}
-      {% if forloop.first %}<div class="list-group">{% endif %}
-      {% if version.v == site.docs_version %}
-        <a class="list-group-item list-group-item-action py-2 text-primary d-flex justify-content-between align-items-center" href="{{ release.baseurl }}/{{ version.v }}/">
-          {{ version.v }}
-          <span class="badge badge-primary">Latest</span>
-        </a>
-      {% else %}
-        <a class="list-group-item list-group-item-action py-2 text-primary" href="{{ release.baseurl }}/{{ version.v }}/">
-          {{ version.v }}
-        </a>
-      {% endif %}
-      {% if forloop.last %}</div>{% endif %}
-    {% endfor %}
-  </div>
-{% endfor %}
-</div>
diff --git a/site/favicon.ico b/site/favicon.ico
deleted file mode 100644 (file)
index b48b344..0000000
Binary files a/site/favicon.ico and /dev/null differ
diff --git a/site/index.html b/site/index.html
deleted file mode 100644 (file)
index 9e96fac..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
----
-layout: home
----
-
-<main class="bd-masthead" id="content" role="main">
-  <div class="container">
-    <div class="row">
-      <div class="col-6 mx-auto col-md-4 order-md-2">
-        {% include icons/bootstrap-stack.svg width="512" height="430" class="img-fluid mb-3 mb-md-0" %}
-      </div>
-      <div class="col-md-8 order-md-1 text-center text-md-left pr-md-5">
-        <h1 class="mb-3">Build fast, responsive sites with Bootstrap</h1>
-        <p class="lead mb-4">
-          Quickly design and customize responsive mobile-first sites with Bootstrap, the world’s most popular front-end open source toolkit, featuring Sass variables and mixins, responsive grid system, extensive prebuilt components, and powerful JavaScript plugins.
-        </p>
-        <div class="d-flex flex-column flex-md-row">
-          <a href="{{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/introduction/" class="btn btn-lg btn-bd-primary mb-3 mr-md-3" onclick="ga('send', 'event', 'Jumbotron actions', 'Get started', 'Get started');">Get started</a>
-          <a href="{{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/download/" class="btn btn-lg btn-outline-secondary mb-3" onclick="ga('send', 'event', 'Jumbotron actions', 'Download', 'Download {{ site.current_version }}');">Download</a>
-        </div>
-        <p class="text-muted mb-0">
-          Currently v{{ site.current_version }}
-        </p>
-      </div>
-    </div>
-    {% include ads.html %}
-  </div>
-</main>
-
-<div class="masthead-followup">
-  <div class="container">
-    <div class="row mb-5 pb-md-4 align-items-center">
-      <div class="col-md-5">
-        <div class="masthead-followup-icon d-inline-block mb-2 text-white bg-success">
-          {% include icons/code.svg width="32" height="32" class="masthead-followup-svg" %}
-        </div>
-        <h2>Installation</h2>
-        <p class="lead font-weight-normal">
-          Install Bootstrap’s source Sass and JavaScript files via npm, Composer, or Meteor.
-        </p>
-        <p>Package managed installs don’t include documentation or our full build scripts. You can also <a href="https://github.com/twbs/bootstrap-npm-starter">use our npm template repo</a> to quickly generate a Bootstrap project via npm.</p>
-        <a class="btn btn-lg btn-outline-primary mb-3" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/download/">Read installation docs</a>
-      </div>
-      <div class="col-md-7 pl-md-5">
-{% highlight sh %}
-npm install bootstrap
-{% endhighlight %}
-
-{% highlight sh %}
-gem install bootstrap -v {{ site.current_ruby_version }}
-{% endhighlight %}
-      </div>
-    </div>
-
-    <div class="row mb-5 pb-md-4 align-items-center">
-      <div class="col-md-5">
-        <div class="masthead-followup-icon d-inline-block mb-2 text-white bg-primary">
-          {% include icons/cloud-fill.svg width="32" height="32" class="masthead-followup-svg" %}
-        </div>
-        <h2>jsDelivr</h2>
-        <p class="lead font-weight-normal">
-          When you only need to include Bootstrap’s compiled CSS or JS, you can use <a href="https://www.jsdelivr.com/">jsDelivr</a>.
-        </p>
-        <p>
-          See it in action with our simple <a href="{{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/introduction/#starter-template">starter template</a>, or <a href="{{ site.baseurl }}/docs/{{ site.docs_version }}/examples/">browse the examples</a> to jumpstart your next project. You can also choose to include Popper.js and our JS <a href="{{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/introduction/#separate">separately</a>.
-        </p>
-        <a class="btn btn-lg btn-outline-primary mb-3" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/layout/overview/">Explore the docs</a>
-      </div>
-      <div class="col-md-7 pl-md-5">
-{% highlight html %}
-<!-- CSS -->
-<link rel="stylesheet" href="{{ site.cdn.css }}" integrity="{{ site.cdn.css_hash }}" crossorigin="anonymous">
-{% endhighlight %}
-
-{% highlight html %}
-<!-- jQuery and JavaScript Bundle with Popper.js -->
-<script src="{{ site.cdn.jquery }}" integrity="{{ site.cdn.jquery_hash }}" crossorigin="anonymous"></script>
-<script src="{{ site.cdn.js_bundle }}" integrity="{{ site.cdn.js_bundle_hash }}" crossorigin="anonymous"></script>
-{% endhighlight %}
-      </div>
-    </div>
-
-    <div class="row mb-5 pb-md-4 align-items-center">
-      <div class="col-md-5">
-        <div class="masthead-followup-icon d-inline-block mb-2 text-white bd-bg-purple-bright">
-          {% include icons/circle-square.svg width="32" height="32" class="masthead-followup-svg" %}
-        </div>
-        <h2>Bootstrap Icons</h2>
-        <p class="lead font-weight-normal">
-          For the first time ever, Bootstrap has its own open source SVG icon library, designed to work best with our components and documentation.
-        </p>
-        <p>
-          Bootstrap Icons are designed to work best with Bootstrap components, but they’ll work in any project. They’re SVGs, so they scale quickly and easily, can be implemented in several ways, and can be styled with CSS.
-        </p>
-        <a href="{{ site.icons }}" class="btn btn-lg btn-outline-primary mb-3">Get Bootstrap Icons</a>
-      </div>
-      <div class="col-md-7 pl-md-5">
-        <img class="img-fluid mt-3 mx-auto" srcset="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/bootstrap-icons.png,
-                                                    {{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/bootstrap-icons@2x.png 2x"
-                                                    src="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/bootstrap-icons.png"
-                                                    alt="Bootstrap Icons" width="700" height="425" loading="lazy">
-      </div>
-    </div>
-
-    <div class="row mb-5 pb-md-4 align-items-center">
-      <div class="col-md-5">
-        <div class="masthead-followup-icon d-inline-block mb-2 text-white bg-danger">
-          {% include icons/droplet-fill.svg width="32" height="32" class="masthead-followup-svg" %}
-        </div>
-        <h2>Official Themes</h2>
-        <p class="lead font-weight-normal">
-          Take Bootstrap to the next level with premium themes from the <a href="{{ site.themes }}">official Bootstrap Themes marketplace</a>.
-        </p>
-        <p>
-          Themes are built on Bootstrap as their own extended frameworks, rich with new components and plugins, documentation, and powerful build tools.
-        </p>
-        <a href="{{ site.themes }}" class="btn btn-lg btn-outline-primary mb-3">Browse themes</a>
-      </div>
-      <div class="col-md-7 pl-md-5">
-        <img class="img-fluid mt-3 mx-auto" srcset="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/bootstrap-themes.png,
-                                                    {{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/bootstrap-themes@2x.png 2x"
-                                                    src="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/bootstrap-themes.png"
-                                                    alt="Bootstrap Themes" width="700" height="500" loading="lazy">
-      </div>
-    </div>
-  </div>
-</div>
diff --git a/site/layouts/_default/docs.html b/site/layouts/_default/docs.html
new file mode 100644 (file)
index 0000000..c2e3776
--- /dev/null
@@ -0,0 +1,37 @@
+<!doctype html>
+<html lang="en">
+  <head>
+    {{ partial "header" . }}
+  </head>
+  <body>
+    {{ partial "skippy" . }}
+
+    {{ partial "docs-navbar" . }}
+
+    <div class="container-fluid">
+      <div class="row flex-xl-nowrap">
+        <div class="col-md-3 col-xl-2 bd-sidebar">
+          {{ partial "docs-sidebar" . }}
+        </div>
+
+        {{ if (eq .Page.Params.toc true) }}
+          <nav class="d-none d-xl-block col-xl-2 bd-toc" aria-label="Secondary navigation">
+            {{ .TableOfContents }}
+          </nav>
+        {{ end }}
+
+        <main class="col-md-9 col-xl-8 py-md-3 pl-md-5 bd-content" role="main">
+          <div class="d-md-flex flex-md-row-reverse align-items-center justify-content-between">
+            <a class="btn btn-sm btn-bd-light my-2 my-md-0" href="{{ .Site.Params.repo }}/blob/v4-dev/site/content/{{ .Page.File.Path | replaceRE `\\` "/" }}" title="View and edit this file on GitHub" target="_blank" rel="noopener">View on GitHub</a>
+            <h1 class="bd-title" id="content">{{ .Title | markdownify }}</h1>
+          </div>
+          <p class="bd-lead">{{ .Page.Params.Description | markdownify }}</p>
+          {{ partial "ads" . }}
+          {{ .Content }}
+        </main>
+      </div>
+    </div>
+
+    {{ partial "scripts" . }}
+  </body>
+</html>
diff --git a/site/layouts/_default/examples.html b/site/layouts/_default/examples.html
new file mode 100644 (file)
index 0000000..6f8ab85
--- /dev/null
@@ -0,0 +1,60 @@
+<!doctype html>
+<html lang="en"{{ with .Page.Params.html_class }} class="{{ . }}"{{ end }}>
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <meta name="description" content="">
+    <meta name="author" content="{{ .Site.Params.authors }}">
+    <meta name="generator" content="Hugo {{ hugo.Version }}">
+    <title>{{ .Page.Title | markdownify }} · {{ .Site.Title | markdownify }}</title>
+
+    <link rel="canonical" href="{{ .Permalink }}">
+
+    {{ with .Params.robots -}}
+    <meta name="robots" content="{{ . }}">
+    {{- end }}
+
+    {{ partial "stylesheet" . }}
+    {{ partial "favicons" . }}
+
+    <style>
+      .bd-placeholder-img {
+        font-size: 1.125rem;
+        text-anchor: middle;
+        -webkit-user-select: none;
+        -moz-user-select: none;
+        -ms-user-select: none;
+        user-select: none;
+      }
+
+      @media (min-width: 768px) {
+        .bd-placeholder-img-lg {
+          font-size: 3.5rem;
+        }
+      }
+    </style>
+
+    {{ range .Page.Params.extra_css }}
+    {{ "<!-- Custom styles for this template -->" | safeHTML }}
+    <link href="{{ . }}" rel="stylesheet">
+    {{- end }}
+  </head>
+  <body{{ with .Page.Params.body_class }} class="{{ . }}"{{ end }}>
+    {{ .Content }}
+
+    {{ if ne .Page.Params.include_js false -}}
+      <script src="{{ .Site.Params.cdn.jquery }}" {{ printf "integrity=%q" .Site.Params.cdn.jquery_hash | safeHTMLAttr }} crossorigin="anonymous"></script>
+      <script>window.jQuery || document.write('<script src="/docs/{{ .Site.Params.docs_version }}/assets/js/vendor/jquery.slim.min.js"><\/script>')</script>
+
+      {{- if eq hugo.Environment "production" -}}
+        <script src="/docs/{{ .Site.Params.docs_version }}/dist/js/bootstrap.bundle.min.js" {{ printf "integrity=%q" .Site.Params.cdn.js_bundle_hash | safeHTMLAttr }} crossorigin="anonymous"></script>
+      {{- else -}}
+        <script src="/docs/{{ .Site.Params.docs_version }}/dist/js/bootstrap.bundle.js"></script>
+      {{- end }}
+
+      {{ range .Page.Params.extra_js }}
+        <script src="{{ . }}"></script>
+      {{- end }}
+    {{- end }}
+  </body>
+</html>
diff --git a/site/layouts/_default/home.html b/site/layouts/_default/home.html
new file mode 100644 (file)
index 0000000..c03de11
--- /dev/null
@@ -0,0 +1,19 @@
+<!doctype html>
+<html lang="en">
+  <head>
+    {{ partial "header" . }}
+  </head>
+  <body>
+    {{ partial "skippy" . }}
+
+    {{ partial "docs-navbar" . }}
+
+    {{ partial "home/masthead" . }}
+    {{ partial "home/masthead-followup" . }}
+
+    {{ .Content }}
+
+    {{ partial "footer" . }}
+    {{ partial "scripts" . }}
+  </body>
+</html>
diff --git a/site/layouts/_default/redirect.html b/site/layouts/_default/redirect.html
new file mode 100644 (file)
index 0000000..f675d0c
--- /dev/null
@@ -0,0 +1,11 @@
+<!doctype html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <title>{{ .Page.Params.redirect | absURL }}</title>
+    <link rel="canonical" href="{{ .Page.Params.redirect | absURL }}">
+    <meta name="robots" content="noindex">
+    <meta http-equiv="refresh" content="0; url={{ .Page.Params.redirect | absURL }}">
+  </head>
+</html>
diff --git a/site/layouts/_default/single.html b/site/layouts/_default/single.html
new file mode 100644 (file)
index 0000000..58b5533
--- /dev/null
@@ -0,0 +1,52 @@
+<!doctype html>
+<html lang="en">
+  <head>
+    {{ partial "header" . }}
+  </head>
+  <body>
+    {{ partial "skippy" . }}
+
+    {{ partial "docs-navbar" . }}
+
+    <header class="d-flex flex-column flex-md-row align-items-md-center p-5 bg-light">
+      <div class="pt-md-3 pb-md-4">
+        <h1 class="bd-title mt-0">{{ .Title | markdownify }}</h1>
+        <p class="bd-lead">{{ .Page.Params.Description | markdownify }}</p>
+        {{ if eq .Title "Examples" }}
+        <div class="d-flex flex-column flex-sm-row">
+          <a href="{{ .Site.Params.download.dist_examples }}" class="btn btn-bd-primary py-2 px-3" onclick="ga('send', 'event', 'Examples', 'Hero', 'Download Examples');">Download examples</a>
+          <a href="{{ .Site.Params.download.source }}" class="btn btn-outline-secondary py-2 px-3 mt-3 mt-sm-0 ml-sm-3" onclick="ga('send', 'event', 'Examples', 'Hero', 'Download');">Download source code</a>
+        </div>
+        {{- end -}}
+      </div>
+      {{ partial "ads" . }}
+    </header>
+
+    <main class="bd-content p-5" id="content" role="main">
+      {{ .Content }}
+
+      {{ if eq .Title "Examples" }}
+        <hr class="my-5">
+        <div class="container">
+          <div class="text-center">
+            <div class="masthead-followup-icon d-inline-block mb-2 text-white bg-danger">
+              {{ partial "icons/droplet-fill.svg" (dict "width" "32" "height" "32") }}
+            </div>
+            <h2>Go further with Bootstrap Themes</h2>
+            <p class="col-md-10 mx-auto lead font-weight-normal">
+              Need something more than these examples? Take Bootstrap to the next level with premium themes from the <a href="{{ $.Site.Params.themes }}">official Bootstrap Themes marketplace</a>. They’re built as their own extended frameworks, rich with new components and plugins, documentation, and powerful build tools.
+            </p>
+            <a href="{{ .Site.Params.themes }}" class="btn btn-lg btn-outline-primary mb-3">Browse themes</a>
+          </div>
+          <img class="d-block img-fluid mt-3 mx-auto" srcset="/docs/{{ .Site.Params.docs_version }}/assets/img/bootstrap-themes-collage.png,
+                                                              /docs/{{ .Site.Params.docs_version }}/assets/img/bootstrap-themes-collage@2x.png 2x"
+                                                      src="/docs/{{ .Site.Params.docs_version }}/assets/img/bootstrap-themes-collage.png"
+                                                      alt="Bootstrap Themes" width="1151" height="320" loading="lazy">
+        </div>
+      {{ end }}
+    </main>
+
+    {{ partial "footer" . }}
+    {{ partial "scripts" . }}
+  </body>
+</html>
diff --git a/site/layouts/alias.html b/site/layouts/alias.html
new file mode 100644 (file)
index 0000000..a6c397a
--- /dev/null
@@ -0,0 +1,11 @@
+<!doctype html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <title>{{ .Permalink }}</title>
+    <link rel="canonical" href="{{ .Permalink }}">
+    <meta name="robots" content="noindex">
+    <meta http-equiv="refresh" content="0; url={{ .Permalink }}">
+  </head>
+</html>
diff --git a/site/layouts/partials/bugify.html b/site/layouts/partials/bugify.html
new file mode 100644 (file)
index 0000000..7edacb5
--- /dev/null
@@ -0,0 +1,40 @@
+{{- $words := (split . " ") -}}
+
+{{- range $word := $words -}}
+  {{- if (strings.Contains $word "#") -}}
+    {{- $separator := false -}}
+
+    {{- if (strings.Contains $word ",") -}}
+      {{- $separator = true -}}
+    {{- end -}}
+
+    {{- $data := split $word "#" -}}
+    {{- $bug_cat := replace (index $data 0) "\n" "" -}}
+    {{- $bug_id := replace (index $data 1) "\n" "" -}}
+    {{- $bug_id = replace $bug_id "," "" -}}
+
+    {{- if (eq $bug_cat "Bootstrap") -}}
+      <a href="https://github.com/twbs/bootstrap/issues/{{ $bug_id }}">#{{ $bug_id }}</a>
+    {{- else if (eq $bug_cat "Edge") -}}
+      <a href="https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/{{ $bug_id }}/">Edge issue #{{ $bug_id }}</a>
+    {{- else if (eq $bug_cat "A11yUserVoice") -}}
+      <a href="https://microsoftaccessibility.uservoice.com/forums/307429-microsoft-accessibility-feedback/suggestions/{{ $bug_id }}">Microsoft A11y UserVoice idea #{{ $bug_id }}</a>
+    {{- else if (eq $bug_cat "UserVoice") -}}
+      <a href="https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/{{ $bug_id }}">Edge UserVoice idea #{{ $bug_id }}</a>
+    {{- else if (eq $bug_cat "Mozilla") -}}
+      <a href="https://bugzilla.mozilla.org/show_bug.cgi?id={{ $bug_id }}">Mozilla bug #{{ $bug_id }}</a>
+    {{- else if (eq $bug_cat "Chromium") -}}
+      <a href="https://bugs.chromium.org/p/chromium/issues/detail?id={{ $bug_id }}">Chromium issue #{{ $bug_id }}</a>
+    {{- else if (eq $bug_cat "WebKit") -}}
+      <a href="https://bugs.webkit.org/show_bug.cgi?id={{ $bug_id }}">WebKit bug #{{ $bug_id }}</a>
+    {{- else if (eq $bug_cat "Safari") -}}
+      <a href="https://openradar.appspot.com/{{ $bug_id }}">Apple Safari Radar #{{ $bug_id }}</a>
+    {{- else if (eq $bug_cat "Normalize") -}}
+      <a href="https://github.com/necolas/normalize.css/issues/{{ $bug_id }}">Normalize #{{ $bug_id }}</a>
+    {{- end -}}
+    {{- if (eq $separator true) }}, {{ end -}}
+
+  {{- else -}}
+    {{- $word -}}
+  {{- end -}}
+{{- end -}}
similarity index 50%
rename from site/_includes/callout-danger-async-methods.md
rename to site/layouts/partials/callout-danger-async-methods.md
index 2ca34afe09694161515a1615064b431a0d6de2fc..c8afdc2df2a2939b1a7ef7589731f89cf288ccf1 100644 (file)
@@ -1,8 +1,5 @@
-{% capture callout %}
 #### Asynchronous methods and transitions
 
 All API methods are **asynchronous** and start a **transition**. They return to the caller as soon as the transition is started but **before it ends**. In addition, a method call on a **transitioning component will be ignored**.
 
-[See our JavaScript documentation for more information]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/javascript/#asynchronous-functions-and-transitions).
-{% endcapture %}
-{% include callout.html content=callout type="danger" %}
+[See our JavaScript documentation for more information](/docs/{{ .Site.Params.docs_version }}/getting-started/javascript/#asynchronous-functions-and-transitions).
similarity index 81%
rename from site/_includes/callout-info-mediaqueries-breakpoints.md
rename to site/layouts/partials/callout-info-mediaqueries-breakpoints.md
index d3988ce1a30299d627926202663bae96e8f55ffe..e3660e462aabac1ad29b2d910794e2d29f4c33ec 100644 (file)
@@ -1,4 +1 @@
-{% capture callout %}
 Note that since browsers do not currently support [range context queries](https://www.w3.org/TR/mediaqueries-4/#range-context), we work around the limitations of [`min-` and `max-` prefixes](https://www.w3.org/TR/mediaqueries-4/#mq-min-max) and viewports with fractional widths (which can occur under certain conditions on high-dpi devices, for instance) by using values with higher precision for these comparisons.
-{% endcapture %}
-{% include callout.html content=callout type="info" %}
diff --git a/site/layouts/partials/callout-info-prefersreducedmotion.md b/site/layouts/partials/callout-info-prefersreducedmotion.md
new file mode 100644 (file)
index 0000000..d258fbe
--- /dev/null
@@ -0,0 +1 @@
+The animation effect of this component is dependent on the `prefers-reduced-motion` media query. See the [reduced motion section of our accessibility documentation](/docs/{{ .Site.Params.docs_version }}/getting-started/accessibility/#reduced-motion).
similarity index 81%
rename from site/_includes/callout-warning-color-assistive-technologies.md
rename to site/layouts/partials/callout-warning-color-assistive-technologies.md
index 98214eb58d27fce34f8ad61f8f5f125b945dbe1a..f0c2e9de5320152f496e707cdc653f83a1d152f5 100644 (file)
@@ -1,6 +1,3 @@
-{% capture callout %}
 ##### Conveying meaning to assistive technologies
 
 Using color to add meaning only provides a visual indication, which will not be conveyed to users of assistive technologies – such as screen readers. Ensure that information denoted by the color is either obvious from the content itself (e.g. the visible text), or is included through alternative means, such as additional text hidden with the `.sr-only` class.
-{% endcapture %}
-{% include callout.html content=callout type="warning" %}
diff --git a/site/layouts/partials/docs-navbar.html b/site/layouts/partials/docs-navbar.html
new file mode 100644 (file)
index 0000000..01bfef4
--- /dev/null
@@ -0,0 +1,70 @@
+<header class="navbar navbar-expand navbar-dark flex-column flex-md-row bd-navbar">
+  <a class="navbar-brand mr-0 mr-md-2" href="/" aria-label="Bootstrap">
+    {{ partial "icons/bootstrap.svg" (dict "class" "d-block" "width" "36" "height" "36") }}
+  </a>
+
+  <div class="navbar-nav-scroll">
+    <ul class="navbar-nav bd-navbar-nav flex-row">
+      <li class="nav-item">
+        <a class="nav-link{{ if .IsHome }} active{{ end }}" href="/" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Bootstrap');">Home</a>
+      </li>
+      <li class="nav-item">
+        <a class="nav-link{{ if eq .Page.Layout "docs" }} active{{ end }}" href="/docs/{{ .Site.Params.docs_version }}/getting-started/introduction/" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Docs');">Documentation</a>
+      </li>
+      <li class="nav-item">
+        <a class="nav-link{{ if eq .Page.Title "Examples" }} active{{ end }}" href="/docs/{{ .Site.Params.docs_version }}/examples/" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Examples');">Examples</a>
+      </li>
+      <li class="nav-item">
+        <a class="nav-link" href="{{ .Site.Params.icons }}" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Icons');" target="_blank" rel="noopener">Icons</a>
+      </li>
+      <li class="nav-item">
+        <a class="nav-link" href="{{ .Site.Params.themes }}" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Themes');" target="_blank" rel="noopener">Themes</a>
+      </li>
+      <li class="nav-item">
+        <a class="nav-link" href="{{ .Site.Params.expo }}" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Expo');" target="_blank" rel="noopener">Expo</a>
+      </li>
+      <li class="nav-item">
+        <a class="nav-link" href="{{ .Site.Params.blog }}" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Blog');" target="_blank" rel="noopener">Blog</a>
+      </li>
+    </ul>
+  </div>
+
+  <ul class="navbar-nav ml-md-auto">
+    <li class="nav-item dropdown">
+      <a class="nav-item nav-link dropdown-toggle mr-md-2" href="#" id="bd-versions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+        v{{ .Site.Params.docs_version }}
+      </a>
+      <div class="dropdown-menu dropdown-menu-md-right" aria-labelledby="bd-versions">
+        <a class="dropdown-item active" href="/docs/{{ .Site.Params.docs_version }}/">Latest (4.5.x)</a>
+        <div class="dropdown-divider"></div>
+        <a class="dropdown-item" href="https://getbootstrap.com/docs/3.4/">v3.4.1</a>
+        <a class="dropdown-item" href="https://getbootstrap.com/2.3.2/">v2.3.2</a>
+        <div class="dropdown-divider"></div>
+        <a class="dropdown-item" href="/docs/versions/">All versions</a>
+      </div>
+    </li>
+
+    <li class="nav-item">
+      <a class="nav-link pl-2 pr-1 mx-1 py-3 my-n2" href="{{ .Site.Params.github_org }}" target="_blank" rel="noopener" aria-label="GitHub">
+        {{ partial "icons/github.svg" (dict "class" "navbar-nav-svg") }}
+      </a>
+    </li>
+    <li class="nav-item">
+      <a class="nav-link px-1 mx-1 py-3 my-n2" href="https://twitter.com/{{ .Site.Params.twitter }}" target="_blank" rel="noopener" aria-label="Twitter">
+        {{ partial "icons/twitter.svg" (dict "class" "navbar-nav-svg") }}
+      </a>
+    </li>
+    <li class="nav-item">
+      <a class="nav-link px-1 mx-1 py-3 my-n2" href="{{ .Site.Params.slack }}" target="_blank" rel="noopener" aria-label="Slack">
+        {{ partial "icons/slack.svg" (dict "class" "navbar-nav-svg") }}
+      </a>
+    </li>
+    <li class="nav-item">
+      <a class="nav-link px-1 mx-1 py-3 my-n2" href="{{ .Site.Params.opencollective }}/" target="_blank" rel="noopener" aria-label="Open Collective">
+        {{ partial "icons/opencollective.svg" (dict "class" "navbar-nav-svg") }}
+      </a>
+    </li>
+  </ul>
+
+  <a class="btn btn-bd-download d-none d-lg-inline-block mb-3 mb-md-0 ml-md-3" href="/docs/{{ .Site.Params.docs_version }}/getting-started/download/">Download</a>
+</header>
diff --git a/site/layouts/partials/docs-sidebar.html b/site/layouts/partials/docs-sidebar.html
new file mode 100644 (file)
index 0000000..2a8ef05
--- /dev/null
@@ -0,0 +1,45 @@
+<form role="search" class="bd-search d-flex align-items-center">
+  <input type="search" class="form-control" id="search-input" placeholder="Search..." aria-label="Search for..." autocomplete="off" data-docs-version="{{ .Site.Params.docs_version }}">
+  <button class="btn bd-search-docs-toggle d-md-none p-0 ml-3" type="button" data-toggle="collapse" data-target="#bd-docs-nav" aria-controls="bd-docs-nav" aria-expanded="false" aria-label="Toggle docs navigation">
+    {{ partial "icons/menu.svg" (dict "width" "30" "height" "30") }}
+  </button>
+</form>
+
+<div class="collapse d-md-block row" id="bd-docs-nav">
+  <nav class="bd-links" aria-label="Main navigation">
+    {{- $url := split .Permalink "/" -}}
+    {{- $page_slug := index $url (sub (len $url) 2) -}}
+
+    {{- range $group := .Site.Data.sidebar -}}
+      {{- $link := $group.title -}}
+      {{- $link_slug := $link | urlize -}}
+
+      {{- if $group.pages -}}
+        {{- $link = index $group.pages 0 -}}
+        {{- $link_slug = $link.title | urlize -}}
+      {{- end -}}
+
+      {{- $group_slug := $group.title | urlize -}}
+      {{- $is_active_group := eq $.Page.Params.group $group_slug }}
+
+      <div class="bd-toc-item{{ if $is_active_group }} active{{ end }}">
+        <a class="bd-toc-link" href="/docs/{{ $.Site.Params.docs_version }}/{{ $group_slug }}/{{ if $group.pages }}{{ $link_slug }}/{{ end }}">
+          {{ $group.title }}
+        </a>
+
+        {{- if and $is_active_group $group.pages }}
+        <ul class="nav bd-sidenav">
+          {{- range $doc := $group.pages -}}
+            {{- $doc_slug := $doc.title | urlize }}
+            <li{{ if and $is_active_group (eq $page_slug $doc_slug) }} class="active bd-sidenav-active"{{ end }}>
+              <a href="/docs/{{ $.Site.Params.docs_version }}/{{ $group_slug }}/{{ $doc_slug }}/">
+                {{- $doc.title -}}
+              </a>
+            </li>
+          {{- end }}
+        </ul>
+        {{- end }}
+      </div>
+    {{- end }}
+  </nav>
+</div>
diff --git a/site/layouts/partials/favicons.html b/site/layouts/partials/favicons.html
new file mode 100644 (file)
index 0000000..61733e3
--- /dev/null
@@ -0,0 +1,9 @@
+{{ "<!-- Favicons -->" | safeHTML }}
+<link rel="apple-touch-icon" href="/docs/{{ .Site.Params.docs_version }}/assets/img/favicons/apple-touch-icon.png" sizes="180x180">
+<link rel="icon" href="/docs/{{ .Site.Params.docs_version }}/assets/img/favicons/favicon-32x32.png" sizes="32x32" type="image/png">
+<link rel="icon" href="/docs/{{ .Site.Params.docs_version }}/assets/img/favicons/favicon-16x16.png" sizes="16x16" type="image/png">
+<link rel="manifest" href="/docs/{{ .Site.Params.docs_version }}/assets/img/favicons/manifest.json">
+<link rel="mask-icon" href="/docs/{{ .Site.Params.docs_version }}/assets/img/favicons/safari-pinned-tab.svg" color="#563d7c">
+<link rel="icon" href="/docs/{{ .Site.Params.docs_version }}/assets/img/favicons/favicon.ico">
+<meta name="msapplication-config" content="/docs/{{ .Site.Params.docs_version }}/assets/img/favicons/browserconfig.xml">
+<meta name="theme-color" content="#563d7c">
diff --git a/site/layouts/partials/footer.html b/site/layouts/partials/footer.html
new file mode 100644 (file)
index 0000000..02ad216
--- /dev/null
@@ -0,0 +1,12 @@
+<footer class="bd-footer text-muted">
+  <div class="container-fluid p-3 p-md-5">
+    <ul class="bd-footer-links">
+      <li><a href="{{ .Site.Params.github_org }}">GitHub</a></li>
+      <li><a href="https://twitter.com/{{ .Site.Params.twitter }}">Twitter</a></li>
+      <li><a href="/docs/{{ .Site.Params.docs_version }}/examples/">Examples</a></li>
+      <li><a href="/docs/{{ .Site.Params.docs_version }}/about/overview/">About</a></li>
+    </ul>
+    <p>Designed and built with all the love in the world by the <a href="/docs/{{ .Site.Params.docs_version }}/about/team/">Bootstrap team</a> with the help of <a href="{{ .Site.Params.repo }}/graphs/contributors">our contributors</a>.</p>
+    <p>Currently v{{ .Site.Params.current_version }}. Code licensed <a href="{{ .Site.Params.repo }}/blob/main/LICENSE" target="_blank" rel="license noopener">MIT</a>, docs <a href="https://creativecommons.org/licenses/by/3.0/" target="_blank" rel="license noopener">CC BY 3.0</a>.</p>
+  </div>
+</footer>
diff --git a/site/layouts/partials/header.html b/site/layouts/partials/header.html
new file mode 100644 (file)
index 0000000..1cc265a
--- /dev/null
@@ -0,0 +1,21 @@
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+<meta name="description" content="{{ .Page.Params.description | default .Site.Params.description | markdownify }}">
+<meta name="author" content="{{ .Site.Params.authors }}">
+<meta name="generator" content="Hugo {{ hugo.Version }}">
+
+<meta name="docsearch:language" content="en">
+<meta name="docsearch:version" content="{{ .Site.Params.docs_version }}">
+
+<title>{{ if .IsHome }}{{ .Site.Title | markdownify }} · {{ .Site.Params.description | markdownify }}{{ else }}{{ .Title | markdownify }} · {{ .Site.Title | markdownify }} v{{ .Site.Params.docs_version }}{{ end }}</title>
+
+<link rel="canonical" href="{{ .Permalink }}">
+
+{{ with .Params.robots -}}
+<meta name="robots" content="{{ . }}">
+{{- end }}
+
+{{ partial "stylesheet" . }}
+{{ partial "favicons" . }}
+{{ partial "social" . }}
+{{ partial "analytics" . }}
diff --git a/site/layouts/partials/home/masthead-followup.html b/site/layouts/partials/home/masthead-followup.html
new file mode 100644 (file)
index 0000000..0fdfa01
--- /dev/null
@@ -0,0 +1,90 @@
+<div class="masthead-followup">
+  <div class="container">
+    <div class="row mb-5 pb-md-4 align-items-center">
+      <div class="col-md-5">
+        <div class="masthead-followup-icon d-inline-block mb-2 text-white bg-success">
+          {{ partial "icons/code.svg" (dict "class" "masthead-followup-svg" "width" "32" "height" "32") }}
+        </div>
+        <h2>Installation</h2>
+        <p class="lead font-weight-normal">
+          Install Bootstrap’s source Sass and JavaScript files via npm, Composer, or Meteor.
+        </p>
+        <p>Package managed installs don’t include documentation or our full build scripts. You can also <a href="https://github.com/twbs/bootstrap-npm-starter">use our npm template repo</a> to quickly generate a Bootstrap project via npm.</p>
+        <a class="btn btn-lg btn-outline-primary mb-3" href="/docs/{{ .Site.Params.docs_version }}/getting-started/download/">Read installation docs</a>
+      </div>
+      <div class="col-md-7 pl-md-5">
+      {{ highlight "npm install bootstrap" "sh" "" }}
+      {{ highlight (printf ("gem install bootstrap -v %s") .Site.Params.current_ruby_version) "sh" "" }}
+      </div>
+    </div>
+
+    <div class="row mb-5 pb-md-4 align-items-center">
+      <div class="col-md-5">
+        <div class="masthead-followup-icon d-inline-block mb-2 text-white bg-primary">
+          {{ partial "icons/cloud-fill.svg" (dict "class" "masthead-followup-svg" "width" "32" "height" "32") }}
+        </div>
+        <h2>jsDelivr</h2>
+        <p class="lead font-weight-normal">
+          When you only need to include Bootstrap’s compiled CSS or JS, you can use <a href="https://www.jsdelivr.com/">jsDelivr</a>.
+        </p>
+        <p>
+          See it in action with our simple <a href="/docs/{{ .Site.Params.docs_version }}/getting-started/introduction/#starter-template">starter template</a>, or <a href="/docs/{{ .Site.Params.docs_version }}/examples/">browse the examples</a> to jumpstart your next project. You can also choose to include Popper.js and our JS <a href="/docs/{{ .Site.Params.docs_version }}/getting-started/introduction/#separate">separately</a>.
+        </p>
+        <a class="btn btn-lg btn-outline-primary mb-3" href="/docs/{{ .Site.Params.docs_version }}/layout/overview/">Explore the docs</a>
+      </div>
+      <div class="col-md-7 pl-md-5">
+      {{ highlight (printf (`<!-- CSS -->
+<link href="%s" rel="stylesheet" integrity=%q crossorigin="anonymous">
+`) .Site.Params.cdn.css (.Site.Params.cdn.css_hash | safeHTMLAttr)) "html" "" }}
+      {{ highlight (printf (`<!-- jQuery and JavaScript Bundle with Popper.js -->
+<script src="%s" integrity=%q crossorigin="anonymous"></script>
+<script src="%s" integrity=%q crossorigin="anonymous"></script>
+`) .Site.Params.cdn.jquery (.Site.Params.cdn.jquery_hash | safeHTMLAttr) .Site.Params.cdn.js_bundle (.Site.Params.cdn.js_bundle_hash | safeHTMLAttr)) "html" "" }}
+      </div>
+    </div>
+
+    <div class="row mb-5 pb-md-4 align-items-center">
+      <div class="col-md-5">
+        <div class="masthead-followup-icon d-inline-block mb-2 text-white bd-bg-purple-bright">
+          {{ partial "icons/circle-square.svg" (dict "class" "masthead-followup-svg" "width" "32" "height" "32") }}
+        </div>
+        <h2>Bootstrap Icons</h2>
+        <p class="lead font-weight-normal">
+          For the first time ever, Bootstrap has its own open source SVG icon library, designed to work best with our components and documentation.
+        </p>
+        <p>
+          Bootstrap Icons are designed to work best with Bootstrap components, but they’ll work in any project. They’re SVGs, so they scale quickly and easily, can be implemented in several ways, and can be styled with CSS.
+        </p>
+        <a href="{{ .Site.Params.icons }}" class="btn btn-lg btn-outline-primary mb-3">Get Bootstrap Icons</a>
+      </div>
+      <div class="col-md-7 pl-md-5">
+        <img class="img-fluid mt-3 mx-auto" srcset="/docs/{{ .Site.Params.docs_version }}/assets/img/bootstrap-icons.png,
+                                                    /docs/{{ .Site.Params.docs_version }}/assets/img/bootstrap-icons@2x.png 2x"
+                                            src="/docs/{{ .Site.Params.docs_version }}/assets/img/bootstrap-icons.png"
+                                            alt="Bootstrap Icons" width="700" height="425" loading="lazy">
+      </div>
+    </div>
+
+    <div class="row mb-5 pb-md-4 align-items-center">
+      <div class="col-md-5">
+        <div class="masthead-followup-icon d-inline-block mb-2 text-white bg-danger">
+          {{ partial "icons/droplet-fill.svg" (dict "class" "masthead-followup-svg" "width" "32" "height" "32") }}
+        </div>
+        <h2>Official Themes</h2>
+        <p class="lead font-weight-normal">
+          Take Bootstrap to the next level with premium themes from the <a href="{{ .Site.Params.themes }}">official Bootstrap Themes marketplace</a>.
+        </p>
+        <p>
+          Themes are built on Bootstrap as their own extended frameworks, rich with new components and plugins, documentation, and powerful build tools.
+        </p>
+        <a href="{{ .Site.Params.themes }}" class="btn btn-lg btn-outline-primary mb-3">Browse themes</a>
+      </div>
+      <div class="col-md-7 pl-md-5">
+        <img class="img-fluid mt-3 mx-auto" srcset="/docs/{{ .Site.Params.docs_version }}/assets/img/bootstrap-themes.png,
+                                                    /docs/{{ .Site.Params.docs_version }}/assets/img/bootstrap-themes@2x.png 2x"
+                                            src="/docs/{{ .Site.Params.docs_version }}/assets/img/bootstrap-themes.png"
+                                            alt="Bootstrap Themes" width="700" height="500" loading="lazy">
+      </div>
+    </div>
+  </div>
+</div>
diff --git a/site/layouts/partials/home/masthead.html b/site/layouts/partials/home/masthead.html
new file mode 100644 (file)
index 0000000..3fad86b
--- /dev/null
@@ -0,0 +1,23 @@
+<main class="bd-masthead" id="content" role="main">
+  <div class="container">
+    <div class="row">
+      <div class="col-6 mx-auto col-md-4 order-md-2">
+        {{ partial "icons/bootstrap-stack.svg" (dict "class" "img-fluid mb-3 mb-md-0" "width" "512" "height" "430") }}
+      </div>
+      <div class="col-md-8 order-md-1 text-center text-md-left pr-md-5">
+        <h1 class="mb-3">Build fast, responsive sites with Bootstrap</h1>
+        <p class="lead mb-4">
+          Quickly design and customize responsive mobile-first sites with Bootstrap, the world’s most popular front-end open source toolkit, featuring Sass variables and mixins, responsive grid system, extensive prebuilt components, and powerful JavaScript plugins.
+        </p>
+        <div class="d-flex flex-column flex-md-row">
+          <a href="/docs/{{ .Site.Params.docs_version }}/getting-started/introduction/" class="btn btn-lg btn-bd-primary mb-3 mr-md-3" onclick="ga('send', 'event', 'Jumbotron actions', 'Get started', 'Get started');">Get started</a>
+          <a href="/docs/{{ .Site.Params.docs_version }}/getting-started/download/" class="btn btn-lg btn-outline-secondary mb-3" onclick="ga('send', 'event', 'Jumbotron actions', 'Download', 'Download {{ .Site.Params.current_version }}');">Download</a>
+        </div>
+        <p class="text-muted mb-0">
+          Currently v{{ .Site.Params.current_version }}
+        </p>
+      </div>
+    </div>
+    {{ partial "ads.html" . }}
+  </div>
+</main>
diff --git a/site/layouts/partials/icons/bootstrap-stack.svg b/site/layouts/partials/icons/bootstrap-stack.svg
new file mode 100644 (file)
index 0000000..723812a
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"{{ with .width }} width="{{ . }}"{{ end }}{{ with .height }} height="{{ . }}"{{ end }}{{ with .class }} class="{{ . }}"{{ end }} viewBox="0 0 1024 860" focusable="false" role="img"><title>Bootstrap</title><defs><linearGradient id="c" x1="50%" x2="50%" y1="0%" y2="100%"><stop offset="0%" stop-color="#5c24ae"/><stop offset="100%" stop-color="#30135a"/></linearGradient><path id="b" d="M355.967 242.807l-322 216.395c-44.275 29.754-44.275 78.443 0 108.197l322 216.395c44.275 29.754 116.725 29.754 161 0l322-216.395c44.275-29.754 44.275-78.443 0-108.197l-322-216.395c-44.275-29.754-116.725-29.754-161 0z"/><filter id="a" width="108%" height="112%" x="-4%" y="-4.3%" filterUnits="objectBoundingBox"><feOffset dy="10" in="SourceAlpha" result="shadowOffsetOuter1"/><feGaussianBlur in="shadowOffsetOuter1" result="shadowBlurOuter1" stdDeviation="10"/><feColorMatrix in="shadowBlurOuter1" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/></filter><linearGradient id="f" x1="50%" x2="50%" y1="-17.303%" y2="100%"><stop offset="0%" stop-color="#7331d4"/><stop offset="100%" stop-color="#461b84"/></linearGradient><path id="e" d="M355.967 132.807l-322 216.395c-44.275 29.754-44.275 78.443 0 108.197l322 216.395c44.275 29.754 116.725 29.754 161 0l322-216.395c44.275-29.754 44.275-78.443 0-108.197l-322-216.395c-44.275-29.754-116.725-29.754-161 0z"/><filter id="d" width="108%" height="112%" x="-4%" y="-4.3%" filterUnits="objectBoundingBox"><feOffset dy="10" in="SourceAlpha" result="shadowOffsetOuter1"/><feGaussianBlur in="shadowOffsetOuter1" result="shadowBlurOuter1" stdDeviation="10"/><feColorMatrix in="shadowBlurOuter1" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/></filter><linearGradient id="i" x1="50%" x2="50%" y1="0%" y2="100%"><stop offset="0%" stop-color="#905bdd"/><stop offset="100%" stop-color="#5521a0"/></linearGradient><path id="h" d="M355.967 22.807l-322 216.395c-44.275 29.754-44.275 78.443 0 108.197l322 216.395c44.275 29.754 116.725 29.754 161 0l322-216.395c44.275-29.754 44.275-78.443 0-108.197l-322-216.395c-44.275-29.754-116.725-29.754-161 0z"/><filter id="g" width="108%" height="112%" x="-4%" y="-4.3%" filterUnits="objectBoundingBox"><feOffset dy="10" in="SourceAlpha" result="shadowOffsetOuter1"/><feGaussianBlur in="shadowOffsetOuter1" result="shadowBlurOuter1" stdDeviation="10"/><feColorMatrix in="shadowBlurOuter1" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/></filter></defs><g fill="none"><g transform="translate(75 23)"><use fill="#000" filter="url(#a)" xlink:href="#b"/><use fill="url(#c)" xlink:href="#b"/></g><g transform="translate(75 23)"><use fill="#000" filter="url(#d)" xlink:href="#e"/><use fill="url(#f)" xlink:href="#e"/></g><g transform="translate(75 23)"><use fill="#000" filter="url(#g)" xlink:href="#h"/><use fill="url(#i)" xlink:href="#h"/></g><path fill="#fff" d="M558.273 447.667L308.036 279.5l97.982-65.847c42.83-28.784 96.789-31.483 134.245-6.311 26.044 17.502 31.214 46.615 11.444 65.724l1.389.934c38.324-19.932 84.107-18.527 117.396 3.845 44.046 29.6 38.671 68.419-14.561 104.193l-97.658 65.629zM447.112 331.01l49.942-33.562c36.935-24.822 42.31-48.249 15.224-66.451-24.798-16.665-55.49-14.453-85.851 5.95l-59.641 40.081 80.326 53.982zm176.532 35.663c37.63-25.289 42.136-48.832 13.203-68.276-28.932-19.444-64.163-15.614-104.042 11.186l-58.789 39.508 87.92 59.084 61.708-41.502z"/></g></svg>
\ No newline at end of file
diff --git a/site/layouts/partials/icons/bootstrap.svg b/site/layouts/partials/icons/bootstrap.svg
new file mode 100644 (file)
index 0000000..533190a
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg"{{ with .width }} width="{{ . }}"{{ end }}{{ with .height }} height="{{ . }}"{{ end }}{{ with .class }} class="{{ . }}"{{ end }} viewBox="0 0 612 612" role="img" focusable="false"><title>{{ with .title }}{{ . }}{{ else }}Bootstrap{{ end }}</title><path fill="currentColor" d="M510 8a94.3 94.3 0 0 1 94 94v408a94.3 94.3 0 0 1-94 94H102a94.3 94.3 0 0 1-94-94V102a94.3 94.3 0 0 1 94-94h408m0-8H102C45.9 0 0 45.9 0 102v408c0 56.1 45.9 102 102 102h408c56.1 0 102-45.9 102-102V102C612 45.9 566.1 0 510 0z"/><path fill="currentColor" d="M196.77 471.5V154.43h124.15c54.27 0 91 31.64 91 79.1 0 33-24.17 63.72-54.71 69.21v1.76c43.07 5.49 70.75 35.82 70.75 78 0 55.81-40 89-107.45 89zm39.55-180.4h63.28c46.8 0 72.29-18.68 72.29-53 0-31.42-21.53-48.78-60-48.78h-75.57zm78.22 145.46c47.68 0 72.73-19.34 72.73-56s-25.93-55.37-76.46-55.37h-74.49v111.4z"/></svg>
\ No newline at end of file
diff --git a/site/layouts/partials/icons/circle-square.svg b/site/layouts/partials/icons/circle-square.svg
new file mode 100644 (file)
index 0000000..e62bfdb
--- /dev/null
@@ -0,0 +1,4 @@
+<svg{{ with .width }} width="{{ . }}"{{ end }}{{ with .height }} height="{{ . }}"{{ end }}{{ with .class }} class="{{ . }}"{{ end }} focusable="false" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
+  <path d="M0 6a6 6 0 1112 0A6 6 0 010 6z"/>
+  <path d="M12.93 5h1.57a.5.5 0 01.5.5v9a.5.5 0 01-.5.5h-9a.5.5 0 01-.5-.5v-1.57a6.953 6.953 0 01-1-.22v1.79A1.5 1.5 0 005.5 16h9a1.5 1.5 0 001.5-1.5v-9A1.5 1.5 0 0014.5 4h-1.79c.097.324.17.658.22 1z"/>
+</svg>
diff --git a/site/layouts/partials/icons/cloud-fill.svg b/site/layouts/partials/icons/cloud-fill.svg
new file mode 100644 (file)
index 0000000..4a6262d
--- /dev/null
@@ -0,0 +1,3 @@
+<svg{{ with .width }} width="{{ . }}"{{ end }}{{ with .height }} height="{{ . }}"{{ end }}{{ with .class }} class="{{ . }}"{{ end }} focusable="false" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
+  <path fill-rule="evenodd" d="M3.5 13a3.5 3.5 0 11.59-6.95 5.002 5.002 0 119.804 1.98A2.5 2.5 0 0113.5 13h-10z" clip-rule="evenodd"/>
+</svg>
similarity index 50%
rename from site/_includes/icons/code.svg
rename to site/layouts/partials/icons/code.svg
index 7bce0a1439f5121032f4d211197c015661c67fa6..7d7210f2c07e1bbceca9d05543eaf8c8f9a370ff 100644 (file)
@@ -1,3 +1,3 @@
-<svg{% if include.width %} width="{{ include.width }}"{% endif %}{% if include.height %} height="{{ include.height }}"{% endif %}{% if include.class %} class="{{ include.class }}"{% endif %} focusable="false" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
+<svg{{ with .width }} width="{{ . }}"{{ end }}{{ with .height }} height="{{ . }}"{{ end }}{{ with .class }} class="{{ . }}"{{ end }} focusable="false" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
   <path fill-rule="evenodd" d="M5.854 4.146a.5.5 0 010 .708L2.707 8l3.147 3.146a.5.5 0 01-.708.708l-3.5-3.5a.5.5 0 010-.708l3.5-3.5a.5.5 0 01.708 0zm4.292 0a.5.5 0 000 .708L13.293 8l-3.147 3.146a.5.5 0 00.708.708l3.5-3.5a.5.5 0 000-.708l-3.5-3.5a.5.5 0 00-.708 0z" clip-rule="evenodd"/>
 </svg>
diff --git a/site/layouts/partials/icons/droplet-fill.svg b/site/layouts/partials/icons/droplet-fill.svg
new file mode 100644 (file)
index 0000000..f637605
--- /dev/null
@@ -0,0 +1,3 @@
+<svg{{ with .width }} width="{{ . }}"{{ end }}{{ with .height }} height="{{ . }}"{{ end }}{{ with .class }} class="{{ . }}"{{ end }} focusable="false" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
+  <path fill-rule="evenodd" d="M8 16a6 6 0 006-6c0-1.655-1.122-2.904-2.432-4.362C10.254 4.176 8.75 2.503 8 0c0 0-6 5.686-6 10a6 6 0 006 6zM6.646 4.646c-.376.377-1.272 1.489-2.093 3.13l.894.448c.78-1.559 1.616-2.58 1.907-2.87l-.708-.708z" clip-rule="evenodd"/>
+</svg>
diff --git a/site/layouts/partials/icons/github.svg b/site/layouts/partials/icons/github.svg
new file mode 100644 (file)
index 0000000..f716775
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg"{{ with .width }} width="{{ . }}"{{ end }}{{ with .height }} height="{{ . }}"{{ end }}{{ with .class }} class="{{ . }}"{{ end }} viewBox="0 0 512 499.36" role="img" focusable="false"><title>{{ with .title }}{{ . }}{{ else }}GitHub{{ end }}</title><path fill="currentColor" fill-rule="evenodd" d="M256 0C114.64 0 0 114.61 0 256c0 113.09 73.34 209 175.08 242.9 12.8 2.35 17.47-5.56 17.47-12.34 0-6.08-.22-22.18-.35-43.54-71.2 15.49-86.2-34.34-86.2-34.34-11.64-29.57-28.42-37.45-28.42-37.45-23.27-15.84 1.73-15.55 1.73-15.55 25.69 1.81 39.21 26.38 39.21 26.38 22.84 39.12 59.92 27.82 74.5 21.27 2.33-16.54 8.94-27.82 16.25-34.22-56.84-6.43-116.6-28.43-116.6-126.49 0-27.95 10-50.8 26.35-68.69-2.63-6.48-11.42-32.5 2.51-67.75 0 0 21.49-6.88 70.4 26.24a242.65 242.65 0 0 1 128.18 0c48.87-33.13 70.33-26.24 70.33-26.24 14 35.25 5.18 61.27 2.55 67.75 16.41 17.9 26.31 40.75 26.31 68.69 0 98.35-59.85 120-116.88 126.32 9.19 7.9 17.38 23.53 17.38 47.41 0 34.22-.31 61.83-.31 70.23 0 6.85 4.61 14.81 17.6 12.31C438.72 464.97 512 369.08 512 256.02 512 114.62 397.37 0 256 0z"/></svg>
\ No newline at end of file
diff --git a/site/layouts/partials/icons/menu.svg b/site/layouts/partials/icons/menu.svg
new file mode 100644 (file)
index 0000000..e9c6c99
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg"{{ with .width }} width="{{ . }}"{{ end }}{{ with .height }} height="{{ . }}"{{ end }}{{ with .class }} class="{{ . }}"{{ end }} viewBox="0 0 30 30" role="img" focusable="false"><title>{{ with .title }}{{ . }}{{ else }}Menu{{ end }}</title><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"/></svg>
\ No newline at end of file
diff --git a/site/layouts/partials/icons/opencollective.svg b/site/layouts/partials/icons/opencollective.svg
new file mode 100644 (file)
index 0000000..9df7af4
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg"{{ with .width }} width="{{ . }}"{{ end }}{{ with .height }} height="{{ . }}"{{ end }} fill="currentColor" fill-rule="evenodd"{{ with .class }} class="{{ . }}"{{ end }} viewBox="0 0 40 41" role="img" focusable="false"><title>{{ with .title }}{{ . }}{{ else }}Open Collective{{ end }}</title><path fill-opacity=".4" d="M32.8 21c0 2.4-.8 4.9-2 6.9l5.1 5.1c2.5-3.4 4.1-7.6 4.1-12 0-4.6-1.6-8.8-4-12.2L30.7 14c1.2 2 2 4.3 2 7z"/><path d="M20 33.7a12.8 12.8 0 0 1 0-25.6c2.6 0 5 .7 7 2.1L32 5a20 20 0 1 0 .1 31.9l-5-5.2a13 13 0 0 1-7 2z"/></svg>
\ No newline at end of file
diff --git a/site/layouts/partials/icons/slack.svg b/site/layouts/partials/icons/slack.svg
new file mode 100644 (file)
index 0000000..eba4dde
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg"{{ with .width }} width="{{ . }}"{{ end }}{{ with .height }} height="{{ . }}"{{ end }}{{ with .class }} class="{{ . }}"{{ end }} viewBox="0 0 512 512" role="img" focusable="false"><title>{{ with .title }}{{ . }}{{ else }}Slack{{ end }}</title><path fill="currentColor" d="M210.787 234.832l68.31-22.883 22.1 65.977-68.309 22.882z"/><path fill="currentColor" d="M490.54 185.6C437.7 9.59 361.6-31.34 185.6 21.46S-31.3 150.4 21.46 326.4 150.4 543.3 326.4 490.54 543.34 361.6 490.54 185.6zM401.7 299.8l-33.15 11.05 11.46 34.38c4.5 13.92-2.87 29.06-16.78 33.56-2.87.82-6.14 1.64-9 1.23a27.32 27.32 0 0 1-24.56-18l-11.46-34.38-68.36 22.92 11.46 34.38c4.5 13.92-2.87 29.06-16.78 33.56-2.87.82-6.14 1.64-9 1.23a27.32 27.32 0 0 1-24.56-18l-11.46-34.43-33.15 11.05c-2.87.82-6.14 1.64-9 1.23a27.32 27.32 0 0 1-24.56-18c-4.5-13.92 2.87-29.06 16.78-33.56l33.12-11.03-22.1-65.9-33.15 11.05c-2.87.82-6.14 1.64-9 1.23a27.32 27.32 0 0 1-24.56-18c-4.48-13.93 2.89-29.07 16.81-33.58l33.15-11.05-11.46-34.38c-4.5-13.92 2.87-29.06 16.78-33.56s29.06 2.87 33.56 16.78l11.46 34.38 68.36-22.92-11.46-34.38c-4.5-13.92 2.87-29.06 16.78-33.56s29.06 2.87 33.56 16.78l11.47 34.42 33.15-11.05c13.92-4.5 29.06 2.87 33.56 16.78s-2.87 29.06-16.78 33.56L329.7 194.6l22.1 65.9 33.15-11.05c13.92-4.5 29.06 2.87 33.56 16.78s-2.88 29.07-16.81 33.57z"/></svg>
\ No newline at end of file
diff --git a/site/layouts/partials/icons/twitter.svg b/site/layouts/partials/icons/twitter.svg
new file mode 100644 (file)
index 0000000..1742712
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg"{{ with .width }} width="{{ . }}"{{ end }}{{ with .height }} height="{{ . }}"{{ end }}{{ with .class }} class="{{ . }}"{{ end }} viewBox="0 0 512 416.32" role="img" focusable="false"><title>{{ with .title }}{{ . }}{{ else }}Twitter{{ end }}</title><path fill="currentColor" d="M160.83 416.32c193.2 0 298.92-160.22 298.92-298.92 0-4.51 0-9-.2-13.52A214 214 0 0 0 512 49.38a212.93 212.93 0 0 1-60.44 16.6 105.7 105.7 0 0 0 46.3-58.19 209 209 0 0 1-66.79 25.37 105.09 105.09 0 0 0-181.73 71.91 116.12 116.12 0 0 0 2.66 24c-87.28-4.3-164.73-46.3-216.56-109.82A105.48 105.48 0 0 0 68 159.6a106.27 106.27 0 0 1-47.53-13.11v1.43a105.28 105.28 0 0 0 84.21 103.06 105.67 105.67 0 0 1-47.33 1.84 105.06 105.06 0 0 0 98.14 72.94A210.72 210.72 0 0 1 25 370.84a202.17 202.17 0 0 1-25-1.43 298.85 298.85 0 0 0 160.83 46.92"/></svg>
\ No newline at end of file
diff --git a/site/layouts/partials/scripts.html b/site/layouts/partials/scripts.html
new file mode 100644 (file)
index 0000000..9b05f24
--- /dev/null
@@ -0,0 +1,23 @@
+<script src="{{ .Site.Params.cdn.jquery }}" {{ printf "integrity=%q" .Site.Params.cdn.jquery_hash | safeHTMLAttr }} crossorigin="anonymous"></script>
+<script>window.jQuery || document.write('<script src="/docs/{{ .Site.Params.docs_version }}/assets/js/vendor/jquery.slim.min.js"><\/script>')</script>
+
+{{ if eq hugo.Environment "production" -}}
+  <script src="/docs/{{ .Site.Params.docs_version }}/dist/js/bootstrap.bundle.min.js" {{ printf "integrity=%q" .Site.Params.cdn.js_bundle_hash | safeHTMLAttr }} crossorigin="anonymous"></script>
+{{ else -}}
+  <script src="/docs/{{ .Site.Params.docs_version }}/dist/js/bootstrap.bundle.js"></script>
+{{- end }}
+
+{{ if eq .Page.Layout "docs" -}}
+<script src="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.js"></script>
+{{- end }}
+
+{{- $vendor := resources.Match "js/vendor/*.js" -}}
+{{- $js := resources.Match "js/*.js" -}}
+{{- $targetDocsJSPath := printf "/docs/%s/assets/js/docs.js" .Site.Params.docs_version -}}
+{{- $docsJs := append $js $vendor | resources.Concat $targetDocsJSPath -}}
+
+{{- if eq hugo.Environment "production" -}}
+  {{- $docsJs = $docsJs | resources.Minify -}}
+{{- end }}
+
+<script src="{{ $docsJs.Permalink | relURL }}"></script>
similarity index 51%
rename from site/_includes/skippy.html
rename to site/layouts/partials/skippy.html
index 4fb12b8bd09b08c5746471a1eb6118dc8d7bec9c..8bb04117808ded7afb7cd174d954968b554167c6 100644 (file)
@@ -1,8 +1,8 @@
 <div class="skippy overflow-hidden">
   <div class="container-xl">
     <a class="sr-only sr-only-focusable d-inline-flex p-2 m-1" href="#content">Skip to main content</a>
-    {%- if page.layout == "docs" -%}
-      <a class="sr-only sr-only-focusable d-none d-md-inline-flex p-2 m-1" href="#bd-docs-nav">Skip to docs navigation</a>
-    {%- endif -%}
+    {{ if (eq .Page.Layout "docs") -}}
+    <a class="sr-only sr-only-focusable d-none d-md-inline-flex p-2 m-1" href="#bd-docs-nav">Skip to docs navigation</a>
+    {{- end }}
   </div>
 </div>
diff --git a/site/layouts/partials/social.html b/site/layouts/partials/social.html
new file mode 100644 (file)
index 0000000..f44d99f
--- /dev/null
@@ -0,0 +1,17 @@
+{{ "<!-- Twitter -->" | safeHTML }}
+<meta name="twitter:card" content="{{ if .IsHome }}summary_large_image{{ else }}summary{{ end }}">
+<meta name="twitter:site" content="@{{ .Site.Params.twitter }}">
+<meta name="twitter:creator" content="@{{ .Site.Params.twitter }}">
+<meta name="twitter:title" content="{{ .Title | markdownify }}">
+<meta name="twitter:description" content="{{ .Page.Params.description | default .Site.Params.description | markdownify }}">
+<meta name="twitter:image" content="{{ if .IsHome }}{{ .Site.Params.social_image_path | absURL }}{{ else }}{{ .Site.Params.social_logo_path | absURL }}{{ end }}">
+
+{{ "<!-- Facebook -->" | safeHTML }}
+<meta property="og:url" content="{{ .Permalink }}">
+<meta property="og:title" content="{{ .Title | markdownify }}">
+<meta property="og:description" content="{{ .Page.Params.description | default .Site.Params.description | markdownify }}">
+<meta property="og:type" content="{{ if .IsPage }}article{{ else }}website{{ end }}">
+<meta property="og:image" content="{{ .Site.Params.social_image_path | absURL }}">
+<meta property="og:image:type" content="image/png">
+<meta property="og:image:width" content="1200">
+<meta property="og:image:height" content="630">
diff --git a/site/layouts/partials/stylesheet.html b/site/layouts/partials/stylesheet.html
new file mode 100644 (file)
index 0000000..8013e6f
--- /dev/null
@@ -0,0 +1,25 @@
+{{- "<!-- Bootstrap core CSS -->" | safeHTML }}
+{{ if eq hugo.Environment "production" -}}
+<link href="/docs/{{ .Site.Params.docs_version }}/dist/css/bootstrap.min.css" rel="stylesheet" {{ printf "integrity=%q" .Site.Params.cdn.css_hash | safeHTMLAttr }} crossorigin="anonymous">
+{{- else -}}
+<link href="/docs/{{ .Site.Params.docs_version }}/dist/css/bootstrap.css" rel="stylesheet">
+{{- end }}
+
+{{ if (or (eq .Page.Layout "docs") (eq .Page.Layout "single")) -}}
+{{- "<!-- Documentation extras -->" | safeHTML }}
+<link href="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css" rel="stylesheet">
+{{- end -}}
+
+{{- if (ne .Page.Layout "examples") }}
+{{- $targetDocsCssPath := printf "/docs/%s/assets/css/docs.css" .Site.Params.docs_version -}}
+{{- $sassOptions := dict "targetPath" $targetDocsCssPath "outputStyle" "expanded" "precision" 6 -}}
+{{- $postcssOptions := dict "use" "autoprefixer" "noMap" true -}}
+
+{{ if eq hugo.Environment "production" -}}
+  {{- $sassOptions = merge $sassOptions (dict "outputStyle" "compressed") -}}
+{{- end -}}
+
+{{- $style := resources.Get "scss/docs.scss" | toCSS $sassOptions | postCSS $postcssOptions }}
+
+<link href="{{ $style.Permalink | relURL }}" rel="stylesheet">
+{{- end }}
diff --git a/site/layouts/robots.txt b/site/layouts/robots.txt
new file mode 100644 (file)
index 0000000..271b4f1
--- /dev/null
@@ -0,0 +1,12 @@
+# www.robotstxt.org
+
+{{- $isProduction := eq hugo.Environment "production" -}}
+{{- $isNetlify := eq (getenv "NETLIFY") "true" -}}
+{{- $allowCrawling := and (not $isNetlify) $isProduction -}}
+
+{{ if $allowCrawling }}
+# Allow crawling of all content
+{{- end }}
+User-agent: *
+Disallow:{{ if not $allowCrawling }} /{{ end }}
+Sitemap: {{ "/sitemap.xml" | absURL }}
diff --git a/site/layouts/shortcodes/callout.html b/site/layouts/shortcodes/callout.html
new file mode 100644 (file)
index 0000000..007f8a8
--- /dev/null
@@ -0,0 +1,10 @@
+{{- /*
+  Usage: `callout "type"`,
+  where type is one of info (default), danger, warning
+*/ -}}
+
+{{- $css_class := .Get 0 | default "info" -}}
+
+<div class="bd-callout bd-callout-{{ $css_class }}">
+{{ .Inner | markdownify }}
+</div>
diff --git a/site/layouts/shortcodes/docsref.html b/site/layouts/shortcodes/docsref.html
new file mode 100644 (file)
index 0000000..88e43d1
--- /dev/null
@@ -0,0 +1 @@
+{{- relref . ((printf "docs/%s%s" $.Site.Params.docs_version (.Get 0)) | relURL) -}}
diff --git a/site/layouts/shortcodes/example.html b/site/layouts/shortcodes/example.html
new file mode 100644 (file)
index 0000000..fd20839
--- /dev/null
@@ -0,0 +1,26 @@
+{{- /*
+  Usage: `example [args]`
+
+  `args` are optional and can be one of the following:
+    id: the `div`'s id - default: ""
+    class: any extra class(es) to be added to the `div` - default ""
+    show_preview: if the preview should be output in the HTML - default: `true`
+    show_markup: if the markup should be output in the HTML - default: `true`
+*/ -}}
+
+{{- $lang := .Get "lang" | default "html" -}}
+{{- $show_preview := .Get "show_preview" | default true -}}
+{{- $show_markup := .Get "show_markup" | default true -}}
+{{- $input := .Inner -}}
+
+{{- if eq $show_preview true -}}
+<div{{ with .Get "id" }} id="{{ . }}"{{ end }} class="bd-example{{ with .Get "class" }} {{ . }}{{ end }}">
+  {{- $input -}}
+</div>
+{{- end -}}
+
+{{- if eq $show_markup true -}}
+  {{- $content := replaceRE `<svg class="bd\-placeholder\-img(?:\-lg)?(?: *?bd\-placeholder\-img\-lg)? ?(.*?)".*?<\/svg>\n` `<img src="..." class="$1" alt="...">` $input -}}
+  {{- $content = replaceRE ` (class=" *?")` "" $content -}}
+  {{- highlight (trim $content "\n") $lang "" -}}
+{{- end -}}
diff --git a/site/layouts/shortcodes/markdown.html b/site/layouts/shortcodes/markdown.html
new file mode 100644 (file)
index 0000000..82107bc
--- /dev/null
@@ -0,0 +1 @@
+{{- .Inner | markdownify -}}
diff --git a/site/layouts/shortcodes/param.html b/site/layouts/shortcodes/param.html
new file mode 100644 (file)
index 0000000..50e2060
--- /dev/null
@@ -0,0 +1,12 @@
+{{- /*
+  Work around wrong escapes in integrity attributes.
+*/ -}}
+
+{{- $name := .Get 0 -}}
+{{- with $name -}}
+{{- $value := $.Page.Param . -}}
+{{- if in $name "_hash" -}}
+  {{- $value = $value | safeHTML -}}
+{{- end -}}
+{{- with $value }}{{ . }}{{ else }}{{ errorf "Param %q not found: %s" $name $.Position }}{{ end -}}
+{{- else }}{{ errorf "Missing param key: %s" $.Position }}{{ end -}}
diff --git a/site/layouts/shortcodes/partial.html b/site/layouts/shortcodes/partial.html
new file mode 100644 (file)
index 0000000..c9d3496
--- /dev/null
@@ -0,0 +1 @@
+{{ partial (.Get 0) . }}
diff --git a/site/layouts/shortcodes/placeholder.html b/site/layouts/shortcodes/placeholder.html
new file mode 100644 (file)
index 0000000..2373bc9
--- /dev/null
@@ -0,0 +1,30 @@
+{{- /*
+  Usage: `placeholder args`
+
+  args can be one of the following:
+    title: Used in the SVG `title` tag, default "Placeholder"
+    text: The text to show in the image - default: "width x height"
+    class: default: "bd-placeholder-img"
+    color: The text color (foreground) - default: "#dee2e6"
+    background: The background color - default: "#868e96"
+    width: default: 100%
+    height: default: 180px
+*/ -}}
+
+{{- $grays := $.Site.Data.grays -}}
+{{- $title := .Get "title" | default "Placeholder" -}}
+{{- $class := .Get "class" -}}
+{{- $color := .Get "color" | default (index $grays 2).hex -}}
+{{- $background := .Get "background" | default (index $grays 5).hex -}}
+{{- $width := .Get "width" | default "100%" -}}
+{{- $height := .Get "height" | default "180" -}}
+{{- $text := .Get "text" | default (printf "%sx%s" $width $height) -}}
+
+{{- $show_title := not (eq $title "false") -}}
+{{- $show_text := not (eq $text "false") -}}
+
+<svg class="bd-placeholder-img{{ with $class }} {{ . }}{{ end }}" width="{{ $width }}" height="{{ $height }}" xmlns="http://www.w3.org/2000/svg"{{ if (or $show_title $show_text) }} role="img" aria-label="{{ if $show_title }}{{ $title }}{{ if $show_text }}: {{ end }}{{ end }}{{ if ($show_text) }}{{ $text }}{{ end }}"{{ else }} aria-hidden="true"{{ end }} preserveAspectRatio="xMidYMid slice" focusable="false">
+  {{- if $show_title -}}<title>{{ $title }}</title>{{- end -}}
+  <rect width="100%" height="100%" fill="{{ $background }}"/>
+  {{- if $show_text -}}<text x="50%" y="50%" fill="{{ $color }}" dy=".3em">{{ $text }}</text>{{- end -}}
+</svg>
diff --git a/site/layouts/shortcodes/year.html b/site/layouts/shortcodes/year.html
new file mode 100644 (file)
index 0000000..bc9dd30
--- /dev/null
@@ -0,0 +1,5 @@
+{{- /*
+  Output the current year
+*/ -}}
+
+{{- now.Format "2006" -}}
diff --git a/site/layouts/sitemap.xml b/site/layouts/sitemap.xml
new file mode 100644 (file)
index 0000000..972ebf6
--- /dev/null
@@ -0,0 +1,10 @@
+{{ printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>" | safeHTML }}
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">
+  {{- range .Data.Pages -}}{{ if ne .Params.sitemap_exclude true }}
+  <url>
+    <loc>{{ .Permalink }}</loc>{{ if not .Lastmod.IsZero }}
+    <lastmod>{{ safeHTML (.Lastmod.Format "2006-01-02T15:04:05-07:00") }}</lastmod>{{ end }}{{ with .Sitemap.ChangeFreq }}
+    <changefreq>{{ . }}</changefreq>{{ end }}{{ if ge .Sitemap.Priority 0.0 }}
+    <priority>{{ .Sitemap.Priority }}</priority>{{ end }}
+  </url>{{ end }}{{ end }}
+</urlset>
diff --git a/site/robots.txt b/site/robots.txt
deleted file mode 100644 (file)
index 9097d50..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
----
----
-
-# www.robotstxt.org/
-
-{% if jekyll.environment != "netlify" -%}
-# Allow crawling of all content
-{%- endif %}
-User-agent: *
-Disallow:{% if jekyll.environment == "netlify" %} /{% endif %}
-Sitemap: {{ site.url }}/sitemap.xml
similarity index 100%
rename from CNAME
rename to site/static/CNAME
similarity index 100%
rename from site/sw.js
rename to site/static/sw.js