Hatena::Groupvimperator

pekepekesamurai@vimperator RSSフィード

 | 

2009-02-21

はてぶにショートカットキーを追加

00:38 | はてなブックマーク - はてぶにショートカットキーを追加 - pekepekesamurai@vimperator はてぶにショートカットキーを追加 - pekepekesamurai@vimperator のブックマークコメント

してみた。

e でタグ+コメント編集。q で削除。

LDRizeCooperation+localkeymodeで実現。

(function(){
var hbControl = function(is_edit){
  var paragraph = liberator.plugins.LDRizeCooperation.LDRize.getParagraphes();
  var pos = paragraph.current.position + 1;
  var doc = content.window.document;
  var n = doc.evaluate('//descendant::h3[@class="entry"]['+pos+']', doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
  if (!n) return;
  var bmid = n.singleNodeValue.id.replace(/[^\-]+-/,'');

  var e = content.document.createEvent("MouseEvents");
  e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
  
  var cn = doc.evaluate('//span[@class="bookmark-appender-cancel"]', doc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
  for (let i=0, l=cn.snapshotLength; i<l ; i++) cn.snapshotItem(i).dispatchEvent( e );
  
  var node = doc.getElementById("delete-"+bmid);
  if (!node) return;
  var target = is_edit ? node.nextElementSibling : node ;
  
  e.initMouseEvent("mouseover", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
  target.dispatchEvent( e );
  e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
  target.dispatchEvent( e );
};
liberator.globalVariables.localKeyMappings=[
  [ /b\.hatena\.ne\.jp/, [
    ['e', function() hbControl(true)],   // edit tag and comment
    ['q', function() hbControl(false)],  // delete bookmark
  ] ],
];
})();

本当はグリモンでMinibuffer.addShortcutKey + feedSomekeys_2.js とかで対応したかったんだけど、直でLDRizeの制御オブジェクトに触る方法がない(一応とれないかがんばった!けどとれねー)→Minibuffer経由で実現できそうだけどやるのが面倒→これでいいや的な感じ。

eval 第二引数があればなー、、、もしくはグリモンで liberator.eval 相当のものがあれば楽になるのに、、、という感じ。

liberator.eval 相当を自前で用意するのもアリっちゃアリなのかもだけど、導入が面倒になるのでスルーしました。


それにしても、このやり方は我ながらかなり無理矢理&適当感大

pekepekesamuraipekepekesamurai2009/02/22 01:37いつのまにかhatebがldrizeチックな機能を実装していたので、そっちを弄るほうが無難かも、、、と思った。
調べてみたら、結構楽にでけそう

 |