| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- <!doctype html>
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <link href="../../../dist/css/bootstrap.min.css" rel="stylesheet">
- <title>Tooltip</title>
- <style>
- #target {
- border: 1px solid;
- width: 100px;
- height: 50px;
- margin-left: 50px;
- transform: rotate(270deg);
- margin-top: 100px;
- }
- </style>
- </head>
- <body>
- <div class="container">
- <h1>Tooltip <small>Bootstrap Visual Test</small></h1>
- <p class="text-body-secondary">Tight pants next level keffiyeh <a href="#" data-bs-toggle="tooltip" title="Default tooltip">you probably</a> haven't heard of them. Photo booth beard raw denim letterpress vegan messenger bag stumptown. Farm-to-table seitan, mcsweeney's fixie sustainable quinoa 8-bit american apparel <a href="#" data-bs-toggle="tooltip" title="Another tooltip">have a</a> terry richardson vinyl chambray. Beard stumptown, cardigans banh mi lomo thundercats. Tofu biodiesel williamsburg marfa, four loko mcsweeney's cleanse vegan chambray. A really ironic artisan <a href="#" data-bs-toggle="tooltip" title="Another one here too">whatever keytar</a>, scenester farm-to-table banksy Austin <a href="#" data-bs-toggle="tooltip" title="The last tip!">freegan cred</a> raw denim single-origin coffee viral.</p>
- <hr>
- <div class="row">
- <p>
- <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="auto" title="Tooltip on auto">
- Tooltip on auto
- </button>
- <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="top" title="Tooltip on top">
- Tooltip on top
- </button>
- <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="right" title="Tooltip on right">
- Tooltip on end
- </button>
- <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Tooltip on bottom">
- Tooltip on bottom
- </button>
- <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="left" title="Tooltip on left">
- Tooltip on start
- </button>
- </p>
- </div>
- <div class="row">
- <p>
- <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="left" title="Tooltip with container (selector)" data-bs-container="#customContainer">
- Tooltip with container (selector)
- </button>
- <button id="tooltipElement" type="button" class="btn btn-secondary" data-bs-placement="left" title="Tooltip with container (element)">
- Tooltip with container (element)
- </button>
- <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-html="true" title="<em>Tooltip</em> <u>with</u> <b>HTML</b>">
- Tooltip with HTML
- </button>
- <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="left" title="Tooltip with XSS" data-bs-container="<img src=1 onerror=alert(123)>">
- Tooltip with XSS
- </button>
- </p>
- </div>
- <div class="row">
- <div class="col-sm-3">
- <div id="target" title="Test tooltip on transformed element"></div>
- </div>
- <div id="shadow" class="pt-5"></div>
- </div>
- <div id="customContainer"></div>
- <div class="row mt-4 border-top">
- <hr>
- <div class="h4">Test Selector triggered tooltips</div>
- <div id="wrapperTriggeredBySelector">
- <div class="py-2 selectorButtonsBlock">
- <button type="button" class="btn btn-secondary bs-dynamic-tooltip" title="random title">Using title</button>
- <button type="button" class="btn btn-secondary bs-dynamic-tooltip" data-bs-title="random title">Using bs-title</button>
- </div>
- </div>
- <div class="mt-3">
- <button type="button" class="btn btn-primary" onclick="duplicateButtons()">Duplicate above two buttons</button>
- </div>
- </div>
- </div>
- <script src="../../../dist/js/bootstrap.bundle.js"></script>
- <script>
- /* global bootstrap: false */
- if (typeof document.body.attachShadow === 'function') {
- const shadowRoot = document.getElementById('shadow').attachShadow({ mode: 'open' })
- shadowRoot.innerHTML =
- '<button id="firstShadowTooltip" type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="top" title="Tooltip on top in a shadow dom">' +
- ' Tooltip on top in a shadow dom' +
- '</button>' +
- '<button id="secondShadowTooltip" type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="top" title="Tooltip on top in a shadow dom with container option">' +
- ' Tooltip on top in a shadow dom' +
- '</button>'
- new bootstrap.Tooltip(shadowRoot.firstChild)
- new bootstrap.Tooltip(shadowRoot.getElementById('secondShadowTooltip'), {
- container: shadowRoot
- })
- }
- new bootstrap.Tooltip('#tooltipElement', {
- container: '#customContainer'
- })
- const targetTooltip = new bootstrap.Tooltip('#target', {
- placement: 'top',
- trigger: 'manual'
- })
- targetTooltip.show()
- document.querySelectorAll('[data-bs-toggle="tooltip"]').forEach(tooltipEl => new bootstrap.Tooltip(tooltipEl))
- </script>
- <script>
- /* global bootstrap: false */
- new bootstrap.Tooltip('#wrapperTriggeredBySelector', {
- animation: false,
- selector: '.bs-dynamic-tooltip'
- })
- /* eslint-disable no-unused-vars */
- function duplicateButtons() {
- const buttonsBlock = document.querySelector('.selectorButtonsBlock')// get first
- const buttonsBlockClone = buttonsBlock.cloneNode(true)
- buttonsBlockClone.innerHTML += new Date().toLocaleString()
- document.querySelector('#wrapperTriggeredBySelector').append(buttonsBlockClone)
- }
- /* eslint-enable no-unused-vars */
- </script>
- </body>
- </html>
|