// ==UserScript==
// @name Hatena::Diary: diarylist
// @namespace http://lowreal.net/
// @include http://d*.hatena.ne.jp/diarylist*
// @require http://svn.coderepos.org/share/lang/javascript/jsdeferred/trunk/jsdeferred.userscript.js
// @require http://gist.github.com/3239.txt#createElementFromString
// @require http://gist.github.com/3238.txt#$X
// ==/UserScript==
$E = createElementFromString;
(function () { with (D()) {
function parseJSON (req) {
return eval('('+req.responseText+')')
}
var rdf = new Namespace("http://www.w3.org/1999/02/22-rdf-syntax-ns#");
var rss = new Namespace("http://purl.org/rss/1.0/");
var dc = new Namespace("http://purl.org/dc/elements/1.1/");
var clickd = new Deferred();
document.body.addEventListener("click", function (e) {
clickd.call();
}, false);
var diaries = document.querySelectorAll("#body ul li");
loop(diaries.length, function (i) {
var li = diaries[i];
var diary = li.querySelector("a").href;
var holder = $E("<div>loading</div>", { parent: li });
return http.get(diary + "rss").next(function (req) {
li.removeChild(holder);
try {
var rdf = new XML(req.responseText.replace(/^<\?xml\s+version\s*=\s*(["'])[^\1]+\1[^?]*\?>/, ""));
for each (var item in rdf.rss::item) {
$E("<div style='padding-left:10em;font-size:80%;color:#333;'><div class='title'>#{title}</div><div class='body'>#{body}</div></div>", {
parent: li,
data : {
title: item.rss::title,
body : item.rss::description
}
});
}
} catch (e) {}
return (i > 5) ? clickd : null;
})
}).
error(function (e) {
console.log(e);
})
} })();