sirius-press/wp-includes/js/wp-tooltip.js
Silent Mode 1f173de885 WordPress 7.1.1
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.
2026-09-21 02:53:57 +02:00

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 );
});
})();