User:Mike Dillon/Scripts/imageLinksByNs.js

// Requires: User:Mike Dillon/Scripts/namespaces.js // Requires: User:Mike Dillon/Scripts/easydom.js

//

$(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); } });

//