Jump to content

User:Tim Laqua/Scripts/formatRecentChanges.js

From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
 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);