vendor: 3,413 bytes, lines 1-134
1function tlite(getTooltipOpts) { 2 document.addEventListener('mouseover', function (e) { 3 var el = e.target; 4 var opts = getTooltipOpts(el); 5 6 if (!opts) { 7 el = el.parentElement; 8 opts = el && getTooltipOpts(el); 9 } 10 11 opts && tlite.show(el, opts, true); 12 }); 13} 14 15tlite.show = function (el, opts, isAuto) { 16 var fallbackAttrib = 'data-tlite'; 17 opts = opts || {}; 18 19 (el.tooltip || Tooltip(el, opts)).show(); 20 21 function Tooltip(el, opts) { 22 var tooltipEl; 23 var showTimer; 24 var text; 25 26 el.addEventListener('mousedown', autoHide); 27 el.addEventListener('mouseleave', autoHide); 28 29 function show() { 30 text = el.title || el.getAttribute(fallbackAttrib) || text; 31 el.title = ''; 32 el.setAttribute(fallbackAttrib, ''); 33 text && !showTimer && (showTimer = setTimeout(fadeIn, isAuto ? 150 : 1)) 34 } 35 36 function autoHide() { 37 tlite.hide(el, true); 38 } 39 40 function hide(isAutoHiding) { 41 if (isAuto === isAutoHiding) { 42 showTimer = clearTimeout(showTimer); 43 var parent = tooltipEl && tooltipEl.parentNode; 44 parent && parent.removeChild(tooltipEl); 45 tooltipEl = undefined; 46 } 47 } 48 49 function fadeIn() { 50 if (!tooltipEl) { 51 tooltipEl = createTooltip(el, text, opts); 52 } 53 } 54 55 return el.tooltip = { 56 show: show, 57 hide: hide 58 }; 59 } 60 61 function createTooltip(el, text, opts) { 62 var tooltipEl = document.createElement('span'); 63 var grav = opts.grav || el.getAttribute('data-tlite') || 'n'; 64 65 tooltipEl.innerHTML = text; 66 67 el.appendChild(tooltipEl); 68 69 var vertGrav = grav[0] || ''; 70 var horzGrav = grav[1] || ''; 71 72 function positionTooltip() { 73 tooltipEl.className = 'tlite ' + 'tlite-' + vertGrav + horzGrav; 74 75 var arrowSize = 10; 76 var top = el.offsetTop; 77 var left = el.offsetLeft; 78 79 if (tooltipEl.offsetParent === el) { 80 top = left = 0; 81 } 82 83 var width = el.offsetWidth; 84 var height = el.offsetHeight; 85 var tooltipHeight = tooltipEl.offsetHeight; 86 var tooltipWidth = tooltipEl.offsetWidth; 87 var centerEl = left + (width / 2); 88 89 tooltipEl.style.top = ( 90 vertGrav === 's' ? (top - tooltipHeight - arrowSize) : 91 vertGrav === 'n' ? (top + height + arrowSize) : 92 (top + (height / 2) - (tooltipHeight / 2)) 93 ) + 'px'; 94 95 tooltipEl.style.left = ( 96 horzGrav === 'w' ? left : 97 horzGrav === 'e' ? left + width - tooltipWidth : 98 vertGrav === 'w' ? (left + width + arrowSize) : 99 vertGrav === 'e' ? (left - tooltipWidth - arrowSize) : 100 (centerEl - tooltipWidth / 2) 101 ) + 'px'; 102 } 103 104 positionTooltip(); 105 106 var rect = tooltipEl.getBoundingClientRect(); 107 108 if (vertGrav === 's' && rect.top < 0) { 109 vertGrav = 'n'; 110 positionTooltip(); 111 } else if (vertGrav === 'n' && rect.bottom > window.innerHeight) { 112 vertGrav = 's'; 113 positionTooltip(); 114 } else if (vertGrav === 'e' && rect.left < 0) { 115 vertGrav = 'w'; 116 positionTooltip(); 117 } else if (vertGrav === 'w' && rect.right > window.innerWidth) { 118 vertGrav = 'e'; 119 positionTooltip(); 120 } 121 122 tooltipEl.className += ' tlite-visible'; 123 124 return tooltipEl; 125 } 126}; 127 128tlite.hide = function (el, isAuto) { 129 el.tooltip && el.tooltip.hide(isAuto); 130}; 131 132if (typeof module !== 'undefined' && module.exports) { 133 module.exports = tlite; 134}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.