From 80f9ea33c2daf6648aa45511ccd9bc3bc156cfad Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Tue, 5 May 2015 09:56:07 +0100 Subject: Possible re-working of #1627. --- content_scripts/mode_insert.coffee | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'content_scripts/mode_insert.coffee') diff --git a/content_scripts/mode_insert.coffee b/content_scripts/mode_insert.coffee index 4d68b12d..4e03cdd5 100644 --- a/content_scripts/mode_insert.coffee +++ b/content_scripts/mode_insert.coffee @@ -19,7 +19,7 @@ class InsertMode extends Mode # the right thing to do for most common use cases. However, it could also cripple flash-based sites and # games. See discussion in #1211 and #1194. target.blur() - else if target.shadowRoot and @insertModeLock + else if target?.shadowRoot and @insertModeLock # An editable element in a shadow DOM is focused; blur it. @insertModeLock.blur() @exit event, event.srcElement @@ -61,17 +61,19 @@ class InsertMode extends Mode # event inside the shadow DOM. This fixes #853. shadowRoot = event.target.shadowRoot eventListeners = {} - for type in ["focus", "blur"] + for type in [ "focus", "blur" ] eventListeners[type] = do (type) -> - (event) -> - handlerStack.bubbleEvent type, event - if type == "blur" - # Unregister the event listeners. - for ltype, listener of eventListeners - shadowRoot.removeEventListener ltype, listener, true - + (event) -> handlerStack.bubbleEvent type, event shadowRoot.addEventListener type, eventListeners[type], true + handlerStack.push + _name: "shadow-DOM-input-mode" + blur: (event) -> + if event.target.shadowRoot == shadowRoot + handlerStack.remove() + for type, listener of eventListeners + shadowRoot.removeEventListener type, listener, true + # Only for tests. This gives us a hook to test the status of the permanently-installed instance. InsertMode.permanentInstance = @ if @permanent -- cgit v1.2.3