UNPKG

jsroot

Version:
88 lines (71 loc) 2.33 kB
class RTreeMapTooltip { static CONSTANTS = { DELAY: 0, OFFSET_X: 10, OFFSET_Y: -10, PADDING: 8, BORDER_RADIUS: 4 }; constructor(painter) { this.painter = painter; this.tooltip = null; this.content = ''; this.x = 0; this.y = 0; } cleanup() { if (this.tooltip !== null) { document.body.removeChild(this.tooltip); this.tooltip = null; } } createTooltip() { if (this.tooltip) return; this.tooltip = document.createElement('div'); this.tooltip.style.cssText = ` position: absolute; background: rgba(0, 0, 0, 0.9); color: white; padding: ${RTreeMapTooltip.CONSTANTS.PADDING}px; border-radius: ${RTreeMapTooltip.CONSTANTS.BORDER_RADIUS}px; font-size: 12px; pointer-events: none; z-index: 10000; opacity: 0; transition: opacity 0.2s; max-width: 200px; word-wrap: break-word; `; document.body.appendChild(this.tooltip); } showTooltip() { if (!this.tooltip) this.createTooltip(); this.tooltip.innerHTML = this.content; this.tooltip.style.left = (this.x + RTreeMapTooltip.CONSTANTS.OFFSET_X) + 'px'; this.tooltip.style.top = (this.y + RTreeMapTooltip.CONSTANTS.OFFSET_Y) + 'px'; this.tooltip.style.opacity = '1'; } hideTooltip() { if (this.tooltip) this.tooltip.style.opacity = '0'; } generateTooltipContent(node) { const isLeaf = node.fNChildren === 0; let content = (node.fName.length > 0) ? `<strong>${node.fName}</strong><br>` : ''; content += `<i>${(isLeaf ? 'Column' : 'Field')}</i><br>`; content += `Size: ${this.painter.getDataStr(node.fSize)}<br>`; if (isLeaf && node.fType !== undefined) content += `Type: ${node.fType}<br>`; if (!isLeaf) content += `Children: ${node.fNChildren}<br>`; const obj = this.painter.getObject(); if (obj.fNodes && obj.fNodes.length > 0) { const totalSize = obj.fNodes[0].fSize, percentage = ((node.fSize / totalSize) * 100).toFixed(2); content += `Disk Usage: ${percentage}%`; } return content; } } export { RTreeMapTooltip };