[注:2006-10-29] アップデートしました。10/29 以前に greader-sbm.user.js をインストールされた方は、アップデートをお願いします。
ヒビノキロクさんが、Google Reader とはてなブックマークを連携させる Greasemonkey スクリプトを公開された。「b」キーで閲覧中の記事をはてなブックマークにブックマークする (正確には、ブックマーク用の画面を別ウィンドウで開く)。とっても便利。
さて、ぼくははてなブックマークの他に livedoor clip も愛用している。こちらにもワン・キーでブックマークできると嬉しい。というわけで
- b キーで、はてなブックマーク
- B キーで、livedoor clip
する拡張版 Greasemonkey を書いた。
ソースはこんな感じ。
// ==UserScript==
// @name Google Reader - Social Bookmark
// @namespace http://at-aka.blogspot.com/
// @description Add shortcut keys 'b' for bookmarking Hatena Bookmark and 'B' for livedoor clip.
// @include http://www.google.com/reader/*
// @include https://www.google.com/reader/*
// @include http://reader.google.com/*
// @include https://reader.google.com/*
// ==/UserScript==
var entry = new Array();
function greader_get_title_and_url ()
{
var current_entry = document.getElementById('current-entry');
var a = current_entry.getElementsByTagName('a')[0];
var h2 = current_entry.getElementsByTagName('h2')[0];
var title = '';
if (h2.firstChild == a) {
title = a.firstChild.textContent;
} else {
title = h2.textContent;
}
entry['title'] = encodeURIComponent(title);
entry['url'] = encodeURIComponent(a.href);
}
function greader_open_link (link)
{
window.open(link);
// if you prefer to open a tab in background, you can use this alternative.
// GM_openInTab(link);
}
function greader_hatena_bookmark () {
var b_hatena = 'http://b.hatena.ne.jp/add?mode=confirm&is_bm=1';
var link = b_hatena + '&title=' + entry['title'] + '&url=' + entry['url'];
greader_open_link(link);
}
function greader_livedoor_clip ()
{
var livedoor_clip = 'http://clip.livedoor.com/clip/add?';
var link = livedoor_clip + 'title=' + entry['title'] + '&link=' + entry['url'];
greader_open_link(link);
}
function greader_delicious ()
{
var delicious = 'http://del.icio.us/post?v=4';
var link = delicious + ';title=' + entry['title'] + ';url=' + entry['url'];
greader_open_link(link);
}
function GRT_key(event)
{
var element = event.target;
elementName = element.nodeName.toLowerCase();
var typing = false;
if (elementName == "input") {
typing = (element.type == "text" || element.type == "password");
} else {
typing = (elementName == "textarea");
}
if (typing) return true;
var key = String.fromCharCode(event.which);
if ((key == "B" || key == "b") && !event.ctrlKey && !event.altKey) {
greader_get_title_and_url();
if (key == "B"){
greader_livedoor_clip();
} else { // "b"
greader_hatena_bookmark();
}
try {
event.preventDefault();
} catch (e) {
}
return false;
}
return true;
}
document.addEventListener("keypress", GRT_key, false);
こんなことを書いてると、del.icio.us にも対応したいという人があるでせう。そんな人の為に、greader_delicous という関数を用意しておいた。関数 GRT_key の中で greader_hatena_bookmark(); を見付けて greader_delicious(); に書き換えると、b キーで del.icio.us にブックマークできるようになる。
それ以外のソーシャル・ブックマーク・サービスを使う場合は、次のコードを雛型に自分用のブックマーク関数を作られたし。
function greader_hatena_bookmark () {
var b_hatena = 'http://b.hatena.ne.jp/add?mode=confirm&is_bm=1';
var link = b_hatena + '&title=' + entry['title'] + '&url=' + entry['url'];
greader_open_link(link);
}
そして、上の greader_delicious と同じ要領で GRT_key を書き換える。
本当は、もっと簡単にソーシャル・ブックマーク・サービスの切り替えが出来ればいいんだけどねぇ。よいアイデアがあればコメント下さい。
細かい話ですが、 greader_delicious() のとこ、s/livedoor_clip/delicious/ ですね。
返信削除おっしゃる通りです。ご指摘ありがとうございます。
返信削除ブログ、user script ともに、修正致しました m(_ _)m