diff options
| author | Stephen Blott | 2016-03-10 12:03:17 +0000 |
|---|---|---|
| committer | Stephen Blott | 2016-03-28 05:41:09 +0100 |
| commit | 17379d86faefdeb158b30ccdfb5c3814008bfea3 (patch) | |
| tree | 2374f734fbbd91cf7b34298c38ce9ea63cdfac39 | |
| parent | 09519db103b1cef197e183435e864287ab67e7e3 (diff) | |
| download | vimium-17379d86faefdeb158b30ccdfb5c3814008bfea3.tar.bz2 | |
Move link activation to HintCoordinator.
This moves the link activation logic out of LinkHintsMode and into the
hint coordinator.
At this point, there is (almost) no DOM-specific logic left in
LinksHintMode. It only depends an a list of "elements", each of which
has a rect property.
The main exception to this is filtered hints. In the following commits,
we're going to leave filtered hints behind - mainly to keep the diff
shorter and cleaner.
| -rw-r--r-- | content_scripts/link_hints.coffee | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee index 57f7cc2b..b3c7412d 100644 --- a/content_scripts/link_hints.coffee +++ b/content_scripts/link_hints.coffee @@ -53,6 +53,21 @@ HintCoordinator = activateMode: (activateModeCallback) -> activateModeCallback ClickableElements.getVisibleClickableElements() + activateLink: (mode, linkMatched) -> + clickEl = linkMatched.clickableItem + + clickActivator = (modifiers) -> (link) -> DomUtils.simulateClick link, modifiers + linkActivator = mode.linkActivator ? clickActivator mode.clickModifiers + + if DomUtils.isSelectable clickEl + DomUtils.simulateSelect clickEl + else + # TODO: Are there any other input elements which should not receive focus? + if clickEl.nodeName.toLowerCase() == "input" and clickEl.type not in ["button", "submit"] + clickEl.focus() + linkActivator clickEl + LinkHints.activateModeWithQueue() if @mode is OPEN_WITH_QUEUE + LinkHints = activateMode: (count = 1, mode = OPEN_IN_CURRENT_TAB) -> if 0 < count @@ -129,8 +144,6 @@ class LinkHintsModeBase id: "vimiumHintMarkerContainer", className: "vimiumReset" setOpenLinkMode: (@mode) -> - clickActivator = (modifiers) -> (link) -> DomUtils.simulateClick link, modifiers - @linkActivator = @mode.linkActivator ? clickActivator @mode.clickModifiers @hintMode.setIndicator @mode.indicator # @@ -383,18 +396,11 @@ class LinkHintsMode extends LinkHintsModeBase # activateLink: (linkMatched, userMightOverType=false) -> @removeHintMarkers() - clickEl = linkMatched.clickableItem + mode = @mode linkActivator = => @deactivateMode() - if DomUtils.isSelectable clickEl - DomUtils.simulateSelect clickEl - else - # TODO: Are there any other input elements which should not receive focus? - if clickEl.nodeName.toLowerCase() == "input" and clickEl.type not in ["button", "submit"] - clickEl.focus() - @linkActivator clickEl - LinkHints.activateModeWithQueue() if @mode is OPEN_WITH_QUEUE + HintCoordinator.activateLink mode, linkMatched if userMightOverType and Settings.get "waitForEnterForFilteredHints" new WaitForEnter linkMatched.rect, linkActivator |
