User:Mike Dillon/Scripts/imageLinksByNs.js
From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Firefox/Mozilla/Safari: hold down Shift while clicking Reload (or press Ctrl-Shift-R), Internet Explorer: press Ctrl-F5, Opera/Konqueror: press F5.
// Requires: [[User:Mike Dillon/Scripts/namespaces.js]] // Requires: [[User:Mike Dillon/Scripts/easydom.js]] //<pre><nowiki> addOnloadHook(function () { var node = document.getElementById("filelinks"); if (!node) return; // Find the first UL after the header with the id "filelinks" while (node = node.nextSibling) { if (node.tagName && node.tagName.match(/^[Uu][Ll]$/)) { break; } } // Couldn't find the node, so bail out if (!node) return; // Stash the parent and next sibling of the list for later var parent = node.parentNode; var nextSibling = node.nextSibling; // Remove list from parent to work offline parent.removeChild(node); // Hash to store per-namespace lists var namespaceLists = {}; // Build up a list of links by namespace var fileLink; var fileLinks = node.getElementsByTagName("li"); for (var i = 0; fileLink = fileLinks[i]; i++) { var ns = getNamespaceNumber(fileLink.firstChild.firstChild.data); if (!namespaceLists[ns]) { namespaceLists[ns] = new Array(); } namespaceLists[ns].push(fileLink); } // Rebuild the new subdivided lists with (easydom) { var newList = ul(); for (var ns in wgNamespaceNames) { var items = namespaceLists[ns]; if (!items) continue; var nodeData = {}; items.sort(function (a, b) { var aData = nodeData[a] ? nodeData[a] : a.firstChild.firstChild.data.toLowerCase(); var bData = nodeData[b] ? nodeData[b] : b.firstChild.firstChild.data.toLowerCase(); return aData > bData ? 1 : aData < bData ? -1 : 0; }); var nsList = ul(); for (var i in items) { nsList.appendChild(items[i]); } newList.appendChild(li(strong(wgNamespaceNames[ns]), nsList)); } } // Put the new list back in the DOM in place of the original list if (nextSibling) { parent.insertBefore(newList, nextSibling); } else { parent.appendChild(newList); } }); //</nowiki></pre>