diff options
| author | Stephen Blott | 2015-01-02 08:11:22 +0000 |
|---|---|---|
| committer | Stephen Blott | 2015-01-02 08:16:20 +0000 |
| commit | a321ca5e1a335f0b04714fa8ea00c2bac8febb86 (patch) | |
| tree | 2b25cc69ca41d0a3454b4065ddf38c8fa49c2fa6 /content_scripts/mode_passkeys.coffee | |
| parent | c783b653e185166009ba0cdf94c6fdbb442d7f39 (diff) | |
| download | vimium-a321ca5e1a335f0b04714fa8ea00c2bac8febb86.tar.bz2 | |
Modes; flesh out passkeys mode.
Diffstat (limited to 'content_scripts/mode_passkeys.coffee')
| -rw-r--r-- | content_scripts/mode_passkeys.coffee | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/content_scripts/mode_passkeys.coffee b/content_scripts/mode_passkeys.coffee new file mode 100644 index 00000000..7a0249ad --- /dev/null +++ b/content_scripts/mode_passkeys.coffee @@ -0,0 +1,32 @@ + +class PassKeysMode extends Mode + keyQueue: "" + passKeys: "" + + # Decide whether this keyChar should be passed to the underlying page. Keystrokes are *never* considered + # passKeys if the keyQueue is not empty. So, for example, if 't' is a passKey, then 'gt' and '99t' will + # neverthless be handled by vimium. + isPassKey: (keyChar) -> + not @keyQueue and 0 <= @passKeys.indexOf(keyChar) + + handlePassKeyEvent: (event) -> + for keyChar in [KeyboardUtils.getKeyChar(event), String.fromCharCode(event.charCode)] + # A key is passed through to the underlying page by returning handlerStack.passThrough. + return handlerStack.passThrough if keyChar and @isPassKey keyChar + true + + setState: (response) -> + if response.isEnabledForUrl? + @passKeys = (response.isEnabledForUrl and response.passKeys) or "" + if response.keyQueue? + @keyQueue = response.keyQueue + + constructor: -> + super + name: "passkeys" + keydown: (event) => @handlePassKeyEvent event + keypress: (event) => @handlePassKeyEvent event + keyup: -> true # Allow event to propagate. + +root = exports ? window +root.PassKeysMode = PassKeysMode |
