WMD ForumTool

By TorfDrottel Last update Sep 14, 2011 — Installed 1,299 times.

There are 15 previous versions of this script.

// ==UserScript==
// @name WMD ForumTool
// @version	1.2
// @namespace	wmdFT
// @description	WMD Forums Tool
// @include	http://bund-der-antike.board-log.com*
// @include	http://wmd-epsilon.forumieren.de*
// @include	http://s5.de.ikariam.com*
// @include http://ikariam.gamestats.org*
// @include http://www.ika-world.de/search.php?view=player_details*
// @exclude	http://wmd-epsilon.forumieren.de/*stadteliste*
// @history	1.2 exclude fixed
// @history	1.1 show bDays in WMD Calendar
// @history	1.0 extended for ika.world
// @history	0.9 no need to run with coordinates in your cities dropdown
// @history	0.8 extended, again
// @history	0.7 extended
// @history	0.6 fix for new ikariam url
// @history	0.4 fix for x?x:y?y
// @history	0.3 fix for xx:yy - damm it
// @history	0.2 fix for x:y foo zK bar
// @history	0.1 initial release
// ==/UserScript==


//-----------------------------------------------------------------------------

var cities;
var limit=90; // bold if closer


//-----------------------------------------------------------------------------
function xyTTdistance(xText, yText, regexCity) {
	var x = parseInt(xText)-parseInt(regexCity[1]);
	var y = parseInt(yText)-parseInt(regexCity[2]);
	var d = Math.sqrt(x*x+y*y);
	if (d==0) { d=15 } else { d=Math.round(d*20) };
	var result = "";
	if (d<limit) { result += '<b>'};
	if (d>=60) { result += parseInt(d/60)+'h '};
	var m=d%60;
	if (m<10) {result+="0" };
	result += m+'m';
	if (d<limit) { result += '</b>'};
	return result;
}

//-----------------------------------------------------------------------------
function xyTTnodeFor(regexText,node) {
	var newNode;
	newNode = document.createElement("a");
	var text = '<b>'+regexText[2]+':'+regexText[3]+'</b>';
	text += "<span><table>";
	for (var i=0; i<cities.length; i++) {
		distance = xyTTdistance(regexText[2], regexText[3], /(\d\d?)\:(\d\d?)/.exec(cities[i]));
		text += '<tr><td align="right">' + distance + '</td><td align="left">' + cities[i] + '</td></tr>';
	};
	text += "</table></span>"
	newNode.innerHTML = text
	newNode.className='Coordinates';
	node.parentNode.insertBefore(newNode,node);
}

//-----------------------------------------------------------------------------
function xyTTexpandWith(node, regex) {
	var textNode = document.createTextNode(regex[1]);
	node.parentNode.insertBefore(textNode,node);
	xyTTnodeFor(regex,node);
	node.nodeValue=regex[4];
}

//-----------------------------------------------------------------------------
function xyTTscan(node) {
	if (node.firstChild && node.className!='Coordinates' ) { xyTTscan(node.firstChild) };
	if (node.nextSibling) { xyTTscan(node.nextSibling) };
	if (node.nodeType == 3) 
	{	var regex =/(.*\[)(\d?\d)\:(\d\d?)(\].*)/.exec(node.nodeValue);
		if (regex) { 
			xyTTexpandWith(node, regex);
			xyTTscan(node);
		}
	};
}

function xyTTstoredCities() {
	if (!cities) {
		var count = parseInt(GM_getValue("count", "0"));
		cities = new Array();
		for (var i=0; i<count; i++) { cities[i]=GM_getValue("city_"+i, "") }
	};
	return cities
}

function xyTTExtendTable(regex, table) {
	var tr = table.getElementsByTagName('tr');
	var node;
	for (var i=0; i<cities.length; i++) {
		distance = xyTTdistance(regex[2], regex[3], /(\d\d?)\:(\d\d?)/.exec(cities[i]));
		if (i<tr.length) { node = tr[i] } 
		else { 
			node = document.createElement('tr');
			table.appendChild(node);
		};
		node.innerHTML = '<td align="right">' + distance + '</td><td>' + cities[i] + '</td>';
	}
}
//-----------------------------------------------------------------------------

