diff options
| author | Stephen Blott | 2016-03-02 08:44:42 +0000 | 
|---|---|---|
| committer | Stephen Blott | 2016-03-05 05:40:35 +0000 | 
| commit | 91bcedbf4aebbd2691ef68ca96094206a942a1b8 (patch) | |
| tree | a6b077a83070059db958b484729e55f2240d5b84 /content_scripts/mode_key_handler.coffee | |
| parent | 5db79c7e8ef05bea07d1e811de4c9a7755be85f2 (diff) | |
| download | vimium-91bcedbf4aebbd2691ef68ca96094206a942a1b8.tar.bz2 | |
Key bindings; simplify pass-key logic.
Diffstat (limited to 'content_scripts/mode_key_handler.coffee')
| -rw-r--r-- | content_scripts/mode_key_handler.coffee | 45 | 
1 files changed, 20 insertions, 25 deletions
diff --git a/content_scripts/mode_key_handler.coffee b/content_scripts/mode_key_handler.coffee index 397e64c8..fc4d485e 100644 --- a/content_scripts/mode_key_handler.coffee +++ b/content_scripts/mode_key_handler.coffee @@ -42,32 +42,29 @@ class KeyHandlerMode extends Mode        @reset()        false # Suppress event.      else if @keyCharIsMapped keyChar -      @unlessKeyCharIsPassKey keyChar, => -        @keydownEvents[event.keyCode] = true -        @handleKeyChar event, keyChar +      @keydownEvents[event.keyCode] = true +      @handleKeyChar event, keyChar      else if not keyChar and (keyChar = KeyboardUtils.getKeyChar event) and          (@keyCharIsMapped(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). -      @unlessKeyCharIsPassKey keyChar, => -        @keydownEvents[event.keyCode] = true -        DomUtils.suppressPropagation event -        @stopBubblingAndTrue +      @keydownEvents[event.keyCode] = true +      DomUtils.suppressPropagation event +      @stopBubblingAndTrue      else        @continueBubbling    onKeypress: (event) ->      keyChar = KeyboardUtils.getKeyCharString event -    @unlessKeyCharIsPassKey keyChar, => -      if @keyCharIsMapped keyChar -        @handleKeyChar event, keyChar -      else if @isCountKey keyChar -        digit = parseInt keyChar -        @reset if @keyState.length == 1 then @countPrefix * 10 + digit else digit -        false # Suppress event. -      else -        @reset() -        @continueBubbling +    if @keyCharIsMapped keyChar +      @handleKeyChar event, keyChar +    else if @isCountKey keyChar +      digit = parseInt keyChar +      @reset if @keyState.length == 1 then @countPrefix * 10 + digit else digit +      false # Suppress event. +    else +      @reset() +      @continueBubbling    onKeyup: (event) ->      return @continueBubbling unless event.keyCode of @keydownEvents @@ -75,9 +72,9 @@ class KeyHandlerMode extends Mode      DomUtils.suppressPropagation event      @stopBubblingAndTrue -  # This tests whether there is a mapping of keyChar in the current key state. +  # This tests whether there is a mapping of keyChar in the current key state (and accounts for pass keys).    keyCharIsMapped: (keyChar) -> -    (mapping for mapping in @keyState when keyChar of mapping)[0]? +    (mapping for mapping in @keyState when keyChar of mapping)[0]? and not @isPassKey keyChar    handleKeyChar: (event, keyChar) ->      bgLog "Handling key #{keyChar}, mode=#{@name}." @@ -93,15 +90,13 @@ class KeyHandlerMode extends Mode      false # Suppress event.    isCountKey: (keyChar) -> -    keyChar?.length == 1 and (if 0 < @countPrefix then '0' else '1') <= keyChar <= '9' +    keyChar?.length == 1 and (if 0 < @countPrefix then '0' else '1') <= keyChar <= '9' and +      not @isPassKey keyChar    # Keystrokes are *never* considered passKeys if the user has begun entering a command.  So, for example, if    # 't' is a passKey, then the "t"-s of 'gt' and '99t' are neverthless handled as regular keys. -  unlessKeyCharIsPassKey: (keyChar, nonPassKeyCallback) -> -    if @countPrefix == 0 and @keyState.length == 1 and keyChar in (@passKeys ? "") -      @stopBubblingAndTrue -    else -      nonPassKeyCallback() +  isPassKey: (keyChar) -> +    @countPrefix == 0 and @keyState.length == 1 and keyChar in (@passKeys ? "")  root = exports ? window  root.KeyHandlerMode = KeyHandlerMode  | 
