BitSoup.org - QuickThanks!

By Brandon Last update Mar 26, 2008 — Installed 354 times.
// ==UserScript==
// @name		BitSoup.org - QuickThanks!
// @namespace	http://www.bitsoup.org
// @version 	1.2
// @description Provides a quick "Thank the uploader" button."
// @include		http://*bitsoup.org/details.php*
// ==/UserScript==


// !! FIREFOX + GREASEMONKEY USERS 
//When the script is first accessed, it will prompt you for what you want the default message to be for your thank you message,
//if you want to change it, go to about:config in your firefox location bar, search for "thanks" and you'll be able to alter the messae there. 
//You can also call up the prompt again by holding shift+cntl+alt and pressing the letter "T" on your keyboard. 


// !! SAFARI + GREASEKIT USERS
//Greasekit does not save prefs like greasemonkey does, so you have to
//hardcode your message into the script.


//If you have any issues, please PM me (bdelcamp) on bitsoup.org.


//<!------- BEGIN USER CONFIG ---------->//

/*Edit your message here. (Make sure not to use quotation marks)*/
var safariThanksMessage = "Thanks Uploader!";

//<!------- DO NOT EDIT BELOW THIS LINE ----------->//





//<!------- GREASEKIT COMPATABILITY FUNCTIONS --------->//

if(typeof GM_xmlhttpRequest === "undefined") {
	GM_xmlhttpRequest = function(/* object */ details) {
		details.method = details.method.toUpperCase() || "GET";
		
		if(!details.url) {
			throw("GM_xmlhttpRequest requires an URL.");
			return;
		}
		
		// build XMLHttpRequest object
		var oXhr, aAjaxes = [];
		if(typeof ActiveXObject !== "undefined") {
			var oCls = ActiveXObject;
			aAjaxes[aAjaxes.length] = {cls:oCls, arg:"Microsoft.XMLHTTP"};
			aAjaxes[aAjaxes.length] = {cls:oCls, arg:"Msxml2.XMLHTTP"};
			aAjaxes[aAjaxes.length] = {cls:oCls, arg:"Msxml2.XMLHTTP.3.0"};
		}
		if(typeof XMLHttpRequest !== "undefined")
			 aAjaxes[aAjaxes.length] = {cls:XMLHttpRequest, arg:undefined};
	
		for(var i=aAjaxes.length; i--; )
			try{
				oXhr = new aAjaxes[i].cls(aAjaxes[i].arg);
				if(oXhr) break;
			} catch(e) {}
		
		// run it
		if(oXhr) {
			if("onreadystatechange" in details)
				oXhr.onreadystatechange = function() { details.onreadystatechange(oXhr) };
			if("onload" in details)
				oXhr.onload = function() { details.onload(oXhr) };
			if("onerror" in details)
				oXhr.onerror = function() { details.onerror(oXhr) };
			
			oXhr.open(details.method, details.url, true);
			
			if("headers" in details)
				for(var header in details.headers)
					oXhr.setRequestHeader(header, details.headers[header]);
			
			if("data" in details)
				oXhr.send(details.data);
			else
				oXhr.send();
		} else
			throw ("This Browser is not supported, please upgrade.")
	}
}

if(typeof GM_addStyle === "undefined") {
	function GM_addStyle(/* String */ styles) {
		var oStyle = document.createElement("style");
		oStyle.setAttribute("type", "text\/css");
		oStyle.appendChild(document.createTextNode(styles));
		document.getElementsByTagName("head")[0].appendChild(oStyle);
	}
}

if(typeof GM_log === "undefined") {
	function GM_log(log) {
		if(console)
			console.log(log);
		else
			alert(log);
	}
}
//<!------- END GREASEKIT FUNCTIONS --------->//

//usage getElementsByClassName(class name, tag name, parent)
function getElementsByClassName(strClass, strTag, objContElm) {
  strTag = strTag || "*";
  objContElm = objContElm || document;    
  var objColl = objContElm.getElementsByTagName(strTag);
  if (!objColl.length &&  strTag == "*" &&  objContElm.all) objColl = objContElm.all;
  var arr = new Array();                              
  var delim = strClass.indexOf('|') != -1  ? '|' : ' ';   
  var arrClass = strClass.split(delim);    
  for (var i = 0, j = objColl.length; i < j; i++) {                         
    var arrObjClass = objColl[i].className.split(' ');   
    if (delim == ' ' && arrClass.length > arrObjClass.length) continue;
    var c = 0;
    comparisonLoop:
    for (var k = 0, l = arrObjClass.length; k < l; k++) {
      for (var m = 0, n = arrClass.length; m < n; m++) {
        if (arrClass[m] == arrObjClass[k]) c++;
        if ((delim == '|' && c == 1) || (delim == ' ' && c == arrClass.length)) {
          arr.push(objColl[i]); 
          break comparisonLoop;
        }
      }
    }
  }
  return arr; 
}


