<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://pool.calebcooper.ie/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AFilterTable.js</id>
	<title>MediaWiki:FilterTable.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pool.calebcooper.ie/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AFilterTable.js"/>
	<link rel="alternate" type="text/html" href="https://pool.calebcooper.ie/index.php?title=MediaWiki:FilterTable.js&amp;action=history"/>
	<updated>2026-04-10T11:09:26Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://pool.calebcooper.ie/index.php?title=MediaWiki:FilterTable.js&amp;diff=17006&amp;oldid=prev</id>
		<title>Caleb Cooper: Created page with &quot;function filterTable(){ 	$(&quot;table.filterable&quot;).each(function(){ 		var i=0; 		var cols; 		$(this).find(&quot;tr:first-child th, tr:first-child td&quot;).each(function(){ 			if (!$(this).hasClass(&quot;unfilterable&quot;)){ 				cols=[]; 				$(this).closest(&quot;table&quot;).find(&quot;tr td:nth-child(&quot;+(i+1)+&quot;)&quot;).each(function(){ 					cols.push($(this).text()); 				}); 				cols = arrayUnique(cols); 				l=0; 				for (j=0; j&lt;cols.length; j++){ 					t=charLength(cols[j]); 					if (l&lt;t) l=t; 				} 				$(this)....&quot;</title>
		<link rel="alternate" type="text/html" href="https://pool.calebcooper.ie/index.php?title=MediaWiki:FilterTable.js&amp;diff=17006&amp;oldid=prev"/>
		<updated>2024-04-16T10:19:50Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;function filterTable(){ 	$(&amp;quot;table.filterable&amp;quot;).each(function(){ 		var i=0; 		var cols; 		$(this).find(&amp;quot;tr:first-child th, tr:first-child td&amp;quot;).each(function(){ 			if (!$(this).hasClass(&amp;quot;unfilterable&amp;quot;)){ 				cols=[]; 				$(this).closest(&amp;quot;table&amp;quot;).find(&amp;quot;tr td:nth-child(&amp;quot;+(i+1)+&amp;quot;)&amp;quot;).each(function(){ 					cols.push($(this).text()); 				}); 				cols = arrayUnique(cols); 				l=0; 				for (j=0; j&amp;lt;cols.length; j++){ 					t=charLength(cols[j]); 					if (l&amp;lt;t) l=t; 				} 				$(this)....&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;function filterTable(){&lt;br /&gt;
	$(&amp;quot;table.filterable&amp;quot;).each(function(){&lt;br /&gt;
		var i=0;&lt;br /&gt;
		var cols;&lt;br /&gt;
		$(this).find(&amp;quot;tr:first-child th, tr:first-child td&amp;quot;).each(function(){&lt;br /&gt;
			if (!$(this).hasClass(&amp;quot;unfilterable&amp;quot;)){&lt;br /&gt;
				cols=[];&lt;br /&gt;
				$(this).closest(&amp;quot;table&amp;quot;).find(&amp;quot;tr td:nth-child(&amp;quot;+(i+1)+&amp;quot;)&amp;quot;).each(function(){&lt;br /&gt;
					cols.push($(this).text());&lt;br /&gt;
				});&lt;br /&gt;
				cols = arrayUnique(cols);&lt;br /&gt;
				l=0;&lt;br /&gt;
				for (j=0; j&amp;lt;cols.length; j++){&lt;br /&gt;
					t=charLength(cols[j]);&lt;br /&gt;
					if (l&amp;lt;t) l=t;&lt;br /&gt;
				}&lt;br /&gt;
				$(this).css(&amp;quot;position&amp;quot;,&amp;quot;relative&amp;quot;);&lt;br /&gt;
				$(this).html(&amp;#039;&amp;lt;a href=&amp;quot;javascript:void(0)&amp;quot; class=&amp;quot;showFilterMenu&amp;quot;&amp;gt;&amp;#039;+$(this).html()+&amp;#039;▼&amp;lt;/a&amp;gt;&amp;#039;);&lt;br /&gt;
				$(this).append($(&amp;#039;&amp;lt;div class=&amp;quot;filterMenu&amp;quot; style=&amp;quot;position:absolute;top:&amp;#039;+$(this).height()+&amp;#039;px;left:0;width:&amp;#039;+(22+l*7)+&amp;#039;px;text-align:left;padding:5px;border:1px #000 solid;background:#ddd;z-index:1;display:none&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;));&lt;br /&gt;
				for (j=0; j&amp;lt;cols.length; j++){&lt;br /&gt;
					$(this).find(&amp;quot;.filterMenu&amp;quot;).append(&amp;#039;&amp;lt;div&amp;gt;&amp;lt;input type=&amp;quot;checkbox&amp;quot; value=&amp;quot;&amp;#039;+cols[j]+&amp;#039;&amp;quot; col=&amp;quot;&amp;#039;+(i+1)+&amp;#039;&amp;quot; class=&amp;quot;filterOption&amp;quot; checked&amp;gt;&amp;#039;+cols[j]+&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;)&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			i++;&lt;br /&gt;
		});&lt;br /&gt;
		$(this).find(&amp;quot;tr:nth-child(n+1)&amp;quot;).attr(&amp;quot;condition&amp;quot;, 0);&lt;br /&gt;
	});&lt;br /&gt;
	$(&amp;quot;.showFilterMenu&amp;quot;).click(function(){&lt;br /&gt;
		if ($(this).parent().find(&amp;quot;.filterMenu:visible&amp;quot;).length){&lt;br /&gt;
			$(&amp;quot;.filterMenu&amp;quot;).slideUp(150);&lt;br /&gt;
		}else{&lt;br /&gt;
			$(&amp;quot;.filterMenu&amp;quot;).slideUp(150);&lt;br /&gt;
			$(this).parent().find(&amp;quot;.filterMenu&amp;quot;).slideDown(150);&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
	$(document).mouseup(function(e){&lt;br /&gt;
		var container = $(&amp;quot;.filterMenu&amp;quot;);&lt;br /&gt;
	    if (!container.is(e.target) &amp;amp;&amp;amp; container.has(e.target).length === 0){&lt;br /&gt;
	        container.slideUp(150);&lt;br /&gt;
	    }&lt;br /&gt;
	});&lt;br /&gt;
	$(&amp;quot;.filterOption&amp;quot;).click(function(){&lt;br /&gt;
		col=$(this).attr(&amp;quot;col&amp;quot;);&lt;br /&gt;
		val=$(this).val();&lt;br /&gt;
		if ($(this).is(&amp;quot;:checked&amp;quot;)) chg=1; else chg=-1;&lt;br /&gt;
		$(this).closest(&amp;quot;table&amp;quot;).find(&amp;quot;tr:nth-child(n+1)&amp;quot;).each(function(){&lt;br /&gt;
			if ($(this).find(&amp;quot;td:nth-child(&amp;quot;+col+&amp;quot;)&amp;quot;).text()==val){&lt;br /&gt;
				var cond=$(this).attr(&amp;quot;condition&amp;quot;);&lt;br /&gt;
				cond=Number(cond)+chg;&lt;br /&gt;
				$(this).attr(&amp;quot;condition&amp;quot;, cond);&lt;br /&gt;
				if (cond==0) $(this).show();&lt;br /&gt;
				else $(this).hide();&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
function arrayUnique(a) {&lt;br /&gt;
    return a.reduce(function(p, c) {&lt;br /&gt;
        if (p.indexOf(c) &amp;lt; 0) p.push(c);&lt;br /&gt;
        return p;&lt;br /&gt;
    }, []);&lt;br /&gt;
};&lt;br /&gt;
function charLength(s){&lt;br /&gt;
	return s.length+(encodeURI(s).split(/%..|./).length-1-s.length)/2;&lt;br /&gt;
}&lt;br /&gt;
filterTable();&lt;/div&gt;</summary>
		<author><name>Caleb Cooper</name></author>
	</entry>
</feed>