// ==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 = '' + ' ' + name + '' + ' ' + user.tags.map(function(x){ return ''+x+'' }).join(', ') + ' ' + 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 = '
' + '' + '
' +'
' + 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; } })();