LandGrab player table sort

By Iluvatar Last update Jul 20, 2008 — Installed 74 times.
// ==UserScript==
// @name           LandGrab player table sort
// @namespace      landgrab_table_sort
// @include        http://landgrab.net/landgrab/ViewBoard*
// @include        http://www.landgrab.net/landgrab/ViewBoard*
// ==/UserScript==
/**
 * A script to sort player info table
 * @author Jakub Caban <kuba.iluvatar@gmail.com>
 * @license Use it if you like it
 */
var column;
var side = 1;
var RowArr = [];
var Default = [];
var shown = true;

InitSort();

function InitSort(){
	var oTable = document.getElementById('player_status_tbody').parentNode;
	var oHead = oTable.tHead;
  var oHeadRow = oHead.rows[0];
  var oEl = document.createElement('a');
  oEl.id = 'conquer_show_hide';
  oEl.innerHTML = ' [hide conquered]';
  oEl.style.cursor = 'pointer';
  oEl.addEventListener("click", HandleShowHide, true);
  oHeadRow.cells[0].appendChild(oEl); 
	var oHeadRow = oHead.rows[1];
	for(i in oHeadRow.cells){
		if(typeof(oHeadRow.cells[i]) == 'object'){
			oHeadRow.cells[i].style.cursor = 'pointer';
			oHeadRow.cells[i].id = i;
			oHeadRow.cells[i].addEventListener("click", function(){SortTable(this.id)}, true);
		}
	}
	var oTBody = document.getElementById('player_status_tbody');
	for(i in oTBody.rows){
		if(typeof(oTBody.rows[i]) == 'object')
			Default[oTBody.rows[i].cells[0].id] = i;
	}
}

function HandleShowHide(){
  var oTBody = document.getElementById('player_status_tbody');
  for(i in oTBody.rows){
    if(typeof(oTBody.rows[i]) == 'object'){
      var oRow = oTBody.rows[i];
      if(oRow.cells[2].innerHTML.indexOf('(conquered)') != -1)
        if(shown) oRow.style.display = 'none';
        else oRow.style.display = '';
    }
  }
  var oA = document.getElementById('conquer_show_hide');
  if(shown) oA.innerHTML = ' [show conquered]';
  else oA.innerHTML = ' [hide conquered]';
  shown = !shown;
  MakeGrayWhite();
  UnSelect();
}

function SortTable(i){
	var oTBody = document.getElementById('player_status_tbody');
	if(i==column) side *= -1;
	else side = 1;
	column = i;
	RowArr = [];
	for(i in oTBody.rows){
		if(typeof(oTBody.rows[i]) == 'object'){
			RowArr[i] = oTBody.rows[i];
		}
	}
	RowArr.sort(SortMe);
	for(i in RowArr){
		if(typeof(RowArr[i]) == 'object')
			oTBody.appendChild(RowArr[i]);
	}
  MakeGrayWhite();
	UnSelect();
}

function MakeGrayWhite(){
  var oTBody = document.getElementById('player_status_tbody');
  var j=0;
  for(i in oTBody.rows){
    if(typeof(oTBody.rows[i]) == 'object'){
      if(oTBody.rows[i].bgColor != '#faf2bc' && oTBody.rows[i].bgColor != '#cccccc')
        oTBody.rows[i].bgColor = j++%2==0?'white':'#e6e6e6';
      else if(oTBody.rows[i].style.display != 'none')
        j++;
    }
  }
}

function SortMe(x, y){
	x = GetCellVal(x);
	y = GetCellVal(y);
	if(column <= 1){
		if(x>y) return side;
		if(y>x) return -1*side;
	}else{
		if(x>y) return -1*side;
		if(y>x) return side;
	}
	return 0;
}

function GetCellVal(x){
	if(x.cells.length >= 7){
		if(column == 0){
			return(parseInt(Default[x.cells[0].id]));
		}else if(column == 1){
			return(x.cells[column].childNodes[1].innerHTML.toLowerCase());
		}else{
			return(parseInt(x.cells[column].innerHTML));
		}
	}else{
		if(column == 0){
			return(parseInt(Default[x.cells[0].id]));
		}else if(column == 1){
			return(x.cells[column].childNodes[1].innerHTML.toLowerCase());
		}else if(column >= 6){
			return(parseInt(x.cells[column-3].innerHTML));
		}else
			return(-1);
	}
}

function UnSelect(){
	if(document.selection && document.selection.empty)
		document.selection.empty();
	else if(window.getSelection)
		window.getSelection().removeAllRanges();
}