From d95d30029f8d63190eb242c9914cee16b6b90627 Mon Sep 17 00:00:00 2001 From: XhmikosR Date: Tue, 8 Jan 2019 18:33:28 +0200 Subject: [PATCH] Switch to Hugo. No more Ruby dependency and most important more than 10 times less build time (at least on Windows)! --- .github/CONTRIBUTING.md | 2 +- .gitignore | 9 +- .travis.yml | 4 - Gemfile | 9 - Gemfile.lock | 82 -- README.md | 14 +- _config.yml | 66 -- build/generate-sri.js | 4 +- config.yml | 55 + package-lock.json | 1005 ++++++++++++++++- package.json | 35 +- site/_data/docs-versions.yml | 44 - site/_includes/bugify.html | 42 - .../callout-info-prefersreducedmotion.md | 4 - site/_includes/callout.html | 9 - site/_includes/docs-navbar.html | 71 -- site/_includes/docs-sidebar.html | 43 - site/_includes/example.html | 51 - site/_includes/favicons.html | 9 - site/_includes/footer.html | 12 - site/_includes/header.html | 23 - site/_includes/icons/bootstrap-stack.svg | 1 - site/_includes/icons/bootstrap.svg | 1 - site/_includes/icons/download.svg | 1 - site/_includes/icons/github.svg | 1 - site/_includes/icons/import.svg | 1 - site/_includes/icons/lightning.svg | 1 - site/_includes/icons/menu.svg | 1 - site/_includes/icons/opencollective.svg | 1 - site/_includes/icons/placeholder.svg | 35 - site/_includes/icons/slack.svg | 1 - site/_includes/icons/twitter.svg | 1 - site/_includes/scripts.html | 19 - site/_includes/social.html | 18 - site/_includes/stylesheet.html | 16 - site/_layouts/default.html | 22 - site/_layouts/docs.html | 34 - site/_layouts/examples.html | 52 - site/_layouts/home.html | 16 - site/_layouts/simple.html | 18 - site/{ => content}/docs/4.3/about/brand.md | 10 +- site/{ => content}/docs/4.3/about/license.md | 4 +- site/{ => content}/docs/4.3/about/overview.md | 6 +- site/content/docs/4.3/about/team.md | 23 + .../docs/4.3/about/translations.md | 8 +- site/{ => content}/docs/4.3/browser-bugs.md | 24 +- .../docs/4.3/components/alerts.md | 68 +- .../docs/4.3/components/badge.md | 52 +- .../docs/4.3/components/breadcrumb.md | 5 +- .../docs/4.3/components/button-group.md | 35 +- .../docs/4.3/components/buttons.md | 91 +- .../{ => content}/docs/4.3/components/card.md | 233 ++-- .../docs/4.3/components/carousel.md | 90 +- .../docs/4.3/components/collapse.md | 37 +- .../docs/4.3/components/dropdowns.md | 134 +-- .../docs/4.3/components/forms.md | 293 ++--- .../docs/4.3/components/input-group.md | 55 +- .../docs/4.3/components/jumbotron.md | 10 +- .../docs/4.3/components/list-group.md | 118 +- .../docs/4.3/components/media-object.md | 57 +- .../docs/4.3/components/modal.md | 83 +- .../docs/4.3/components/navbar.md | 137 +-- .../{ => content}/docs/4.3/components/navs.md | 136 +-- .../docs/4.3/components/pagination.md | 42 +- .../docs/4.3/components/popovers.md | 86 +- .../docs/4.3/components/progress.md | 41 +- .../docs/4.3/components/scrollspy.md | 46 +- .../docs/4.3/components/spinners.md | 102 +- .../docs/4.3/components/toasts.md | 79 +- .../docs/4.3/components/tooltips.md | 85 +- site/{ => content}/docs/4.3/content/code.md | 25 +- site/content/docs/4.3/content/figures.md | 26 + site/content/docs/4.3/content/images.md | 77 ++ site/{ => content}/docs/4.3/content/reboot.md | 36 +- site/{ => content}/docs/4.3/content/tables.md | 247 ++-- .../docs/4.3/content/typography.md | 86 +- .../docs/4.3/examples/.stylelintrc | 0 site/content/docs/4.3/examples/_index.md | 8 + .../docs/4.3/examples/album/album.css | 0 .../docs/4.3/examples/album/index.html | 23 +- .../docs/4.3/examples/blog/blog.css | 0 .../docs/4.3/examples/blog/index.html | 4 +- .../docs/4.3/examples/carousel/carousel.css | 0 .../docs/4.3/examples/carousel/index.html | 23 +- .../4.3/examples/checkout/form-validation.css | 0 .../4.3/examples/checkout/form-validation.js | 0 .../docs/4.3/examples/checkout/index.html | 10 +- .../docs/4.3/examples/cover/cover.css | 0 .../docs/4.3/examples/cover/index.html | 3 +- .../docs/4.3/examples/dashboard/dashboard.css | 0 .../docs/4.3/examples/dashboard/dashboard.js | 0 .../docs/4.3/examples/dashboard/index.html | 3 +- .../floating-labels/floating-labels.css | 0 .../4.3/examples/floating-labels/index.html | 7 +- .../docs/4.3/examples/grid/grid.css | 0 .../docs/4.3/examples/grid/index.html | 3 +- .../docs/4.3/examples/jumbotron/index.html | 5 +- .../docs/4.3/examples/jumbotron/jumbotron.css | 0 .../4.3/examples/navbar-bottom/index.html | 2 +- .../docs/4.3/examples/navbar-fixed/index.html | 5 +- .../navbar-fixed/navbar-top-fixed.css | 0 .../4.3/examples/navbar-static/index.html | 5 +- .../4.3/examples/navbar-static/navbar-top.css | 0 .../docs/4.3/examples/navbars/index.html | 7 +- .../docs/4.3/examples/navbars/navbar.css | 0 .../docs/4.3/examples/offcanvas/index.html | 20 +- .../docs/4.3/examples/offcanvas/offcanvas.css | 0 .../docs/4.3/examples/offcanvas/offcanvas.js | 0 .../docs/4.3/examples/pricing/index.html | 7 +- .../docs/4.3/examples/pricing/pricing.css | 0 .../docs/4.3/examples/product/index.html | 5 +- .../docs/4.3/examples/product/product.css | 0 .../docs/4.3/examples/sign-in/index.html | 7 +- .../docs/4.3/examples/sign-in/signin.css | 0 .../4.3/examples/starter-template/index.html | 3 +- .../starter-template/starter-template.css | 0 .../examples/sticky-footer-navbar/index.html | 5 +- .../sticky-footer-navbar.css | 0 .../4.3/examples/sticky-footer/index.html | 5 +- .../examples/sticky-footer/sticky-footer.css | 0 .../{ => content}/docs/4.3/extend/approach.md | 9 +- site/{ => content}/docs/4.3/extend/icons.md | 0 .../docs/4.3/getting-started/accessibility.md | 8 +- .../4.3/getting-started/best-practices.md | 5 +- .../4.3/getting-started/browsers-devices.md | 18 +- .../docs/4.3/getting-started/build-tools.md | 21 +- .../docs/4.3/getting-started/contents.md | 21 +- .../docs/4.3/getting-started/download.md | 58 +- .../docs/4.3/getting-started/introduction.md | 61 +- .../docs/4.3/getting-started/javascript.md | 77 +- .../docs/4.3/getting-started/theming.md | 133 +-- .../docs/4.3/getting-started/webpack.md | 30 +- site/{ => content}/docs/4.3/layout/grid.md | 156 ++- .../{ => content}/docs/4.3/layout/overview.md | 50 +- .../docs/4.3/layout/utilities-for-layout.md | 25 + site/{ => content}/docs/4.3/migration.md | 24 +- .../docs/4.3/utilities/borders.md | 52 +- .../docs/4.3/utilities/clearfix.md | 13 +- .../docs/4.3/utilities/close-icon.md | 5 +- .../docs/4.3/utilities/colors.md | 56 +- .../docs/4.3/utilities/display.md | 22 +- .../{ => content}/docs/4.3/utilities/embed.md | 13 +- site/{ => content}/docs/4.3/utilities/flex.md | 236 ++-- .../{ => content}/docs/4.3/utilities/float.md | 29 +- .../docs/4.3/utilities/image-replacement.md | 19 +- .../docs/4.3/utilities/overflow.md | 4 +- .../docs/4.3/utilities/position.md | 16 +- .../docs/4.3/utilities/screen-readers.md | 13 +- .../docs/4.3/utilities/shadows.md | 5 +- .../docs/4.3/utilities/sizing.md | 30 +- .../docs/4.3/utilities/spacing.md | 17 +- .../docs/4.3/utilities/stretched-link.md | 28 +- site/{ => content}/docs/4.3/utilities/text.md | 55 +- .../docs/4.3/utilities/vertical-align.md | 10 +- .../docs/4.3/utilities/visibility.md | 8 +- site/content/docs/versions.md | 6 + site/{_data => data}/breakpoints.yml | 0 site/{_data => data}/browser-bugs.yml | 2 +- site/{_data => data}/browser-features.yml | 0 site/{_data => data}/colors.yml | 0 site/{_data => data}/core-team.yml | 0 site/data/docs-versions.yml | 44 + site/{_data => data}/examples.yml | 2 +- site/{_data => data}/grays.yml | 0 site/{_data => data}/nav.yml | 0 site/{_data => data}/theme-colors.yml | 0 site/{_data => data}/translations.yml | 0 site/docs/4.3/about/team.md | 21 - site/docs/4.3/content/figures.md | 28 - site/docs/4.3/content/images.md | 77 -- site/docs/4.3/examples/index.html | 24 - site/docs/4.3/layout/utilities-for-layout.md | 25 - site/docs/versions.html | 29 - site/index.html | 88 -- site/layouts/_default/docs.html | 34 + site/layouts/_default/examples.html | 52 + site/layouts/_default/home.html | 19 + site/layouts/_default/single.html | 29 + site/layouts/alias.html | 11 + site/{_includes => layouts/partials}/ads.html | 0 .../partials}/analytics.html | 0 .../partials}/callout-danger-async-methods.md | 5 +- .../callout-info-mediaqueries-breakpoints.md | 3 - .../callout-info-prefersreducedmotion.md | 1 + ...ut-warning-color-assistive-technologies.md | 3 - site/layouts/partials/docs-navbar.html | 71 ++ site/layouts/partials/docs-sidebar.html | 43 + site/layouts/partials/favicons.html | 9 + site/layouts/partials/footer.html | 12 + site/layouts/partials/header.html | 17 + .../partials/home/masthead-followup.html | 46 + site/layouts/partials/home/masthead.html | 30 + .../partials/icons/bootstrap-stack.svg | 1 + site/layouts/partials/icons/bootstrap.svg | 1 + site/layouts/partials/icons/download.svg | 1 + site/layouts/partials/icons/github.svg | 1 + site/layouts/partials/icons/import.svg | 1 + site/layouts/partials/icons/lightning.svg | 1 + site/layouts/partials/icons/menu.svg | 1 + .../layouts/partials/icons/opencollective.svg | 1 + site/layouts/partials/icons/slack.svg | 1 + site/layouts/partials/icons/twitter.svg | 1 + site/layouts/partials/scripts.html | 19 + .../partials}/skippy.html | 0 site/layouts/partials/social.html | 18 + site/layouts/partials/stylesheet.html | 16 + site/layouts/robots.txt | 8 + site/layouts/shortcodes/bugify.html | 40 + site/layouts/shortcodes/callout.html | 10 + site/layouts/shortcodes/example.html | 53 + site/layouts/shortcodes/list-examples.html | 19 + site/layouts/shortcodes/list-versions.html | 20 + site/layouts/shortcodes/markdown.html | 1 + site/layouts/shortcodes/partial.html | 1 + site/layouts/shortcodes/placeholder.html | 30 + site/layouts/shortcodes/year.html | 5 + site/layouts/sitemap.xml | 9 + site/robots.txt | 9 - CNAME => site/static/CNAME | 0 .../4.3/assets/brand/bootstrap-outline.svg | 0 .../4.3/assets/brand/bootstrap-punchout.svg | 0 .../assets/brand/bootstrap-social-logo.png | Bin .../4.3/assets/brand/bootstrap-social.png | Bin .../docs/4.3/assets/brand/bootstrap-solid.svg | 0 .../docs/4.3/assets/css/docs.min.css | 0 .../docs/4.3/assets/css/docs.min.css.map | 0 .../docs/4.3/assets/img/bootstrap-themes.png | Bin .../4.3/assets/img/bootstrap-themes@2x.png | Bin .../docs/4.3/assets/img/examples/album.png | Bin .../docs/4.3/assets/img/examples/album@2x.png | Bin .../docs/4.3/assets/img/examples/blog.png | Bin .../docs/4.3/assets/img/examples/blog@2x.png | Bin .../docs/4.3/assets/img/examples/carousel.png | Bin .../4.3/assets/img/examples/carousel@2x.png | Bin .../docs/4.3/assets/img/examples/checkout.png | Bin .../4.3/assets/img/examples/checkout@2x.png | Bin .../docs/4.3/assets/img/examples/cover.png | Bin .../docs/4.3/assets/img/examples/cover@2x.png | Bin .../4.3/assets/img/examples/dashboard.png | Bin .../4.3/assets/img/examples/dashboard@2x.png | Bin .../assets/img/examples/floating-labels.png | Bin .../img/examples/floating-labels@2x.png | Bin .../docs/4.3/assets/img/examples/grid.png | Bin .../docs/4.3/assets/img/examples/grid@2x.png | Bin .../4.3/assets/img/examples/jumbotron.png | Bin .../4.3/assets/img/examples/jumbotron@2x.png | Bin .../4.3/assets/img/examples/navbar-bottom.png | Bin .../assets/img/examples/navbar-bottom@2x.png | Bin .../4.3/assets/img/examples/navbar-fixed.png | Bin .../assets/img/examples/navbar-fixed@2x.png | Bin .../4.3/assets/img/examples/navbar-static.png | Bin .../assets/img/examples/navbar-static@2x.png | Bin .../docs/4.3/assets/img/examples/navbars.png | Bin .../4.3/assets/img/examples/navbars@2x.png | Bin .../4.3/assets/img/examples/offcanvas.png | Bin .../4.3/assets/img/examples/offcanvas@2x.png | Bin .../docs/4.3/assets/img/examples/pricing.png | Bin .../4.3/assets/img/examples/pricing@2x.png | Bin .../docs/4.3/assets/img/examples/product.png | Bin .../4.3/assets/img/examples/product@2x.png | Bin .../docs/4.3/assets/img/examples/sign-in.png | Bin .../4.3/assets/img/examples/sign-in@2x.png | Bin .../assets/img/examples/starter-template.png | Bin .../img/examples/starter-template@2x.png | Bin .../img/examples/sticky-footer-navbar.png | Bin .../img/examples/sticky-footer-navbar@2x.png | Bin .../4.3/assets/img/examples/sticky-footer.png | Bin .../assets/img/examples/sticky-footer@2x.png | Bin .../img/favicons/android-chrome-192x192.png | Bin .../img/favicons/android-chrome-512x512.png | Bin .../assets/img/favicons/apple-touch-icon.png | Bin .../4.3/assets/img/favicons/browserconfig.xml | 4 +- .../4.3/assets/img/favicons/favicon-16x16.png | Bin .../4.3/assets/img/favicons/favicon-32x32.png | Bin .../docs/4.3/assets/img/favicons}/favicon.ico | Bin .../4.3/assets/img/favicons/manifest.json | 6 +- .../assets/img/favicons/mstile-144x144.png | Bin .../assets/img/favicons/mstile-150x150.png | Bin .../assets/img/favicons/mstile-310x150.png | Bin .../assets/img/favicons/mstile-310x310.png | Bin .../4.3/assets/img/favicons/mstile-70x70.png | Bin .../assets/img/favicons/safari-pinned-tab.svg | 0 .../docs/4.3/assets/js/docs.min.js | 0 .../docs/4.3/assets/js/src/application.js | 0 .../docs/4.3/assets/js/src/search.js | 0 .../docs/4.3/assets/js/vendor/anchor.min.js | 0 .../js/vendor/bs-custom-file-input.min.js | 0 .../4.3/assets/js/vendor/clipboard.min.js | 0 .../docs/4.3/assets/scss/_ads.scss | 0 .../docs/4.3/assets/scss/_algolia.scss | 0 .../docs/4.3/assets/scss/_anchor.scss | 0 .../docs/4.3/assets/scss/_brand.scss | 0 .../docs/4.3/assets/scss/_browser-bugs.scss | 3 - .../docs/4.3/assets/scss/_buttons.scss | 0 .../docs/4.3/assets/scss/_callouts.scss | 0 .../docs/4.3/assets/scss/_clipboard-js.scss | 0 .../docs/4.3/assets/scss/_colors.scss | 0 .../4.3/assets/scss/_component-examples.scss | 0 .../docs/4.3/assets/scss/_content.scss | 0 .../docs/4.3/assets/scss/_footer.scss | 0 .../docs/4.3/assets/scss/_masthead.scss | 0 .../docs/4.3/assets/scss/_nav.scss | 0 .../4.3/assets/scss/_placeholder-img.scss | 0 .../docs/4.3/assets/scss/_sidebar.scss | 35 +- .../docs/4.3/assets/scss/_skippy.scss | 0 .../docs/4.3/assets/scss/_syntax.scss | 0 .../docs/4.3/assets/scss/_variables.scss | 0 .../docs/4.3/assets/scss/docs.scss | 6 +- site/static/favicon.ico | Bin 0 -> 5430 bytes site/{ => static}/sw.js | 0 310 files changed, 3874 insertions(+), 3186 deletions(-) delete mode 100644 Gemfile delete mode 100644 Gemfile.lock delete mode 100644 _config.yml create mode 100644 config.yml delete mode 100644 site/_data/docs-versions.yml delete mode 100644 site/_includes/bugify.html delete mode 100644 site/_includes/callout-info-prefersreducedmotion.md delete mode 100644 site/_includes/callout.html delete mode 100644 site/_includes/docs-navbar.html delete mode 100644 site/_includes/docs-sidebar.html delete mode 100644 site/_includes/example.html delete mode 100644 site/_includes/favicons.html delete mode 100644 site/_includes/footer.html delete mode 100644 site/_includes/header.html delete mode 100644 site/_includes/icons/bootstrap-stack.svg delete mode 100644 site/_includes/icons/bootstrap.svg delete mode 100644 site/_includes/icons/download.svg delete mode 100644 site/_includes/icons/github.svg delete mode 100644 site/_includes/icons/import.svg delete mode 100644 site/_includes/icons/lightning.svg delete mode 100644 site/_includes/icons/menu.svg delete mode 100644 site/_includes/icons/opencollective.svg delete mode 100644 site/_includes/icons/placeholder.svg delete mode 100644 site/_includes/icons/slack.svg delete mode 100644 site/_includes/icons/twitter.svg delete mode 100644 site/_includes/scripts.html delete mode 100644 site/_includes/social.html delete mode 100644 site/_includes/stylesheet.html delete mode 100644 site/_layouts/default.html delete mode 100644 site/_layouts/docs.html delete mode 100644 site/_layouts/examples.html delete mode 100644 site/_layouts/home.html delete mode 100644 site/_layouts/simple.html rename site/{ => content}/docs/4.3/about/brand.md (75%) rename site/{ => content}/docs/4.3/about/license.md (84%) rename site/{ => content}/docs/4.3/about/overview.md (78%) create mode 100644 site/content/docs/4.3/about/team.md rename site/{ => content}/docs/4.3/about/translations.md (69%) rename site/{ => content}/docs/4.3/browser-bugs.md (79%) rename site/{ => content}/docs/4.3/components/alerts.md (78%) rename site/{ => content}/docs/4.3/components/badge.md (68%) rename site/{ => content}/docs/4.3/components/breadcrumb.md (96%) rename site/{ => content}/docs/4.3/components/button-group.md (93%) rename site/{ => content}/docs/4.3/components/buttons.md (82%) rename site/{ => content}/docs/4.3/components/card.md (78%) rename site/{ => content}/docs/4.3/components/carousel.md (76%) rename site/{ => content}/docs/4.3/components/collapse.md (94%) rename site/{ => content}/docs/4.3/components/dropdowns.md (93%) rename site/{ => content}/docs/4.3/components/forms.md (90%) rename site/{ => content}/docs/4.3/components/input-group.md (93%) rename site/{ => content}/docs/4.3/components/jumbotron.md (87%) rename site/{ => content}/docs/4.3/components/list-group.md (90%) rename site/{ => content}/docs/4.3/components/media-object.md (80%) rename site/{ => content}/docs/4.3/components/modal.md (96%) rename site/{ => content}/docs/4.3/components/navbar.md (86%) rename site/{ => content}/docs/4.3/components/navs.md (93%) rename site/{ => content}/docs/4.3/components/pagination.md (89%) rename site/{ => content}/docs/4.3/components/popovers.md (87%) rename site/{ => content}/docs/4.3/components/progress.md (87%) rename site/{ => content}/docs/4.3/components/scrollspy.md (95%) rename site/{ => content}/docs/4.3/components/spinners.md (69%) rename site/{ => content}/docs/4.3/components/toasts.md (82%) rename site/{ => content}/docs/4.3/components/tooltips.md (89%) rename site/{ => content}/docs/4.3/content/code.md (75%) create mode 100644 site/content/docs/4.3/content/figures.md create mode 100644 site/content/docs/4.3/content/images.md rename site/{ => content}/docs/4.3/content/reboot.md (94%) rename site/{ => content}/docs/4.3/content/tables.md (82%) rename site/{ => content}/docs/4.3/content/typography.md (84%) rename site/{ => content}/docs/4.3/examples/.stylelintrc (100%) create mode 100644 site/content/docs/4.3/examples/_index.md rename site/{ => content}/docs/4.3/examples/album/album.css (100%) rename site/{ => content}/docs/4.3/examples/album/index.html (85%) rename site/{ => content}/docs/4.3/examples/blog/blog.css (100%) rename site/{ => content}/docs/4.3/examples/blog/index.html (97%) rename site/{ => content}/docs/4.3/examples/carousel/carousel.css (100%) rename site/{ => content}/docs/4.3/examples/carousel/index.html (83%) rename site/{ => content}/docs/4.3/examples/checkout/form-validation.css (100%) rename site/{ => content}/docs/4.3/examples/checkout/form-validation.js (100%) rename site/{ => content}/docs/4.3/examples/checkout/index.html (96%) rename site/{ => content}/docs/4.3/examples/cover/cover.css (100%) rename site/{ => content}/docs/4.3/examples/cover/index.html (97%) rename site/{ => content}/docs/4.3/examples/dashboard/dashboard.css (100%) rename site/{ => content}/docs/4.3/examples/dashboard/dashboard.js (100%) rename site/{ => content}/docs/4.3/examples/dashboard/index.html (99%) rename site/{ => content}/docs/4.3/examples/floating-labels/floating-labels.css (100%) rename site/{ => content}/docs/4.3/examples/floating-labels/index.html (79%) rename site/{ => content}/docs/4.3/examples/grid/grid.css (100%) rename site/{ => content}/docs/4.3/examples/grid/index.html (99%) rename site/{ => content}/docs/4.3/examples/jumbotron/index.html (97%) rename site/{ => content}/docs/4.3/examples/jumbotron/jumbotron.css (100%) rename site/{ => content}/docs/4.3/examples/navbar-bottom/index.html (90%) rename site/{ => content}/docs/4.3/examples/navbar-fixed/index.html (88%) rename site/{ => content}/docs/4.3/examples/navbar-fixed/navbar-top-fixed.css (100%) rename site/{ => content}/docs/4.3/examples/navbar-static/index.html (88%) rename site/{ => content}/docs/4.3/examples/navbar-static/navbar-top.css (100%) rename site/{ => content}/docs/4.3/examples/navbars/index.html (97%) rename site/{ => content}/docs/4.3/examples/navbars/navbar.css (100%) rename site/{ => content}/docs/4.3/examples/offcanvas/index.html (84%) rename site/{ => content}/docs/4.3/examples/offcanvas/offcanvas.css (100%) rename site/{ => content}/docs/4.3/examples/offcanvas/offcanvas.js (100%) rename site/{ => content}/docs/4.3/examples/pricing/index.html (94%) rename site/{ => content}/docs/4.3/examples/pricing/pricing.css (100%) rename site/{ => content}/docs/4.3/examples/product/index.html (98%) rename site/{ => content}/docs/4.3/examples/product/product.css (100%) rename site/{ => content}/docs/4.3/examples/sign-in/index.html (75%) rename site/{ => content}/docs/4.3/examples/sign-in/signin.css (100%) rename site/{ => content}/docs/4.3/examples/starter-template/index.html (98%) rename site/{ => content}/docs/4.3/examples/starter-template/starter-template.css (100%) rename site/{ => content}/docs/4.3/examples/sticky-footer-navbar/index.html (90%) rename site/{ => content}/docs/4.3/examples/sticky-footer-navbar/sticky-footer-navbar.css (100%) rename site/{ => content}/docs/4.3/examples/sticky-footer/index.html (74%) rename site/{ => content}/docs/4.3/examples/sticky-footer/sticky-footer.css (100%) rename site/{ => content}/docs/4.3/extend/approach.md (94%) rename site/{ => content}/docs/4.3/extend/icons.md (100%) rename site/{ => content}/docs/4.3/getting-started/accessibility.md (98%) rename site/{ => content}/docs/4.3/getting-started/best-practices.md (86%) rename site/{ => content}/docs/4.3/getting-started/browsers-devices.md (92%) rename site/{ => content}/docs/4.3/getting-started/build-tools.md (61%) rename site/{ => content}/docs/4.3/getting-started/contents.md (89%) rename site/{ => content}/docs/4.3/getting-started/download.md (65%) rename site/{ => content}/docs/4.3/getting-started/introduction.md (71%) rename site/{ => content}/docs/4.3/getting-started/javascript.md (90%) rename site/{ => content}/docs/4.3/getting-started/theming.md (88%) rename site/{ => content}/docs/4.3/getting-started/webpack.md (75%) rename site/{ => content}/docs/4.3/layout/grid.md (88%) rename site/{ => content}/docs/4.3/layout/overview.md (91%) create mode 100644 site/content/docs/4.3/layout/utilities-for-layout.md rename site/{ => content}/docs/4.3/migration.md (90%) rename site/{ => content}/docs/4.3/utilities/borders.md (50%) rename site/{ => content}/docs/4.3/utilities/clearfix.md (84%) rename site/{ => content}/docs/4.3/utilities/close-icon.md (80%) rename site/{ => content}/docs/4.3/utilities/colors.md (56%) rename site/{ => content}/docs/4.3/utilities/display.md (82%) rename site/{ => content}/docs/4.3/utilities/embed.md (91%) rename site/{ => content}/docs/4.3/utilities/flex.md (86%) rename site/{ => content}/docs/4.3/utilities/float.md (78%) rename site/{ => content}/docs/4.3/utilities/image-replacement.md (64%) rename site/{ => content}/docs/4.3/utilities/overflow.md (95%) rename site/{ => content}/docs/4.3/utilities/position.md (89%) rename site/{ => content}/docs/4.3/utilities/screen-readers.md (65%) rename site/{ => content}/docs/4.3/utilities/shadows.md (89%) rename site/{ => content}/docs/4.3/utilities/sizing.md (75%) rename site/{ => content}/docs/4.3/utilities/spacing.md (95%) rename site/{ => content}/docs/4.3/utilities/stretched-link.md (82%) rename site/{ => content}/docs/4.3/utilities/text.md (80%) rename site/{ => content}/docs/4.3/utilities/vertical-align.md (88%) rename site/{ => content}/docs/4.3/utilities/visibility.md (91%) create mode 100644 site/content/docs/versions.md rename site/{_data => data}/breakpoints.yml (100%) rename site/{_data => data}/browser-bugs.yml (99%) rename site/{_data => data}/browser-features.yml (100%) rename site/{_data => data}/colors.yml (100%) rename site/{_data => data}/core-team.yml (100%) create mode 100644 site/data/docs-versions.yml rename site/{_data => data}/examples.yml (98%) rename site/{_data => data}/grays.yml (100%) rename site/{_data => data}/nav.yml (100%) rename site/{_data => data}/theme-colors.yml (100%) rename site/{_data => data}/translations.yml (100%) delete mode 100644 site/docs/4.3/about/team.md delete mode 100644 site/docs/4.3/content/figures.md delete mode 100644 site/docs/4.3/content/images.md delete mode 100644 site/docs/4.3/examples/index.html delete mode 100644 site/docs/4.3/layout/utilities-for-layout.md delete mode 100644 site/docs/versions.html delete mode 100644 site/index.html create mode 100644 site/layouts/_default/docs.html create mode 100644 site/layouts/_default/examples.html create mode 100644 site/layouts/_default/home.html create mode 100644 site/layouts/_default/single.html create mode 100644 site/layouts/alias.html rename site/{_includes => layouts/partials}/ads.html (100%) rename site/{_includes => layouts/partials}/analytics.html (100%) rename site/{_includes => layouts/partials}/callout-danger-async-methods.md (54%) rename site/{_includes => layouts/partials}/callout-info-mediaqueries-breakpoints.md (81%) create mode 100644 site/layouts/partials/callout-info-prefersreducedmotion.md rename site/{_includes => layouts/partials}/callout-warning-color-assistive-technologies.md (81%) create mode 100644 site/layouts/partials/docs-navbar.html create mode 100644 site/layouts/partials/docs-sidebar.html create mode 100644 site/layouts/partials/favicons.html create mode 100644 site/layouts/partials/footer.html create mode 100644 site/layouts/partials/header.html create mode 100644 site/layouts/partials/home/masthead-followup.html create mode 100644 site/layouts/partials/home/masthead.html create mode 100644 site/layouts/partials/icons/bootstrap-stack.svg create mode 100644 site/layouts/partials/icons/bootstrap.svg create mode 100644 site/layouts/partials/icons/download.svg create mode 100644 site/layouts/partials/icons/github.svg create mode 100644 site/layouts/partials/icons/import.svg create mode 100644 site/layouts/partials/icons/lightning.svg create mode 100644 site/layouts/partials/icons/menu.svg create mode 100644 site/layouts/partials/icons/opencollective.svg create mode 100644 site/layouts/partials/icons/slack.svg create mode 100644 site/layouts/partials/icons/twitter.svg create mode 100644 site/layouts/partials/scripts.html rename site/{_includes => layouts/partials}/skippy.html (100%) create mode 100644 site/layouts/partials/social.html create mode 100644 site/layouts/partials/stylesheet.html create mode 100644 site/layouts/robots.txt create mode 100644 site/layouts/shortcodes/bugify.html create mode 100644 site/layouts/shortcodes/callout.html create mode 100644 site/layouts/shortcodes/example.html create mode 100644 site/layouts/shortcodes/list-examples.html create mode 100644 site/layouts/shortcodes/list-versions.html create mode 100644 site/layouts/shortcodes/markdown.html create mode 100644 site/layouts/shortcodes/partial.html create mode 100644 site/layouts/shortcodes/placeholder.html create mode 100644 site/layouts/shortcodes/year.html create mode 100644 site/layouts/sitemap.xml delete mode 100644 site/robots.txt rename CNAME => site/static/CNAME (100%) rename site/{ => static}/docs/4.3/assets/brand/bootstrap-outline.svg (100%) rename site/{ => static}/docs/4.3/assets/brand/bootstrap-punchout.svg (100%) rename site/{ => static}/docs/4.3/assets/brand/bootstrap-social-logo.png (100%) rename site/{ => static}/docs/4.3/assets/brand/bootstrap-social.png (100%) rename site/{ => static}/docs/4.3/assets/brand/bootstrap-solid.svg (100%) rename site/{ => static}/docs/4.3/assets/css/docs.min.css (100%) rename site/{ => static}/docs/4.3/assets/css/docs.min.css.map (100%) rename site/{ => static}/docs/4.3/assets/img/bootstrap-themes.png (100%) rename site/{ => static}/docs/4.3/assets/img/bootstrap-themes@2x.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/album.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/album@2x.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/blog.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/blog@2x.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/carousel.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/carousel@2x.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/checkout.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/checkout@2x.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/cover.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/cover@2x.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/dashboard.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/dashboard@2x.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/floating-labels.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/floating-labels@2x.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/grid.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/grid@2x.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/jumbotron.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/jumbotron@2x.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/navbar-bottom.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/navbar-bottom@2x.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/navbar-fixed.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/navbar-fixed@2x.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/navbar-static.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/navbar-static@2x.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/navbars.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/navbars@2x.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/offcanvas.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/offcanvas@2x.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/pricing.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/pricing@2x.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/product.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/product@2x.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/sign-in.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/sign-in@2x.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/starter-template.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/starter-template@2x.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/sticky-footer-navbar.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/sticky-footer-navbar@2x.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/sticky-footer.png (100%) rename site/{ => static}/docs/4.3/assets/img/examples/sticky-footer@2x.png (100%) rename site/{ => static}/docs/4.3/assets/img/favicons/android-chrome-192x192.png (100%) rename site/{ => static}/docs/4.3/assets/img/favicons/android-chrome-512x512.png (100%) rename site/{ => static}/docs/4.3/assets/img/favicons/apple-touch-icon.png (100%) rename site/{ => static}/docs/4.3/assets/img/favicons/browserconfig.xml (56%) rename site/{ => static}/docs/4.3/assets/img/favicons/favicon-16x16.png (100%) rename site/{ => static}/docs/4.3/assets/img/favicons/favicon-32x32.png (100%) rename site/{ => static/docs/4.3/assets/img/favicons}/favicon.ico (100%) rename site/{ => static}/docs/4.3/assets/img/favicons/manifest.json (58%) rename site/{ => static}/docs/4.3/assets/img/favicons/mstile-144x144.png (100%) rename site/{ => static}/docs/4.3/assets/img/favicons/mstile-150x150.png (100%) rename site/{ => static}/docs/4.3/assets/img/favicons/mstile-310x150.png (100%) rename site/{ => static}/docs/4.3/assets/img/favicons/mstile-310x310.png (100%) rename site/{ => static}/docs/4.3/assets/img/favicons/mstile-70x70.png (100%) rename site/{ => static}/docs/4.3/assets/img/favicons/safari-pinned-tab.svg (100%) rename site/{ => static}/docs/4.3/assets/js/docs.min.js (100%) rename site/{ => static}/docs/4.3/assets/js/src/application.js (100%) rename site/{ => static}/docs/4.3/assets/js/src/search.js (100%) rename site/{ => static}/docs/4.3/assets/js/vendor/anchor.min.js (100%) rename site/{ => static}/docs/4.3/assets/js/vendor/bs-custom-file-input.min.js (100%) rename site/{ => static}/docs/4.3/assets/js/vendor/clipboard.min.js (100%) rename site/{ => static}/docs/4.3/assets/scss/_ads.scss (100%) rename site/{ => static}/docs/4.3/assets/scss/_algolia.scss (100%) rename site/{ => static}/docs/4.3/assets/scss/_anchor.scss (100%) rename site/{ => static}/docs/4.3/assets/scss/_brand.scss (100%) rename site/{ => static}/docs/4.3/assets/scss/_browser-bugs.scss (82%) rename site/{ => static}/docs/4.3/assets/scss/_buttons.scss (100%) rename site/{ => static}/docs/4.3/assets/scss/_callouts.scss (100%) rename site/{ => static}/docs/4.3/assets/scss/_clipboard-js.scss (100%) rename site/{ => static}/docs/4.3/assets/scss/_colors.scss (100%) rename site/{ => static}/docs/4.3/assets/scss/_component-examples.scss (100%) rename site/{ => static}/docs/4.3/assets/scss/_content.scss (100%) rename site/{ => static}/docs/4.3/assets/scss/_footer.scss (100%) rename site/{ => static}/docs/4.3/assets/scss/_masthead.scss (100%) rename site/{ => static}/docs/4.3/assets/scss/_nav.scss (100%) rename site/{ => static}/docs/4.3/assets/scss/_placeholder-img.scss (100%) rename site/{ => static}/docs/4.3/assets/scss/_sidebar.scss (83%) rename site/{ => static}/docs/4.3/assets/scss/_skippy.scss (100%) rename site/{ => static}/docs/4.3/assets/scss/_syntax.scss (100%) rename site/{ => static}/docs/4.3/assets/scss/_variables.scss (100%) rename site/{ => static}/docs/4.3/assets/scss/docs.scss (91%) create mode 100644 site/static/favicon.ico rename site/{ => static}/sw.js (100%) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index af324b948a..f1d8e1fc07 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -140,7 +140,7 @@ and/or [`/bootstrap/js/src/`](https://github.com/twbs/bootstrap/tree/master/js/s Similarly, when contributing to Bootstrap's documentation, you should edit the documentation source files in -[the `/bootstrap/site/docs/` directory of the `master` branch](https://github.com/twbs/bootstrap/tree/master/site/docs). +[the `/bootstrap/site/content/docs/` directory of the `master` branch](https://github.com/twbs/bootstrap/tree/master/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. diff --git a/.gitignore b/.gitignore index 455ebd1b24..8d76249bcc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,7 @@ # Ignore docs files /_gh_pages/ -/site/.jekyll-metadata -/site/docs/**/dist/ - -# Ignore ruby/bundler files -/.bundle/ -/vendor/ -/.ruby-version +/site/static/**/dist/ +/resources/ # Numerous always-ignore extensions *.diff diff --git a/.travis.yml b/.travis.yml index a748ccb788..3ee10abb12 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,9 +6,6 @@ git: node_js: - "8" - "10" -install: - - bundle install --deployment --jobs=3 --retry=3 --clean - - npm ci before_script: - google-chrome-stable --product-version script: @@ -20,6 +17,5 @@ after_success: cache: directories: - "$HOME/.npm" - - vendor/bundle notifications: email: false diff --git a/Gemfile b/Gemfile deleted file mode 100644 index d4fdb3b907..0000000000 --- a/Gemfile +++ /dev/null @@ -1,9 +0,0 @@ -source 'https://rubygems.org' - -group :development, :test do - gem 'jekyll', '~> 3.8.5' - gem 'jekyll-redirect-from', '~> 0.14.0' - gem 'jekyll-sitemap', '~> 1.2.0' - gem 'jekyll-toc', '~> 0.9.1' - gem 'wdm', '~> 0.1.1', :install_if => Gem.win_platform? -end diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index aec5215b7d..0000000000 --- a/Gemfile.lock +++ /dev/null @@ -1,82 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - addressable (2.6.0) - public_suffix (>= 2.0.2, < 4.0) - colorator (1.1.0) - concurrent-ruby (1.1.4) - em-websocket (0.5.1) - eventmachine (>= 0.12.9) - http_parser.rb (~> 0.6.0) - eventmachine (1.2.7) - eventmachine (1.2.7-x64-mingw32) - ffi (1.10.0) - ffi (1.10.0-x64-mingw32) - forwardable-extended (2.6.0) - http_parser.rb (0.6.0) - i18n (0.9.5) - concurrent-ruby (~> 1.0) - jekyll (3.8.5) - addressable (~> 2.4) - colorator (~> 1.0) - em-websocket (~> 0.5) - i18n (~> 0.7) - jekyll-sass-converter (~> 1.0) - jekyll-watch (~> 2.0) - kramdown (~> 1.14) - liquid (~> 4.0) - mercenary (~> 0.3.3) - pathutil (~> 0.9) - rouge (>= 1.7, < 4) - safe_yaml (~> 1.0) - jekyll-redirect-from (0.14.0) - jekyll (~> 3.3) - jekyll-sass-converter (1.5.2) - sass (~> 3.4) - jekyll-sitemap (1.2.0) - jekyll (~> 3.3) - jekyll-toc (0.9.1) - nokogiri (~> 1.8) - jekyll-watch (2.1.2) - listen (~> 3.0) - kramdown (1.17.0) - liquid (4.0.1) - listen (3.1.5) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - ruby_dep (~> 1.2) - mercenary (0.3.6) - mini_portile2 (2.4.0) - nokogiri (1.10.1) - mini_portile2 (~> 2.4.0) - nokogiri (1.10.1-x64-mingw32) - mini_portile2 (~> 2.4.0) - pathutil (0.16.2) - forwardable-extended (~> 2.6) - public_suffix (3.0.3) - rb-fsevent (0.10.3) - rb-inotify (0.10.0) - ffi (~> 1.0) - rouge (3.3.0) - ruby_dep (1.5.0) - safe_yaml (1.0.5) - sass (3.7.3) - sass-listen (~> 4.0.0) - sass-listen (4.0.0) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - wdm (0.1.1) - -PLATFORMS - ruby - x64-mingw32 - -DEPENDENCIES - jekyll (~> 3.8.5) - jekyll-redirect-from (~> 0.14.0) - jekyll-sitemap (~> 1.2.0) - jekyll-toc (~> 0.9.1) - wdm (~> 0.1.1) - -BUNDLED WITH - 1.17.3 diff --git a/README.md b/README.md index d5a09d5827..98a5f867b3 100644 --- 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 . 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 . 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.3/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/static/docs/4.3/assets/js/src/search.js` file. ### Running documentation locally -1. Run through the [tooling setup](https://getbootstrap.com/docs/4.3/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. -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à. +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. From the root `/bootstrap` directory, run `npm run docs-serve` in the command line. +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 index 0bdc4a02c6..0000000000 --- a/_config.yml +++ /dev/null @@ -1,66 +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.3/assets/scss/ - -plugins: - - jekyll-redirect-from - - jekyll-sitemap - - jekyll-toc - -# 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.3/assets/brand/bootstrap-social.png -social_logo_path: /docs/4.3/assets/brand/bootstrap-social-logo.png - -# Custom variables -current_version: 4.3.1 -current_ruby_version: 4.3.1 -docs_version: 4.3 -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" - -download: - source: "https://github.com/twbs/bootstrap/archive/v4.3.1.zip" - dist: "https://github.com/twbs/bootstrap/releases/download/v4.3.1/bootstrap-4.3.1-dist.zip" - -cdn: - # See https://www.srihash.org for info on how to generate the hashes - css: "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" - css_hash: "sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" - js: "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" - js_hash: "sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" - js_bundle: "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.bundle.min.js" - js_bundle_hash: "sha384-xrRywqdh3PHs8keKZN+8zzc5TX0GRTLCcmivcbNJWm2rs5C8PRhcEn3czEjhAO9o" - popper: "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" - popper_hash: "sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" - -toc: - min_level: 2 - max_level: 4 - no_toc_section_class: - - "bd-callout" - - "bd-example" diff --git a/build/generate-sri.js b/build/generate-sri.js index 4a04a1d301..267419dda0 100644 --- a/build/generate-sri.js +++ b/build/generate-sri.js @@ -19,11 +19,11 @@ const sh = require('shelljs') 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', diff --git a/config.yml b/config.yml new file mode 100644 index 0000000000..6628946898 --- /dev/null +++ b/config.yml @@ -0,0 +1,55 @@ +languageCode: "en" +title: "Bootstrap" +baseURL: "https://getbootstrap.com" +enableInlineShortcodes: true + +pygmentsUseClasses: true +# you can use ```lang if you want too +pygmentsCodeFences: true + +buildDrafts: true +buildFuture: true + +enableRobotsTXT: true +metaDataFormat: "yaml" +disableKinds: ["404", "taxonomy", "taxonomyTerm", "RSS"] + +publishDir: "_gh_pages" +archetypeDir: "site/archetypes" +assetDir: "site/assets" +contentDir: "site/content" +dataDir: "site/data" +layoutDir: "site/layouts" +staticDir: "site/static" +themesDir: "site/themes" + +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.3/assets/brand/bootstrap-social.png + social_logo_path: /docs/4.3/assets/brand/bootstrap-social-logo.png + + current_version: "4.3.1" + current_ruby_version: "4.3.1" + docs_version: "4.3" + repo: "https://github.com/twbs/bootstrap" + twitter: "getbootstrap" + slack: "https://bootstrap-slack.herokuapp.com" + blog: "https://blog.getbootstrap.com" + expo: "https://expo.getbootstrap.com" + themes: "https://themes.getbootstrap.com" + + download: + source: "https://github.com/twbs/bootstrap/archive/v4.3.1.zip" + dist: "https://github.com/twbs/bootstrap/releases/download/v4.3.1/bootstrap-4.3.1-dist.zip" + + cdn: + # See https://www.srihash.org for info on how to generate the hashes + css: "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" + css_hash: "sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" + js: "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" + js_hash: "sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" + js_bundle: "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.bundle.min.js" + js_bundle_hash: "sha384-xrRywqdh3PHs8keKZN+8zzc5TX0GRTLCcmivcbNJWm2rs5C8PRhcEn3czEjhAO9o" + popper: "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" + popper_hash: "sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" diff --git a/package-lock.json b/package-lock.json index c827ce45d8..bb50328073 100644 --- a/package-lock.json +++ b/package-lock.json @@ -792,6 +792,12 @@ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", "dev": true }, + "@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 + }, "@sinonjs/commons": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.3.1.tgz", @@ -1003,6 +1009,29 @@ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, + "arch": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz", + "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==", + "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", @@ -1338,6 +1367,12 @@ "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", "dev": true }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "dev": true + }, "base64id": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", @@ -1368,6 +1403,91 @@ "integrity": "sha512-3UQFKcRMx+5Z+IK5vYTMYK2jzLRJkt+XqyDdacgWgtMjjuifKpKTFneJLEgeBElOE2/lXZ1LcMcb5s8pwG2U8Q==", "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.0.0", + "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.0.0.tgz", + "integrity": "sha512-Ekhwm6AUiMbZ1LgVCNMkgjovpMR30FyQN74laAW9gs0NPjZR5gdY0ARNB0YsQG8GOme3CsHbxmeyq/7Ofq6QYQ==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "find-versions": "^3.0.0" + }, + "dependencies": { + "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" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.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 + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } + } + }, "binary": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", @@ -1384,6 +1504,16 @@ "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==", "dev": true }, + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "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", @@ -1530,6 +1660,16 @@ "unzipper": "^0.9.3" } }, + "buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", + "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, "buffer-alloc": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", @@ -1546,6 +1686,12 @@ "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", @@ -1719,6 +1865,29 @@ "unset-value": "^1.0.0" } }, + "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 + } + } + }, "call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", @@ -1798,6 +1967,18 @@ "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.0.3", "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.3.tgz", @@ -2036,6 +2217,15 @@ "is-supported-regexp-flag": "^1.0.0" } }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -2124,6 +2314,16 @@ "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": "3.1.2", "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", @@ -2162,6 +2362,15 @@ "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", @@ -2201,6 +2410,12 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, + "corser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", + "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=", + "dev": true + }, "cosmiconfig": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", @@ -2366,6 +2581,134 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, + "decompress": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", + "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", + "dev": 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": { + "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", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "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 + } + } + }, + "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 + } + } + }, + "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 + } + } + }, + "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", @@ -2556,6 +2899,68 @@ "is-obj": "^1.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": { + "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" + } + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + } + } + }, "duplexer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", @@ -3268,6 +3673,23 @@ "clone-regexp": "^1.0.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", @@ -3303,6 +3725,25 @@ } } }, + "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", @@ -3444,6 +3885,15 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "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", @@ -3462,6 +3912,29 @@ "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 + }, + "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" + } + }, "fileset": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", @@ -3540,6 +4013,24 @@ "locate-path": "^3.0.0" } }, + "find-versions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.0.0.tgz", + "integrity": "sha512-IUvtItVFNmTtKoB0PRfbkR0zR9XMG5rWNO3qI1S8L0zdv+v2gqzM0pAunloxqbqAfT8w7bg8n/5gHzTXte8H5A==", + "dev": true, + "requires": { + "array-uniq": "^2.0.0", + "semver-regex": "^2.0.0" + }, + "dependencies": { + "array-uniq": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-2.0.0.tgz", + "integrity": "sha512-O3QZEr+3wDj7otzF7PjNGs6CA3qmYMLvt5xGkjY/V0VxS+ovvqVo/5wKM/OVOAyuX4DTh9H31zE/yKtO66hTkg==", + "dev": true + } + } + }, "flat-cache": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", @@ -3615,6 +4106,16 @@ "map-cache": "^0.2.2" } }, + "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-access": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", @@ -3624,6 +4125,12 @@ "null-check": "^1.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": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", @@ -3710,8 +4217,7 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", @@ -3722,8 +4228,7 @@ "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -3840,8 +4345,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -3853,7 +4357,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -3980,8 +4483,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -3993,7 +4495,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -4115,7 +4616,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -4284,6 +4784,15 @@ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "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", @@ -4498,6 +5007,12 @@ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", "dev": true }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, "growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", @@ -4603,12 +5118,27 @@ "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.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", "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", @@ -4692,6 +5222,12 @@ } } }, + "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 + }, "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", @@ -4715,6 +5251,30 @@ "requires-port": "^1.0.0" } }, + "http-server": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.11.1.tgz", + "integrity": "sha512-6JeGDGoujJLmhjiRGlt8yK8Z9Kl0vnl/dQoQZlc4oeqaUoAKQg94NILLfrY3oWzSyFaQCVNTcKE5PZ3cH8VP9w==", + "dev": true, + "requires": { + "colors": "1.0.3", + "corser": "~2.0.0", + "ecstatic": "^3.0.0", + "http-proxy": "^1.8.1", + "opener": "~1.4.0", + "optimist": "0.6.x", + "portfinder": "^1.0.13", + "union": "~0.4.3" + }, + "dependencies": { + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "dev": true + } + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -4753,6 +5313,18 @@ } } }, + "hugo-bin": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/hugo-bin/-/hugo-bin-0.42.0.tgz", + "integrity": "sha512-GlPU2cmRLMPFJ6tkHIbsCDS3myWEA803pSV39/71476dUKkVoaKAqPoXI+OFB92TBc+k4Svc037VhODdITpBdQ==", + "dev": true, + "requires": { + "bin-wrapper": "^4.1.0", + "pkg-conf": "^2.1.0", + "rimraf": "^2.6.3", + "signale": "^1.3.0" + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -4762,6 +5334,12 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ieee754": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "dev": true + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -4928,6 +5506,24 @@ "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", "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" + }, + "dependencies": { + "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 + } + } + }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -5142,6 +5738,12 @@ "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-npm": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", @@ -5174,6 +5776,12 @@ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "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": "1.0.1", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", @@ -5433,6 +6041,16 @@ "handlebars": "^4.1.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.3.1", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz", @@ -5485,6 +6103,12 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -5666,6 +6290,15 @@ "integrity": "sha1-TjRD8oMP3s/2JNN0cWPxIX2qKpo=", "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" + } + }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", @@ -6128,6 +6761,12 @@ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -6618,6 +7257,44 @@ "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", "dev": true }, + "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" + }, + "dependencies": { + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "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" + } + } + } + }, + "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" + } + }, "npm-run-all": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", @@ -6830,6 +7507,12 @@ } } }, + "opener": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz", + "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=", + "dev": true + }, "opn": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", @@ -6903,6 +7586,15 @@ } } }, + "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" + } + }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -6945,12 +7637,27 @@ "mkdirp": "^0.5.1" } }, + "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-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", "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" + } + }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -6981,6 +7688,15 @@ "p-limit": "^2.0.0" } }, + "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-try": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", @@ -7133,6 +7849,12 @@ "pify": "^3.0.0" } }, + "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", @@ -7166,6 +7888,61 @@ "pinkie": "^2.0.0" } }, + "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" + }, + "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" + } + }, + "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 + } + } + }, "pkg-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", @@ -7226,6 +8003,25 @@ "integrity": "sha512-4q1hNvoUre/8srWsH7hnoSJ5xVmIL4qgz+s4qf2TnJIMyZFUFMGH+9vE7mXynAlHSZ/NdTmmow86muD0myUkVQ==", "dev": true }, + "portfinder": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz", + "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==", + "dev": true, + "requires": { + "async": "^1.5.2", + "debug": "^2.2.0", + "mkdirp": "0.5.x" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + } + } + }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -7611,6 +8407,12 @@ "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", @@ -7663,6 +8465,17 @@ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "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": "1.1.0", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", @@ -8107,6 +8920,15 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", @@ -8258,6 +9080,26 @@ } } }, + "seek-bzip": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", + "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", + "dev": true, + "requires": { + "commander": "~2.8.1" + }, + "dependencies": { + "commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "dev": true, + "requires": { + "graceful-readlink": ">= 1.0.0" + } + } + } + }, "semver": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", @@ -8273,6 +9115,21 @@ "semver": "^5.0.3" } }, + "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" + } + }, "server-destroy": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", @@ -8383,6 +9240,17 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "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" + } + }, "sinon": { "version": "7.2.5", "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.2.5.tgz", @@ -8614,6 +9482,24 @@ } } }, + "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", @@ -8799,6 +9685,12 @@ } } }, + "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": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -8873,6 +9765,15 @@ "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", @@ -8891,6 +9792,15 @@ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "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", @@ -9207,6 +10117,21 @@ "inherits": "2" } }, + "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": "1.2.0", "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", @@ -9286,6 +10211,12 @@ "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", @@ -9390,6 +10321,15 @@ "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", "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-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", @@ -9496,6 +10436,16 @@ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", "dev": true }, + "unbzip2-stream": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", + "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", + "dev": true, + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, "undefsafe": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", @@ -9559,6 +10509,23 @@ "x-is-string": "^0.1.0" } }, + "union": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/union/-/union-0.4.6.tgz", + "integrity": "sha1-GY+9rrolTniLDvy2MLwR8kopWeA=", + "dev": true, + "requires": { + "qs": "~2.3.3" + }, + "dependencies": { + "qs": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz", + "integrity": "sha1-6eha2+ddoLvkyOBHaghikPhjtAQ=", + "dev": true + } + } + }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", @@ -9794,6 +10761,12 @@ "prepend-http": "^1.0.1" } }, + "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", @@ -10204,6 +11177,16 @@ "camelcase": "^4.1.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", diff --git a/package.json b/package.json index 9622eaae3a..66208bb04a 100644 --- a/package.json +++ b/package.json @@ -22,24 +22,25 @@ "linkinator": "linkinator _gh_pages --recurse --skip \"^(?!http://localhost)\"", "bundlesize": "bundlesize", "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-copy": "cross-env-shell shx mkdir -p site/static/docs/$npm_package_version_short/dist/ && cross-env-shell shx cp -r dist/css/ site/static/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-docs": "npm-run-all css-compile-docs css-prefix-docs css-prefix-examples 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/bootstrap.scss dist/css/bootstrap.css && node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 scss/bootstrap-grid.scss dist/css/bootstrap-grid.css && node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 scss/bootstrap-reboot.scss dist/css/bootstrap-reboot.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-compile-docs": "cross-env-shell node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 site/static/docs/$npm_package_version_short/assets/scss/docs.scss site/static/docs/$npm_package_version_short/assets/css/docs.min.css", "css-lint": "npm-run-all --parallel css-lint-*", "css-lint-main": "stylelint \"scss/**/*.scss\" --cache --cache-location .cache/.stylelintcache", - "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-lint-docs": "stylelint \"site/static/**/assets/scss/*.scss\" \"site/content/**/*.css\" --cache --cache-location .cache/.stylelintcache", + "css-lint-vars": "fusv scss/ site/static/", "css-minify": "npm-run-all --parallel css-minify-*", "css-minify-main": "cleancss --level 1 --format breaksWith=lf --source-map --source-map-inline-sources --output dist/css/bootstrap.min.css dist/css/bootstrap.css && cleancss --level 1 --format breaksWith=lf --source-map --source-map-inline-sources --output dist/css/bootstrap-grid.min.css dist/css/bootstrap-grid.css && cleancss --level 1 --format breaksWith=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 --level 1 --format breaksWith=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-minify-docs": "cross-env-shell cleancss --level 1 --format breaksWith=lf --source-map --source-map-inline-sources --output site/static/docs/$npm_package_version_short/assets/css/docs.min.css site/static/docs/$npm_package_version_short/assets/css/docs.min.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\" \"site/docs/**/*.css\"", + "css-prefix-docs": "postcss --config build/postcss.config.js --replace \"site/static/**/*.css\" \"site/static/**/*.css\"", + "css-prefix-examples": "postcss --config build/postcss.config.js --replace \"site/content/**/*.css\" \"site/content/**/*.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-copy": "cross-env-shell shx mkdir -p site/static/docs/$npm_package_version_short/dist/ && cross-env-shell shx cp -r dist/js/ site/static/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", @@ -56,7 +57,7 @@ "js-minify-standalone": "terser --compress --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-standalone-esm": "terser --compress --mangle --comments \"/^!/\" --source-map \"content=dist/js/bootstrap.esm.js.map,includeSources,url=bootstrap.esm.min.js.map\" --output dist/js/bootstrap.esm.min.js dist/js/bootstrap.esm.js", "js-minify-bundle": "terser --compress --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-minify-docs": "cross-env-shell terser --mangle --comments \\\"/^!/\\\" --output site/static/docs/$npm_package_version_short/assets/js/docs.min.js site/static/docs/$npm_package_version_short/assets/js/vendor/anchor.min.js site/static/docs/$npm_package_version_short/assets/js/vendor/clipboard.min.js site/static/docs/$npm_package_version_short/assets/js/vendor/bs-custom-file-input.min.js \"site/static/docs/$npm_package_version_short/assets/js/src/*.js\"", "js-test": "npm-run-all js-test-karma* js-test-integration", "js-debug": "cross-env DEBUG=true karma start js/tests/karma.conf.js", "js-test-karma": "karma start js/tests/karma.conf.js", @@ -66,12 +67,12 @@ "lint": "npm-run-all --parallel js-lint css-lint", "coveralls": "shx cat js/coverage/lcov.info | coveralls", "docs": "npm-run-all css-docs js-docs docs-compile docs-lint", - "docs-compile": "bundle exec jekyll build", - "docs-production": "cross-env JEKYLL_ENV=production npm run docs-compile", + "docs-compile": "hugo --cleanDestinationDir", + "docs-production": "cross-env HUGO_ENV=production npm run docs-compile", "docs-lint": "node build/vnu-jar.js", - "docs-serve": "bundle exec jekyll serve", - "docs-serve-only": "npm run docs-serve -- --skip-initial-build --no-watch", - "update-deps": "ncu -a -x jquery -x bundlesize && npm update && bundle update && cross-env-shell echo Manually update \\\"site/docs/$npm_package_version_short/assets/js/vendor/\\\"", + "docs-serve": "hugo server --port 9001 --disableFastRender --renderToDisk", + "docs-serve-only": "http-server _gh_pages -p 9001 -a localhost", + "update-deps": "ncu -a -x jquery -x bundlesize && npm update && cross-env-shell echo Manually update \\\"site/static/docs/$npm_package_version_short/assets/js/vendor/\\\"", "release": "npm-run-all dist release-sri release-zip docs-production", "release-sri": "node build/generate-sri.js", "release-version": "node build/change-version.js", @@ -80,9 +81,9 @@ "test": "npm-run-all lint dist js-test docs-compile docs-lint bundlesize", "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-css-docs": "nodemon --watch \"site/static/**/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-js-docs": "nodemon --watch \"site/static/**/assets/js/src/\" --ext js --exec \"npm run js-docs\"" }, "style": "dist/css/bootstrap.css", "sass": "scss/bootstrap.scss", @@ -119,6 +120,8 @@ "find-unused-sass-variables": "^0.3.2", "glob": "^7.1.3", "hammer-simulator": "0.0.1", + "http-server": "^0.11.1", + "hugo-bin": "^0.42.0", "ip": "^1.1.5", "jquery": "^3.3.1", "karma": "^4.0.1", diff --git a/site/_data/docs-versions.yml b/site/_data/docs-versions.yml deleted file mode 100644 index 3249553a6d..0000000000 --- a/site/_data/docs-versions.yml +++ /dev/null @@ -1,44 +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 with two minor releases. Last update was v4.3.1. - versions: - - v: 4.0 - - v: 4.1 - - v: 4.2 - - v: 4.3 diff --git a/site/_includes/bugify.html b/site/_includes/bugify.html deleted file mode 100644 index 7f3340421a..0000000000 --- a/site/_includes/bugify.html +++ /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" -%} - #{{ bug_id }} - {%- when "Edge" -%} - Edge issue #{{ bug_id }} - {%- when "A11yUserVoice" -%} - Microsoft A11y UserVoice idea #{{ bug_id }} - {%- when "UserVoice" -%} - Edge UserVoice idea #{{ bug_id }} - {%- when "Mozilla" -%} - Mozilla bug #{{ bug_id }} - {%- when "Chromium" -%} - Chromium issue #{{ bug_id }} - {%- when "WebKit" -%} - WebKit bug #{{ bug_id }} - {%- when "Safari" -%} - Apple Safari Radar #{{ bug_id }} - {%- when "Normalize" -%} - Normalize #{{ bug_id }} - {%- else -%} - parse error - {%- 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 index 9c30903769..0000000000 --- a/site/_includes/callout-info-prefersreducedmotion.md +++ /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 index 434d10e1e9..0000000000 --- a/site/_includes/callout.html +++ /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" -%} -
- {{- include.content | markdownify -}} -
diff --git a/site/_includes/docs-navbar.html b/site/_includes/docs-navbar.html deleted file mode 100644 index 7714d2e46b..0000000000 --- a/site/_includes/docs-navbar.html +++ /dev/null @@ -1,71 +0,0 @@ - diff --git a/site/_includes/docs-sidebar.html b/site/_includes/docs-sidebar.html deleted file mode 100644 index d2d47a57d8..0000000000 --- a/site/_includes/docs-sidebar.html +++ /dev/null @@ -1,43 +0,0 @@ - - - diff --git a/site/_includes/example.html b/site/_includes/example.html deleted file mode 100644 index dcd148b02a..0000000000 --- a/site/_includes/example.html +++ /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 -%} - - {{- include.content -}} - -{%- endif -%} - -{%- if include.hide_markup == null -%} - {%- highlight html -%} - {%- if include.content contains ' - {%- 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 index df4c15e645..0000000000 --- a/site/_includes/favicons.html +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/site/_includes/footer.html b/site/_includes/footer.html deleted file mode 100644 index 03192a861a..0000000000 --- a/site/_includes/footer.html +++ /dev/null @@ -1,12 +0,0 @@ - diff --git a/site/_includes/header.html b/site/_includes/header.html deleted file mode 100644 index 9dbd350fc5..0000000000 --- a/site/_includes/header.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - {%- if page.title -%} - {{ page.title | smartify }} · {{ site.title | smartify }} - {%- else -%} - {{ site.title | smartify }} · {{ site.description | smartify }} - {%- endif -%} - - - - -{% 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 index c22b373838..0000000000 --- a/site/_includes/icons/bootstrap-stack.svg +++ /dev/null @@ -1 +0,0 @@ -Bootstrap \ No newline at end of file diff --git a/site/_includes/icons/bootstrap.svg b/site/_includes/icons/bootstrap.svg deleted file mode 100644 index 7dfcf3f86c..0000000000 --- a/site/_includes/icons/bootstrap.svg +++ /dev/null @@ -1 +0,0 @@ -Bootstrap \ No newline at end of file diff --git a/site/_includes/icons/download.svg b/site/_includes/icons/download.svg deleted file mode 100644 index 4ee80d2168..0000000000 --- a/site/_includes/icons/download.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/_includes/icons/github.svg b/site/_includes/icons/github.svg deleted file mode 100644 index 0fc4c3eff4..0000000000 --- a/site/_includes/icons/github.svg +++ /dev/null @@ -1 +0,0 @@ -GitHub \ No newline at end of file diff --git a/site/_includes/icons/import.svg b/site/_includes/icons/import.svg deleted file mode 100644 index 3c42c1e406..0000000000 --- a/site/_includes/icons/import.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/_includes/icons/lightning.svg b/site/_includes/icons/lightning.svg deleted file mode 100644 index 5d5809e135..0000000000 --- a/site/_includes/icons/lightning.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/_includes/icons/menu.svg b/site/_includes/icons/menu.svg deleted file mode 100644 index bbba4f87e1..0000000000 --- a/site/_includes/icons/menu.svg +++ /dev/null @@ -1 +0,0 @@ -Menu \ No newline at end of file diff --git a/site/_includes/icons/opencollective.svg b/site/_includes/icons/opencollective.svg deleted file mode 100644 index 5c80a9d170..0000000000 --- a/site/_includes/icons/opencollective.svg +++ /dev/null @@ -1 +0,0 @@ -Open Collective \ No newline at end of file diff --git a/site/_includes/icons/placeholder.svg b/site/_includes/icons/placeholder.svg deleted file mode 100644 index c3c74af893..0000000000 --- a/site/_includes/icons/placeholder.svg +++ /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 -%} - - {% if title != ' ' %}{{ title }}{% endif %} - - {% if text != ' ' %}{{ text }}{% endif %} - -{%- endcapture -%} - -{{- svg | replace: ' ', '' | strip_newlines -}} diff --git a/site/_includes/icons/slack.svg b/site/_includes/icons/slack.svg deleted file mode 100644 index da05e3613f..0000000000 --- a/site/_includes/icons/slack.svg +++ /dev/null @@ -1 +0,0 @@ -Slack \ No newline at end of file diff --git a/site/_includes/icons/twitter.svg b/site/_includes/icons/twitter.svg deleted file mode 100644 index 4c2b19150d..0000000000 --- a/site/_includes/icons/twitter.svg +++ /dev/null @@ -1 +0,0 @@ -Twitter \ No newline at end of file diff --git a/site/_includes/scripts.html b/site/_includes/scripts.html deleted file mode 100644 index 5b7f380b18..0000000000 --- a/site/_includes/scripts.html +++ /dev/null @@ -1,19 +0,0 @@ -{%- if jekyll.environment == "production" -%} - -{%- else -%} - -{%- endif -%} - -{%- if page.layout == "docs" -%} - -{%- endif -%} - -{%- if jekyll.environment == "production" -%} - -{%- else -%} - - - - - -{%- endif -%} diff --git a/site/_includes/social.html b/site/_includes/social.html deleted file mode 100644 index 277ee2313d..0000000000 --- a/site/_includes/social.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/site/_includes/stylesheet.html b/site/_includes/stylesheet.html deleted file mode 100644 index 3846f9fe1c..0000000000 --- a/site/_includes/stylesheet.html +++ /dev/null @@ -1,16 +0,0 @@ - -{%- if jekyll.environment == "production" %} - -{% else %} - -{% endif -%} - -{%- if page.layout == "docs" or page.layout != "examples" -%} - -{% if page.layout == "docs" %} - -{% endif %} -{% if page.layout != "examples" %} - -{% endif %} -{%- endif -%} diff --git a/site/_layouts/default.html b/site/_layouts/default.html deleted file mode 100644 index 59f5c122b8..0000000000 --- a/site/_layouts/default.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - {% include header.html %} - - - {% include skippy.html %} - - {% include docs-navbar.html %} - - {% if page.layout == "simple" %} - {{ content }} - {% else %} -
- {{ content }} -
- {% endif %} - - {% include footer.html %} - {% include scripts.html %} - - diff --git a/site/_layouts/docs.html b/site/_layouts/docs.html deleted file mode 100644 index cc4910c041..0000000000 --- a/site/_layouts/docs.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - {% include header.html %} - - - {% include skippy.html %} - - {% include docs-navbar.html %} - -
-
-
- {% include docs-sidebar.html %} -
- - {% if page.toc %} - - {% endif %} - -
-

{{ page.title | smartify }}

-

{{ page.description | smartify }}

- {% include ads.html %} - {{ content }} -
-
-
- - {% include scripts.html %} - - diff --git a/site/_layouts/examples.html b/site/_layouts/examples.html deleted file mode 100644 index f7e4556e40..0000000000 --- a/site/_layouts/examples.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - {{ page.title | smartify }} · {{ site.title | smartify }} - - - - {% include stylesheet.html %} - - - - {%- for css in page.extra_css %} - - - {%- endfor %} - - - {{ content }} - - {%- if page.include_js != false -%} - {%- if jekyll.environment == "production" -%} - - {%- else -%} - - {%- endif -%} - - {%- for js in page.extra_js %} - - {%- endfor %} - {%- endif -%} - - diff --git a/site/_layouts/home.html b/site/_layouts/home.html deleted file mode 100644 index 88a23d49ce..0000000000 --- a/site/_layouts/home.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - {% include header.html %} - - - {% include skippy.html %} - - {% include docs-navbar.html %} - - {{ content }} - - {% include footer.html %} - {% include scripts.html %} - - diff --git a/site/_layouts/simple.html b/site/_layouts/simple.html deleted file mode 100644 index bbf808df33..0000000000 --- a/site/_layouts/simple.html +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: default ---- - -
-
-

{{ page.title | smartify }}

-

{{ page.description | smartify }}

- {%- if page.title == "Examples" -%} - Download source code - {%- endif -%} -
- {% include ads.html %} -
- -
- {{ content }} -
diff --git a/site/docs/4.3/about/brand.md b/site/content/docs/4.3/about/brand.md similarity index 75% rename from site/docs/4.3/about/brand.md rename to site/content/docs/4.3/about/brand.md index 084c36bd88..9d44edf9c4 100644 --- a/site/docs/4.3/about/brand.md +++ b/site/content/docs/4.3/about/brand.md @@ -14,10 +14,10 @@ Use either the Bootstrap mark (a capital **B**) or the standard logo (just **Boo
- Bootstrap + Bootstrap
- Bootstrap + Bootstrap
@@ -35,13 +35,13 @@ Download the Bootstrap mark in one of three styles, each available as an SVG fil
- Bootstrap + Bootstrap
- Bootstrap + Bootstrap
- Bootstrap + Bootstrap
diff --git a/site/docs/4.3/about/license.md b/site/content/docs/4.3/about/license.md similarity index 84% rename from site/docs/4.3/about/license.md rename to site/content/docs/4.3/about/license.md index 39720029d7..c7f1302035 100644 --- a/site/docs/4.3/about/license.md +++ b/site/content/docs/4.3/about/license.md @@ -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. diff --git a/site/docs/4.3/about/overview.md b/site/content/docs/4.3/about/overview.md similarity index 78% rename from site/docs/4.3/about/overview.md rename to site/content/docs/4.3/about/overview.md index f3460baa15..b99a41ad12 100644 --- a/site/docs/4.3/about/overview.md +++ b/site/content/docs/4.3/about/overview.md @@ -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.3/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 , 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 , 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.3/about/team.md b/site/content/docs/4.3/about/team.md new file mode 100644 index 0000000000..ce4b00e953 --- /dev/null +++ b/site/content/docs/4.3/about/team.md @@ -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 >}} +
+ {{- range (index $.Site.Data "core-team") }} + + @{{ .user }} + + {{ .name }} @{{ .user }} + + + {{ end -}} +
+{{< /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. diff --git a/site/docs/4.3/about/translations.md b/site/content/docs/4.3/about/translations.md similarity index 69% rename from site/docs/4.3/about/translations.md rename to site/content/docs/4.3/about/translations.md index 576259d356..e719e3a842 100644 --- a/site/docs/4.3/about/translations.md +++ b/site/content/docs/4.3/about/translations.md @@ -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 >}} +{{< /translations.inline >}} **We don't help organize or host translations, we just link to them.** diff --git a/site/docs/4.3/browser-bugs.md b/site/content/docs/4.3/browser-bugs.md similarity index 79% rename from site/docs/4.3/browser-bugs.md rename to site/content/docs/4.3/browser-bugs.md index fca303950e..32285844e3 100644 --- a/site/docs/4.3/browser-bugs.md +++ b/site/content/docs/4.3/browser-bugs.md @@ -2,12 +2,12 @@ layout: docs title: Wall of browser bugs group: browser-bugs -redirect_from: "/browser-bugs/" +aliases: "/browser-bugs/" --- 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](/docs/{{< param docs_version >}}/getting-started/browsers-devices/#supported-browsers). See also: @@ -25,14 +25,16 @@ See also: - {% for bug in site.data.browser-bugs %} + {{< bug.inline >}} + {{- range (index $.Site.Data $data) }} - {{ bug.browser }} - {{ bug.summary | markdownify }} + {{ .browser | chomp }} + {{ .summary | markdownify }} {% include bugify.html content=bug.upstream_bug %} {% include bugify.html content=bug.origin %} - {% endfor %} + {{- end }} + {{< /bug.inline >}} @@ -52,13 +54,15 @@ We publicly list these "most wanted" feature requests here, in the hopes of expe - {% for feat in site.data.browser-features %} + {{< feat.inline >}} + {{ range (index $.Site.Data "browser-features") }} - {{ feat.browser }} - {{ feat.summary | markdownify }} + {{ .browser }} + {{ .summary | markdownify }} {% include bugify.html content=feat.upstream_bug %} {% include bugify.html content=feat.origin %} - {% endfor %} + {{ end }} + {{< /feat.inline >}} diff --git a/site/docs/4.3/components/alerts.md b/site/content/docs/4.3/components/alerts.md similarity index 78% rename from site/docs/4.3/components/alerts.md rename to site/content/docs/4.3/components/alerts.md index 1e7481a43d..8c530d0f5f 100644 --- a/site/docs/4.3/components/alerts.md +++ b/site/content/docs/4.3/components/alerts.md @@ -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.3/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 JavaScript plugin](#dismissing). -{% capture example %} -{% for color in site.data.theme-colors %} -{% endfor %} -{% endcapture %} -{% include example.html content=example %} +{{< example >}} +{{< alerts.inline >}} +{{- range (index $.Site.Data "theme-colors") }} +{{- end -}} +{{< /alerts.inline >}} +{{< /example >}} -{% include callout-warning-color-assistive-technologies.md %} +{{< callout info >}} +{{< 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 %} -{% endfor %} -{% endcapture %} -{% include example.html content=example %} +{{< example >}} +{{< alerts.inline >}} +{{- range (index $.Site.Data "theme-colors") }} +{{ end -}} +{{< /alerts.inline >}} +{{< /example >}} ### Additional content Alerts can also contain additional HTML elements like headings, paragraphs and dividers. -{% capture example %} +{{< example >}} -{% 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`](/docs/{{< param docs_version >}}/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 `
-{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## JavaScript behavior @@ -78,20 +80,20 @@ You can see this in action with a live demo: Enable dismissal of an alert via JavaScript: -{% highlight js %} +{{< highlight js >}} var alertList = document.querySelectorAll('.alert') alertList.forEach(function (alert) { new bootstrap.Alert(alert) }) -{% endhighlight %} +{{< /highlight >}} Or with `data` attributes on a button **within the alert**, as demonstrated above: -{% highlight html %} +{{< highlight html >}} -{% endhighlight %} +{{< /highlight >}} Note that closing an alert will remove it from the DOM. @@ -99,10 +101,10 @@ Note that closing an alert will remove it from the DOM. You can create an alert instance with the alert constructor, for example: -{% highlight js %} +{{< highlight js >}} var myAlert = document.getElementById('myAlert') var bsAlert = new bootstrap.Alert(myAlert) -{% endhighlight %} +{{< /highlight >}} This makes an alert listen for click events on descendant elements which have the `data-dismiss="alert"` attribute. (Not necessary when using the data-api's auto-initialization.) @@ -112,11 +114,11 @@ This makes an alert listen for click events on descendant elements which have th | `dispose` | Destroys an element's alert. | | `_getInstance` | *Static* method which allows you to get the alert instance associated to a DOM element, you can use it like this: `bootstrap.Alert._getInstance(alert)` | -{% highlight js %} +{{< highlight js >}} var alertNode = document.querySelector('.alert') var alert = bootstrap.Alert._getInstance(alertNode) alert.close() -{% endhighlight %} +{{< /highlight >}} ### Events @@ -127,9 +129,9 @@ 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 %} +{{< highlight js >}} var myAlert = document.getElementById('myAlert') myAlert.addEventListener('closed.bs.alert', function () { // do something… }) -{% endhighlight %} +{{< /highlight >}} diff --git a/site/docs/4.3/components/badge.md b/site/content/docs/4.3/components/badge.md similarity index 68% rename from site/docs/4.3/components/badge.md rename to site/content/docs/4.3/components/badge.md index 8c17600459..0f2ec97acd 100644 --- a/site/docs/4.3/components/badge.md +++ b/site/content/docs/4.3/components/badge.md @@ -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 >}}

Example heading New

Example heading New

Example heading New

Example heading New

Example heading New
Example heading New
-{% endcapture %} -{% include example.html content=example %} +{{< /example >}} Badges can be used as part of links or buttons to provide a counter. -{% capture example %} +{{< example >}} -{% 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 >}} -{% 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 %} -{{ color.name | capitalize }}{% endfor %} -{% endcapture %} -{% include example.html content=example %} +{{< example >}} +{{< badge.inline >}} +{{- range (index $.Site.Data "theme-colors") }} +{{ .name | title }}{{- end -}} +{{< /badge.inline >}} +{{< /example >}} -{% include callout-warning-color-assistive-technologies.md %} +{{< callout info >}} +{{< 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 %} -{{ color.name | capitalize }}{% endfor %} -{% endcapture %} -{% include example.html content=example %} +{{< example >}} +{{< badge.inline >}} +{{- range (index $.Site.Data "theme-colors") }} +{{ .name | title }}{{- end -}} +{{< /badge.inline >}} +{{< /example >}} ## Links Using the contextual `.badge-*` classes on an `` element quickly provide _actionable_ badges with hover and focus states. -{% capture example %} -{% for color in site.data.theme-colors %} -{{ color.name | capitalize }}{% endfor %} -{% endcapture %} -{% include example.html content=example %} +{{< example >}} +{{< badge.inline >}} +{{- range (index $.Site.Data "theme-colors") }} +{{ .name | title }}{{- end -}} +{{< /badge.inline >}} +{{< /example >}} diff --git a/site/docs/4.3/components/breadcrumb.md b/site/content/docs/4.3/components/breadcrumb.md similarity index 96% rename from site/docs/4.3/components/breadcrumb.md rename to site/content/docs/4.3/components/breadcrumb.md index 0837e83633..b26b58969f 100644 --- a/site/docs/4.3/components/breadcrumb.md +++ b/site/content/docs/4.3/components/breadcrumb.md @@ -7,7 +7,7 @@ group: components ## Example -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Changing the separator diff --git a/site/docs/4.3/components/button-group.md b/site/content/docs/4.3/components/button-group.md similarity index 93% rename from site/docs/4.3/components/button-group.md rename to site/content/docs/4.3/components/button-group.md index 8459dc4c26..f8eadaf707 100644 --- a/site/docs/4.3/components/button-group.md +++ b/site/content/docs/4.3/components/button-group.md @@ -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](/docs/{{< param docs_version >}}/components/buttons/#button-plugin). -{% capture example %} +{{< example >}}
-{% 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 >}} -{% 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 >}} -{% 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 ` -{% highlight html %} +{{< highlight html >}}
...
...
...
-{% endhighlight %} +{{< /highlight >}} ## Nesting Place a `.btn-group` within another `.btn-group` when you want dropdown menus mixed with a series of buttons. -{% capture example %} +{{< example >}}
@@ -136,8 +132,7 @@ Place a `.btn-group` within another `.btn-group` when you want dropdown menus mi
-{% 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 -{% highlight html %} +{{< highlight html >}}
...
-{% endhighlight %} +{{< /highlight >}} diff --git a/site/docs/4.3/components/buttons.md b/site/content/docs/4.3/components/buttons.md similarity index 82% rename from site/docs/4.3/components/buttons.md rename to site/content/docs/4.3/components/buttons.md index f100192042..de13ae5dfa 100644 --- a/site/docs/4.3/components/buttons.md +++ b/site/content/docs/4.3/components/buttons.md @@ -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 %} -{% endfor %} +{{< example >}} +{{< buttons.inline >}} +{{- range (index $.Site.Data "theme-colors") }} + +{{- end -}} +{{< /buttons.inline >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -{% include callout-warning-color-assistive-technologies.md %} +{{< callout info >}} +{{< partial "callout-warning-color-assistive-technologies.md" >}} +{{< /callout >}} ## Button tags @@ -26,68 +30,64 @@ The `.btn` classes are designed to be used with the ` -{% 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 %} -{% endfor %} -{% endcapture %} -{% include example.html content=example %} +{{< example >}} +{{< buttons.inline >}} +{{- range (index $.Site.Data "theme-colors") }} + +{{- end -}} +{{< /buttons.inline >}} +{{< /example >}} ## Sizes Fancy larger or smaller buttons? Add `.btn-lg` or `.btn-sm` for additional sizes. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -{% capture example %} +{{< example >}} -{% 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 >}} -{% 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 ` -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} Disabled buttons using the `` element behave a bit different: @@ -95,18 +95,16 @@ Disabled buttons using the `` 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 >}} Primary link Link -{% 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 ``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 @@ -116,12 +114,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 ` -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Checkbox and radio buttons @@ -131,16 +128,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 ` -{% 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 >}}
This is some text within a card body.
-{% 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 `` tag. In the same way, l Subtitles are used by adding a `.card-subtitle` to a `` 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 >}}
Card title
@@ -61,28 +59,26 @@ Subtitles are used by adding a `.card-subtitle` to a `` tag. If the `.card-t Another link
-{% 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 >}}
- {% 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" >}}

Some quick example text to build on the card title and make up the bulk of the card's content.

-{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### List groups Create lists of content in a card with a flush list group. -{% capture example %} +{{< example >}}
  • Cras justo odio
  • @@ -90,10 +86,9 @@ Create lists of content in a card with a flush list group.
  • Vestibulum at eros
-{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -{% capture example %} +{{< example >}}
Featured @@ -104,16 +99,15 @@ Create lists of content in a card with a flush list group.
  • Vestibulum at eros
  • -{% 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 >}}
    - {% 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" >}}
    Card title

    Some quick example text to build on the card title and make up the bulk of the card's content.

    @@ -128,14 +122,13 @@ Mix and match multiple content types to create the card you need, or throw every Another link
    -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Header and footer Add an optional header and/or footer within a card. -{% capture example %} +{{< example >}}
    Featured @@ -146,12 +139,11 @@ Add an optional header and/or footer within a card. Go somewhere
    -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} Card headers can be styled by adding `.card-header` to `` elements. -{% capture example %} +{{< example >}}
    Featured
    @@ -160,10 +152,9 @@ Card headers can be styled by adding `.card-header` to `` elements. Go somewhere
    -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -{% capture example %} +{{< example >}}
    Quote @@ -175,10 +166,9 @@ Card headers can be styled by adding `.card-header` to `` elements.
    -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -{% capture example %} +{{< example >}}
    Featured @@ -192,8 +182,7 @@ Card headers can be styled by adding `.card-header` to `` elements. 2 days ago
    -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Sizing @@ -203,7 +192,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 >}}
    @@ -224,14 +213,13 @@ Using the grid, wrap cards in columns and rows as needed.
    -{% 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](/docs/{{< param docs_version >}}/utilities/sizing/) to quickly set a card's width. -{% capture example %} +{{< example >}}
    Card title
    @@ -247,14 +235,13 @@ Use our handful of [available sizing utilities]({{ site.baseurl }}/docs/{{ site. Button
    -{% 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 >}}
    Special title treatment
    @@ -262,14 +249,13 @@ Use custom CSS in your stylesheets or as inline styles to set a width. Go somewhere
    -{% 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](/docs/{{< param docs_version >}}/utilities/text/#text-alignment). -{% capture example %} +{{< example >}}
    Special title treatment
    @@ -293,14 +279,13 @@ You can quickly change the text alignment of any card—in its entirety or speci Go somewhere
    -{% 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](/docs/{{< param docs_version >}}/components/navs/). -{% capture example %} +{{< example >}}
    -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -{% capture example %} +{{< example >}}
    -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Images @@ -356,9 +339,9 @@ Cards include a few options for working with images. Choose from appending "imag Similar to headers and footers, cards can include top and bottom "image caps"—images at the top or bottom of a card. -{% capture example %} +{{< example >}}
    - {% 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" >}}
    Card title

    This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

    @@ -371,41 +354,38 @@ Similar to headers and footers, cards can include top and bottom "image caps"—

    This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

    Last updated 3 mins ago

    - {% 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" >}}
    -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### 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 >}}
    - {% 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" >}}
    Card title

    This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

    Last updated 3 mins ago

    -{% 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 >}}
    - {% include icons/placeholder.svg width="100%" height="250" class="" text="Image" %} + {{< placeholder width="100%" height="250" class="" text="Image" >}}
    @@ -416,8 +396,7 @@ Using a combination of grid and utility classes, cards can be made horizontal in
    -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Card styles @@ -425,43 +404,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](/docs/{{< param docs_version >}}/utilities/colors/) to change the appearance of a card. -{% capture example %} -{% for color in site.data.theme-colors %} -
    +{{< example >}} +{{< card.inline >}} +{{- range (index $.Site.Data "theme-colors") }} +
    Header
    -
    {{ color.name | capitalize }} card title
    +
    {{ .name | title }} card title

    Some quick example text to build on the card title and make up the bulk of the card's content.

    -
    {% endfor %} -{% endcapture %} -{% include example.html content=example %} +
    +{{- end -}} +{{< /card.inline >}} +{{< /example >}} -{% include callout-warning-color-assistive-technologies.md %} +{{< callout info >}} +{{< 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](/docs/{{< param 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. -{% capture example %} -{% for color in site.data.theme-colors %} -
    +{{< example >}} +{{< card.inline >}} +{{- range (index $.Site.Data "theme-colors") }} +
    Header
    -
    -
    {{ color.name | capitalize }} card title
    +
    +
    {{ .name | title }} card title

    Some quick example text to build on the card title and make up the bulk of the card's content.

    -
    {% endfor %} -{% endcapture %} -{% include example.html content=example %} +
    +{{- 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 >}}
    Header
    @@ -470,8 +455,7 @@ You can also change the borders on the card header and footer as needed, and eve
    -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Card layout @@ -481,10 +465,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 use `display: flex;` to achieve their uniform sizing. -{% capture example %} +{{< example >}}
    - {% 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" >}}
    Card title

    This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

    @@ -492,7 +476,7 @@ Use card groups to render cards as a single, attached element with equal width a
    - {% 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" >}}
    Card title

    This card has supporting text below as a natural lead-in to additional content.

    @@ -500,7 +484,7 @@ Use card groups to render cards as a single, attached element with equal width a
    - {% 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" >}}
    Card title

    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.

    @@ -508,15 +492,14 @@ Use card groups to render cards as a single, attached element with equal width a
    -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} When using card groups with footers, their content will automatically line up. -{% capture example %} +{{< example >}}
    - {% 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" >}}
    Card title

    This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

    @@ -526,7 +509,7 @@ When using card groups with footers, their content will automatically line up.
    - {% 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" >}}
    Card title

    This card has supporting text below as a natural lead-in to additional content.

    @@ -536,7 +519,7 @@ When using card groups with footers, their content will automatically line up.
    - {% 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" >}}
    Card title

    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.

    @@ -546,17 +529,16 @@ When using card groups with footers, their content will automatically line up.
    -{% 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 >}}
    - {% 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" >}}
    Card title

    This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

    @@ -564,7 +546,7 @@ Need a set of equal width and height cards that aren't attached to one another?
    - {% 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" >}}
    Card title

    This card has supporting text below as a natural lead-in to additional content.

    @@ -572,7 +554,7 @@ Need a set of equal width and height cards that aren't attached to one another?
    - {% 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" >}}
    Card title

    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.

    @@ -580,15 +562,14 @@ Need a set of equal width and height cards that aren't attached to one another?
    -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} Just like with card groups, card footers in decks will automatically line up. -{% capture example %} +{{< example >}}
    - {% 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" >}}
    Card title

    This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

    @@ -598,7 +579,7 @@ Just like with card groups, card footers in decks will automatically line up.
    - {% 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" >}}
    Card title

    This card has supporting text below as a natural lead-in to additional content.

    @@ -608,7 +589,7 @@ Just like with card groups, card footers in decks will automatically line up.
    - {% 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" >}}
    Card title

    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.

    @@ -618,8 +599,7 @@ Just like with card groups, card footers in decks will automatically line up.
    -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Card columns @@ -627,10 +607,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 >}}
    - {% 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" >}}
    Card title that wraps to a new line

    This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

    @@ -647,7 +627,7 @@ Cards can be organized into [Masonry](https://masonry.desandro.com/)-like column
    - {% 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" >}}
    Card title

    This card has supporting text below as a natural lead-in to additional content.

    @@ -672,7 +652,7 @@ Cards can be organized into [Masonry](https://masonry.desandro.com/)-like column
    - {% 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" >}}
    @@ -692,12 +672,11 @@ Cards can be organized into [Masonry](https://masonry.desandro.com/)-like column
    -{% 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 %} +{{< highlight scss >}} .card-columns { @include media-breakpoint-only(lg) { column-count: 4; @@ -706,4 +685,4 @@ Card columns can also be extended and customized with some additional code. Show column-count: 5; } } -{% endhighlight %} +{{< /highlight >}} diff --git a/site/docs/4.3/components/carousel.md b/site/content/docs/4.3/components/carousel.md similarity index 76% rename from site/docs/4.3/components/carousel.md rename to site/content/docs/4.3/components/carousel.md index 36cea4f00b..e17db95166 100644 --- a/site/docs/4.3/components/carousel.md +++ b/site/content/docs/4.3/components/carousel.md @@ -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`](/docs/{{< param docs_version >}}/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 >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### With controls Adding in the previous and next controls: -{% capture example %} +{{< example >}} -{% 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 >}} -{% 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](/docs/{{< param docs_version >}}/utilities/display/). We hide them initially with `.d-none` and bring them back on medium-sized devices with `.d-md-block`. -{% capture example %} +{{< example >}}
    -{% 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](/docs/{{< param 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. -{% capture example %} +{{< example >}}
    @@ -119,8 +119,7 @@ Using the [card]({{ site.baseurl }}/docs/{{ site.docs_version }}/components/card
    -{% 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 %} +{{< highlight js >}} $('.collapse').collapse() -{% endhighlight %} +{{< /highlight >}} ### Options @@ -185,18 +184,20 @@ 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 >}} Activates your content as a collapsible element. Accepts an optional options `object`. You can create a collapse instance with the constructor, for example: -{% highlight js %} +{{< highlight js >}} var myCollapse = document.getElementById('myCollapse') var bsCollapse = new bootstrap.Collapse(myCollapse, { toggle: false }) -{% endhighlight %} +{{< /highlight >}} | Method | Description | | --- | --- | @@ -236,8 +237,8 @@ Bootstrap's collapse class exposes a few events for hooking into collapse functi -{% highlight js %} +{{< highlight js >}} $('#myCollapsible').on('hidden.bs.collapse', function () { // do something... }) -{% endhighlight %} +{{< /highlight >}} diff --git a/site/docs/4.3/components/dropdowns.md b/site/content/docs/4.3/components/dropdowns.md similarity index 93% rename from site/docs/4.3/components/dropdowns.md rename to site/content/docs/4.3/components/dropdowns.md index 865160a5c4..110400c8ae 100644 --- a/site/docs/4.3/components/dropdowns.md +++ b/site/content/docs/4.3/components/dropdowns.md @@ -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](http://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`](/docs/{{< param docs_version >}}/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 `
    -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} And with `` elements: -{% capture example %} +{{< example >}} -{% 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: -{% highlight html %} +{{< highlight html >}}
    -{% endhighlight %} +{{< /highlight >}} ### Split button @@ -229,7 +227,7 @@ We use this extra class to reduce the horizontal `padding` on either side of the -{% highlight html %} +{{< highlight html >}}
    @@ -244,7 +242,7 @@ We use this extra class to reduce the horizontal `padding` on either side of the Separated link
    -{% endhighlight %} +{{< /highlight >}} ## Sizing @@ -307,7 +305,7 @@ Button dropdowns work with buttons of all sizes, including default and split dro -{% highlight html %} +{{< highlight html >}}
    -{% endhighlight %} +{{< /highlight >}} ## Directions @@ -388,7 +386,7 @@ Trigger dropdown menus above elements by adding `.dropup` to the parent element. -{% highlight html %} +{{< highlight html >}}
    -{% endhighlight %} +{{< /highlight >}} ### Dropright @@ -448,7 +446,7 @@ Trigger dropdown menus at the right of the elements by adding `.dropright` to th -{% highlight html %} +{{< highlight html >}}
    -{% endhighlight %} +{{< /highlight >}} ### Dropleft @@ -510,7 +508,7 @@ Trigger dropdown menus at the left of the elements by adding `.dropleft` to the -{% highlight html %} +{{< highlight html >}}
    -{% endhighlight %} +{{< /highlight >}} ## Menu items Historically dropdown menu contents *had* to be links, but that's no longer the case with v4. Now you can optionally use ` -{% 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 >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Active Add `.active` to items in the dropdown to **style them as active**. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Disabled Add `.disabled` to items in the dropdown to **style them as disabled**. -{% capture example %} +{{< example >}} -{% 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 >}}
    -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Responsive alignment @@ -622,7 +614,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 >}}
    -{% 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 >}}
    -{% 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. @@ -660,20 +650,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 >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Dividers Separate groups of related menu items with a divider. -{% capture example %} +{{< example >}} -{% 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](/docs/{{< param docs_version >}}/utilities/spacing/). Note that you'll likely need additional sizing styles to constrain the menu width. -{% capture example %} +{{< example >}} -{% 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](/docs/{{< param docs_version >}}/utilities/spacing/) to give it the negative space you require. -{% capture example %} +{{< example >}} -{% 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 `` 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 %} +{{< highlight html >}} -{% endhighlight %} +{{< /highlight >}} ### Via JavaScript Call the dropdowns via JavaScript: -{% highlight js %} +{{< highlight js >}} $('.dropdown-toggle').dropdown() -{% endhighlight %} +{{< /highlight >}} -{% 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 @@ -902,8 +884,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 %} +{{< highlight js >}} $('#myDropdown').on('show.bs.dropdown', function () { // do something... }) -{% endhighlight %} +{{< /highlight >}} diff --git a/site/docs/4.3/components/forms.md b/site/content/docs/4.3/components/forms.md similarity index 90% rename from site/docs/4.3/components/forms.md rename to site/content/docs/4.3/components/forms.md index 6c3436fd2d..3d84376e23 100644 --- a/site/docs/4.3/components/forms.md +++ b/site/content/docs/4.3/components/forms.md @@ -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](/docs/{{< param 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. 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 >}}
    @@ -31,8 +31,7 @@ Here's a quick example to demonstrate Bootstrap's form styles. Keep reading for
    -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Form controls @@ -40,7 +39,7 @@ Textual form controls—like ``s, ` -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} For file inputs, swap the `.form-control` for `.form-control-file`. -{% capture example %} +{{< example >}}
    -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Sizing Set heights using classes like `.form-control-lg` and `.form-control-sm`. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -{% capture example %} +{{< example >}} @@ -107,23 +103,21 @@ Set heights using classes like `.form-control-lg` and `.form-control-sm`. -{% 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 >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Readonly plain text If you want to have `` 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 >}}
    @@ -138,10 +132,9 @@ If you want to have `` elements in your form styled as plain tex
    -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -{% capture example %} +{{< example >}}
    @@ -153,22 +146,20 @@ If you want to have `` elements in your form styled as plain tex
    -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Range Inputs Set horizontally scrollable range inputs using `.form-control-range`. -{% capture example %} +{{< example >}}
    -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Checkboxes and radios @@ -182,7 +173,7 @@ Checkboxes and radios use are built to support HTML-based form validation and pr 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 >}}
    -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -{% capture example %} +{{< example >}}
    -{% 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 >}}
    @@ -237,10 +226,9 @@ Group checkboxes or radios on the same horizontal row by adding `.form-check-inl
    -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -{% capture example %} +{{< example >}}
    @@ -253,22 +241,20 @@ Group checkboxes or radios on the same horizontal row by adding `.form-check-inl
    -{% 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 label for assistive technologies (for instance, using `aria-label`). -{% capture example %} +{{< example >}}
    -{% 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 `
    `s, `
    `s, or nearly any other element. -{% capture example %} +{{< example >}}
    @@ -289,14 +275,13 @@ The `.form-group` class is the easiest way to add some structure to forms. It pr
    -{% 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 >}}
    @@ -307,14 +292,13 @@ More complex forms can be built using our grid classes. Use these for form layou
    -{% 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 >}}
    @@ -325,12 +309,11 @@ You may also swap `.row` for `.form-row`, a variation of our standard grid row t
    -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} More complex layouts can also be created with the grid system. -{% capture example %} +{{< example >}}
    @@ -377,8 +360,7 @@ More complex layouts can also be created with the grid system.
    -{% 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 >}}
    @@ -442,14 +424,13 @@ At times, you maybe need to use margin or padding utilities to create that perfe
    -{% 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 `
    -{% 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 >}}
    @@ -491,14 +471,13 @@ As shown in the previous examples, our grid system allows you to place any numbe
    -{% 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 >}}
    @@ -527,12 +506,11 @@ The example below uses a flexbox utility to vertically center the contents and c
    -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} You can then remix that once again with size-specific column classes. -{% capture example %} +{{< example >}}
    @@ -561,12 +539,11 @@ You can then remix that once again with size-specific column classes.
    -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} And of course [custom form controls](#custom-forms) are supported. -{% capture example %} +{{< example >}}
    @@ -589,20 +566,19 @@ And of course [custom form controls](#custom-forms) are supported.
    -{% 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](/docs/{{< param docs_version >}}/utilities/spacing/) and [flexbox](/docs/{{< param docs_version >}}/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 `