User:Ilmari Karonen/betterwatchlist.js

// Make expandable watchlist entries in "show all applicable changes" mode look more like normal ones

if (wgCanonicalNamespace == "Special" && wgCanonicalSpecialPageName == "Watchlist") { addOnloadHook(function {        var i = 0;        var toggleButton;        while (toggleButton = document.getElementById("RCM" + (++i))) {

var mainTable = toggleButton; while (mainTable && mainTable.tagName.toLowerCase != "table") mainTable = mainTable.parentNode; if (!mainTable) continue; var mainTD = mainTable.getElementsByTagName("td")[1]; // second column if (!mainTD) continue;

var subDiv = document.getElementById("RCI" + i); if (!subDiv) continue; var subTR = subDiv.getElementsByTagName("tr")[0]; // first row if (!subTR) continue; var subTD = subTR.getElementsByTagName("td")[1]; // second column of first row if (!subTD) continue;

var mainLinks = mainTD.getElementsByTagName("a"); var mainSpans = mainTD.getElementsByTagName("span"); var subLinks = subTD.getElementsByTagName("a"); var subSpans = subTD.getElementsByTagName("span"); if (!mainLinks || !mainSpans || !subLinks || !subSpans) continue;

var totalBytes = mainSpans[0]; var moreEditors = mainSpans[1]; var allChanges = mainLinks[1]; var histLink = mainLinks[2]; var diffLink = subLinks[1]; if (!totalBytes || !moreEditors || !allChanges || !histLink || !diffLink) continue;

// TODO: check classes etc. to be sure we got what we wanted

while (diffLink.nextSibling) moreEditors.parentNode.insertBefore(diffLink.nextSibling, moreEditors);

moreEditors.parentNode.insertBefore(document.createElement("br"), moreEditors); moreEditors.parentNode.insertBefore(allChanges, moreEditors); moreEditors.parentNode.insertBefore(document.createTextNode(" . . "), moreEditors); moreEditors.parentNode.insertBefore(totalBytes, moreEditors); moreEditors.parentNode.insertBefore(document.createTextNode(" . . "), moreEditors);

// remove some spacers (should really check that these are what we expect them to be): histLink.parentNode.removeChild(histLink.nextSibling); histLink.parentNode.removeChild(histLink.prevSibling); histLink.parentNode.removeChild(histLink.prevSibling);

histLink.parentNode.insertBefore(diffLink, histlink); histLink.parentNode.insertBefore(document.createTextNode("; "), histlink); histLink.innerHTML = "hist";

subTR.parentNode.removeChild(subTR); }   }); }