MediaWiki:UnitListTableFilter.js

function filterTable { $("table.filterable").each(function {		var i=0;		var cols;		$(this).find("tr:first-child th, tr:first-child td").each(function { if (!$(this).hasClass("unfilterable")) { cols=[]; $(this).closest("table").find("tr td:nth-child("+(i+1)+")").each(function {					if ($(this).hasClass("female")) {						cols.push("female");					} else if ($(this).hasClass("male")) {						cols.push("male");					} else {						cols.push($(this).text);					}				}); cols = arrayUnique(cols); l=0; for (j=0; j'+$(this).html+''); $(this).append($(' ')); for (j=0; j'+ucFirst(cols[j])+' ') }			}			i++; });		$(this).find("tr:nth-child(n+1)").attr("condition", 0);	}); $(".showFilterMenu").click(function {		if ($(this).parent.find(".filterMenu:visible").length) {			$(".filterMenu").slideUp(150);		} else {			$(".filterMenu").slideUp(150);			$(this).parent.find(".filterMenu").slideDown(150);		}	}); $(document).mouseup(function(e) {		var container = $(".filterMenu");	   if (!container.is(e.target) && container.has(e.target).length === 0) {	        container.slideUp(150);	    }	}); $(".filterOption").click(function {		col=$(this).attr("col");		val=$(this).val;		if ($(this).is(":checked")) chg=1; else chg=-1;		$(this).closest("table").find("tr:nth-child(n+1)").each(function { if ($(this).find("td:nth-child("+col+")").hasClass(val) || $(this).find("td:nth-child("+col+")").text==val) { var cond=$(this).attr("condition"); cond=Number(cond)+chg; $(this).attr("condition", cond); if (cond==0) $(this).show; else $(this).hide; }		});	}); } function customCompare(a, b) { if (isNumeric(a) && isNumeric(b)) { if (a > b)			return -1; if (a < b)			return 1; return 0; } else { if (a < b)			return -1; if (a > b)			return 1; return 0; } } function arrayUnique(a) { return a.sort(customCompare).reduce(function(p, c) {       if (p.indexOf(c) < 0) p.push(c);        return p;    }, []); }; function charLength(s) { return s.length+(encodeURI(s).split(/%..|./).length-1-s.length)/2; } function ucFirst(s) { return s.charAt(0).toUpperCase+s.slice(1); } function isNumeric(n) { return !isNaN(n) } filterTable;