aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Blott2014-11-20 13:45:01 +0000
committerStephen Blott2014-11-20 13:54:27 +0000
commit512aa9919ac19335ef86048fb41ffa051b60dd3a (patch)
tree53ca9e79f15649cb61806caf7e9bdc1c9738398d
parent11fe107f95dab3a584b7eb4b14a67910d16476be (diff)
downloadvimium-512aa9919ac19335ef86048fb41ffa051b60dd3a.tar.bz2
Do not handle keystrokes for contentEditable (refactor).
-rw-r--r--content_scripts/vimium_frontend.coffee14
1 files changed, 9 insertions, 5 deletions
diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee
index 4df24da4..58224f89 100644
--- a/content_scripts/vimium_frontend.coffee
+++ b/content_scripts/vimium_frontend.coffee
@@ -529,6 +529,7 @@ isEmbed = (element) -> ["embed", "object"].indexOf(element.nodeName.toLowerCase(
# any element which makes it a rich text editor, like the notes on jjot.com.
#
isEditable = (target) ->
+ # Note: document.activeElement.isContentEditable is also rechecked in isInsertMode() dynamically.
return true if target.isContentEditable
nodeName = target.nodeName.toLowerCase()
# use a blacklist instead of a whitelist because new form controls are still being implemented for html5
@@ -552,6 +553,7 @@ window.enterInsertMode = (target) ->
# when the last editable element that came into focus -- which insertModeLock points to -- has been blurred.
# If insert mode is entered manually (via pressing 'i'), then we set insertModeLock to 'undefined', and only
# leave insert mode when the user presses <ESC>.
+# Note. This returns the truthiness of target, which is required by isInsertMode.
#
enterInsertModeWithoutShowingIndicator = (target) -> insertModeLock = target
@@ -561,11 +563,13 @@ exitInsertMode = (target) ->
HUD.hide()
isInsertMode = ->
- # In addition to checking insertModeLock, we also need to check whether the active element is
- # contentEditable because some sites (e.g. inbox.google.com) change the contentEditable attribute on the
- # fly; see #1245.
- insertModeLock != null or
- (document.activeElement and document.activeElement.isContentEditable)
+ return true if insertModeLock != null
+ # Some sites (e.g. inbox.google.com) change the contentEditable attribute on the fly (see #1245); and
+ # unfortunately, isEditable() is called *before* the change is made. Therefore, we need to re-check whether
+ # the active element is contentEditable.
+ document.activeElement and
+ document.activeElement.isContentEditable and
+ enterInsertModeWithoutShowingIndicator document.activeElement
# should be called whenever rawQuery is modified.
updateFindModeQuery = ->