aboutsummaryrefslogtreecommitdiffstats
path: root/linkHints.js
diff options
context:
space:
mode:
authorAkira Ohnishi2011-07-30 00:36:46 +0900
committerAkira Ohnishi2011-10-09 01:16:18 +0900
commita77ddcba854c7946f8791b9a0d599759ad557b75 (patch)
tree0641083af626d39f246e77b23b8e4d129210c20a /linkHints.js
parent04ce1512b62981004134e177c134d4cd029b99e8 (diff)
downloadvimium-a77ddcba854c7946f8791b9a0d599759ad557b75.tar.bz2
fixes #393: detect Image map in hint mode
Diffstat (limited to 'linkHints.js')
-rw-r--r--linkHints.js20
1 files changed, 19 insertions, 1 deletions
diff --git a/linkHints.js b/linkHints.js
index 79ef5ef1..057e9e47 100644
--- a/linkHints.js
+++ b/linkHints.js
@@ -40,7 +40,7 @@ var linkHints = {
* The final expression will be something like "//button | //xhtml:button | ..."
*/
clickableElementsXPath: (function() {
- var clickableElements = ["a", "textarea", "button", "select", "input[not(@type='hidden')]",
+ var clickableElements = ["a", "area[@href]", "textarea", "button", "select", "input[not(@type='hidden')]",
"*[@onclick or @tabindex or @role='link' or @role='button']"];
var xpath = [];
for (var i in clickableElements)
@@ -147,6 +147,24 @@ var linkHints = {
break;
}
}
+
+ if (element.localName === "area") {
+ var map = element.parentElement;
+ var img = document.querySelector("img[usemap='#" + map.getAttribute("name") + "']");
+ var clientRect = img.getClientRects()[0];
+ var c = element.coords.split(/,/);
+ var coords = [parseInt(c[0], 10), parseInt(c[1], 10), parseInt(c[2], 10), parseInt(c[3], 10)];
+ var rect = {
+ top: clientRect.top + coords[1],
+ left: clientRect.left + coords[0],
+ right: clientRect.left + coords[2],
+ bottom: clientRect.top + coords[3],
+ width: coords[2] - coords[0],
+ height: coords[3] - coords[1]
+ };
+
+ visibleElements.push({element: element, rect: rect});
+ }
}
return visibleElements;
},