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 |
