diff options
author | Jesse Luehrs <doy@tozt.net> | 2016-08-28 05:23:33 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2016-08-28 06:12:20 -0400 |
commit | bc5e22aeffc0d730b0dfbece539191f1ffb3fdcc (patch) | |
tree | ca1df330c9270ea7f601a552333c85d7e5e6c736 | |
parent | f99594f49b701c45ed8d2a880ca39c83fc3c968b (diff) | |
download | conf-bc5e22aeffc0d730b0dfbece539191f1ffb3fdcc.tar.gz conf-bc5e22aeffc0d730b0dfbece539191f1ffb3fdcc.zip |
make keybindings work in input elements in iframes
-rw-r--r-- | vimfx/frame.js | 21 | ||||
-rw-r--r-- | vimfx/shared.js | 7 |
2 files changed, 25 insertions, 3 deletions
diff --git a/vimfx/frame.js b/vimfx/frame.js index 18084a2..e829bed 100644 --- a/vimfx/frame.js +++ b/vimfx/frame.js @@ -3,17 +3,34 @@ let { isEditableInput, insertAtCursor, killBackwardFromCursor, + cleanTagName, } = Cu.import(`${__dirname}/shared.js`, {}); +let findActiveElement = (document) => { + let inner = (document) => { + let active = document.activeElement; + if (active) { + let tag = cleanTagName(active); + if (tag == "iframe") { + return inner(active.contentDocument); + } + else { + return active; + } + } + }; + return inner(document); +}; + vimfx.listen('paste', (text, cb) => { - let active = content.document.activeElement; + let active = findActiveElement(content.document); if (active && isEditableInput(active)) { insertAtCursor(active, text); } }); vimfx.listen('kill_backward', (data, cb) => { - let active = content.document.activeElement; + let active = findActiveElement(content.document); if (active && isEditableInput(active)) { killBackwardFromCursor(active); } diff --git a/vimfx/shared.js b/vimfx/shared.js index 7155926..4839ef5 100644 --- a/vimfx/shared.js +++ b/vimfx/shared.js @@ -2,10 +2,15 @@ const EXPORTED_SYMBOLS = [ 'isEditableInput', 'insertAtCursor', 'killBackwardFromCursor', + 'cleanTagName', ]; +function cleanTagName(e) { + return e.tagName.split(':').pop().toLowerCase(); +} + function isEditableInput(e) { - let tag = e.tagName.split(':').pop().toLowerCase(); + let tag = cleanTagName(e); // XXX return tag == "input" || tag == "textarea"; } |