mirror of
https://github.com/twbs/bootstrap.git
synced 2024-12-14 02:24:00 +01:00
0444d2cfe5
* Instantiate/initialize all non-autoplaying carousels in docs pages * Rewrite/reorganise carousel docs page * start with static/non-autoplaying examples * explicitly mention that carousels currently need to be manually initialized * split out and explain autoplaying and the weird "autoplay after first interaction" behaviour, as well as the pause on hover/focus * Add callout about autoplaying and accessibility * Don't have the dark variant example autoplay * Add "autoplaying" to cspell custom dictionary * Tweal wording, move Page Visibility API to autoplay section * Tweak explanation for methods, add line break in js code for consistency with last code block on the page * Tweak method descriptions * Tweak headings (plural "carousels") * Move some paragraphs out of intro and into basic example, reword the nested and accessibility paragraph * Tweak warning about `.active` slide * Tweak callout wording * Further prose tweaks move the sentence about not double-initialising autoplaying carousels to the callout right at the top instead of talking about `data-bs...` attributes, talk about the "option" instead, as authors may be setting these not via data attributes, but at instatiation time with options in the constructor remove the incorrect statement about pausing when keyboard focus is in the carousel * Instantiate/initialize all non-autoplaying carousels in docs pages * Rewrite/reorganise carousel docs page * start with static/non-autoplaying examples * explicitly mention that carousels currently need to be manually initialized * split out and explain autoplaying and the weird "autoplay after first interaction" behaviour, as well as the pause on hover/focus * Add callout about autoplaying and accessibility * Don't have the dark variant example autoplay * Add "autoplaying" to cspell custom dictionary * Tweal wording, move Page Visibility API to autoplay section * Tweak explanation for methods, add line break in js code for consistency with last code block on the page * Tweak method descriptions * Tweak headings (plural "carousels") * Move some paragraphs out of intro and into basic example, reword the nested and accessibility paragraph * Tweak warning about `.active` slide * Tweak callout wording * Further prose tweaks move the sentence about not double-initialising autoplaying carousels to the callout right at the top instead of talking about `data-bs...` attributes, talk about the "option" instead, as authors may be setting these not via data attributes, but at instatiation time with options in the constructor remove the incorrect statement about pausing when keyboard focus is in the carousel * Fix relative link * Update site/assets/js/snippets.js Co-authored-by: GeoSot <geo.sotis@gmail.com> * Fix snippet.js * Tweak content organisation just a bit Co-authored-by: GeoSot <geo.sotis@gmail.com> Co-authored-by: Julien Déramond <juderamond@gmail.com> Co-authored-by: Julien Déramond <julien.deramond@orange.com> Co-authored-by: Mark Otto <markdotto@gmail.com>
164 lines
5.1 KiB
JavaScript
164 lines
5.1 KiB
JavaScript
// NOTICE!!! Initially embedded in our docs this JavaScript
|
|
// file contains elements that can help you create reproducible
|
|
// use cases in StackBlitz for instance.
|
|
// In a real project please adapt this content to your needs.
|
|
// ++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
/*!
|
|
* JavaScript for Bootstrap's docs (https://getbootstrap.com/)
|
|
* Copyright 2011-2022 The Bootstrap Authors
|
|
* Copyright 2011-2022 Twitter, Inc.
|
|
* Licensed under the Creative Commons Attribution 3.0 Unported License.
|
|
* For details, see https://creativecommons.org/licenses/by/3.0/.
|
|
*/
|
|
|
|
/* global bootstrap: false */
|
|
|
|
(() => {
|
|
'use strict'
|
|
|
|
// --------
|
|
// Tooltips
|
|
// --------
|
|
// Instantiate all tooltips in a docs or StackBlitz page
|
|
document.querySelectorAll('[data-bs-toggle="tooltip"]')
|
|
.forEach(tooltip => {
|
|
new bootstrap.Tooltip(tooltip)
|
|
})
|
|
|
|
// --------
|
|
// Popovers
|
|
// --------
|
|
// Instantiate all popovers in a docs or StackBlitz page
|
|
document.querySelectorAll('[data-bs-toggle="popover"]')
|
|
.forEach(popover => {
|
|
new bootstrap.Popover(popover)
|
|
})
|
|
|
|
// -------------------------------
|
|
// Toasts
|
|
// -------------------------------
|
|
// Used by 'Placement' example in docs or StackBlitz
|
|
const toastPlacement = document.getElementById('toastPlacement')
|
|
if (toastPlacement) {
|
|
document.getElementById('selectToastPlacement').addEventListener('change', function () {
|
|
if (!toastPlacement.dataset.originalClass) {
|
|
toastPlacement.dataset.originalClass = toastPlacement.className
|
|
}
|
|
|
|
toastPlacement.className = `${toastPlacement.dataset.originalClass} ${this.value}`
|
|
})
|
|
}
|
|
|
|
// Instantiate all toasts in a docs page only
|
|
document.querySelectorAll('.bd-example .toast')
|
|
.forEach(toastNode => {
|
|
const toast = new bootstrap.Toast(toastNode, {
|
|
autohide: false
|
|
})
|
|
|
|
toast.show()
|
|
})
|
|
|
|
// Instantiate all toasts in a docs page only
|
|
const toastTrigger = document.getElementById('liveToastBtn')
|
|
const toastLiveExample = document.getElementById('liveToast')
|
|
if (toastTrigger) {
|
|
toastTrigger.addEventListener('click', () => {
|
|
const toast = new bootstrap.Toast(toastLiveExample)
|
|
|
|
toast.show()
|
|
})
|
|
}
|
|
|
|
// -------------------------------
|
|
// Alerts
|
|
// -------------------------------
|
|
// Used in 'Show live toast' example in docs or StackBlitz
|
|
const alertPlaceholder = document.getElementById('liveAlertPlaceholder')
|
|
const alertTrigger = document.getElementById('liveAlertBtn')
|
|
|
|
const appendAlert = (message, type) => {
|
|
const wrapper = document.createElement('div')
|
|
wrapper.innerHTML = [
|
|
`<div class="alert alert-${type} alert-dismissible" role="alert">`,
|
|
` <div>${message}</div>`,
|
|
' <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>',
|
|
'</div>'
|
|
].join('')
|
|
|
|
alertPlaceholder.append(wrapper)
|
|
}
|
|
|
|
if (alertTrigger) {
|
|
alertTrigger.addEventListener('click', () => {
|
|
appendAlert('Nice, you triggered this alert message!', 'success')
|
|
})
|
|
}
|
|
|
|
// --------
|
|
// Carousels
|
|
// --------
|
|
// Instantiate all non-autoplaying carousels in a docs or StackBlitz page
|
|
document.querySelectorAll('.carousel:not([data-bs-ride="carousel"])')
|
|
.forEach(carousel => {
|
|
bootstrap.Carousel.getOrCreateInstance(carousel)
|
|
})
|
|
|
|
// -------------------------------
|
|
// Checks & Radios
|
|
// -------------------------------
|
|
// Indeterminate checkbox example in docs and StackBlitz
|
|
document.querySelectorAll('.bd-example-indeterminate [type="checkbox"]')
|
|
.forEach(checkbox => {
|
|
if (checkbox.id.includes('Indeterminate')) {
|
|
checkbox.indeterminate = true
|
|
}
|
|
})
|
|
|
|
// -------------------------------
|
|
// Links
|
|
// -------------------------------
|
|
// Disable empty links in docs examples only
|
|
document.querySelectorAll('.bd-content [href="#"]')
|
|
.forEach(link => {
|
|
link.addEventListener('click', event => {
|
|
event.preventDefault()
|
|
})
|
|
})
|
|
|
|
// -------------------------------
|
|
// Modal
|
|
// -------------------------------
|
|
// Modal 'Varying modal content' example in docs and StackBlitz
|
|
const exampleModal = document.getElementById('exampleModal')
|
|
if (exampleModal) {
|
|
exampleModal.addEventListener('show.bs.modal', event => {
|
|
// Button that triggered the modal
|
|
const button = event.relatedTarget
|
|
// Extract info from data-bs-* attributes
|
|
const recipient = button.getAttribute('data-bs-whatever')
|
|
|
|
// Update the modal's content.
|
|
const modalTitle = exampleModal.querySelector('.modal-title')
|
|
const modalBodyInput = exampleModal.querySelector('.modal-body input')
|
|
|
|
modalTitle.textContent = `New message to ${recipient}`
|
|
modalBodyInput.value = recipient
|
|
})
|
|
}
|
|
|
|
// -------------------------------
|
|
// Offcanvas
|
|
// -------------------------------
|
|
// 'Offcanvas components' example in docs only
|
|
const myOffcanvas = document.querySelectorAll('.bd-example-offcanvas .offcanvas')
|
|
if (myOffcanvas) {
|
|
myOffcanvas.forEach(offcanvas => {
|
|
offcanvas.addEventListener('show.bs.offcanvas', event => {
|
|
event.preventDefault()
|
|
}, false)
|
|
})
|
|
}
|
|
})()
|