import './hint.css'; import * as dom from 'shared/utils/dom'; const hintPosition = (element) => { let { left, top, right, bottom } = dom.viewportRect(element); if (element.tagName !== 'AREA') { return { x: left, y: top }; } return { x: (left + right) / 2, y: (top + bottom) / 2, }; }; export default class Hint { constructor(target, tag) { if (!(document.body instanceof HTMLElement)) { throw new TypeError('target is not an HTMLElement'); } this.target = target; let doc = target.ownerDocument; let { x, y } = hintPosition(target); let { scrollX, scrollY } = window; this.element = doc.createElement('span'); this.element.className = 'vimvixen-hint'; this.element.textContent = tag; this.element.style.left = x + scrollX + 'px'; this.element.style.top = y + scrollY + 'px'; this.show(); doc.body.append(this.element); } show() { this.element.style.display = 'inline'; } hide() { this.element.style.display = 'none'; } remove() { this.element.remove(); } }