summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2016-08-28 05:23:33 -0400
committerJesse Luehrs <doy@tozt.net>2016-08-28 06:12:20 -0400
commitbc5e22aeffc0d730b0dfbece539191f1ffb3fdcc (patch)
treeca1df330c9270ea7f601a552333c85d7e5e6c736
parentf99594f49b701c45ed8d2a880ca39c83fc3c968b (diff)
downloadconf-bc5e22aeffc0d730b0dfbece539191f1ffb3fdcc.tar.gz
conf-bc5e22aeffc0d730b0dfbece539191f1ffb3fdcc.zip
make keybindings work in input elements in iframes
-rw-r--r--vimfx/frame.js21
-rw-r--r--vimfx/shared.js7
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";
}