diff options
| author | mrmr1993 | 2016-01-30 19:13:50 +0000 |
|---|---|---|
| committer | mrmr1993 | 2016-01-30 19:13:50 +0000 |
| commit | 4f77df0084ede4cf0c35b196b9139f412c37c496 (patch) | |
| tree | 15c586d829c61e2b8a4c0c86bf550d657f94040d | |
| parent | 07e2bd2fbb0e404af1bb5dfabef94299565171bd (diff) | |
| download | vimium-4f77df0084ede4cf0c35b196b9139f412c37c496.tar.bz2 | |
Rework unhovering to occur automatically for all simulated hovers
| -rw-r--r-- | content_scripts/link_hints.coffee | 12 | ||||
| -rw-r--r-- | lib/dom_utils.coffee | 27 |
2 files changed, 21 insertions, 18 deletions
diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee index fad6b839..13e2a17b 100644 --- a/content_scripts/link_hints.coffee +++ b/content_scripts/link_hints.coffee @@ -93,7 +93,6 @@ 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, @@ -118,13 +117,10 @@ 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) -> - @unhoverLast link - DomUtils.simulateClick link + @linkActivator = DomUtils.simulateClick.bind DomUtils # # Creates a link marker for the given link. @@ -381,12 +377,6 @@ 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 06a02180..7473df17 100644 --- a/lib/dom_utils.coffee +++ b/lib/dom_utils.coffee @@ -241,13 +241,26 @@ DomUtils = for event in eventSequence @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) + simulateMouseEvent: do -> + lastHoveredElement = undefined + (event, element, modifiers = {}) -> + + if event == "mouseout" + element ?= lastHoveredElement # Allow unhovering the last hovered element by passing undefined. + lastHoveredElement = undefined + return unless element? + + else if event == "mouseover" + # Simulate moving the mouse off the previous element first, as if we were a real mouse. + @simulateMouseEvent "mouseout", undefined, modifiers + lastHoveredElement = element + + 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) -> |