function xyTTExtendMap() {
	var infos = document.getElementById("information");
	var tbody = infos.getElementsByTagName('tbody')[1];
	if (!tbody) {
		tbody = document.createElement('tbody');
		var table = document.createElement('table');
		table.className = 'distanceTable';
		table.appendChild(tbody);
		var div = document.createElement('div');
		div.className = 'content';
		div.appendChild(table);
		infos.insertBefore(div , infos.lastElementChild);
	};
	var crumps = document.getElementById("islandBread");
	var regex =/(.*\[)(\d?\d)\:(\d\d?)(\].*)/.exec(crumps.textContent);
	xyTTExtendTable(regex, tbody);
}
//-----------------------------------------------------------------------------
function xyTTexpandIsland() {
	var mainview = document.getElementById("mainview");
	var div = document.createElement('div');
	var header = document.createElement('h3');
	var content = document.createElement('div');
	var table = document.createElement('table');
	var tbody = document.createElement('tbody');
	div.className = 'dynamic';
	header.className = 'header';
	header.innerHTML = 'Entfernungen';
	content.className = 'content';
	table.className = 'distanceTable';
	div.appendChild(header);
	table.appendChild(tbody);
	content.appendChild(table);
	div.appendChild(content);
	mainview.parentNode.insertBefore(div,mainview);
	var crumps = document.getElementById("breadcrumbs");
	var regex =/(.*\[)(\d?\d)\:(\d\d?)(\].*)/.exec(crumps.textContent);
	xyTTExtendTable(regex, tbody);
}

