lastfmjunkie

By naph Last update Mar 27, 2007 — Installed 243 times.
// ==UserScript==
// @name lastfmjunkie
// @description adds btjunkie searching for last.fm artists
// @include http://www.last.fm/music/*
// ==/UserScript==

function lastfmjunkie_search() {

	var title = document.getElementsByTagName( 'title' )[0];

	if ( !title ) return;

	var string = new String( title.firstChild.nodeValue );
	string = string.replace( /([\w&; ]+) .*/, '$1' );

	lastfmjunkie_setResults( 'Searching BTJunkie...' );

	GM_xmlhttpRequest({
		method: 'GET',
		url: 'http://btjunkie.org/rss.xml?query=' + escape(string),
		onload: function( res ) {
			if ( res.readyState == 4 && res.status == 200 )
				lastfmjunkie_displayXml( res.responseText, string );
		}
	});

};

function lastfmjunkie_xmlChildValue( node, name ) {
	var child = node.getElementsByTagName( name )[0];
	return child ? child.firstChild.nodeValue : '';
}

function lastfmjunkie_setResults( text ) {

	var results = document.getElementById( 'lastfmjunkie_results' );

	while ( results.firstChild )
		results.removeChild( results.firstChild );

	results.appendChild(
		document.createTextNode(text)
	);
	results.style.display = 'block';

}

function lastfmjunkie_displayXml( xmlText, band ) {

	var parser = new DOMParser();
	var xml = parser.parseFromString( xmlText, 'application/xml' );
	var root = xml.documentElement;
	var items = root.getElementsByTagName( 'item' );
	var results = document.getElementById( 'lastfmjunkie_results' );
	var header = document.createElement( 'h5' );

	lastfmjunkie_setResults( '' );

	header.appendChild( document.createTextNode('BTJunkie Results (first 20)') );
	results.appendChild( header );

	if ( !items.length )
		results.appendChild(
			document.createTextNode('nothing found, sorry...')
		);

	else for ( var i=0; i<items.length && i<20; i++ ) {

		var item = items[ i ];
		var stitle = lastfmjunkie_xmlChildValue(item,'title');
		var slink = lastfmjunkie_xmlChildValue(item,'link');
		var sdesc = lastfmjunkie_xmlChildValue(item,'description');
		var elink = document.createElement( 'a' );
		var etext = document.createTextNode( stitle );

		elink.style.display = 'block';
		elink.href = slink;
		elink.appendChild( etext );

		results.appendChild( elink );

	}

	var more = document.createElement( 'a' );
	more.href = 'http://btjunkie.org/search?q=' + escape(band);
	more.appendChild( document.createTextNode('see all results') );
	more.style.fontWeight = 'bold';

	var close = document.createElement( 'a' );
	close.href = 'javascript:;';
	close.addEventListener( 'click', function() {
		results.style.display = 'none';
	}, true );
	close.appendChild( document.createTextNode('close') );

	results.appendChild( document.createElement('br') );
	results.appendChild( more );
	results.appendChild( document.createTextNode(' - ') );
	results.appendChild( close );

}

function lastfmjunkie_run() {

	var catpage = document.getElementById( 'catPage' );

	if ( !catpage ) return;

	var h3 = catpage.getElementsByTagName( 'h3' )[0];
	var h5 = catpage.getElementsByTagName( 'h5' )[0];
	var title = h3;
	var link = document.createElement( 'a' );
	var linkImg = document.createElement( 'img' );
	var results = document.createElement( 'div' );

	linkImg.src = 'data:image/x-ico;base64,AAABAAEAEBAAAAEACABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEAAAkFAwAHBQQAGBALACQYEAAoGQ8AOCIVAEIoGAA6ODYAPDo6AD08PABQPjQAQEBAAHpLLQBbTEQAhFExAF1ORgBeU0wAYVRMAIVXOgBlWVIAj2FEAGxkXwB6eXgAfXx8AICAgACphW8ArIp0ALCPegCwkHwAm5SPAKGWjwC4mogAuJyKALqdiwC%2Bo5IAwKaWAMKomADEq5wAxq%2BhAM66rQDQvLAA1MO4ANfGvADYyL4A39LKAODTywDg1MwA4dXNAObb1QDo3tgA5eTjAPDq5gD07%2BwA9fHuAPr4%2BAD8%2BvoA%2FPz7AP%2F%2F%2FwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRoaGhoaGhoaGhoaGhoaDRo7Ozs7Ozs7Ozs7Ozs6GhoTJiYmKDE7Ozs7NiYmIDsaCBAQEBAQGzo7OjMQEC47GggQKSweEBAqOgsPEBAwOxoIEDU7ORAQIgsADBAQMDsaCBArLyQQDgQAAAwQEDA7GggQEBAQFAUAAAAPEBAwOxoIECUnFgcAAAALMhAQMDsaCBA1OhICAAALOjMQEDA7GggQIxUAAAAJISMdEBAcIxEIEAYBAAALNxAQEBAQEBAIFy0fAwALOjotLS0tLS0tFxk6GDQLODs7Ozs7Ozs7OxoLADo7Ozs7Ozs7Ozs7OzsaDQoZGhoaGhoaGhoaGhoaDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D';
	linkImg.style.border = 'none';
	linkImg.style.margin = '0px 0px 0px 10px';

	results.id = 'lastfmjunkie_results';
	results.style.display = 'none';
	results.style.padding = '5px';
	results.style.border = '1px #ccc solid';
	results.style.backgroundColor = '#eee';
	results.style.margin = '5px 5px 15px 5px';

	title.style.float = 'left';
	link.style.float = 'left';
	link.href = 'javascript:;';
	link.addEventListener( 'click', lastfmjunkie_search, true );
	link.appendChild( linkImg );

	h3.appendChild( link );
	h5.parentNode.insertBefore( results, h5.nextSibling );

}

setTimeout( lastfmjunkie_run, 2000 );