diff options
| author | Stephen Blott | 2015-01-03 05:58:09 +0000 | 
|---|---|---|
| committer | Stephen Blott | 2015-01-03 06:56:08 +0000 | 
| commit | 103fcde7c51fe83bc9c58fc28c3c11ce6a791f0f (patch) | |
| tree | 582ffa2023f6b909f63681c48173deb456c50910 | |
| parent | a71da0e9aff6a4f89724f5a15a022790e23d5049 (diff) | |
| download | vimium-103fcde7c51fe83bc9c58fc28c3c11ce6a791f0f.tar.bz2 | |
Modes; more renaming and refactoring.
| -rw-r--r-- | content_scripts/mode.coffee | 2 | ||||
| -rw-r--r-- | content_scripts/mode_insert.coffee | 13 | ||||
| -rw-r--r-- | content_scripts/vimium_frontend.coffee | 15 | ||||
| -rw-r--r-- | lib/handler_stack.coffee | 7 | 
4 files changed, 19 insertions, 18 deletions
| diff --git a/content_scripts/mode.coffee b/content_scripts/mode.coffee index 24c50561..f411d29b 100644 --- a/content_scripts/mode.coffee +++ b/content_scripts/mode.coffee @@ -53,7 +53,7 @@ class Mode    # Default updateBadgeForMode handler.  This is overridden by sub-classes.  The default is to install the    # current mode's badge, unless the bade is already set.    updateBadgeForMode: (badge) -> -    handlerStack.alwaysPropagate => badge.badge ||= @badge +    handlerStack.alwaysContinueBubbling => badge.badge ||= @badge    # Static method.  Used externally and internally to initiate bubbling of an updateBadgeForMode event.    # Do not update the badge: diff --git a/content_scripts/mode_insert.coffee b/content_scripts/mode_insert.coffee index 34fad926..64aaa445 100644 --- a/content_scripts/mode_insert.coffee +++ b/content_scripts/mode_insert.coffee @@ -67,16 +67,25 @@ class InsertMode extends Mode      @handlers.push handlerStack.push        focus: (event) => -        handlerStack.alwaysPropagate => +        handlerStack.alwaysContinueBubbling =>            if not @isInsertMode and @isFocusable event.target              @activate event.target        blur: (event) => -        handlerStack.alwaysPropagate => +        handlerStack.alwaysContinueBubbling =>            if @isInsertMode and event.target == @insertModeLock              @deactivate()      # We may already have been dropped into insert mode.  So check.      Mode.updateBadge() +# Utility mode. +# Activate this mode to prevent a focused, editable element from triggering insert mode. +class FocusMustNotTriggerInsertMode extends Mode +  constructor: -> +    super() +    @handlers.push handlerStack.push +      focus: => @suppressEvent +  root = exports ? window  root.InsertMode = InsertMode +root.FocusMustNotTriggerInsertMode = FocusMustNotTriggerInsertMode diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee index a9b318c6..a252c878 100644 --- a/content_scripts/vimium_frontend.coffee +++ b/content_scripts/vimium_frontend.coffee @@ -114,7 +114,7 @@ class NormalMode extends Mode        keyup: onKeyup    updateBadgeForMode: (badge) -> -    handlerStack.alwaysPropagate => +    handlerStack.alwaysContinueBubbling =>        # Idea...  Instead of an icon, we could show the keyQueue here (if it's non-empty).        super badge        badge.badge = "" unless isEnabledForUrl @@ -750,22 +750,15 @@ class FindMode extends Mode            handlerStack.stopBubblingAndFalse        keypress: (event) -> -        handlerStack.neverPropagate -> +        handlerStack.neverContinueBubbling ->            if event.keyCode > 31              keyChar = String.fromCharCode event.charCode              handleKeyCharForFindMode keyChar if keyChar -      keyup: (event) -> handlerStack.neverPropagate -> false - -    # Prevent insert mode from detecting a focused editable element. -    @handlers.push handlerStack.push -      focus: (event) -> handlerStack.neverPropagate (event) -> +      keyup: (event) => @suppressEvent      Mode.updateBadge() -class FindModeWithoutBadge extends FindMode -  constructor: -> super "" -  performFindInPlace = ->    cachedScrollX = window.scrollX    cachedScrollY = window.scrollY @@ -793,7 +786,7 @@ executeFind = (query, options) ->    HUD.hide(true)    # ignore the selectionchange event generated by find()    document.removeEventListener("selectionchange",restoreDefaultSelectionHighlight, true) -  Mode.runIn FindModeWithoutBadge, -> +  Mode.runIn FocusMustNotTriggerInsertMode, ->      result = window.find(query, options.caseSensitive, options.backwards, true, false, true, false)    setTimeout(      -> document.addEventListener("selectionchange", restoreDefaultSelectionHighlight, true) diff --git a/lib/handler_stack.coffee b/lib/handler_stack.coffee index d2d0672a..f05413d3 100644 --- a/lib/handler_stack.coffee +++ b/lib/handler_stack.coffee @@ -51,13 +51,12 @@ class HandlerStack    isChromeEvent: (event) ->      event?.preventDefault? and event?.stopImmediatePropagation? -  # Convenience wrapper for handlers which always continue propagation. -  alwaysPropagate: (handler) -> +  # Convenience wrappers. +  alwaysContinueBubbling: (handler) ->      handler()      true -  # Convenience wrapper for handlers which never continue propagation. -  neverPropagate: (handler) -> +  neverContinueBubbling: (handler) ->      handler()      false | 
