Craigslist Images

By Jordan Phillips Last update Jan 6, 2007 — Installed 3,916 times.
// Craigslist Images
// by jordan (jordan{at}southernmecca(dot)org)
//
// ==UserScript==
// @name         Craigslist Images
// @namespace    http://southernmecca.org/
// @description  Displays image attachments along with search results
// @include      http://*.craigslist.tld/*
// ==/UserScript==

var intPostIndex = 0;
var aryLinks = Array();
var client;

function getLinks(objDocument) {

	var pattern = "//a";
	var resultLinks = objDocument.evaluate( pattern, objDocument, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
	
	var i=0;
	var strTemp = "";
	
	while ((res = resultLinks.snapshotItem(i) ) !=null ){

		strURL = res.href;
		
		if ( aryMatch = strURL.match(/.+\.html$/) ) {
	
			objDiv = objDocument.createElement('div');
			objDiv.innerHTML = "";

			if ( !res.parentNode.innerHTML.match(/pic/) ) {
				objDiv.style.display = "none";
			}

			res.parentNode.appendChild(objDiv);

			aryLinks[aryLinks.length] = Array(strURL, objDiv);
		}

		i++;
	}

}

window.parsePosts = function () {

	aryLinkInfo = aryLinks[intPostIndex];
	callServer(aryLinkInfo[0]);

}


window.parsePost = function(objDoc) {

	if ( aryMatch = objDoc.match(/(<table summary="craigslist hosted images">[\s\S]+<\/table>)/) ) {
		aryLinkInfo = aryLinks[intPostIndex];
		aryLinkInfo[1].innerHTML = aryMatch[1];
	}
	
	if ( intPostIndex < aryLinks.length-1 ) { 
		intPostIndex++;
		callServer(aryLinks[intPostIndex][0]);
	}
}

function createClient() {
	try {
		client = window.XMLHttpRequest ? new XMLHttpRequest() : 
							new ActiveXObject("Microsoft.XMLHTTP");
	} catch (e) { 
		alert("Sorry, your browser is not AJAX-enabled!"); 
	}
}


function callServer(strURL) {
	createClient();
	client.onreadystatechange = callback;
	client.open("get",strURL,true);
	client.send("");
}

function callback() {

	if (client.readyState == 4) {
		if (client.status == 200) {

			parsePost(client.responseText);

		} else {
			alert("There was a problem retrieving the response:\n" +client.statusText);
			createClient();
		}
	}
}

getLinks(document);
parsePosts();