diff options
| author | Stephen Blott | 2015-01-21 19:35:24 +0000 | 
|---|---|---|
| committer | Stephen Blott | 2015-01-21 22:24:31 +0000 | 
| commit | c4735264f46fdc62020c81bd8ff6f67ebd1dad9a (patch) | |
| tree | 98b6d4a3e01a2b7a71eacec3e2acacb843a8ea60 /content_scripts/mode_visual.coffee | |
| parent | 0ec38c1050b00845abaa2faa9f56d04c9d2b8992 (diff) | |
| download | vimium-c4735264f46fdc62020c81bd8ff6f67ebd1dad9a.tar.bz2 | |
Edit mode: first working visual mode.
Diffstat (limited to 'content_scripts/mode_visual.coffee')
| -rw-r--r-- | content_scripts/mode_visual.coffee | 45 | 
1 files changed, 35 insertions, 10 deletions
diff --git a/content_scripts/mode_visual.coffee b/content_scripts/mode_visual.coffee index 2580106d..36501f3e 100644 --- a/content_scripts/mode_visual.coffee +++ b/content_scripts/mode_visual.coffee @@ -1,20 +1,45 @@ -class VisualMode extends Mode -  constructor: (element=null) -> -    super +class VisualMode extends Movement +  constructor: (options = {}) -> +    defaults =        name: "visual"        badge: "V"        exitOnEscape: true -      exitOnBlur: element - -      keydown: (event) => -        return @suppressEvent +      exitOnBlur: options.targetElement +      alterMethod: "extend" +      keydown: (event) => @handleKeyEvent event, KeyboardUtils.getKeyChar event +      keyup: (event) => @handleKeyEvent event, KeyboardUtils.getKeyChar event        keypress: (event) => -        return @suppressEvent +        keyChar = String.fromCharCode event.charCode +        @handleKeyEvent event, keyChar, => @move keyChar + +    super extend defaults, options + +  handleKeyEvent: (event, keyChar, func = ->) -> +    if event.metaKey or event.ctrlKey or event.altKey +      @stopBubblingAndTrue +    else if event.type == "keypress" and @isMoveChar event, keyChar +      func keyChar +      @suppressEvent +    else if @handleVisualModeKey(keyChar) or @isMoveChar event, keyChar +      DomUtils.suppressPropagation +      @stopBubblingAndTrue +    else if KeyboardUtils.isPrintable event +      @suppressEvent +    else +      @stopBubblingAndTrue -      keyup: (event) => -        return @suppressEvent +  handleVisualModeKey: (keyChar) -> +    switch keyChar +      when "y" +        chrome.runtime.sendMessage +          handler: "copyToClipboard" +          data: window.getSelection().toString() +        @exit() +        true +      else +        false  root = exports ? window  root.VisualMode = VisualMode  | 
