From 14241ca842b7dc92f26252a0ac7bb7e549d560c8 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Tue, 31 Oct 2017 21:37:53 +0900 Subject: support following area tags --- src/content/components/common/hint.js | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'src/content/components/common/hint.js') diff --git a/src/content/components/common/hint.js b/src/content/components/common/hint.js index cc46fd6..9ef9eba 100644 --- a/src/content/components/common/hint.js +++ b/src/content/components/common/hint.js @@ -1,4 +1,18 @@ 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) { @@ -9,14 +23,14 @@ export default class Hint { this.target = target; let doc = target.ownerDocument; - let { top, left } = target.getBoundingClientRect(); + 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 = left + scrollX + 'px'; - this.element.style.top = top + scrollY + 'px'; + this.element.style.left = x + scrollX + 'px'; + this.element.style.top = y + scrollY + 'px'; this.show(); doc.body.append(this.element); -- cgit v1.2.3