From 103fcde7c51fe83bc9c58fc28c3c11ce6a791f0f Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Sat, 3 Jan 2015 05:58:09 +0000 Subject: Modes; more renaming and refactoring. --- content_scripts/mode.coffee | 2 +- content_scripts/mode_insert.coffee | 13 +++++++++++-- content_scripts/vimium_frontend.coffee | 15 ++++----------- 3 files changed, 16 insertions(+), 14 deletions(-) (limited to 'content_scripts') 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) -- cgit v1.2.3