// Requires: [[User:Mike Dillon/Scripts/namespaces.js]]
// Requires: [[User:Mike Dillon/Scripts/easydom.js]]
//<pre><nowiki>
$(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>