There are 10 previous versions of this script.
// ==UserScript==
// @name TribalWars Dorpen sorteren
// @namespace Het sorteer je dorpen voor en beter overzicht.
// @include http://*.tribalwars.nl/*screen=overview_villages*
// ==/UserScript==
// Version 2.5
// Screen: http://img167.imageshack.us/my.php?image=unbenanntqe0.jpg
var dom = new html();
var bottom_up = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAJAQMAAADeqkRuAAAA' +
'BlBMVEX///8AAABVwtN+AAAAAXRSTlMAQObYZgAAACdJREFU' +
'eF4FwDERACAMA8D3kQUfmMFHF3xgpj5qhhM2xfCWHGm54gM4' +
'JQR093/S3gAAAABJRU5ErkJggg==';
var alphabet = '!?.,-;:&/\{}[]()=+~*_<>|#0123456789aäbcdefghijklmnoöpqrsßtuüvwxyz';
var sortStatus = new Array();
// Table position:
// 0 = normal
// 1 = village pages
if(!dom.class('main')[0].getElementsByTagName('table')[1])
{
var table = dom.class('main')[0].getElementsByTagName('table')[0];
}
else
{
if( dom.class('main')[0].getElementsByTagName('table')[1].getElementsByTagName('input')[1] )
{
if(dom.class('main')[0].getElementsByTagName('table')[1].getElementsByTagName('input')[1].type == 'submit')
{
var table = dom.class('main')[0].getElementsByTagName('table')[0];
}
else
{
var table = dom.class('main')[0].getElementsByTagName('table')[1];
}
}
else
{
var table = dom.class('main')[0].getElementsByTagName('table')[0];
}
}
var elist = table.getElementsByTagName('tr');
// Column 0
sortStatus[0] = new Array('asc','asc');
var img = new Image();
img.src = bottom_up;
img.alt = 'Sorteren';
img.title = 'Sorteren';
dom.addEvent(img,'click',function() {
var div = dom.n('div');
div.setAttribute('style','position:absolute; background:#DED3B9; ');
div.appendChild(dom.text('Sorteren op:'));
div.appendChild(dom.n('br'));
var a = dom.n('a');
a.href = '#';
dom.addEvent(a,'click',function() { this.parentNode.parentNode.removeChild(this.parentNode); sortStatus[0][0] = sortE(elist,0,sortStatus[0][0]); } );
a.appendChild(dom.text('Werelddeel'));
div.appendChild(a);
div.appendChild(dom.n('br'));
var a = dom.n('a');
a.href = '#';
dom.addEvent(a,'click',function() { this.parentNode.parentNode.removeChild(this.parentNode); sortStatus[0][1] = sortE(elist,0,sortStatus[0][1],'ccords'); } );
a.appendChild(dom.text('Coordinaten'));
div.appendChild(a);
div.appendChild(dom.n('br'));
var a = dom.n('a');
a.href = '#';
dom.addEvent(a,'click',function() { this.parentNode.parentNode.removeChild(this.parentNode); sortStatus[0][2] = sortE(elist,0,sortStatus[0][2],'alpha'); } );
a.appendChild(dom.text( 'Alphabetisch'));
div.appendChild(a);
div.appendChild(dom.n('br'));
elist[0].getElementsByTagName('th')[0].appendChild(div);
} );
elist[0].getElementsByTagName('th')[0].appendChild(dom.text(' '));
elist[0].getElementsByTagName('th')[0].appendChild(img);
// Column 2
sortStatus[2] = new Array('asc','asc','asc','asc');
var img = new Image();
img.src = bottom_up;
img.alt = 'Sorteren';
img.title = 'Sorteren';
dom.addEvent(img,'click',function() {
var div = dom.n('div');
div.setAttribute('style','position:absolute; background:#DED3B9; ');
div.appendChild(dom.text('Sorteren op:'));
div.appendChild(dom.n('br'));
var a = dom.n('a');
a.href = '#';
dom.addEvent(a,'click',function() { this.parentNode.parentNode.removeChild(this.parentNode); sortStatus[2][0] = sortE(elist,2,sortStatus[2][0],'wood'); } );
a.appendChild(dom.text('Hout'));
div.appendChild(a);
div.appendChild(dom.n('br'));
var a = dom.n('a');
a.href = '#';
dom.addEvent(a,'click',function() { this.parentNode.parentNode.removeChild(this.parentNode); sortStatus[2][1] = sortE(elist,2,sortStatus[2][1],'clay'); } );
a.appendChild(dom.text('Leem'));
div.appendChild(a);
div.appendChild(dom.n('br'));
var a = dom.n('a');
a.href = '#';
dom.addEvent(a,'click',function() { this.parentNode.parentNode.removeChild(this.parentNode); sortStatus[2][2] = sortE(elist,2,sortStatus[2][2],'iron'); } );
a.appendChild(dom.text('Ijzer'));
div.appendChild(a);
div.appendChild(dom.n('br'));
var a = dom.n('a');
a.href = '#';
dom.addEvent(a,'click',function() { this.parentNode.parentNode.removeChild(this.parentNode); sortStatus[2][3] = sortE(elist,2,sortStatus[2][3],'total'); } );
a.appendChild(dom.text('Totaal'));
div.appendChild(a);
elist[0].getElementsByTagName('th')[2].appendChild(div);
} );
elist[0].getElementsByTagName('th')[2].appendChild(dom.text(' '));
elist[0].getElementsByTagName('th')[2].appendChild(img);
function sortE(elist,tdN,direction,special)
{
this.special = special?special:false;
this.o = direction=='desc'?1:-1;
this.n = tdN;
this.f = function(a,b)
{
if(this.n == 0 && this.special == 'ccords')
{
var a = dom.trim(dom.trim(grabText(a.getElementsByTagName('td')[0],4)).split('(').pop().split(')').shift()).split('|');
a[0] = parseInt(a[0]);
a[1] = parseInt(a[1]);
var b = dom.trim(dom.trim(grabText(b.getElementsByTagName('td')[0],4)).split('(').pop().split(')').shift()).split('|');
b[0] = parseInt(b[0]);
b[1] = parseInt(b[1]);
}
else if(this.n == 0 && this.special == 'alpha')
{
var at = dom.trim(grabText(a.getElementsByTagName('td')[0],4));
a = valuePosition(alphabet,at[0]);
var bt = dom.trim(grabText(b.getElementsByTagName('td')[0],4));
b = valuePosition(alphabet,bt[0]);
var i = 1;
while(a == b && at[i] && bt[i])
{
a = valuePosition(alphabet,at[i]);
b = valuePosition(alphabet,bt[i]);
i++;
}
}
else if(this.n == 0 && typeof(this.special) == typeof('string') && this.special.substr(0,7) == 'search:')
{
var a1 = dom.trim(grabText(a,5));
var b1 = dom.trim(grabText(b,5));
}
else if(this.n == 0 && !this.special)
{
var a = parseInt(dom.trim(dom.trim(grabText(a.getElementsByTagName('td')[0],4)).split('K').pop()));
var b = parseInt(dom.trim(dom.trim(grabText(b.getElementsByTagName('td')[0],4)).split('K').pop()));
}
else if(this.n == 1)
{
var a = parseInt(grabText(a.getElementsByTagName('td')[1],1));
var b = parseInt(grabText(b.getElementsByTagName('td')[1],1));
}
else if(this.n == 2 && this.special == 'wood')
{
var a = parseInt(dom.trim(grabText(a.getElementsByTagName('td')[2],2)).replace(/\./g,'').split(' ')[0]);
var b = parseInt(dom.trim(grabText(b.getElementsByTagName('td')[2],2)).replace(/\./g,'').split(' ')[0]);
}
else if(this.n == 2 && this.special == 'clay')
{
var a = parseInt(dom.trim(grabText(a.getElementsByTagName('td')[2],2)).replace(/\./g,'').split(' ')[1]);
var b = parseInt(dom.trim(grabText(b.getElementsByTagName('td')[2],2)).replace(/\./g,'').split(' ')[1]);
}
else if(this.n == 2 && this.special == 'iron')
{
var a = parseInt(dom.trim(grabText(a.getElementsByTagName('td')[2],2)).replace(/\./g,'').split(' ')[2]);
var b = parseInt(dom.trim(grabText(b.getElementsByTagName('td')[2],2)).replace(/\./g,'').split(' ')[2]);
}
else if(this.n == 2 && this.special == 'total')
{
var a = dom.trim(grabText(a.getElementsByTagName('td')[2],2)).replace(/\./g,'').split(' ');
a = parseInt(a[0]) + parseInt(a[1]) + parseInt(a[2]);
var b = dom.trim(grabText(b.getElementsByTagName('td')[2],2)).replace(/\./g,'').split(' ');
b = parseInt(b[0]) + parseInt(b[1]) + parseInt(b[2]);
}
else if(this.n == 3)
{
var a = parseInt(a.getElementsByTagName('td')[3].firstChild.data);
var b = parseInt(b.getElementsByTagName('td')[3].firstChild.data);
}
else if(this.n == 4)
{
var a = parseInt(a.getElementsByTagName('td')[4].firstChild.data.split('/')[0]);
var b = parseInt(b.getElementsByTagName('td')[4].firstChild.data.split('/')[0]);
}
else if(this.n == 4.5)
{
var a = parseInt(a.getElementsByTagName('td')[4].firstChild.data.split('/')[1]);
var b = parseInt(b.getElementsByTagName('td')[4].firstChild.data.split('/')[1]);
}
if(this.special == 'ccords')
{
if(a[0] > b[0])
return this.o * -1;
else if(a[0] < b[0])
return this.o * 1;
else
{
if(a[1] > b[1])
return this.o * -1;
else if(a[1] < b[1])
return this.o * 1;
else
return 0;
}
}
else if(typeof(this.special) == typeof('string') && this.special.substr(0,7) == 'search:')
{
var key = this.special.substr(7).toLowerCase();
if(a1.toLowerCase().indexOf(key) != -1)
return -1;
if(b1.toLowerCase().indexOf(key) != -1)
return 1;
else
return 1;
}
else
{
if(a > b)
return this.o * -1;
else if(a < b)
return this.o * 1;
else
return 0;
}
};
// Create Array
var elements = new Array();
for(var i = 1; i < elist.length; i++)
{
elements.push(elist[i]);
elist[i].parentNode.removeChild(elist[i]);
i--;
}
// Sort the Array
elements.sort(this.f);
for(var i = 0; i < elements.length; i++)
{
elist[0].parentNode.appendChild(elements[i]);
}
return direction=='desc'?'asc':'desc';
}
function valuePosition(arr,value)
{
for(var i = 0, len = arr.length; i < len; i++)
{
if(arr[i] == value)
return i;
}
}
function grabText ( node , maxDepth )
{
if ( 3 == node . nodeType )
{
return node . nodeValue ;
}
else if( ( 1 == node . nodeType ) && ( 0 < maxDepth ))
{
var result = '' ;
for(var i = 0 ;i < node . childNodes . length ;i ++)
{
result += grabText(node . childNodes [ i ] , maxDepth - 1) ;
}
return result ;
}
return '' ;
}
function html()
{
this.n = function(type) // Returns a new element of the type [type]
{
return document.createElement(type);
}
this.text = function(c) // Returns a new textnode with the content [c]
{
return document.createTextNode(c);
}
this.img = function(c) // Returns a new textnode with the content [c]
{
if(c)
{
var img = new Image();
img.src = c;
return img;
}
return new Image();
}
// Search functions
this.id = function(type) // Returns the element with the id [type]
{
return document.getElementById(type);
}
this.tag = function(type) // Returns the list ob elements with the tag given in [type]
{
return document.getElementsByTagName(type);
}
this.name = function(type) // Returns the list ob elements with the tag name given in [type]
{
return document.getElementsByName(type);
}
this.class = function(type) // Returns the list ob elements with the class given in [type]
{
return document.getElementsByClassName(type);
}
this.findByAttr = function(obj,attr,value) // Returns a list ob elements that have an attribute [attr] with the value [value]
{
var len = obj.getElementsByTagName('*').length;
var list = new Object();
var a = 0;
for(var i = 0; i < len; i++)
{
if(obj.getElementsByTagName('*')[i][attr] == value)
{
list[a] = obj.getElementsByTagName('*')[i];
a++;
}
}
list['length'] = a;
return list;
}
this.findByInner = function(obj,value) // Returns a list ob elements that contain the value [value]
{
var len = obj.getElementsByTagName('*').length;
var list = new Object();
var a = 0;
for(var i = 0; i < len; i++)
{
if(obj.getElementsByTagName('*')[i].firstChild)
{
if(obj.getElementsByTagName('*')[i].firstChild.data)
{
if(obj.getElementsByTagName('*')[i].firstChild.data.indexOf(value) != -1)
{
list[a] = obj.getElementsByTagName('*')[i];
a++;
}
}
}
}
list['length'] = a;
return list;
}
this.appendChilds = function(obj)
{
for(var i = 1; i < arguments.length; i++)
arguments[0].appendChild(arguments[i]);
}
this.removeChilds = function(obj)
{
while(obj.firstChild)
{
obj.removeChild(obj.firstChild);
}
}
this.dumpObj = function(e,html,count)
{
if(!count)
count = 0;
var spaces = ' ';
for(var i = 0; i < count; i++)
spaces += ' ';
if(html)
n = '<br />\n';
else
n = '\n';
var o = '( '+typeof(e)+' )'+n;
for(var p in e)
o+= spaces+p+' = '+'( '+typeof(e[p])+' ) '+(typeof(e[p]) == 'object'?(this.dumpObj(e[p],html,(count+2))):e[p])+n;
return o;
}
this.trim = function(str)
{
return str.replace(/^\s+/, '').replace(/\s+$/, '');
}
// Gets the element (target) of a DOM Mouse Event Object
// Returns false if there's no element
this.mouseEventTarget = function(e)
{
if(e.target) // Mozilla, Opera, Safari
return e.target;
else if (e.srcElement) // IE
return e.srcElement;
else // No Target
return false;
}
// Flexible Javascript Events by John Resig (ejohn.org)
// http://ejohn.org/projects/flexible-javascript-events/
this.addEvent = function( obj, type, fn )
{
if(obj.attachEvent)
{
obj['e'+type+fn] = fn;
obj[type+fn] = function(){obj['e'+type+fn](window.event);}
obj.attachEvent( 'on'+type, obj[type+fn] );
}
else
obj.addEventListener( type, fn, false );
}
this.removeEvent = function( obj, type, fn )
{
if(obj.detachEvent)
{
obj.detachEvent( 'on'+type, obj[type+fn] );
obj[type+fn] = null;
}
else
obj.removeEventListener( type, fn, false );
}
return true;
}