aboutsummaryrefslogtreecommitdiffstats
path: root/feedSomeKeys_3.js
diff options
context:
space:
mode:
Diffstat (limited to 'feedSomeKeys_3.js')
-rw-r--r--feedSomeKeys_3.js63
1 files changed, 43 insertions, 20 deletions
diff --git a/feedSomeKeys_3.js b/feedSomeKeys_3.js
index e265084..82d15ba 100644
--- a/feedSomeKeys_3.js
+++ b/feedSomeKeys_3.js
@@ -34,8 +34,8 @@ THE POSSIBILITY OF SUCH DAMAGE.
// INFO {{{
let INFO = <>
- <plugin name="feedSomeKeys" version="1.9.0"
- href="http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/feedSomeKeys_3.js"
+ <plugin name="feedSomeKeys" version="1.9.3"
+ href="http://github.com/vimpr/vimperator-plugins/blob/master/feedSomeKeys_3.js"
summary="Feed some defined key events into the Web content"
lang="en-US"
xmlns="http://vimperator.org/namespaces/liberator">
@@ -140,8 +140,8 @@ let INFO = <>
:lazy fmaps -u='http://code.google.com/p/vimperator-labs/issues/detail' u
</ex></code>
</plugin>
- <plugin name="feedSomeKeys" version="1.9.0"
- href="http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/feedSomeKeys_3.js"
+ <plugin name="feedSomeKeys" version="1.9.3"
+ href="http://github.com/vimpr/vimperator-plugins/blob/master/feedSomeKeys_3.js"
summary="Web コンテンツに直接キーイベントを送ります。"
lang="ja"
xmlns="http://vimperator.org/namespaces/liberator">
@@ -309,6 +309,10 @@ let INFO = <>
'\'': KeyEvent.DOM_VK_QUOTE
};
+ const State = {
+ feeding: false
+ };
+
function id (v)
v;
@@ -359,22 +363,35 @@ let INFO = <>
}
function feed (keys, eventNames, target) {
+ function finalize (){
+ modes.passAllKeys = _passAllKeys;
+ State.feeding = false;
+ }
+
+ State.feeding = true;
+
let _passAllKeys = modes.passAllKeys;
- modes.passAllKeys = true;
- modes.passNextKey = false;
-
- for (let [, keyEvent] in Iterator(events.fromString(keys))) {
- eventNames.forEach(function (eventName) {
- let ke = util.cloneObject(keyEvent);
- let [, vkey, name] = eventName.match(/^(v)?(.+)$/);
- if (vkey)
- virtualize(ke);
- let event = createEvent(name, ke);
- target.dispatchEvent(event);
- });
+
+ try {
+ modes.passAllKeys = true;
+ modes.passNextKey = false;
+
+ for (let [, keyEvent] in Iterator(events.fromString(keys))) {
+ eventNames.forEach(function (eventName) {
+ let ke = util.cloneObject(keyEvent);
+ let [, vkey, name] = eventName.match(/^(v)?(.+)$/);
+ if (vkey)
+ virtualize(ke);
+ let event = createEvent(name, ke);
+ target.dispatchEvent(event);
+ });
+ }
+ } catch (e) {
+ finalize();
+ throw e;
}
- modes.passAllKeys = _passAllKeys;
+ finalize();
}
function makeTryValidator (func)
@@ -504,7 +521,8 @@ let INFO = <>
];
if (currentURL) {
result.unshift(['^' + util.escapeRegex(buffer.URL), 'Current URL']);
- result.unshift([util.escapeRegex(content.document.domain), 'Current domain']);
+ if (content.document.domain)
+ result.unshift([util.escapeRegex(content.document.domain), 'Current domain']);
}
return result;
};
@@ -520,7 +538,7 @@ let INFO = <>
const ModeStringsCompleter = [
[name, disp + ' mode' + (char ? ' (alias: ' + char + ')' : '')]
for ([n, {name, char, disp, extended}] in Iterator(modes._modeMap))
- if (!extended && /^\D+$/(n))
+ if (!extended && /^\D+$/.test(n))
];
@@ -559,6 +577,10 @@ let INFO = <>
elem = or(frames, function (f) fromXPath(f.document, args['-xpath'])) || elem;
}
+ if (args['-selector']) {
+ elem = or(frames, function (f) f.document.querySelector(args['-selector'])) || elem;
+ }
+
feed(rhs, args['-events'] || ['keypress'], elem);
},
{
@@ -602,6 +624,7 @@ let INFO = <>
[['-desc', '-description', '-d'], commands.OPTION_STRING],
[['-frame', '-f'], commands.OPTION_INT, null, frameCompleter],
[['-xpath', '-x'], commands.OPTION_STRING, xpathValidator],
+ [['-selector', '-s'], commands.OPTION_STRING],
[['-prefix', '-p'], commands.OPTION_STRING],
[
['-events', '-e'],
@@ -690,7 +713,7 @@ let INFO = <>
);
__context__.API =
- 'VKeys feed getFrames fromXPath virtualize unmap findMappings list'.split(/\s+/).reduce(
+ 'State VKeys feed getFrames fromXPath virtualize unmap findMappings list'.split(/\s+/).reduce(
function (result, name)
(result[name] = eval(name), result),
{}