By Plutor
Has 13 other scripts.
// ==UserScript==
// @name Flickr More Home
// @namespace http://plutor.org/
// @description Increases the amount of content on your Flickr home page.
// @include http://flickr.com/
// @include http://www.flickr.com/
// ==/UserScript==
//
// DONE 2008-05-01
// * Document configuring
// * Put images into an array of hashes, not a mixed array
// * Space multiple rows
// TODO
// * Allow 0 image rows
/* -------------------------------------------------------------------------- */
// IMAGE_ROWS lists the number of rows of images for each type.
// Default is 1 for yours and everyones, and 2 for contacts.
var IMAGE_ROWS = { "yours": 1,
"contacts": 2,
"everyones": 1 };
// CACHE_AGE represents the number of seconds to wait from one update of the
// home page images to the next. Clicking the "Refresh" button in the upper
// right corner of the home page will avoid this.
//
// 0 is "never cache", but there's no real reason to use anything but the
// default (15 minutes)
var CACHE_AGE = 15 * 60; // 15 minutes
/* -------------------------------------------------------------------------- */
var userid = "-";
var numperrow = 8;
/* -------------------------------------------------------------------------- */
function getpage(url, valname, cb) {
var last = GM_getValue("STAMP:" + valname);
var now = Math.floor((new Date().getTime())/1000);
var force = GM_getValue("FORCE");
var data = GM_getValue("DATA:" + valname);
if ( !last || force || now - last >= CACHE_AGE || !data || data.length == 0 ) {
GM_setValue( "STAMP:" + valname, now );
GM_xmlhttpRequest({
method: "GET",
url: url,
onload: cb
});
}
else {
cb({
status: 999,
statusText: "From cache",
responseText: data
});
}
}
function getgroup(group, page) {
var url = 'http://www.flickr.com/photos/';
if (group == 'yours') { url += userid + "/"; }
else if (group == 'contacts') { url += "friends/"; }
else if (group == 'everyones') { }
else { return }
if (page && page > 1) {
getpage( url + "page" + page, "XXXXX",
function(details) { updategroup(details, group, page) } );
} else {
addthrobber(group);
getpage( url, group,
function(details) { updategroup(details, group, 1) } );
}
}
/* -------------------------------------------------------------------------- */
function getimglist(pagehtml, imgdata_regexp) {
var rv = new Array();
var mgrps;
while (mgrps = imgdata_regexp.exec(pagehtml)) {
var nextimg = {
url: mgrps[1],
// Show square, not medium or thumbnail
src: mgrps[2].replace(/(_[mt])?.jpg$/, "_s.jpg"),
by: (mgrps.length > 3 ? mgrps[3] : "")
};
rv.push(nextimg);
}
return rv;
}
function addthrobber(group) {
var tablerow;
if (group == 'yours') {
tablerow = 0;
} else if (group == 'contacts') {
tablerow = 1;
} else if (group == 'everyones') {
tablerow = 2;
} else {
return
}
var imgtable = getimgtable(tablerow);
if (!imgtable) return;
var n = document.createElement("img");
n.src = 'data:image/gif;base64,R0lGODlhEAAQAOMIAAAAABoaGjMzM0xMTGZmZoCAgJmZmbKysv///////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgAIACwAAAAAEAAQAAAESBDJiQCgmFqbZwjVhhwH9n3hSJbeSa1sm5GUIHSTYSC2jeu63q0D3PlwCB1lMMgUChgmk/J8LqUIAgFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UKgmFqbpxDV9gAA9n3hSJbeSa1sm5HUMHTTcTy2jeu63q0D3PlwDx2FQMgYDBgmk/J8LqWPQuFRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YSgmFqb5xjV9gQB9n3hSJbeSa1sm5EUQXQTADy2jeu63q0D3PlwDx2lUMgcDhgmk/J8LqUPg+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+cagmFqbJyHV9ggC9n3hSJbeSa1sm5FUUXRTEDy2jeu63q0D3PlwDx3FYMgAABgmk/J8LqWPw+FRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+QihmFqbZynV9gwD9n3hSJbeSa1sm5GUYXSTIDy2jeu63q0D3PlwDx3lcMgEAhgmk/J8LqUPAOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+UqhmFqbpzHV9hAE9n3hSJbeSa1sm5HUcXTTMDy2jeu63q0D3PlwDx0FAMgIBBgmk/J8LqWPQOBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+YyhmFqb5znV9hQF9n3hSJbeSa1sm5EUAHQTQTy2jeu63q0D3PlwDx0lEMgMBhgmk/J8LqUPgeBRhV6z2q0VF94iJ9pOBAAh+QQBCgAPACwAAAAAEAAQAAAESPDJ+c6hmFqbJwDV9hgG9n3hSJbeSa1sm5FUEHRTUTy2jeu63q0D3PlwDx1FIMgQCBgmk/J8LqWPweBRhV6z2q0VF94iJ9pOBAA7';
n.style.margin = '30px';
imgtable.appendChild(n);
}
function updateimgtable(imgs, numrows, rownum, showname) {
var imgtable = getimgtable(rownum);
if (!imgtable) return;
while (imgtable.childNodes.length > 0) {
imgtable.removeChild(imgtable.childNodes[0])
}
for (var i = 0; i < numrows * numperrow && i < imgs.length; ++i) {
var n = document.createElement("div");
n.className = 'thumb-squirt-indv';
var h = '<span class="photo_container pc_s"><a href="' + imgs[i].url + '"><img src="' + imgs[i].src + '" width="75" height="75" /></a></a>';
if (showname) {
h += '<br> ' + imgs[i].by;
}
h += '</span>';
n.innerHTML = h;
if (i % numperrow == 0)
n.style.clear = 'left';
if (numrows > 0 && Math.floor(i / numperrow) < (numrows-1))
n.style.paddingBottom = '1em'; // space all rows except the last
imgtable.appendChild(n);
}
}
var grpimgs = new Object();
function updategroup(det, group, page) {
var re;
var tablerow;
var showname;
if (group == 'yours') {
re = /<p class="Photo">\s*<[^>]*><a href="([^"]*)"[^>]*><img src="([^"]*)/gi;
tablerow = 0;
showname = 0;
} else if (group == 'contacts') {
re = /<p class="RecentPhotos">\s*<[^>]*><a href="([^"]*)"[^>]*><img src="([^"]*)"[^>]*><\/a>.*\s*<br>\s*(From <a[^>]*>[^<]*<\/a>)/gi;
tablerow = 1;
showname = 1;
} else if (group == 'everyones') {
re = /<p class="StreamList">\s*<[^>]*><a href="([^"]*)"[^>]*><img src="([^"]*)"[^>]*><\/a><\/[^>]*>\s*<br>\s*(From <a[^>]*>[^<]*<\/a>)/gi;
tablerow = 2;
showname = 1;
} else {
return
}
if (det.status < 400) {
var thispage = getimglist(det.responseText, re);
if (thispage && thispage.length > 0) {
if (page == 1) grpimgs[group] = new Array();
grpimgs[group] = Array.concat(grpimgs[group], thispage);
if (grpimgs[group].length < IMAGE_ROWS[group]) {
getgroup(group, page + 1);
} else {
updateimgtable(grpimgs[group], IMAGE_ROWS[group], tablerow, showname);
GM_setValue( "DATA:" + group, grpimgs[group].toSource() );
}
} else if (grpimgs[group] && grpimgs[group].length > 0) {
updateimgtable(grpimgs[group], IMAGE_ROWS[group], tablerow, showname);
GM_setValue( "DATA:" + group, grpimgs[group].toSource() );
}
} else if (det.status == 999) {
// From cache
try {
grpimgs[group] = eval(det.responseText);
updateimgtable(grpimgs[group], IMAGE_ROWS[group], tablerow, showname);
} catch(e) { GM_log("Failure parsing " + group + " cache") }
}
}
/* -------------------------------------------------------------------------- */
function addrefreshbutton() {
var newbutton = document.createElement("input");
newbutton.type = "submit";
newbutton.className = "Butt";
newbutton.value = "REFRESH";
newbutton.addEventListener( "click", refresh, true );
newbutton.style.cssFloat = "right";
var imgtable = getimgtable(0);
if (!imgtable) return;
imgtable.parentNode.insertBefore( newbutton, imgtable.parentNode.firstChild );
}
function refresh() {
GM_setValue("FORCE", 1);
window.location.reload();
return false;
}
/* -------------------------------------------------------------------------- */
function isloggedin() {
if (userid == "-")
userid = getuserid();
return (userid != "");
}
function getuserid() {
var u
try {
var imgs = document.getElementsByTagName("img")
var nsid_regex = new RegExp("/buddyicons/([^\.]*)\.jpg")
for (i in imgs) {
var nsid_matches = nsid_regex.exec(imgs[i].src)
if (nsid_matches && nsid_matches.length >= 2) {
return nsid_matches[1];
}
}
}
catch (e) {
// GM_log(e)
}
return u
}
/* -------------------------------------------------------------------------- */
function getimgtable(n) {
var alldivs = document.getElementsByTagName('div');
var seen = 0;
for (var i=0; i<alldivs.length; ++i) {
if (alldivs[i].className.indexOf("thumb-squirt-cont") != -1) {
if (seen++ >= n)
return (alldivs[i]);
}
}
}
function getmaintable() {
var xpath = "//table[@width='800']"; // FIXME - make this better
var candidates = document.evaluate(xpath, document, null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
var rv = candidates.snapshotItem(0);
return (rv);
}
function moveleftside() {
var tr = maintable.rows;
for (var i = tr.length - 1; i >= 0; --i) {
var td = tr[i].cells;
if (td.length >= 2) {
var left = td[0];
tr[i].removeChild(left);
var newtr = maintable.insertRow(i+1);
newtr.appendChild(left);
}
}
}
/* -------------------------------------------------------------------------- */
var maintable;
function main() {
if (isloggedin()) {
maintable = getmaintable();
if (maintable) {
moveleftside();
getgroup('yours');
getgroup('contacts');
getgroup('everyones');
addrefreshbutton();
}
}
GM_setValue( "FORCE", 0 );
}
//addEventListener("load", main, true)
main();