Pristine upstream, unpacked from the official wordpress.org tarball. https://wordpress.org/wordpress-7.1.1.tar.gz sha1 2a9d68474e8703aa3a66f80427b325e0941b6a1e (published by wordpress.org) sha256 3996fee13448ef12e07e9f0c77db2f655ffa1b7cde71c80a4965d3bf1fb956b3 This branch carries nothing but upstream releases, one commit each, and is never edited. It is the other side of the git-subtree merge that brings security releases into SiriusPress/wordpress/ — see SiriusPress/docs/upstream-merges.md.
60 lines
1.8 KiB
JavaScript
60 lines
1.8 KiB
JavaScript
/**
|
|
* @output wp-admin/js/wp-tooltip.js
|
|
*/
|
|
|
|
/**
|
|
* Add focus and hover support for the 'tooltip' type in `wp_tooltip()`.
|
|
* This script can be made obsolete when support is available for Interest Invokers.
|
|
*/
|
|
(() => {
|
|
|
|
const supportsPopover = /** @type {boolean} */ ( Object.prototype.hasOwnProperty.call( HTMLElement.prototype, 'popover' ) );
|
|
let hidePopover = false;
|
|
if ( ! supportsPopover ) {
|
|
hidePopover = true;
|
|
}
|
|
|
|
const popovers = /** @type {NodeListOf<HTMLSpanElement>} */ ( document.querySelectorAll( '.wp-is-tooltip' ) );
|
|
|
|
popovers.forEach( function( popover ) {
|
|
const trigger = /** @type {HTMLButtonElement|HTMLAnchorElement|null} */ ( popover.querySelector( '.wp-tooltip__toggle' ) );
|
|
const panel = /** @type {HTMLSpanElement|null} */ ( popover.querySelector( 'span.wp-tooltip__bubble' ) );
|
|
if ( hidePopover && panel ) {
|
|
panel.classList.add( 'hidden' );
|
|
|
|
return;
|
|
}
|
|
if ( ! trigger || ! panel ) {
|
|
return;
|
|
}
|
|
|
|
/** @type {ReturnType<typeof setTimeout>} */
|
|
let openTimeout;
|
|
|
|
// Show Tooltip Function (with delay to prevent flickering).
|
|
const showTooltip = () => {
|
|
clearTimeout( openTimeout );
|
|
openTimeout = setTimeout( () => {
|
|
// Only show if it's not already open.
|
|
if ( ! panel.matches( ':popover-open' ) ) {
|
|
// pass the triggering element so implicit position anchors work.
|
|
panel.showPopover( { source: trigger } );
|
|
}
|
|
}, 300 );
|
|
};
|
|
// Hide Tooltip Function.
|
|
const hideTooltip = () => {
|
|
clearTimeout( openTimeout );
|
|
if ( panel.matches( ':popover-open' ) ) {
|
|
panel.hidePopover();
|
|
}
|
|
};
|
|
|
|
// Bind Hover and Focus Events.
|
|
trigger.addEventListener( 'mouseenter', showTooltip );
|
|
trigger.addEventListener( 'focus', showTooltip );
|
|
|
|
trigger.addEventListener( 'mouseleave', hideTooltip );
|
|
trigger.addEventListener( 'blur', hideTooltip );
|
|
});
|
|
})();
|