diff options
Diffstat (limited to 'linkHints.js')
| -rw-r--r-- | linkHints.js | 32 |
1 files changed, 6 insertions, 26 deletions
diff --git a/linkHints.js b/linkHints.js index 1fdc0322..509b6c0d 100644 --- a/linkHints.js +++ b/linkHints.js @@ -41,7 +41,7 @@ var linkHints = { * The final expression will be something like "//button | //xhtml:button | ..." * We use translate() instead of lower-case() because Chrome only supports XPath 1.0. */ - clickableElementsXPath: utils.makeXPath(["a", "area[@href]", "textarea", "button", "select","input[not(@type='hidden')]", + clickableElementsXPath: domUtils.makeXPath(["a", "area[@href]", "textarea", "button", "select","input[not(@type='hidden')]", "*[@onclick or @tabindex or @role='link' or @role='button' or " + "@contenteditable='' or translate(@contenteditable, 'TRUE', 'true')='true']"]), @@ -115,14 +115,14 @@ var linkHints = { * of digits needed to enumerate all of the links on screen. */ getVisibleClickableElements: function() { - var resultSet = utils.evaluateXPath(this.clickableElementsXPath, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE); + var resultSet = domUtils.evaluateXPath(this.clickableElementsXPath, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE); var visibleElements = []; // Find all visible clickable elements. for (var i = 0, count = resultSet.snapshotLength; i < count; i++) { var element = resultSet.snapshotItem(i); - var clientRect = utils.getVisibleClientRect(element, clientRect); + var clientRect = domUtils.getVisibleClientRect(element, clientRect); if (clientRect !== null) visibleElements.push({element: element, rect: clientRect}); @@ -204,8 +204,8 @@ var linkHints = { activateLink: function(matchedLink, delay) { var that = this; this.delayMode = true; - if (this.isSelectable(matchedLink)) { - this.simulateSelect(matchedLink); + if (domUtils.isSelectable(matchedLink)) { + domUtils.simulateSelect(matchedLink); this.deactivateMode(delay, function() { that.delayMode = false; }); } else { if (this.shouldOpenWithQueue) { @@ -231,25 +231,10 @@ var linkHints = { } }, - /* - * Selectable means the element has a text caret; this is not the same as "focusable". - */ - isSelectable: function(element) { - var selectableTypes = ["search", "text", "password"]; - return (element.nodeName.toLowerCase() == "input" && selectableTypes.indexOf(element.type) >= 0) || - element.nodeName.toLowerCase() == "textarea"; - }, - copyLinkUrl: function(link) { chrome.extension.sendRequest({handler: 'copyLinkUrl', data: link.href}); }, - simulateSelect: function(element) { - element.focus(); - // When focusing a textbox, put the selection caret at the end of the textbox's contents. - element.setSelectionRange(element.value.length, element.value.length); - }, - /* * Shows the marker, highlighting matchingCharCount characters. */ @@ -265,16 +250,11 @@ var linkHints = { }, simulateClick: function(link) { - var event = document.createEvent("MouseEvents"); // When "clicking" on a link, dispatch the event with the appropriate meta key (CMD on Mac, CTRL on windows) // to open it in a new tab if necessary. var metaKey = (platform == "Mac" && linkHints.shouldOpenInNewTab); var ctrlKey = (platform != "Mac" && linkHints.shouldOpenInNewTab); - event.initMouseEvent("click", true, true, window, 1, 0, 0, 0, 0, ctrlKey, false, false, metaKey, 0, null); - - // Debugging note: Firefox will not execute the link's default action if we dispatch this click event, - // but Webkit will. Dispatching a click on an input box does not seem to focus it; we do that separately - link.dispatchEvent(event); + domUtils.simulateClick(link, { metaKey: metaKey, ctrlKey: ctrlKey }); // TODO(int3): do this for @role='link' and similar elements as well var nodeName = link.nodeName.toLowerCase(); |
