139 lines
6.2 KiB
HTML
139 lines
6.2 KiB
HTML
<!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!">twitter handle</a> freegan cred 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>
|