User:Tim Laqua/Scripts/formatRecentChanges.js

From mediawiki.org

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
 function formatRecentChanges() {
   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 rowNode = document.createElement('TR');
 
             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,'');
 
             //check for unpatrolled flag
             regexp = /<span\sclass.+?unpatrolled.+?<\/span>/i;
             if (regexp.exec(cleanText)) {
               rowNode.style.backgroundColor = colorPatrolledRow;
               cleanText = cleanText.replace(regexp,'');
             } else {
               if (altRow) {
                 rowNode.style.backgroundColor = colorAltRow;
               } else {
                 rowNode.style.backgroundColor = colorPrimaryRow;
               }
             }
             altRow = altRow ? false : true;
 
             //check for minor edit flag
             regexp = /<span\sclass.+?minor.+?<\/span>/i;
             if (regexp.exec(cleanText)) {
               var flagMinor = cleanText.match(regexp)[0];
               cleanText = cleanText.replace(regexp,'');
             } else {
               var flagMinor = '';
             }
 
             //check for new page flag
             regexp = /<span\sclass.+?newpage.+?<\/span>/i;
             if (regexp.exec(cleanText)) {
               var flagNewpage = cleanText.match(regexp)[0];
               cleanText = cleanText.replace(regexp,'');
             } else {
               var flagNewpage = '';
             }
 
             //check for bot flag
             regexp = /<span\sclass.+?bot.+?<\/span>/i;
             if (regexp.exec(cleanText)) {
               var flagBot = cleanText.match(regexp)[0];
               cleanText = cleanText.replace(regexp,'');
             } else {
               var flagBot = '';
             }
 
             var flagNode = document.createElement('TD');
             flagNode.innerHTML = flagNewpage + flagMinor + flagBot;
             flagNode.style.whiteSpace = 'nowrap';
 
             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';
 
             if (arrLI.length == 4) {
               //standard entry
               
               var titleNode = document.createElement('TD');
               titleNode.innerHTML = arrLI[1];
               titleNode.style.whiteSpace = 'nowrap';
               
               var changedNode = document.createElement('TD');
               changedNode.innerHTML = arrLI[2].match(/\((.+)\)/)[1];
               //changedNode.innerHTML = arrLI[2];
               changedNode.style.whiteSpace = 'nowrap';
               changedNode.style.textAlign = 'right';
               
               var messageString = arrLI[3];
             } else {
                 //empty cell
                 var titleNode = document.createElement('TD');
                 var changedNode = document.createElement('TD');
                 var messageString = arrLI[1];
             }
             
             var colMessage = messageString.match(/(<a.*?\))(.*$)/i);
 
             var nameNode = document.createElement('TD');
             var messageNode = document.createElement('TD');
 
             if ( colMessage ) {
               nameNode.innerHTML = colMessage[1];
               nameNode.style.whiteSpace = 'nowrap';
 
               if (colMessage[2] != '')
                 messageNode.innerHTML = colMessage[2].replace(/\(/, '').replace(/\)/, '');
               else 
                 messageNode.innerHTML= '&nbsp;';
             } else {
               nameNode.innerHTML= '&nbsp;';
               messageNode.innerHTML= '&nbsp;';
             }
     
 
             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]);
           i--;  //we just deleted a node.
         }
       }
     }
   }
 }
 
 addOnloadHook(formatRecentChanges);