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<colUL.length; 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<colLI.length; 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);