diff options
| author | Ilya | 2011-10-20 10:21:06 -0700 |
|---|---|---|
| committer | Ilya | 2011-10-20 10:21:06 -0700 |
| commit | 0c51e6d1127a7466cc6e5327587c5dfeab2d4c94 (patch) | |
| tree | a082b10612b940bd182c231aa8e1be545c55a862 | |
| parent | 4d9622ecf41f9c0e15cf7f3f84c39d1cf7370e92 (diff) | |
| parent | a77ddcba854c7946f8791b9a0d599759ad557b75 (diff) | |
| download | vimium-0c51e6d1127a7466cc6e5327587c5dfeab2d4c94.tar.bz2 | |
Merge pull request #406 from ohnishiakira/detectImageMap
fixes #393: detect Image map in hint mode
| -rw-r--r-- | linkHints.js | 20 |
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; }, |