var BSQuickThanks =
{
	
	
	
	thanksButton :	'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADYAAAAbCAYAAAA3d3w1AAAAGXRFWHRTb2Z0d2Fy' +
	'ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAzNJREFUeNrsWEtrE1EUnjtNmmi0qSsr' +
	'ptiFC/MTIgiConYliovErKIkIjQoCEJLIYXgQkIWbrrpooILi0YQkbrUjQRf2wgK' +
	'EqVu3IQmbWImL78zvRPujDPJVItOQg98nMecc+/95j7mwTqdjjSMIktDKmw7M5bL' +
	'5Zgsy1Kr1XLeDMkyGxkZYcSJ7L7EVlZWmJNnxuVyqbxAilYfszNjHkVRPLjug33b' +
	'7XZP404chr3HYdyIQBtocb1F2Gx5UnK9XidS1zwezwxjrIzYW6AAfBmELWY2Y57l' +
	'5WUlGo3ewyydAanniL0atMPDOGOupaUlxefzHQCp0yB1B7Hvg3gq6ogtLi626ESJ' +
	'RCIfQOo+Qp+32V4eCP3hWHa0VvccazabUiwWuwtSP+A+BWoWyJuA4lI8Hj/Zo64X' +
	'7NTm7dbqiCUSif1YgudgvgR+9sCxcDh8i2pIc5wiv1KpKH1qrWCnVuL99K3tLsVM' +
	'JsOSySQ96CbhvtYKejzfnkBly+VyY3V19RkPZxHPkgamhPQi11MGX4xJ1Bbvt8jj' +
	'v+UJOToxxrvE6G2Cn5B7gY/9iGlSKpV0DYZCoevqos/naVATPDyB+AUxZpbH2yoK' +
	'+d08yDT5xv6sxqGSIaTTaVatVsdg14FJYNwGOsFg8KqFr7M14TGzPE3GjW326M8y' +
	'LoszxqUKHAEUG6Al0LLwNbsE+AKBQEyImeVJPKdUKBQeCm36eBuqbejPahxKdymm' +
	'UqlOrVYjgt/w3nUcoTd2liI2bROqYeZze5Q6WltbE6+b5enyBa2K3++/uL6+/gDt' +
	'jNoZh+5UpCXZaDRewDzLkyyBRwKB0Z3ittHX2ZDLBB7rXqPXH363Na3GIJe47tYJ' +
	'ceN4JKF2C9oeI8zOzrKNjY1DmLVP8KPiNSOMe/Q/gwYU0Y3PmLS5uTkG3Gy32+/g' +
	'H+1H7K9fzXeInJGY6WcLnY6Y8gWv13sCOoPQo6H5giZyUFdAbgYP7a+wHwPvORz/' +
	'y6PnFzTtufn5+QmckjfwXXYes3cQ4X0O/NDUTsS27X8ec3NzzMl/snCz6eWd4Uxg' +
	'dn8NmJKkhtCI4wjyMakELQ+P3f+Ku8T+vfwSYACfgJP3gYRm+gAAAABJRU5ErkJg' +
	'gg==',

	commentButton :	'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADYAAAAbCAYAAAA3d3w1AAAAGXRFWHRTb2Z0d2Fy' +
	'ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAuhJREFUeNrsWD2IE0EU3kk2G8zBpfUw' +
	'kMbiSKVgYaxECwl3WgUveDYpUlxAFAOSlIGQQMBOEJtcEcMFixRBoghiYZHWKh5W' +
	'IhFSiflZk7hJxvd0ViZzm03iwbkbbuBj3rw3M/u+fTNvZ5ZQSqVVLA5pRYtcrVZd' +
	'k8kEw0bH4zFlsqWK0+mUwC8pHA4v7BupVCoK10ZyE6gno9HI0hGJRCKmJAnssZ6w' +
	'NJ2sJhbigSQGELWvmqa9AjlPCFEVRekwP6kRsds22DJnABuAAOAi+Lw+HA6fALln' +
	'brfbkBwS27ZhbriKfkP03pRKpfvRaNQwYtdsmvjOge8piFyhWCw+jsViRyJ22cZZ' +
	'/Tr4HwNywUKh0IrH43/JyYA+1/EDJ1+wAbGXsM9uAR5CFn809R3DbMPkQ8AmpNEt' +
	'bJTLZSS5+Z8dP1zAh3cul2tLJCZBKP30T/GHQqF7rO0X2nrxC236j/ZFxswaJ+Im' +
	'4Hs+nycIPCIiHHrEgsFgqFarvWDt32Dtz4CzYN9jst5/j9Mta19kDK8L8X4J+Ajw' +
	'QIaU4HAx9UEeotButzUmi5ACgcB2vV4v67Len9cta4fSAt1TszGCbmgCPDFJ/GkJ' +
	'99hPwFqj0VChPuBWKbbXUOh0OmPWT5eNdEvZfT5fVNws8+aZUfyAH0jK4XBMEdOY' +
	'rAgTKF6vdwfemNJsNlG/j7put7uDRqhH+lgDeZ5dn1Pinr1v0q9kQuwKROsLRiyd' +
	'TlN+KWocIHOSOwxhIPVc0Os6wt6kNkOeZz/yrDn9woKfPG7g+ZHfX3pWPBEc+xRs' +
	'PO8uEPrU6/U2UqkU4W3Exjfo8+D7Qb/fx2Va8Hg8nVW4Qe8iqcFg8N6I1IkuxWNi' +
	'HXAJkAC8xeWnquqDZDJJZo3BrPhNiKCLZUurXTRVzH6QKF5DfTeTybRyuRydedFM' +
	'JBIyPwF8C6gsy9TKew+ypJTNZk0dRFIUOyIhRkyyGindp3lkxPvY6X/FU2IWKL8E' +
	'GACaFL/vAy8B9AAAAABJRU5ErkJggg==',

	thanksMessage : '',


	isGreaseMonkey:function(){
		GM_log("Checking for webKit");
			if(typeof GM_setValue === "undefined") {
		GM_log("Running on GreaseKit");
			return false;
		}else{
			GM_log("Running on GreaseMonkey");
			return true;
		}
	},
	

	
	run: function(){
			if(this.loadSettings()){
				this.addForms();
				this.attachEvents();
			}
	},
	
	
	loadSettings: function(){
		if(this.isGreaseMonkey()){
	    	this.thanksMessage = GM_getValue('thanksMessage', '');
		    if (!this.thanksMessage) this.setMessage();
		    
		}else{
			this.thanksMessage = safariThanksMessage;
		}
		return !!this.thanksMessage;
	  },

	setMessage: function()
	  {
	    var text =
	      "Please enter your personal message for thanking the uploader.\n\n" +
	      "This message will be entered automatically when you click the Thanks button.";
	    BSQuickThanks.thanksMessage = prompt(text);
	    if (BSQuickThanks.thanksMessage) GM_setValue('thanksMessage', BSQuickThanks.thanksMessage);
	  },

	attachEvents: function()
	  {
	    window.addEventListener('keypress', this.keyPress, false);
	  },

	keyPress: function(event)
	  {
	    if (event.ctrlKey && event.altKey && event.shiftKey && (event.which == 84)) {
	      BSQuickThanks.setMessage();
	    }
	  },
	
	addForms: function()
	{
		var url_vars = window.location.href.split("?")[1];
		var torrent_id = url_vars.match(/id=([^(\&|$)]*)/)[1];


		var thanksForm = 
		'<form name="addThanksForm" action="http://bitsoup.org/comment.php?action=add" method="post">\n' +
			'<input type="hidden" value="' + torrent_id + '" name="tid"></input>\n' +
			'<input type="hidden" name="text" value="'+this.thanksMessage+'"></input>\n' +
			'<input type="image" name="Thanks" src=' + this.thanksButton + ' value="Send Thanks" /><a href="http://bitsoup.org/comment.php?action=add&tid=' + torrent_id + '"><img src="'+ this.commentButton +'" border="0"></a>\n' +
		'</form>'; 

		var commentForm = 
		'<div id="commentBox"> <span class="title">Leave a comment for this torrent...</span>\n' +
		'<form name="addCommentForm" action="http://bitsoup.org/comment.php?action=add" method="post">\n' +
			'<input type="hidden" value="' + torrent_id + '" name="tid"></input>\n' +
			'<input type="text" name="text" />'

		'</div>';
		 
		var addCommentLink = getElementsByClassName('index', 'a')[1].parentNode;
		addCommentLink.innerHTML = addCommentLink.innerHTML.replace(addCommentLink.innerHTML, thanksForm);
		var addCommentLink = getElementsByClassName('index', 'a')[1].parentNode;
		addCommentLink.innerHTML = addCommentLink.innerHTML.replace(addCommentLink.innerHTML, thanksForm);
		
	},
	
	
}

BSQuickThanks.run();