From 44555e7863a66b906c47f0c94507d9e055922d3e Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Tue, 11 Apr 2017 15:44:42 +0100 Subject: Move keyboard utils to keydown and migrate normal/visual modes. --- content_scripts/mode_key_handler.coffee | 37 +++------------------------------ 1 file changed, 3 insertions(+), 34 deletions(-) (limited to 'content_scripts') diff --git a/content_scripts/mode_key_handler.coffee b/content_scripts/mode_key_handler.coffee index e206dbc6..914eeb6c 100644 --- a/content_scripts/mode_key_handler.coffee +++ b/content_scripts/mode_key_handler.coffee @@ -12,7 +12,6 @@ # consists of a (non-empty) list of such mappings. class KeyHandlerMode extends Mode - keydownEvents: {} setKeyMapping: (@keyMapping) -> @reset() setPassKeys: (@passKeys) -> @reset() # Only for tests. @@ -28,8 +27,6 @@ class KeyHandlerMode extends Mode super extend options, keydown: @onKeydown.bind this - keypress: @onKeypress.bind this - keyup: @onKeyup.bind this # We cannot track keyup events if we lose the focus. blur: (event) => @alwaysContinueBubbling => @keydownEvents = {} if event.target == window @@ -49,45 +46,17 @@ class KeyHandlerMode extends Mode keyChar = KeyboardUtils.getKeyCharString event isEscape = KeyboardUtils.isEscape event if isEscape and (@countPrefix != 0 or @keyState.length != 1) - @keydownEvents[event.keyCode] = true - @reset() - @suppressEvent + DomUtils.consumeKeyup event, => @reset() # If the help dialog loses the focus, then Escape should hide it; see point 2 in #2045. else if isEscape and HelpDialog?.isShowing() - @keydownEvents[event.keyCode] = true - HelpDialog.toggle() - @suppressEvent + DomUtils.consumeKeyup event, -> HelpDialog.toggle() else if isEscape @continueBubbling else if @isMappedKey keyChar - @keydownEvents[event.keyCode] = true - @handleKeyChar keyChar - else if not keyChar and (keyChar = KeyboardUtils.getKeyChar event) and - (@isMappedKey(keyChar) or @isCountKey keyChar) - # We will possibly be handling a subsequent keypress event, so suppress propagation of this event to - # prevent triggering page event listeners (e.g. Google instant Search). - @keydownEvents[event.keyCode] = true - @suppressPropagation + DomUtils.consumeKeyup event, => @handleKeyChar keyChar else @continueBubbling - onKeypress: (event) -> - keyChar = KeyboardUtils.getKeyCharString event - if @isMappedKey keyChar - @handleKeyChar keyChar - else if @isCountKey keyChar - digit = parseInt keyChar - @reset if @keyState.length == 1 then @countPrefix * 10 + digit else digit - @suppressEvent - else - @reset() - @continueBubbling - - onKeyup: (event) -> - return @continueBubbling unless event.keyCode of @keydownEvents - delete @keydownEvents[event.keyCode] - @suppressPropagation - # This tests whether there is a mapping of keyChar in the current key state (and accounts for pass keys). isMappedKey: (keyChar) -> (mapping for mapping in @keyState when keyChar of mapping)[0]? and not @isPassKey keyChar -- cgit v1.2.3 From 044990fd24f9d39b11147a8430c531c548eb1347 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Tue, 11 Apr 2017 15:55:55 +0100 Subject: Migrate link hints to keydown only. --- content_scripts/link_hints.coffee | 34 +++++++++------------------------- 1 file changed, 9 insertions(+), 25 deletions(-) (limited to 'content_scripts') diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee index 741d42cf..8f8c5318 100644 --- a/content_scripts/link_hints.coffee +++ b/content_scripts/link_hints.coffee @@ -172,7 +172,6 @@ class LinkHintsMode exitOnEscape: true exitOnClick: true keydown: @onKeyDownInMode.bind this - keypress: @onKeyPressInMode.bind this @hintMode.onExit (event) => if event?.type == "click" or (event?.type == "keydown" and @@ -230,10 +229,9 @@ class LinkHintsMode linkText: desc.linkText stableSortCount: ++@stableSortCount - # Handles and . + # Handles all keyboard events. onKeyDownInMode: (event) -> return if event.repeat - @keydownKeyChar = KeyboardUtils.getKeyChar(event).toLowerCase() previousTabCount = @tabCount @tabCount = 0 @@ -290,22 +288,12 @@ class LinkHintsMode else @tabCount = previousTabCount if event.ctrlKey or event.metaKey or event.altKey - return - - # We've handled the event, so suppress it and update the mode indicator. - DomUtils.suppressEvent event - - # Handles normal input. - onKeyPressInMode: (event) -> - return if event.repeat - - keyChar = String.fromCharCode(event.charCode).toLowerCase() - if keyChar - @markerMatcher.pushKeyChar keyChar, @keydownKeyChar - @updateVisibleMarkers() + return if event.repeat + if keyChar = KeyboardUtils.getKeyChar event + @markerMatcher.pushKeyChar keyChar + @updateVisibleMarkers() - # We've handled the event, so suppress it. - DomUtils.suppressEvent event + DomUtils.consumeKeyup event updateVisibleMarkers: (tabCount = 0) -> {hintKeystrokeQueue, linkTextKeystrokeQueue} = @markerMatcher @@ -449,7 +437,6 @@ class AlphabetHints # settings value, and preserves the legacy behavior (which always used keydown) for users which are # familiar with that behavior. Otherwise, we use keyChar from keypress, which admits non-Latin # characters. See #1722. - @useKeydown = /^[a-z0-9]*$/.test @linkHintCharacters @hintKeystrokeQueue = [] fillInMarkers: (hintMarkers) -> @@ -478,8 +465,8 @@ class AlphabetHints matchString = @hintKeystrokeQueue.join "" linksMatched: hintMarkers.filter (linkMarker) -> linkMarker.hintString.startsWith matchString - pushKeyChar: (keyChar, keydownKeyChar) -> - @hintKeystrokeQueue.push (if @useKeydown then keydownKeyChar else keyChar) + pushKeyChar: (keyChar) -> + @hintKeystrokeQueue.push keyChar popKeyChar: -> @hintKeystrokeQueue.pop() # For alphabet hints, always rotates the hints, regardless of modifiers. @@ -535,10 +522,7 @@ class FilterHints linksMatched: linksMatched userMightOverType: @hintKeystrokeQueue.length == 0 and 0 < @linkTextKeystrokeQueue.length - pushKeyChar: (keyChar, keydownKeyChar) -> - # For filtered hints, we *always* use the keyChar value from keypress, because there is no obvious and - # easy-to-understand meaning for choosing one of keyChar or keydownKeyChar (as there is for alphabet - # hints). + pushKeyChar: (keyChar) -> if 0 <= @linkHintNumbers.indexOf keyChar @hintKeystrokeQueue.push keyChar # We only accept and characters which are not used for splitting (e.g. "a", "b", etc., but not "-"). -- cgit v1.2.3 From bd66c90a6e678fe931bed75f9dda562adc9e4b7d Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Tue, 11 Apr 2017 16:00:16 +0100 Subject: Migrate marks to keydown only. --- content_scripts/marks.coffee | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'content_scripts') diff --git a/content_scripts/marks.coffee b/content_scripts/marks.coffee index 37b062ba..4a2a8203 100644 --- a/content_scripts/marks.coffee +++ b/content_scripts/marks.coffee @@ -35,8 +35,8 @@ Marks = indicator: "Create mark..." exitOnEscape: true suppressAllKeyboardEvents: true - keypress: (event) => - keyChar = String.fromCharCode event.charCode + keydown: (event) => + keyChar = KeyboardUtils.getKeyChar event @exit => if @isGlobalMark event, keyChar # We record the current scroll position, but only if this is the top frame within the tab. @@ -58,27 +58,27 @@ Marks = indicator: "Go to mark..." exitOnEscape: true suppressAllKeyboardEvents: true - keypress: (event) => + keydown: (event) => @exit => - markName = String.fromCharCode event.charCode - if @isGlobalMark event, markName + keyChar = KeyboardUtils.getKeyChar event + if @isGlobalMark event, keyChar # This key must match @getLocationKey() in the back end. - key = "vimiumGlobalMark|#{markName}" + key = "vimiumGlobalMark|#{keyChar}" Settings.storage.get key, (items) -> if key of items - chrome.runtime.sendMessage handler: 'gotoMark', markName: markName - HUD.showForDuration "Jumped to global mark '#{markName}'", 1000 + chrome.runtime.sendMessage handler: 'gotoMark', markName: keyChar + HUD.showForDuration "Jumped to global mark '#{keyChar}'", 1000 else - HUD.showForDuration "Global mark not set '#{markName}'", 1000 + HUD.showForDuration "Global mark not set '#{keyChar}'", 1000 else - markString = @localRegisters[markName] ? localStorage[@getLocationKey markName] + markString = @localRegisters[keyChar] ? localStorage[@getLocationKey keyChar] if markString? @setPreviousPosition() position = JSON.parse markString window.scrollTo position.scrollX, position.scrollY - @showMessage "Jumped to local mark", markName + @showMessage "Jumped to local mark", keyChar else - @showMessage "Local mark not set", markName + @showMessage "Local mark not set", keyChar root = exports ? window root.Marks = Marks -- cgit v1.2.3 From 388d866e995249a0be3154c349db2edac664a3fa Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Tue, 11 Apr 2017 16:05:18 +0100 Subject: Remove out-of-date comment. --- content_scripts/link_hints.coffee | 4 ---- 1 file changed, 4 deletions(-) (limited to 'content_scripts') diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee index 8f8c5318..e5c8b57b 100644 --- a/content_scripts/link_hints.coffee +++ b/content_scripts/link_hints.coffee @@ -433,10 +433,6 @@ class LinkHintsMode class AlphabetHints constructor: -> @linkHintCharacters = Settings.get("linkHintCharacters").toLowerCase() - # We use the keyChar from keydown if the link-hint characters are all "a-z0-9". This is the default - # settings value, and preserves the legacy behavior (which always used keydown) for users which are - # familiar with that behavior. Otherwise, we use keyChar from keypress, which admits non-Latin - # characters. See #1722. @hintKeystrokeQueue = [] fillInMarkers: (hintMarkers) -> -- cgit v1.2.3 From 8e4119f84bbde748eb595e6766dbb47a6cd0133c Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Thu, 13 Apr 2017 14:09:14 +0100 Subject: Rework tests for all key handling on keydown. --- content_scripts/link_hints.coffee | 5 ++++- content_scripts/mode_key_handler.coffee | 5 +++++ content_scripts/vimium_frontend.coffee | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) (limited to 'content_scripts') diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee index e5c8b57b..4d9bbd1f 100644 --- a/content_scripts/link_hints.coffee +++ b/content_scripts/link_hints.coffee @@ -292,8 +292,11 @@ class LinkHintsMode if keyChar = KeyboardUtils.getKeyChar event @markerMatcher.pushKeyChar keyChar @updateVisibleMarkers() + DomUtils.consumeKeyup event + return - DomUtils.consumeKeyup event + # We've handled the event, so suppress it and update the mode indicator. + DomUtils.suppressEvent event updateVisibleMarkers: (tabCount = 0) -> {hintKeystrokeQueue, linkTextKeystrokeQueue} = @markerMatcher diff --git a/content_scripts/mode_key_handler.coffee b/content_scripts/mode_key_handler.coffee index 914eeb6c..82fdc0e6 100644 --- a/content_scripts/mode_key_handler.coffee +++ b/content_scripts/mode_key_handler.coffee @@ -54,7 +54,12 @@ class KeyHandlerMode extends Mode @continueBubbling else if @isMappedKey keyChar DomUtils.consumeKeyup event, => @handleKeyChar keyChar + else if @isCountKey keyChar + digit = parseInt keyChar + @reset if @keyState.length == 1 then @countPrefix * 10 + digit else digit + @suppressEvent else + @reset() @continueBubbling # This tests whether there is a mapping of keyChar in the current key state (and accounts for pass keys). diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee index 2331a8cf..b3a85bfb 100644 --- a/content_scripts/vimium_frontend.coffee +++ b/content_scripts/vimium_frontend.coffee @@ -687,4 +687,4 @@ root.bgLog = bgLog extend root, {handleEscapeForFindMode, handleEnterForFindMode, performFind, performBackwardsFind, enterFindMode, focusThisFrame} # These are exported only for the tests. -extend root, {installModes, installListeners} +extend root, {installModes} -- cgit v1.2.3 From d03845e3151babbd63cf13e9e3d74d98351671f9 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Thu, 13 Apr 2017 14:57:26 +0100 Subject: Remove use of keyCodes entirely. event.keyCode` is depricated: - https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode --- content_scripts/link_hints.coffee | 28 ++++++++++++++-------------- content_scripts/mode_visual.coffee | 2 +- content_scripts/vimium_frontend.coffee | 4 ++-- 3 files changed, 17 insertions(+), 17 deletions(-) (limited to 'content_scripts') diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee index 4d9bbd1f..4481ae92 100644 --- a/content_scripts/link_hints.coffee +++ b/content_scripts/link_hints.coffee @@ -175,7 +175,7 @@ class LinkHintsMode @hintMode.onExit (event) => if event?.type == "click" or (event?.type == "keydown" and - (KeyboardUtils.isEscape(event) or event.keyCode in [keyCodes.backspace, keyCodes.deleteKey])) + (KeyboardUtils.isEscape(event) or event.key in ["Backspace", "Delete"])) HintCoordinator.sendMessage "exit", isSuccess: false # Note(philc): Append these markers as top level children instead of as child nodes to the link itself, @@ -239,25 +239,25 @@ class LinkHintsMode # NOTE(smblott) As of 1.54, the Ctrl modifier doesn't work for filtered link hints; therefore we only # offer the control modifier for alphabet hints. It is not clear whether we should fix this. As of # 16-03-28, nobody has complained. - modifiers = [keyCodes.shiftKey] - modifiers.push keyCodes.ctrlKey unless Settings.get "filterLinkHints" + modifiers = ["Shift"] + modifiers.push "Control" unless Settings.get "filterLinkHints" - if event.keyCode in modifiers and + if event.key in modifiers and @mode in [ OPEN_IN_CURRENT_TAB, OPEN_WITH_QUEUE, OPEN_IN_NEW_BG_TAB, OPEN_IN_NEW_FG_TAB ] @tabCount = previousTabCount # Toggle whether to open the link in a new or current tab. previousMode = @mode - keyCode = event.keyCode + key = event.key - switch keyCode - when keyCodes.shiftKey + switch key + when "Shift" @setOpenLinkMode(if @mode is OPEN_IN_CURRENT_TAB then OPEN_IN_NEW_BG_TAB else OPEN_IN_CURRENT_TAB) - when keyCodes.ctrlKey + when "Control" @setOpenLinkMode(if @mode is OPEN_IN_NEW_FG_TAB then OPEN_IN_NEW_BG_TAB else OPEN_IN_NEW_FG_TAB) handlerId = handlerStack.push keyup: (event) => - if event.keyCode == keyCode + if event.key == key handlerStack.remove() @setOpenLinkMode previousMode true # Continue bubbling the event. @@ -266,7 +266,7 @@ class LinkHintsMode # Therefore, we ensure that it's always removed when hint mode exits. See #1911 and #1926. @hintMode.onExit -> handlerStack.remove handlerId - else if event.keyCode in [ keyCodes.backspace, keyCodes.deleteKey ] + else if event.key in [ "Backspace", "Delete" ] if @markerMatcher.popKeyChar() @updateVisibleMarkers() else @@ -274,15 +274,15 @@ class LinkHintsMode # knows not to restart hints mode. @hintMode.exit event - else if event.keyCode == keyCodes.enter + else if event.key == "Enter" # Activate the active hint, if there is one. Only FilterHints uses an active hint. HintCoordinator.sendMessage "activateActiveHintMarker" if @markerMatcher.activeHintMarker - else if event.keyCode == keyCodes.tab + else if event.key == "Tab" @tabCount = previousTabCount + (if event.shiftKey then -1 else 1) @updateVisibleMarkers @tabCount - else if event.keyCode == keyCodes.space and @markerMatcher.shouldRotateHints event + else if event.key == " " and @markerMatcher.shouldRotateHints event @tabCount = previousTabCount HintCoordinator.sendMessage "rotateHints" @@ -884,7 +884,7 @@ class WaitForEnter extends Mode @push keydown: (event) => - if event.keyCode == keyCodes.enter + if event.key == "Enter" @exit() callback true # true -> isSuccess. else if KeyboardUtils.isEscape event diff --git a/content_scripts/mode_visual.coffee b/content_scripts/mode_visual.coffee index e4e4f541..cc1baf34 100644 --- a/content_scripts/mode_visual.coffee +++ b/content_scripts/mode_visual.coffee @@ -258,7 +258,7 @@ class VisualMode extends KeyHandlerMode _name: "#{@id}/enter/click" # Yank on . keypress: (event) => - if event.keyCode == keyCodes.enter + if event.key == "Enter" unless event.metaKey or event.ctrlKey or event.altKey or event.shiftKey @yank() return @suppressEvent diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee index b3a85bfb..cdb23352 100644 --- a/content_scripts/vimium_frontend.coffee +++ b/content_scripts/vimium_frontend.coffee @@ -451,14 +451,14 @@ extend window, name: "focus-selector" exitOnClick: true keydown: (event) => - if event.keyCode == KeyboardUtils.keyCodes.tab + if event.key == "Tab" hints[selectedInputIndex].classList.remove 'internalVimiumSelectedInputHint' selectedInputIndex += hints.length + (if event.shiftKey then -1 else 1) selectedInputIndex %= hints.length hints[selectedInputIndex].classList.add 'internalVimiumSelectedInputHint' DomUtils.simulateSelect visibleInputs[selectedInputIndex].element @suppressEvent - else unless event.keyCode == KeyboardUtils.keyCodes.shiftKey + else unless event.key == "Shift" @exit() # Give the new mode the opportunity to handle the event. @restartBubbling -- cgit v1.2.3 From b88ee579c4471d27dbb4aba59215f5e85b7d32a2 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Thu, 13 Apr 2017 15:57:32 +0100 Subject: Avoid repeating Backspace and Delete keys. --- content_scripts/link_hints.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'content_scripts') diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee index 4481ae92..a95d2123 100644 --- a/content_scripts/link_hints.coffee +++ b/content_scripts/link_hints.coffee @@ -175,7 +175,7 @@ class LinkHintsMode @hintMode.onExit (event) => if event?.type == "click" or (event?.type == "keydown" and - (KeyboardUtils.isEscape(event) or event.key in ["Backspace", "Delete"])) + (KeyboardUtils.isEscape(event) or KeyboardUtils.isBackspace event)) HintCoordinator.sendMessage "exit", isSuccess: false # Note(philc): Append these markers as top level children instead of as child nodes to the link itself, @@ -266,7 +266,7 @@ class LinkHintsMode # Therefore, we ensure that it's always removed when hint mode exits. See #1911 and #1926. @hintMode.onExit -> handlerStack.remove handlerId - else if event.key in [ "Backspace", "Delete" ] + else if KeyboardUtils.isBackspace event if @markerMatcher.popKeyChar() @updateVisibleMarkers() else -- cgit v1.2.3 From 95cd386ce3ae09c45df8fbf7bda78cf8146b0b3d Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Thu, 13 Apr 2017 16:10:46 +0100 Subject: Do not reset key state for modifiers. --- content_scripts/mode_key_handler.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'content_scripts') diff --git a/content_scripts/mode_key_handler.coffee b/content_scripts/mode_key_handler.coffee index 82fdc0e6..d3e0d8fb 100644 --- a/content_scripts/mode_key_handler.coffee +++ b/content_scripts/mode_key_handler.coffee @@ -58,7 +58,7 @@ class KeyHandlerMode extends Mode digit = parseInt keyChar @reset if @keyState.length == 1 then @countPrefix * 10 + digit else digit @suppressEvent - else + else if keyChar @reset() @continueBubbling -- cgit v1.2.3 From 40ece51a53ee4042caad7854e415de56c0c69cab Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Thu, 13 Apr 2017 16:15:12 +0100 Subject: Continue bubbling unmapped events. --- content_scripts/mode_key_handler.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'content_scripts') diff --git a/content_scripts/mode_key_handler.coffee b/content_scripts/mode_key_handler.coffee index d3e0d8fb..f306ea06 100644 --- a/content_scripts/mode_key_handler.coffee +++ b/content_scripts/mode_key_handler.coffee @@ -58,8 +58,8 @@ class KeyHandlerMode extends Mode digit = parseInt keyChar @reset if @keyState.length == 1 then @countPrefix * 10 + digit else digit @suppressEvent - else if keyChar - @reset() + else + @reset() if keyChar @continueBubbling # This tests whether there is a mapping of keyChar in the current key state (and accounts for pass keys). -- cgit v1.2.3 From 4c32c0383964e178e0196a87df7fc7a4ad7f8f27 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Fri, 14 Apr 2017 07:48:56 +0100 Subject: Use event.code to detect/suppress keyup events. This avoids the possibility of leaking keyup events if the keys a released in a different order from that in which they were pressed. Also, replace suppressKeyupAfterEscape with this same mechanism. This fixes a bug (in master/1.59) whereby we leak the keyup event for `i` when entering insert mode. TODO: - `/`, `` leaks a keyup event - `i` leaks a keyup event --- content_scripts/mode.coffee | 2 +- content_scripts/mode_find.coffee | 2 +- content_scripts/mode_insert.coffee | 2 +- content_scripts/mode_key_handler.coffee | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) (limited to 'content_scripts') diff --git a/content_scripts/mode.coffee b/content_scripts/mode.coffee index 2d8cc9cc..85187b2c 100644 --- a/content_scripts/mode.coffee +++ b/content_scripts/mode.coffee @@ -82,7 +82,7 @@ class Mode "keydown": (event) => return @continueBubbling unless KeyboardUtils.isEscape event @exit event, event.target - DomUtils.suppressKeyupAfterEscape handlerStack + DomUtils.consumeKeyup event # If @options.exitOnBlur is truthy, then it should be an element. The mode will exit when that element # loses the focus. diff --git a/content_scripts/mode_find.coffee b/content_scripts/mode_find.coffee index 63825600..77d3762d 100644 --- a/content_scripts/mode_find.coffee +++ b/content_scripts/mode_find.coffee @@ -48,7 +48,7 @@ class PostFindMode extends SuppressPrintable keydown: (event) => if KeyboardUtils.isEscape event @exit() - DomUtils.suppressKeyupAfterEscape handlerStack + DomUtils.consumeKeyup event else handlerStack.remove() @continueBubbling diff --git a/content_scripts/mode_insert.coffee b/content_scripts/mode_insert.coffee index 73a24112..a4f1836d 100644 --- a/content_scripts/mode_insert.coffee +++ b/content_scripts/mode_insert.coffee @@ -26,7 +26,7 @@ class InsertMode extends Mode # An editable element in a shadow DOM is focused; blur it. @insertModeLock.blur() @exit event, event.target - DomUtils.suppressKeyupAfterEscape handlerStack + DomUtils.consumeKeyup event defaults = name: "insert" diff --git a/content_scripts/mode_key_handler.coffee b/content_scripts/mode_key_handler.coffee index f306ea06..1b3b21e7 100644 --- a/content_scripts/mode_key_handler.coffee +++ b/content_scripts/mode_key_handler.coffee @@ -38,7 +38,7 @@ class KeyHandlerMode extends Mode keydown: (event) => if KeyboardUtils.isEscape(event) and not @isInResetState() @reset() - DomUtils.suppressKeyupAfterEscape handlerStack + DomUtils.consumeKeyup event else @continueBubbling -- cgit v1.2.3 From 17722aa93ba2f0fb08ee87dc76698fb37a2e0fd9 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Fri, 14 Apr 2017 13:30:58 +0100 Subject: Fix filtered link hints. For filtered link hints, " " was broken; it was treated as "space". --- content_scripts/link_hints.coffee | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'content_scripts') diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee index a95d2123..1cc7fee7 100644 --- a/content_scripts/link_hints.coffee +++ b/content_scripts/link_hints.coffee @@ -288,15 +288,14 @@ class LinkHintsMode else @tabCount = previousTabCount if event.ctrlKey or event.metaKey or event.altKey - return if event.repeat - if keyChar = KeyboardUtils.getKeyChar event - @markerMatcher.pushKeyChar keyChar - @updateVisibleMarkers() - DomUtils.consumeKeyup event - return - - # We've handled the event, so suppress it and update the mode indicator. - DomUtils.suppressEvent event + unless event.repeat + if keyChar = KeyboardUtils.getKeyChar event + keyChar = " " if keyChar == "space" + if keyChar.length == 1 + @markerMatcher.pushKeyChar keyChar + @updateVisibleMarkers() + + DomUtils.consumeKeyup event updateVisibleMarkers: (tabCount = 0) -> {hintKeystrokeQueue, linkTextKeystrokeQueue} = @markerMatcher -- cgit v1.2.3 From 748f1dcc204d1c08d6deb683d896824a15fa4fe3 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Fri, 14 Apr 2017 13:57:20 +0100 Subject: Fix or link-hint behaviour. Error was introduced by seemingly innocuous but nevertheless significant change in previous commit. Tests picked up the problem. --- content_scripts/link_hints.coffee | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'content_scripts') diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee index 1cc7fee7..eb138caa 100644 --- a/content_scripts/link_hints.coffee +++ b/content_scripts/link_hints.coffee @@ -294,8 +294,7 @@ class LinkHintsMode if keyChar.length == 1 @markerMatcher.pushKeyChar keyChar @updateVisibleMarkers() - - DomUtils.consumeKeyup event + DomUtils.consumeKeyup event updateVisibleMarkers: (tabCount = 0) -> {hintKeystrokeQueue, linkTextKeystrokeQueue} = @markerMatcher -- cgit v1.2.3