diff options
Diffstat (limited to 'feedSomeKeys_3.js')
-rw-r--r-- | feedSomeKeys_3.js | 63 |
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), {} |