javascript:/* Abstractions for writing bookmarklets over reddit */String.prototype.trim=function () {return this.replace(/\s*/, "");};/** Creates a new instance of a link */function Link(href,text) {this.href=href.trim();this.text=text.trim();}/** Returns a String representation of a Link */Link.toString=function(l) {return l.text + "@" + l.href;};/** Creates a new instance of an entry: e.g. new Reddit(..) */function Reddit(title,site,time,user,subreddit,points,comments) {this.title=title;this.site=site;this.time=time;this.user=user;this.subreddit=subreddit;this.points=parseInt(points);this.comments=comments;}/** Returns a String representation of a Reddit */Reddit.toString=function(r) {var res='';res +="title: "     + Link.toString(r.title)     + "\n";res +="site: "      + Link.toString(r.site)      + "\n";res +="time: "      + r.time                     + "\n";res +="user: "      + Link.toString(r.user)      + "\n";res +="subreddit: " + Link.toString(r.subreddit) + "\n";res +="points: "    + r.points                   + "\n";res +="comments: "  + Link.toString(r.comments)  + "\n";return res;};/** Iterates over all the entries.  f: Reddit -> Voic */function entries(func,before,after) {if (before) before();var divs=document.getElementsByTagName('div');for (var i=0; i<divs.length; i++) {var d=divs[i];if (!d.className.match(/thing/)) continue;var title=0;var site=0;var time=0;var user=0;var subreddit=0;var points=0;var comments=0;var ds=d.getElementsByTagName('div');for (var j=0; j<ds.length; j++) {var dd=ds[j];if (dd.className=='score') {points=dd.innerHTML.trim();}}var as=d.getElementsByTagName('a');for (var j=0; j<as.length; j++) {var a=as[j];if (a.className=='title') {title=new Link(a.href,a.innerHTML);}if (a.className=='comments') {var text=a.innerHTML.split(' ')[0];comments=new Link(a.href,text);}if (a.className=='subreddit hover') {subreddit=new Link(a.href,a.innerHTML);}if (a.className=='author') {user=new Link(a.href,a.innerHTML);}}var ss=d.getElementsByTagName('span');for (var j=0; j<ss.length; j++) {var s=ss[j];if (s.className=='domain') {var domainLink=s.getElementsByTagName('a')[0];site=new Link(domainLink.href,domainLink.innerHTML);}}var ps=d.getElementsByTagName('p');for (var j=0; j<ps.length; j++) {var pp=ps[j];if (pp.className=='tagline') {var txt=pp.innerHTML;if (res=txt.match(/submitted (\d+ \w+)/)) {time=res[1];}}}if (!subreddit) continue;if (!points.match(/\d+/)) continue;var r=new Reddit(title,site,time,user,subreddit,points,comments);func(r);}if (after) after();}/* Appends all the names of the entries to the top of the body */var msg;function  before() {msg='';}function after() {alert(msg);}function func(r) {msg +=r.title.text + "\n";}entries(func,before,after);

