Vimperatorでボタンクリックをエミュレートする
もっと直接的な方法が用意されてる気もするけど・・・
2012.12.21 追記
buffer.followLinkでできるよって教えてもらいました。
あと、node.click()よりもDOMEvent使うべきってつっこみももらいました。
ありがとうございます。
(追記) buffer.followLinkを使うパターン
教えてもらった、buffer.followLinkを使うパターンです。
これならjquery-loaderをインストールする必要もないですね。
map ;te :js buffer.followLink(content.document.querySelector("form#modifypage").querySelector("input[type=submit]"), liberator.CURRENT_TAB)<CR>
1. jquery-loaderプラグインをインストールする
https://github.com/vimpr/vimperator-plugins/blob/master/jquery-loader.js
このjquery-loader.js を ./vimperator/plugin に置いて、.vimperatorrcにjquery.js へのパスを指定する。
let g:jquery_filepath = "jquery.jsのパス"
2. 押したいボタンに応じて、.vimperatorrc に定義を追加する
mapでjavascriptコマンド呼ぶか
map ;te :javascript jQuery.core("form#modifypage").find("input[type=submit]")[0].click()<CR>
もうちょっと丁寧にコマンドを定義するか
[2012.12.21 編集]
DOMEvent使うべきってつっこみをもらったので、 書きなおしました。
javascript << EOS
commands.addUserCommand(['trace[dit]'], '[Trac] Enter wiki editor',
function () {
let nodes = jQuery.core("form#modifypage").find("input[type=submit]");
if (nodes.length != 1)
return;
let evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0,
false, false, false, false, 0, null);
nodes[0].dispatchEvent(evt);
}
);
EOS
ちなみにこれはTracのWikiで「このページを編集」ボタンを押すための設定。
3. サイトを制限する
これだと対象じゃないサイトでも動いてしまうけど、ちゃんと目的のサイトでだけ動くようにしたいなら autocmd LocatioChange
と組み合わせればいいかな。
" 127.0.0.1:5000/trac にいるときだけ is_tracをtrueにする
autocmd LocationChange .* :js var is_trac = false
autocmd LocationChange 127\.0\.0\.1\:5000\/trac.* :js var is_trac = true
javascript << EOS
commands.addUserCommand(['trace[dit]'], '[Trac] Enter wiki editor',
function () {
if (!is_trac) return;
// 以下略
}
);
EOS