function xyTTscanCities() {
// scan your ikariam locations and store them
	GM_addStyle( ".distanceTable tr td { margin: 2px 2px; padding: 2px 2px; } !important" );
	if (msi=document.getElementById("island")) { return xyTTexpandIsland() }
	var msi=document.getElementById("mapShortcutInput");
	if (!msi) { return };
	var shortcuts=msi.getElementsByTagName('option');
	var count=shortcuts.length;
	if (count==0) { return; };
	if (count!=cities.length) { cities = new Array(); GM_setValue("count", count) };
	for (var i=0; i<shortcuts.length; i++) {
		var string = shortcuts[i].textContent;
		if (cities[i]!=string) { cities[i]=string; GM_setValue("city_"+i, string) };
	};
	var bread = document.evaluate("//div[@id='islandBread']", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
	bread.snapshotItem(0).addEventListener('DOMSubtreeModified', xyTTExtendMap, true);
	xyTTExtendMap();
}
//-----------------------------------------------------------------------------

function xyTTExtendForum(headlineTag, divName) {
	if (cities.length==0) { return };
	GM_addStyle( 
		"div.post-entry{ overflow:visible; }"+
		"#content-container div#main{ overflow:visible; }"+
		"a.Coordinates{ position:relative; z-index:24; }"+
		"a.Coordinates:hover { z-index:25; }"+
		"a.Coordinates span{ display: none;  }"+
		"a.Coordinates:hover span{ font-weight:100;display:block; position:absolute; top: 1.5em; left: 3em; width:18em; z-index:30;}"+
		"a.Coordinates span table {line-height:1;border-spacing:4px; border:2px solid;background-color:#EFF3F7;}"+
		"a.Coordinates span table tr td {padding:0px;font-size:11px;}");
	var heads = document.getElementsByTagName(headlineTag);
	for (var i=0; i < heads.length; i++)
	{ xyTTscan(heads[i].firstChild) };
	var div = document.getElementsByTagName("div");
	for (var i=0; i < div.length; i++)
		{ if (div[i].className==divName) { xyTTscan(div[i].firstChild) }};	
	var a = document.getElementsByTagName("a");
	for (var i=0; i < a.length; i++)
	{ if (a[i].className=='topictitle') { xyTTscan(a[i].firstChild) }};
	
}

//-----------------------------------------------------------------------------
function xyTTExtendStats() {
	if (cities.length==0) { return };
	GM_addStyle( 
		"div.post-entry{ overflow:visible; }"+
		"#content-container div#main{ overflow:visible; }"+
		"a.Coordinates{ position:relative; z-index:24; }"+
		"a.Coordinates:hover { z-index:25; }"+
		"a.Coordinates span{ display: none;  }"+
		"a.Coordinates:hover span{ font-weight:100;display:block; position:absolute; top: 1.5em; left: 3em; width:18em; z-index:30;}"+
		"a.Coordinates span table {line-height:1;border-spacing:4px; border:2px solid;background-color:#F7E5AF;}"+
		"a.Coordinates span table tr td {padding:2px;font-size:12px;}");
	var tr = document.getElementsByTagName("tr");
	for (var i=0; i < tr.length; i++)
	{ var td=tr[i].getElementsByTagName("td");
		if (td.length>1)
		{	if(td[0].className.match(/k row/))
				{ xyTTscan(td[0]) }};
		}
	
}

//-----------------------------------------------------------------------------
function xyTTExtendIkaWorld() {
	if (cities.length==0) { return };
	GM_addStyle( 
		"div.post-entry{ overflow:visible; }"+
		"#content-container div#main{ overflow:visible; }"+
		"a.Coordinates{ position:relative; z-index:24; }"+
		"a.Coordinates:hover { z-index:25; }"+
		"a.Coordinates span{ display: none;  }"+
		"a.Coordinates:hover span{ font-weight:100;display:block; position:absolute; top: -10em; left: 3em; width:18em; z-index:30;}"+
		"a.Coordinates span table {line-height:1;border-spacing:4px; border:2px solid;background-color:#F7E5AF;}"+
		"a.Coordinates span table tr td {padding:2px;font-size:11px;}");
	var tr = document.getElementsByTagName("tbody")[2].getElementsByTagName("tr");
	for (var i=tr.length-2; i > 0; i--)
	{ 	var td = tr[i].getElementsByTagName("td");
		var text = "<span><table>";
		for (var j=0; j<cities.length; j++) {
			var distance = xyTTdistance(td[2].innerHTML, td[3].innerHTML, /(\d\d?)\:(\d\d?)/.exec(cities[j]));
			text += '<tr><td align="right">' + distance + '</td><td align="left">' + cities[j] + '</td></tr>';
		};
		text += "</table></span>"
		var newNode = td[0].getElementsByTagName("a")[0];
		newNode.innerHTML += text
		newNode.className='Coordinates';
	};
	
}

function extendCalendar() {
	var event = document.getElementById("calendar").getElementsByTagName("a");
	var image = 'data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAdHx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RD84QzQ5Ojf/2wBDAQoKCg0MDRoPDxo3JR8lNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzf/wAARCAAQABADASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAMGB//EACQQAAEEAQMDBQAAAAAAAAAAAAECAwQRBhIhMQAHIgUTI0JS/8QAFQEBAQAAAAAAAAAAAAAAAAAABAX/xAAgEQEAAAQHAQAAAAAAAAAAAAABAAMT8AIEERIhQaHR/9oADAMBAAIRAxEAPwCwyLunj0ZbsGA/Ilv1QdjJHt6tVadZI5/SQaBsWdul4x3LxtbqYD634Tq1cvIAZQslI0JIJoWbsgDZRNXXWUeo4wqC442/PisTGmgXI0l0IdS99k8gUbJSrg+PIOroh4wZs5caNNiS33Gvgbiuha3XSD40SaAO5UeAL23IC4FnE1OQ0sti7QylHb738j//2Q==';
	var lastCheck = GM_getValue("lastBDayCheck");
	var date = new Date().getDate();
	var day = 0;
	if (lastCheck != date) {
		var lastCheck = GM_setValue("lastBDayCheck", date);
		day = new Date().getDate();
	}
	for (var i=0; i<event.length; i++) {
		if ((/Geburtstag/).exec(event[i].title)) {
			if (event[i].textContent==day) {
				alert('Jemand hat Geburtstag');
			}
			event[i].innerHTML='<img src="'+image+'">';
		}
	}
}

function xyTTmain() {
	var server = document.domain;
	xyTTstoredCities();
	switch (document.domain) {

		case "s5.de.ikariam.com":
			xyTTscanCities();
			break;

		case "bund-der-antike.board-log.com":
			xyTTExtendForum('h1', 'postbody');
			break;

			case "wmd-epsilon.forumieren.de":
			xyTTExtendForum('h3', 'post-entry');
			extendCalendar();
			break;

		case "www.ika-world.de":
			xyTTExtendIkaWorld();
			break;
			
		case "ikariam.gamestats.org":
			xyTTExtendStats();
			break;
	};
}
//-----------------------------------------------------------------------------
xyTTmain();