Yay Extensions

By deleted user Last update Jun 19, 2005 — Installed 864 times.
// ==UserScript==
// @name          Yay Extensions
// @namespace     http://c3o.org
// @description	  Adds ignore user functionality, download link for embedded MP3s and theme dropdown in preferences
// @include       http://*.yayhooray.com/*
// ==/UserScript==

(function() {

	var blocking = 1;

	//== read cookie with ignored users ==
	ignored = new Array();
	var ca = document.cookie.split(';');
	for(var i=0; i<ca.length; i++) {
		while (ca[i].charAt(0)==' ') { ca[i] = ca[i].substring(1,ca[i].length); }
		if (ca[i].indexOf('ignoringoff=') == 0) { blocking = 0 }
		if (ca[i].indexOf('ignoredusers=') == 0) { ignored = ca[i].substring(13,ca[i].length).split('|'); }
	}


	//== en/disable blocking ==
	if(blocking == 1) {
		if(document.title.indexOf("'s Profile") == -1) {
			document.styleSheets[1].insertRule('.blocked { display:none }', document.styleSheets[1].cssRules.length);
		} else { 
			document.body.innerHTML += '<style>.blocked { display:none }</style>';
		}
	}


	GM_registerMenuCommand('Toggle blocking', toggleblocking);

	var togglelink = document.createElement('a');
	togglelink.href = 'javascript:void(0)';
	togglelink.id = 'toggleblockinglink';
	var currstatus = (blocking==1) ? 'ON' : 'OFF';
	togglelink.appendChild(document.createTextNode('Blocking is '+currstatus+' '));
	togglelink.onclick = toggleblocking;
	document.getElementById('headnav').insertBefore(togglelink, document.getElementById('headnav').firstChild);

	function toggleblocking() {
		blocking =       (blocking==1) ?  0      : 1;
		var newdisplay = (blocking==1) ? 'none' : 'block';
		var newstatus =  (blocking==1) ? 'ON'   : 'OFF';
		var expires = 	 (blocking==1) ? 'Thu, 9 Aug 2001 20:47:11 UTC' : 'Thu, 9 Aug 2012 20:47:11 UTC';
		document.body.innerHTML += '<style>.blocked { display:'+newdisplay+' }</style>';
		document.getElementById('toggleblockinglink').innerHTML = 'Blocking is '+newstatus+' ';
		document.getElementById('toggleblockinglink').onclick = toggleblocking;
		document.cookie = "ignoringoff=1; expires="+expires+"; path=/; domain=.yayhooray.com";
	}


	//== add unignore menu items ==
	for(var i=1; i<ignored.length; i++) {
		eval('GM_registerMenuCommand("Unignore "+ignored[i], function() { whotounignore = "'+ignored[i]+'"; for(var i=0; i<ca.length; i++) { while (ca[i].charAt(0)==" ") { ca[i] = ca[i].substring(1,ca[i].length); } if (ca[i].indexOf("ignoredusers=") == 0) { newignored = ca[i].substring(13,ca[i].length).replace("|"+whotounignore, ""); } } document.cookie = "ignoredusers="+newignored+"; expires=Thu, 9 Aug 2012 20:47:11 UTC; path=/; domain=.yayhooray.com"; document.location.reload(); });');
	}
	if(document.location.href.indexOf('/managebuddies') > -1) {
		var thepage = document.getElementById('managebuddiespage');
		thepage.insertBefore(document.createElement('hr'), thepage.firstChild);
		for(var i=1; i<ignored.length; i++) {
			unignorelink = document.createElement('a');
			unignorelink.href='#';
			unignorelink.whotounignore = ignored[i];
			unignorelink.onclick = function() {
				for(var j=0; j<ca.length; j++) {
					while (ca[j].charAt(0)==" ") { ca[j] = ca[j].substring(1,ca[j].length); }
					if (ca[j].indexOf("ignoredusers=") == 0) { newignored = ca[j].substring(13,ca[j].length).replace("|"+this.whotounignore, ""); }
				}
				document.cookie = "ignoredusers="+newignored+"; expires=Thu, 9 Aug 2012 20:47:11 UTC; path=/; domain=.yayhooray.com";
				this.parentNode.removeChild(this);
				return false;
			}
			unignorelink.style.marginLeft='1em';
			unignorelink.appendChild(document.createTextNode(ignored[i]));
			thepage.insertBefore(unignorelink, thepage.firstChild);
		}
		thepage.insertBefore(document.createTextNode('UNIGNORE: '), thepage.firstChild);
	}

	//find buddies
	var buddies = new Array();
	if(document.location.href.indexOf('/threads') > -1) {
		var selects = document.getElementsByTagName('select');
		for(var i=0;i<selects.length;i++) {
			if(selects[i].getAttribute('name') == 'tstartedby') {
				var buddyoptions = selects[i].childNodes;
				for(var j=1;j<buddyoptions.length;j++) {
					if(buddyoptions[j].nodeType==1) {
						buddies[buddies.length] = buddyoptions[j].value.toLowerCase().replace(/[ _]/g, '-');
					}
				}	
				break;
			}
		}
	}

	var selectedPMs = 0;
	var currentcat = '';

	if(document.location.href.indexOf('/thread/') > -1 && document.getElementById('threadcat')) {
		currentcat = document.getElementById('threadcat').firstChild.innerHTML.toLowerCase();
	}

	var divs = document.getElementsByTagName('div');
	for(var i=0;i<divs.length;i++) {

		//== ignore threads ==
		if(divs[i].className.indexOf('thread ') > -1) {			
			var children = divs[i].childNodes;
			for(var j=0;j<children.length;j++) {
				if(children[j].className=='threadtitlecat') {	//assign cat class
					divs[i].className += ' '+children[j].childNodes[1].firstChild.innerHTML.toLowerCase();
				}
				if(children[j].className=='threadstartedby') {
					var author = children[j].getElementsByTagName('a')[0].innerHTML.toLowerCase().replace(/[ _]/g, '-');
					divs[i].className += ' u_'+author;
					for(var l=1; l<ignored.length; l++) {
						if(author == ignored[l]) { divs[i].className += ' blocked'; break; } //divs[i].style.display='none'; 
					}
					for(var l=0; l<buddies.length; l++) {
						if(author == buddies[l]) { divs[i].className += ' buddy'; break; }
					}
					break;
				}
			}
		}

		//== restore titles ==
		if(divs[i].className == 'threadtitle') {			
			var threadtitle = divs[i].firstChild.firstChild.nodeValue;
			if(threadtitle.length == 47 && threadtitle.substr(44, 3) == '...') {
				var threadhref = divs[i].firstChild.href.split('/')[5];
				var numofspecialchars = 44 - threadtitle.substr(0, 44).replace(/[^ 'A-Za-z0-9-]/g, '').length;
				threadtitle = threadtitle.substr(0, 44) + threadhref.substring(44-numofspecialchars, threadhref.length).replace(/-/g, ' ');
				divs[i].firstChild.replaceChild(document.createTextNode(threadtitle), divs[i].firstChild.firstChild);
			}
		}
		//== de-menarded ==
		//if(divs[i].className == 'post') {	
		//	divs[i].innerHTML = divs[i].innerHTML.replace(/menarded/g, 'pwned');
		//}


		//== ignore posts ==
		if(divs[i].className.indexOf('postcontainer') > -1) {	
			if(divs[i].childNodes[2].nodeType==1) { //view post page
				var authorraw = divs[i].childNodes[2].className.split(' ');	
			} else { //preview page
				var authorraw = divs[i].childNodes[1].className.split(' ');	
			}
			var author = authorraw[authorraw.length-1].toLowerCase();
			divs[i].className += ' '+author;
			if(currentcat != '') {
				divs[i].className += ' '+currentcat;
				divs[i].nextSibling.nextSibling.className += ' '+currentcat;
			}
			for(var l=1; l<ignored.length; l++) {
				if(author.replace('u_', '') == ignored[l]) {
					// divs[i].nextSibling.nextSibling.style.display='none'; divs[i].style.display='none';
					divs[i].nextSibling.nextSibling.className += ' blocked';
					divs[i].className += ' blocked';
					break;
				}
			}
		}

		//== ignore blog comments ==
		if(divs[i].className == 'blogcommentuser') {
			var author = divs[i].firstChild.nextSibling.innerHTML.toLowerCase().replace(/[ _]/g, '-');
			divs[i].parentNode.className += ' u_'+author;
			for(var l=1; l<ignored.length; l++) {
				if(author == ignored[l]) {
					//divs[i].parentNode.style.display='none';
					divs[i].parentNode.className += ' blocked';
					break;	
				}
			}		
		}

		//== ignore PMs ==
		if(document.location.href.indexOf('/messages')==-1 && divs[i].id == 'messageslabel') {
			if(divs[i].innerHTML.indexOf('<a') > -1 && document.getElementsByTagName('iframe').length==0) {
				var newiframe = document.createElement('iframe');
				newiframe.src='http://www.yayhooray.com/messages?greasemonkey';	
				newiframe.id='greasemonkeyiframe';
				newiframe.width = '1'; newiframe.height = '1';
				document.body.appendChild(newiframe);
			}
		}
		if(divs[i].className == 'fromline') {
			var author = divs[i].firstChild.innerHTML.toLowerCase().replace(/[ _]/g, '-');
			divs[i].parentNode.className += ' u_'+author;
			for(var l=1; l<ignored.length; l++) {
				if(author == ignored[l]) {
					if(divs[i].parentNode.className.indexOf('unread') > -1) { //mark read
						divs[i].parentNode.childNodes[1].firstChild.click(); selectedPMs++;	
					}
					divs[i].parentNode.style.display='none';
				}
			}		
		}

		//== remove 'last posted by' ==
		if(divs[i].className.indexOf('threadlastname') > -1) {	
			var author = divs[i].firstChild.innerHTML.toLowerCase().replace(/[ _]/g, '-');
			for(var l=1; l<ignored.length; l++) {
				if(author == ignored[l]) { divs[i].firstChild.removeAttribute('href'); divs[i].firstChild.innerHTML = 'somebody'; }
			}			
		}

		//== add 'ignore user' link ==
		if(divs[i].className.indexOf('useroptionblock') > -1) {
			var authorraw = divs[i].childNodes[1].firstChild.href;
			var author = authorraw.substr(7, authorraw.indexOf('.yay') - 7);
			var ignorelink = document.createElement('a');
			ignorelink.whotoignore = author;
			ignorelink.appendChild(document.createTextNode('Block all posts'));
			ignorelink.href= 'javascript:void(0);';
			ignorelink.onclick = function() {
				var oldignoredusers = '';
				var ca = document.cookie.split(';');
				for(var i=0; i<ca.length; i++) {
					while (ca[i].charAt(0)==' ') { ca[i] = ca[i].substring(1,ca[i].length); }
					if (ca[i].indexOf('ignoredusers=') == 0) { oldignoredusers = ca[i].substring(13,ca[i].length); }
				}
				if(oldignoredusers.indexOf('|'+this.whotoignore) == -1) {	//not already ignored
					newignoredusers = oldignoredusers+'|'+this.whotoignore;
					document.cookie = 'ignoredusers='+newignoredusers+'; expires=Thu, 9 Aug 2001 20:47:11 UTC; path=/; domain=www.yayhooray.com';
					document.cookie = 'ignoredusers='+newignoredusers+'; expires=Thu, 9 Aug 2012 20:47:11 UTC; path=/; domain=.yayhooray.com';
					var newrule = '.u_'+this.whotoignore+', .u_'+this.whotoignore+' + .postseperator { display:none !important }';
					document.styleSheets[1].insertRule(newrule,0);
				}
				eval('GM_registerMenuCommand("Unignore "+this.whotoignore, function() { whotounignore = "'+this.whotoignore+'"; for(var i=0; i<ca.length; i++) { while (ca[i].charAt(0)==" ") { ca[i] = ca[i].substring(1,ca[i].length); } if (ca[i].indexOf("ignoredusers=") == 0) { newignored = ca[i].substring(13,ca[i].length).replace("|"+whotounignore, ""); } } document.cookie = "ignoredusers="+newignored+"; expires=Thu, 9 Aug 2012 20:47:11 UTC; path=/; domain=.yayhooray.com"; document.location.reload(); });');
			}
			divs[i].insertBefore(ignorelink, divs[i].childNodes[5]);
		}

		if(divs[i].className == 'pinkiebuttons') {

			//== insert pinkies at cursor pos, not end ==
			pinkies = divs[i].getElementsByTagName('a');
			for(var j=0; j<pinkies.length; j++) {
				pinkies[j].onclick = function() {
					var ascii = this.href.substr(22, this.href.length-24);
					var caretback = 0;
					if(ascii.indexOf('=""') > -1) { caretback = ascii.length - ascii.indexOf('=""') - 2; }
					var myField = this.parentNode.nextSibling;
					var k = 0; while(myField.nodeName != 'TEXTAREA' && k < 10) { myField = myField.nextSibling; k++; }
					var selstart = myField.selectionStart; var selend = myField.selectionEnd;
					if(ascii.indexOf('<a') == 0) { 
						if(myField.value.substr(selend-1, 1) == ' ') { var linktext = myField.value.substring(selstart, selend-1); var addspace=' '; } else { var linktext = myField.value.substring(selstart, selend); var addspace='';}
						myField.value = myField.value.substring(0, selstart) + ascii.replace('</a>', '') + linktext + '</a>' + addspace + myField.value.substring(selend, myField.value.length);
					} else {
						myField.value = myField.value.substring(0, selstart) + ascii + myField.value.substring(selend, myField.value.length);
					}
					myField.focus(); myField.setSelectionRange(selstart+ascii.length-caretback, selstart+ascii.length-caretback);
					return false;
				}
			}

			//== quote feature ==
			var quotelink = document.createElement('a');
			quotelink.href='javascript:void(0)';
			quotelink.appendChild(document.createTextNode('quote'));
			quotelink.onclick = function() {
				var myField = this.parentNode.nextSibling;
				var k = 0; while(myField.nodeName != 'TEXTAREA' && k < 10) { myField = myField.nextSibling; k++; }

				var selstart = myField.selectionStart; var selend = myField.selectionEnd;

				if (window.getSelection() != '') {

					var sel = window.getSelection();
					var parnode = sel.getRangeAt(0).commonAncestorContainer.parentNode; var x = 0;
					while((parnode.nodeType != 1 || !parnode.className || parnode.className.indexOf('postcontainer') == -1) && x < 10) {
						if(parnode.parentNode) { parnode = parnode.parentNode; } else { x = 10; } x++;
					}
					if(x < 10) {	// quoting a post (found author)
						var anchor = parnode.firstChild.getAttribute('name');
						if(anchor == 'end') { anchor = parnode.childNodes[2].id; }
						var author = parnode.childNodes[2].childNodes[1].firstChild.innerHTML;		
						var toinsert = '<blockquote style="font-style:italic">'+author+': '+sel+'</blockquote>\n';
					} else {		// quoting random text from the page
						var toinsert = '<blockquote style="font-style:italic">'+sel+'</blockquote>\n';
					}

				} else if(selend > 0) { // wrapping textarea sel in quotes

					if(myField.value.substr(selend-1, 1) == ' ') { var selwithinarea = myField.value.substring(selstart, selend-1); var addspace=' '; } else { var selwithinarea = myField.value.substring(selstart, selend); var addspace='';}
					var toinsert = '<blockquote style="font-style:italic">' + selwithinarea + '</blockquote>' + addspace;

				} else { // nothing selected
					var toinsert = '<blockquote style="font-style:italic"></blockquote>';
				}			

				myField.value = myField.value.substring(0, selstart) + toinsert + myField.value.substring(selend, myField.value.length);
				myField.focus(); myField.setSelectionRange(selstart+toinsert.length, selstart+toinsert.length);

			}
			divs[i].appendChild(quotelink);
		}

		//== fix "view threads started by" ==
		if(divs[i].className == 'viewthreads') {
			var authorraw = divs[i].firstChild.innerHTML;
			var author = authorraw.substring(authorraw.indexOf('by ')+3, authorraw.length);
			if(author.toLowerCase() != author) {
				divs[i].firstChild.href = '/search?onlyuser='+author+'&exec=1&q=&qt=any&bn=5&intitle=1&startmonth=0&startday=0&startyear=0&endmonth=0&endday=0&endyear=0&cat1=1&1subcat1=183&1subcat2=5&1subcat3=6&1subcat4=7&1subcat5=8&1subcat6=9&1subcat7=10&1subcat8=11&1subcat9=12&1subcat10=2392&1subcat11=2393&totalsubcat1=11&cat2=2&2subcat1=13&2subcat2=14&2subcat3=15&2subcat4=16&2subcat5=17&totalsubcat2=5&cat3=3&3subcat1=18&3subcat2=19&3subcat3=20&3subcat4=21&totalsubcat3=4&cat4=4&4subcat1=22&4subcat2=23&4subcat3=24&4subcat4=25&4subcat5=26&totalsubcat4=5&totalcat=4';
			}
		}

	}

	if(selectedPMs > 0) { //mark ignored new PMs as read
		if(window.parent) { window.parent.greasemonkeyIgnoredNewPM(selectedPMs); }
		withSelected('mark_read');
	} 

	//== kill <embed> autostarts ==
	embedstokill = new Array();
	var embeds = document.getElementsByTagName('embed');
	for(var i=0;i<embeds.length;i++) {
		if((embeds[i].getAttribute('autostart') && embeds[i].getAttribute('autostart').toLowerCase() == 'true' || embeds[i].getAttribute('autostart') == '1') || (embeds[i].getAttribute('autoplay') && embeds[i].getAttribute('autoplay').toLowerCase() == 'true' || embeds[i].getAttribute('autoplay') == '1')) {
			var embedlink = document.createElement('a');
			embedlink.href = embeds[i].getAttribute('src');
			embedlink.appendChild(document.createTextNode('Removed autostarting media file'));
			embeds[i].parentNode.insertBefore(embedlink, embeds[i]);
			embedstokill[embedstokill.length] = embeds[i];
		}
	}
	for(var i=0;i<embedstokill.length;i++) {
		embedstokill[i].parentNode.removeChild(embedstokill[i]);
	}


	//== add mp3 download link ==
	var params = document.getElementsByTagName('param');
	for(var i=0;i<params.length;i++) {
		if(params[i].getAttribute('value').indexOf('/swf/mp3') == 0) {
			var mp3link = document.createElement('a');	
			var mp3linkraw = params[i].getAttribute('value');
			mp3link.href = mp3linkraw.substr(21, mp3linkraw.indexOf('&') - 21);
			var mp3image = document.createElement('img');
			mp3image.src = 'http://c3o.org/misc/yay/extensions/mp3download.gif';
			mp3link.appendChild(mp3image);	//document.createTextNode('link')
			var objtag = params[i].parentNode;
			if(objtag.nextSibling.nodeType == 1) {
				objtag.parentNode.insertBefore(mp3link, objtag.nextSibling);		
			} else {
				objtag.parentNode.appendChild(mp3link);
			}
		}
	}
	

	//== theme dropdown ==
	themes = new Array(
		new Array('Graphite (spiral)', 'http://pixilate.com/yh/graphite.css'), 
		new Array('Charamel (spiral)', 'http://pixilate.com/yh/charamel.css'), 
		new Array('Pixel (spiral)', 'http://pixilate.com/yh/pixel.css'), 
		new Array('Bellagio (Ken)', 'http://yay.kenwallacedesign.com/jba_yh.global.Ken_01.css'), 
		new Array('Dreamhooray (Down10)', 'http://www.down10.com/temp/yh/css/jba/dreamhooray.css'), 
		new Array('Gleaming Sterility (Down10)', 'http://www.down10.com/temp/yh/css/jba/gleaming.css'), 
		new Array('Pink+Beige (ruddyseal)', 'http://sam.ruddyseal.com/yayhooray/ruddyseal.css'), 
		new Array('Tabs Liquid (c3o)', 'http://c3o.org/misc/yay/styles/tabs-liquid.css'),
		new Array('Colors Liquid (c3o)', 'http://c3o.org/misc/yay/styles/colors-liquid.css')
	);

	if(document.location.href.indexOf('/themes') > -1) {
		var area = document.getElementsByTagName('textarea')[0];
		var themedropdown = document.createElement('select');
		themedropdown.appendChild(document.createElement('option'));
		for(var i=0;i<themes.length;i++) {
			var thisoption = document.createElement('option');
			thisoption.value = themes[i][1];
			thisoption.appendChild(document.createTextNode(themes[i][0]));
			themedropdown.appendChild(thisoption);
		}
		themedropdown.onchange = function() {
			if(area.value.indexOf('@import') > -1) {
				area.value = area.value.replace(/@import.*;/, '');
			}
			if(this.options[this.selectedIndex].value != '') {
				area.value = '@import "'+this.options[this.selectedIndex].value+'";\n' + area.value;
				document.getElementsByTagName('input')[0].click();
			}
		}
		var prefleft = document.getElementById('prefleft');
		prefleft.insertBefore(themedropdown, prefleft.firstChild)
		prefleft.childNodes[2].appendChild(document.createElement('br'));
		prefleft.childNodes[2].appendChild(document.createTextNode('To completely remove somebody\'s posts and threads they start, use: .u_their-name { display:none }'));
	}


	//if(window.location.hash.substring(1) == 'end' && document.getElementById('newposttext')) {
	//	document.getElementById('newposttext').focus();
	//}

	

	//== replace yaylite thread links with yh links ==
	if(document.location.href.indexOf('thread/') > -1) {
		var s = 'yhlite.com/thread.php?id=';	
		var r = 'yayhooray.com/thread/';
		for(var i=0;i<document.links.length;i++) {
			document.links[i].href = document.links[i].href.replace(s, r);	
		}
	}


	//document.title += ' - x';

})();


function greasemonkeyIgnoredNewPM(num) {
	if(document.getElementById('messagesnum')) {
		var currnumber = parseInt(document.getElementById('messagesnum').innerHTML);
		if(currnumber-num == 0) {
			document.getElementById('messageslabel').innerHTML = 'NO NEW MESSAGES';
		} else {
			document.getElementById('messagesnum').innerHTML = currnumber-num;
		}
	}
}