Skip to content

Instantly share code, notes, and snippets.

@monjudoh
Created September 11, 2008 03:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save monjudoh/10158 to your computer and use it in GitHub Desktop.
Save monjudoh/10158 to your computer and use it in GitHub Desktop.
// ==UserScript==
// @name LDR + ?B comments for Firefox3
// @namespace http://d.hatena.ne.jp/monjudoh/
// @include http://reader.livedoor.com/reader/*
// ==/UserScript==
(function () {
var regex = [
[/\?ref=rss$/, ''],
[/&from=rss$/, ''],
[/cgi\.itmedia\.co\.jp\/rss\/bizid_1\.0\/www/, 'www.itmedia.co.jp']
];
var entryurl = "http://b.hatena.ne.jp/entry/";
var jsonapiurl = "http://b.hatena.ne.jp/entry/json/";
var imageapiurl = "http://b.hatena.ne.jp/entry/image/";
var w = unsafeWindow;
with (w) {
var bmdiv = {};
function getComment(link) {
var url = jsonapiurl + '?url=' + escape(link) + '&callback=appendComment';
var jsonp = document.createElement('script');
jsonp.src = url;
jsonp.onload = function() {
message('\u8aad\u307f\u8fbc\u307f\u5b8c\u4e86');
document.body.removeChild(jsonp);
};
message('\u30b3\u30e1\u30f3\u30c8\u8aad\u307f\u8fbc\u307f\u4e2d...');
document.body.appendChild(jsonp);
}
w.appendComment = function(json) {
var url = json.url;
var d = $(bmdiv[url]);
if (!d) return;
delete bmdiv[url];
var bm = json.bookmarks;
var len = bm.length;
var max = 100;
for (var i = 0; i < len && i < max; i++) {
var user = bm[i];
var name = user.user;
var date = getDate(user.timestamp);
var div = document.createElement('div');
div.innerHTML = '<img src="http://www.hatena.ne.jp/users/' + name.substring(0,2) + '/' + name + '/profile_s.gif">'
+ ' <a href="http://b.hatena.ne.jp/' + name + '/' + date + '#bookmark-' + json.eid + '">' + name + '</a>'
+ ' <span class="tags">'
+ user.tags.map(function(x){ return '<a href="http://b.hatena.ne.jp/'+name+'/'+x+'/">'+x+'</a>' }).join(', ')
+ '</span> ' + user.comment;
d.appendChild(div);
}
};
register_hook('after_init', function() {
Keybind.add('m', function() {
var item = get_active_item(true);
var url = item.link;
if (bmdiv[url]) {
getComment(filter(url));
} else {
toggleComment($('comment_'+item.offset));
}
});
});
function toggleComment(elm) {
elm.style.display = (elm.style.display != 'none') ? 'none' : 'block';
}
register_hook('before_printfeed', function(feed) {
bmdiv = {};
var items = feed.items;
var len = items.length;
for (var i = 0; i < len; i++) {
var item = items[i];
var url = escape(filter(item.link));
id = 'comment_' + (i+1);
item.body = '<div class="hatebu">'
+ '<a href="' + entryurl + url + '"><img src="' + imageapiurl + url + '" style="border:none"></a>'
+ '<div class="bookmarks" id="'+ id +'"></div>'
+'</div>' + item.body;
bmdiv[item.link] = id;
}
});
var style = document.createElement('style');
style.innerHTML = 'div.hatebu { margin: 3px; }'
+ 'div.hatebu a { border: none; }'
+ 'div.hatebu span.tags a { font-size: 90%; color: #66c; text-decoration: none; }';
document.body.appendChild(style);
}
function filter(url) {
for (var i = 0; i < regex.length; i++) {
var r = regex[i];
if (url.match(r[0])) return url.replace(r[0], r[1]);
}
return url;
}
function getDate(timestamp) {
var date = new Date(timestamp);
var y = date.getFullYear();
var m = date.getMonth() + 1;
var d = date.getDate();
if (m < 10) m = "0" + m;
if (d < 10) d = "0" + d;
return y + m + d;
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment