User:Tim Laqua/Scripts/formatRecentChanges.js

function formatRecentChanges() {

/*

* formatRecentChanges()

* (c) Tim Laqua, 2007

*/

if (wgCanonicalNamespace == 'Special' && wgCanonicalSpecialPageName == 'Recentchanges' ) {

var colorPrimaryRow = '#FFFFFF';

var colorAltRow = '#EEEEEE';

var colorPatrolledRow = '#FFFF99';

var colorHeaderRow = '#cccccc';

var colorFooterRow = '#cccccc';

var columns = '7';

var colUL = document.getElementsByTagName('ul');

if ( colUL.length > 0 ) {

var tableWrapper = document.createElement('table');

var tableNode = document.createElement('tbody');

tableWrapper.width = '100%';

var contentDiv = document.getElementById('content');

contentDiv.appendChild(tableWrapper);

tableWrapper.appendChild(tableNode);

for(var i=0; i

if (colUL[i].className == 'special') {

var altRow = false;

var nodeListHeading = document.getElementsByTagName('h4')[0];

var rowHeading = document.createElement('tr');

var cellHeading = document.createElement('td');

cellHeading.appendChild(nodeListHeading);

cellHeading.colSpan = columns;

rowHeading.appendChild(cellHeading);

rowHeading.style.backgroundColor = colorHeaderRow;

tableNode.appendChild(rowHeading);

var colLI = colUL[i].getElementsByTagName('li');

for(var j=0; j

var minor = false;

var bot = false;

var unpatrolled = false;

var newpage = false;

var rowNode = document.createElement('TR');

var flagNode = document.createElement('TD');

flagNode.style.whiteSpace = 'nowrap';

var changedNode = document.createElement('TD');

changedNode.style.whiteSpace = 'nowrap';

changedNode.style.textAlign = 'right';

var messageNode = document.createElement('TD');

//var colSPAN = colLI[j].getElementsByTagName('span');

var colSPAN = colLI[j].childNodes;

for(var k=0; k < colSPAN.length; k++) {

if (colSPAN[k].nodeType == 1) {

switch (colSPAN[k].className.toLowerCase()) {

case 'mw-plusminus-neg':

//add to changedNode

changedNode.appendChild(colSPAN[k--]);

break;

case 'mw-plusminus-null':

//add to changedNode

changedNode.appendChild(colSPAN[k--]);

break;

case 'mw-plusminus-pos':

//add to changedNode

changedNode.appendChild(colSPAN[k--]);

break;

case 'unpatrolled':

//add to flagNode

unpatrolled = true;

flagNode.appendChild(colSPAN[k--]);

break;

case 'minor':

//add to flagNode

minor = true;

flagNode.appendChild(colSPAN[k--]);

break;

case 'newpage':

//add to flagNode

newpage = true;

flagNode.appendChild(colSPAN[k--]);

break;

case 'bot':

//add to flagNode

bot = true;

flagNode.appendChild(colSPAN[k--]);

break;

case 'comment':

//add to messageNode

messageNode.appendChild(colSPAN[k--]);

break;

default:

//do nothing

}

}

}

//check for unpatrolled flag

if (unpatrolled) {

rowNode.style.backgroundColor = colorPatrolledRow;

} else {

if (altRow) {

rowNode.style.backgroundColor = colorAltRow;

} else {

rowNode.style.backgroundColor = colorPrimaryRow;

}

}

altRow = altRow ? false : true;

var regexp = /; (\d\d:\d\d)/i;

var colMatches = colLI[j].innerHTML.match(regexp);

var time = colMatches[1];

var cleanText = colLI[j].innerHTML.replace(regexp,'');

var arrLI = cleanText.split(' . . ');

var timeNode = document.createElement('TD');

timeNode.innerHTML = time;

timeNode.style.whiteSpace = 'nowrap';

var contextNode = document.createElement('TD');

contextNode.innerHTML = arrLI[0];

contextNode.style.whiteSpace = 'nowrap';

var titleNode = document.createElement('TD');

//titleNode.style.whiteSpace = 'nowrap';

var nameNode = document.createElement('TD');

nameNode.style.whiteSpace = 'nowrap';

if (arrLI.length == 4) {

//standard entry

titleNode.innerHTML = arrLI[1];

nameNode.innerHTML = arrLI[3];

} else if (arrLI.length == 2) {

//log message - append fragment to message node

nameNode.innerHTML = arrLI[1];

}

if (changedNode.firstChild) {

changedNode.firstChild.innerHTML =

changedNode.firstChild.innerHTML.replace(/(^\s*\()|(\)\s*$)/ig,'');

}

if (messageNode.firstChild) {

messageNode.firstChild.innerHTML =

messageNode.firstChild.innerHTML.replace(/(^\s*\()|(\)\s*$)/ig,'');

}

rowNode.appendChild(timeNode);

rowNode.appendChild(contextNode);

rowNode.appendChild(flagNode);

rowNode.appendChild(titleNode);

rowNode.appendChild(messageNode);

rowNode.appendChild(nameNode);

rowNode.appendChild(changedNode);

tableNode.appendChild(rowNode);

}

colUL[i].parentNode.removeChild(colUL[i--]);

}

}

}

}

}

addOnloadHook(formatRecentChanges);