Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | 5x 5x 5x 5x 5x 5x 5x 1x 1x 1x 1x 1x 5x 5x 5x 5x 5x 5x 1x 4x 9x 4x 1x 1x 1x 1x 3x 5x 1x 1x 1x 5x 1x 1x 1x 1x 5x 5x 5x 5x 5x 1x | import { Selectors } from './selectors' import { isBrowser, hideAllPoppers, closest, closestCallback, toArray } from './utils' const nav = isBrowser ? navigator : {} const win = isBrowser ? window : {} export let isIE = /MSIE |Trident\//.test(nav.userAgent) export let isIOS = /iPhone|iPad|iPod/.test(nav.platform) && !win.MSStream export let supportsTouch = 'ontouchstart' in win export let isUsingTouch = false export const onDocumentTouch = () => { Iif (isUsingTouch) { return } isUsingTouch = true Iif (isIOS) { document.body.classList.add('tippy-iOS') } Eif (window.performance) { document.addEventListener('mousemove', onDocumentMouseMove) } } let lastMouseMoveTime = 0 export const onDocumentMouseMove = () => { const now = performance.now() // Chrome 60+ is 1 mousemove per animation frame, use 20ms time difference if (now - lastMouseMoveTime < 20) { isUsingTouch = false document.removeEventListener('mousemove', onDocumentMouseMove) if (!isIOS) { document.body.classList.remove('tippy-iOS') } } lastMouseMoveTime = now } export const onDocumentClick = ({ target }) => { // Simulated events dispatched on the document Iif (!(target instanceof Element)) { return hideAllPoppers() } // Clicked on an interactive popper const popper = closest(target, Selectors.POPPER) if (popper && popper._tippy && popper._tippy.props.interactive) { return } // Clicked on a reference const reference = closestCallback( target, el => el._tippy && el._tippy.reference === el ) if (reference) { const tip = reference._tippy const isClickTrigger = tip.props.trigger.indexOf('click') > -1 Eif (isUsingTouch || isClickTrigger) { return hideAllPoppers(tip) } if (tip.props.hideOnClick !== true || isClickTrigger) { return } tip.clearDelayTimeouts() } hideAllPoppers() } export const onWindowBlur = () => { const { activeElement } = document Eif (activeElement && activeElement.blur && activeElement._tippy) { activeElement.blur() } } export const onWindowResize = () => { toArray(document.querySelectorAll(Selectors.POPPER)).forEach(popper => { const tippyInstance = popper._tippy Eif (!tippyInstance.props.livePlacement) { tippyInstance.popperInstance.scheduleUpdate() } }) } /** * Adds the needed global event listeners */ export default function bindEventListeners() { document.addEventListener('click', onDocumentClick) document.addEventListener('touchstart', onDocumentTouch) window.addEventListener('blur', onWindowBlur) window.addEventListener('resize', onWindowResize) if ( !supportsTouch && (navigator.maxTouchPoints || navigator.msMaxTouchPoints) ) { document.addEventListener('pointerdown', onDocumentTouch) } } |