diff options
| -rw-r--r-- | content_scripts/link_hints.coffee | 12 | ||||
| -rw-r--r-- | lib/dom_utils.coffee | 19 |
2 files changed, 21 insertions, 10 deletions
diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee index 07deaf61..fad6b839 100644 --- a/content_scripts/link_hints.coffee +++ b/content_scripts/link_hints.coffee @@ -93,6 +93,7 @@ class LinkHintsMode else @hintMode.setIndicator "Open multiple links in new tabs." @linkActivator = (link) -> + @unhoverLast link # 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. DomUtils.simulateClick link, @@ -117,10 +118,13 @@ class LinkHintsMode else if @mode is DOWNLOAD_LINK_URL @hintMode.setIndicator "Download link URL." @linkActivator = (link) -> + @unhoverLast link DomUtils.simulateClick link, altKey: true, ctrlKey: false, metaKey: false else # OPEN_IN_CURRENT_TAB @hintMode.setIndicator "Open link in current tab." - @linkActivator = (link) -> DomUtils.simulateClick.bind(DomUtils, link)() + @linkActivator = (link) -> + @unhoverLast link + DomUtils.simulateClick link # # Creates a link marker for the given link. @@ -377,6 +381,12 @@ class LinkHintsMode else @deactivateMode delay + unhoverLast: do -> + lastHoveredElement = null + (element) -> + DomUtils.simulateUnhover lastHoveredElement if lastHoveredElement? + lastHoveredElement = element + # # Shows the marker, highlighting matchingCharCount characters. # diff --git a/lib/dom_utils.coffee b/lib/dom_utils.coffee index 027188bf..06a02180 100644 --- a/lib/dom_utils.coffee +++ b/lib/dom_utils.coffee @@ -234,19 +234,20 @@ DomUtils = if element.selectionStart == 0 and element.selectionEnd == 0 element.setSelectionRange element.value.length, element.value.length - + simulateUnhover: (element, modifiers) -> @simulateMouseEvent "mouseout", element, modifiers simulateClick: (element, modifiers) -> - modifiers ||= {} - eventSequence = ["mouseover", "mousedown", "mouseup", "click"] for event in eventSequence - mouseEvent = document.createEvent("MouseEvents") - mouseEvent.initMouseEvent(event, true, true, window, 1, 0, 0, 0, 0, modifiers.ctrlKey, modifiers.altKey, - modifiers.shiftKey, modifiers.metaKey, 0, null) - # Debugging note: Firefox will not execute the element'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 - element.dispatchEvent(mouseEvent) + @simulateMouseEvent event, element, modifiers + + simulateMouseEvent: (event, element, modifiers = {}) -> + mouseEvent = document.createEvent("MouseEvents") + mouseEvent.initMouseEvent(event, true, true, window, 1, 0, 0, 0, 0, modifiers.ctrlKey, modifiers.altKey, + modifiers.shiftKey, modifiers.metaKey, 0, null) + # Debugging note: Firefox will not execute the element'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 + element.dispatchEvent(mouseEvent) # momentarily flash a rectangular border to give user some visual feedback flashRect: (rect) -> |
