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);