User:Nathan/collapseani.js

// - // Script for collapsing sections on WP:ANI. // - (function{ // Please see T72470 for information on how to fix. return; if (wgPageName == "Wikipedia:Administrators\'_noticeboard/Incidents" && wgAction == "view") { addOnloadHook(function ani_sections { var headers = document.getElementsByTagName('H2'); for(var i=1;i<headers.length;i++) { // starting from 1, to skip the toc header. var section = document.createElement("DIV"); section.className = "sectionContainer"; var anchor = headers[i].previousSibling; while(anchor.nodeType != 1) anchor = anchor.previousSibling; headers[i].parentNode.insertBefore(section,headers[i]); section.appendChild(anchor); section.appendChild(headers[i]); var innerSection = document.createElement("DIV"); innerSection.className = "sectionContentHolder"; section.appendChild(innerSection); while(section.nextSibling && section.nextSibling.tagName != 'H2' && section.nextSibling.id != 'catlinks') { // look ahead var anchorcheck = section.nextSibling.nextSibling; while(anchorcheck && anchorcheck.nodeType!=1) anchorcheck = anchorcheck.nextSibling; if(anchorcheck && anchorcheck.tagName == 'H2') break; innerSection.appendChild(section.nextSibling); } var ntimestamps = 0; // evil evil hack var lastTimestamp = new Date(0); var lastTimestampText = '(No Timestamp)'; var txt = innerSection.textContent || innerSection.innerText; txt.replace(/[0-9][0-9]:[0-9][0-9], [0-3]?[0-9] [A-Z][a-z]* [0-9][0-9][0-9][0-9]/g,function(match) { var thisTimestamp = new Date(match); if(thisTimestamp.valueOf > lastTimestamp.valueOf) { lastTimestamp = thisTimestamp; lastTimestampText = match; } ntimestamps++; }); // was done incorrrectly in local time, convert from UTC lastTimestamp.setMinutes( lastTimestamp.getMinutes-lastTimestamp.getTimezoneOffset ); var age = (new Date).getTime - lastTimestamp.getTime; var hideDefault = false; if (age > 21600000) // 6 hours hideDefault = true; if(txt.length < 600) // bytes hideDefault = false; if(ntimestamps < 2) // unanswered hideDefault = false; // hide if resolved, also, place the resolved header in the visible part. var resolved = getElementsByClassName(innerSection,'DIV','resolved'); if(resolved.length) { resolved = resolved[0]; // [1] to skip an annoying whitespace node if (resolved != innerSection.firstChild && resolved != innerSection.childNodes[1]) resolved = resolved.cloneNode(true); section.insertBefore(resolved,innerSection); hideDefault = true; } section.insertBefore(document.createTextNode('Last: ' + lastTimestampText + ". "),innerSection); section.insertBefore(document.createTextNode(txt.length + " text bytes."),innerSection); section.insertBefore(document.createTextNode(ntimestamps + " comments. "),innerSection); (function ani_sections_closure{ var header = headers[i]; var innerSectionFix = innerSection; var button = document.createElement('BUTTON'); if(hideDefault) if(typeof(button.textContent) != 'undefined') button.textContent = 'show'; else button.innerText = 'show'; else if(typeof(button.textContent) != 'undefined') button.textContent = 'hide'; else button.innerText = 'hide'; button.onclick = function ani_sections_onclick { if(innerSectionFix.style.display == 'none') { innerSectionFix.style.display = 'block'; if(typeof(button.textContent) != 'undefined') button.textContent = 'show'; else button.innerText = 'show'; } else { innerSectionFix.style.display = 'none'; if(typeof(button.textContent) != 'undefined') button.textContent = 'show'; else button.innerText = 'show'; } } header.insertBefore(button,header.firstChild); button.style.cssText='float: right'; if(hideDefault) innerSection.style.display='none'; }); } }); } })