// NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT // IT'S ALL JUST JUNK FOR OUR DOCS! // ++++++++++++++++++++++++++++++++++++++++++ /*! * 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 ClipboardJS: false, bootstrap: false */ (() => { 'use strict' // Tooltip and popover demos document.querySelectorAll('.tooltip-demo') .forEach(tooltip => { new bootstrap.Tooltip(tooltip, { selector: '[data-bs-toggle="tooltip"]' }) }) document.querySelectorAll('[data-bs-toggle="popover"]') .forEach(popover => { new bootstrap.Popover(popover) }) 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}` }) } document.querySelectorAll('.bd-example .toast') .forEach(toastNode => { const toast = new bootstrap.Toast(toastNode, { autohide: false }) toast.show() }) const toastTrigger = document.getElementById('liveToastBtn') const toastLiveExample = document.getElementById('liveToast') if (toastTrigger) { toastTrigger.addEventListener('click', () => { const toast = new bootstrap.Toast(toastLiveExample) toast.show() }) } const alertPlaceholder = document.getElementById('liveAlertPlaceholder') const alertTrigger = document.getElementById('liveAlertBtn') function alert(message, type) { const wrapper = document.createElement('div') wrapper.innerHTML = `` alertPlaceholder.append(wrapper) } if (alertTrigger) { alertTrigger.addEventListener('click', () => { alert('Nice, you triggered this alert message!', 'success') }) } // Demos within modals document.querySelectorAll('.tooltip-test') .forEach(tooltip => { new bootstrap.Tooltip(tooltip) }) document.querySelectorAll('.popover-test') .forEach(popover => { new bootstrap.Popover(popover) }) // Indeterminate checkbox example document.querySelectorAll('.bd-example-indeterminate [type="checkbox"]') .forEach(checkbox => { checkbox.indeterminate = true }) // Disable empty links in docs examples document.querySelectorAll('.bd-content [href="#"]') .forEach(link => { link.addEventListener('click', event => { event.preventDefault() }) }) // Modal relatedTarget demo 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 }) } // Insert copy to clipboard button before .highlight const btnTitle = 'Copy to clipboard' const btnEdit = 'Edit on StackBlitz' const btnHtml = '
' document.querySelectorAll('div.highlight') .forEach(element => { element.insertAdjacentHTML('beforebegin', btnHtml) }) /** * * @param {string} selector * @param {string} title */ function snippetButtonTooltip(selector, title) { document.querySelectorAll(selector).forEach(btn => { const tooltipBtn = new bootstrap.Tooltip(btn, { title }) btn.addEventListener('mouseleave', () => { // Explicitly hide tooltip, since after clicking it remains // focused (as it's a button), so tooltip would otherwise // remain visible until focus is moved away tooltipBtn.hide() }) }) } snippetButtonTooltip('.btn-clipboard', btnTitle) snippetButtonTooltip('.btn-edit', btnEdit) const clipboard = new ClipboardJS('.btn-clipboard', { target(trigger) { return trigger.parentNode.nextElementSibling } }) clipboard.on('success', event => { const tooltipBtn = bootstrap.Tooltip.getInstance(event.trigger) tooltipBtn.setContent({ '.tooltip-inner': 'Copied!' }) event.trigger.addEventListener('hidden.bs.tooltip', () => { tooltipBtn.setContent({ '.tooltip-inner': btnTitle }) }, { once: true }) event.clearSelection() }) clipboard.on('error', event => { const modifierKey = /mac/i.test(navigator.userAgent) ? '\u2318' : 'Ctrl-' const fallbackMsg = `Press ${modifierKey}C to copy` const tooltipBtn = bootstrap.Tooltip.getInstance(event.trigger) tooltipBtn.setContent({ '.tooltip-inner': fallbackMsg }) event.trigger.addEventListener('hidden.bs.tooltip', () => { tooltipBtn.setContent({ '.tooltip-inner': btnTitle }) }, { once: true }) }) })()