Mercurial > eldonilo > blog
diff atom.js @ 0:f62b5c395a48
Initial commit.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Sat, 04 Jun 2011 05:02:47 +0200 |
parents | |
children | 82905edac9d8 |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/atom.js @@ -0,0 +1,109 @@ +'use strict'; + +parsers[ns.atom] = function(id, xml) { + var toDate = function(atom) { + if (!atom) + return new Date(); + + var last = atom.getChild('updated'); + if (!last) { + last = atom.getChild('published'); + if (!last) + return new Date(); + } + + // var d = new Date(last); // FIXME: don't work in obsolete browsers + var d = new Date(); + d.set8601(last); + + return d; + }; + + var toHTML = function(atom, date) { + var article = document.createElementNS(ns.xhtml, 'article'); + + article.setAttributeNS(ns.idq, 'id', id); + var d8601 = date.to8601(); + article.setAttributeNS(ns.idq, 'date', d8601); + + var aside = document.createElementNS(ns.xhtml, 'aside'); + article.appendChild(aside); + + var atomTitle = atom.getChild('title'); + if (atomTitle) { + var title = document.createElementNS(ns.xhtml, 'h2'); + title.appendChild(document.createTextNode(atomTitle)); + article.appendChild(title); + } + + var footer = document.createElementNS(ns.xhtml, 'footer'); + + var atomAuthor = atom.getChild('author', ns.atom); + if (atomAuthor) { + var atomName = atomAuthor.getChild('name'); + + var atomURI = atomAuthor.getChild('uri'); + var cite = document.createElementNS(ns.xhtml, 'cite'); + if (atomURI) { + var a = document.createElementNS(ns.xhtml, 'a'); + a.href = atomURI; + var atomJID = new JID; + atomJID.uri = atomURI; + + a.appendChild(document.createTextNode(atomName? atomName: atomJID.bare)); + cite.appendChild(a); + + var img = document.createElementNS(ns.xhtml, 'img'); + img.src = 'http://linkmauve.fr/avatar/' + atomJID.bare; + aside.appendChild(img); + } else + cite.appendChild(document.createTextNode(atomName)); + + footer.appendChild(document.createTextNode('By ')); + footer.appendChild(cite); + + var atomEmail = atomAuthor.getChild('email'); + if (atomEmail) { + footer.appendChild(document.createTextNode(' (')); + var a = document.createElementNS(ns.xhtml, 'a'); + a.href = atomEmail; + a.appendChild(document.createTextNode('email')); + footer.appendChild(a); + footer.appendChild(document.createTextNode(')')); + } + + article.appendChild(footer); + } + + footer.innerHTML += ', <time datetime="' + d8601 + '">' + date.getRelative() + '</time>'; + + var atomSummary = atom.getChild('summary'); + if (atomSummary) { + var p = document.createElementNS(ns.xhtml, 'p'); + p.appendChild(document.createTextNode(atomSummary)); + article.appendChild(p); + } + + var atomLinks = atom.getChildren('link'); + for (var i in atomLinks) { + var atomLink = atomLinks[i]; + + if (atomLink['@rel'] !== 'replies') + continue; + + if (atomLink['@title'] !== 'comments') + continue; + + var href = new JID; + href.uri = atomLink['@href']; + + article.innerHTML += '<a href="?jid=' + href.bare + ';node=' + href.query.node + ';comments=' + params.jid + '/' + params.node + '">Comments !</a>'; + } + + return article; + }; + + this.xml = xml; + this.date = toDate(xml); + this.html = toHTML(xml, this.date); +}