<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://stock.wikimaxi.org/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AJquery.treeview.js</id>
	<title>MediaWiki:Jquery.treeview.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stock.wikimaxi.org/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AJquery.treeview.js"/>
	<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Jquery.treeview.js&amp;action=history"/>
	<updated>2026-07-26T07:01:57Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.11</generator>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Jquery.treeview.js&amp;diff=157479&amp;oldid=prev</id>
		<title>Mory: Blanked the page</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Jquery.treeview.js&amp;diff=157479&amp;oldid=prev"/>
		<updated>2017-02-23T16:24:13Z</updated>

		<summary type="html">&lt;p&gt;Blanked the page&lt;/p&gt;
&lt;a href=&quot;https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Jquery.treeview.js&amp;amp;diff=157479&amp;amp;oldid=157476&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
	<entry>
		<id>https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Jquery.treeview.js&amp;diff=157476&amp;oldid=prev</id>
		<title>Mory: Created page with &quot;/*  * Treeview 1.4.2 - jQuery plugin to hide and show branches of a tree  *  * http://bassistance.de/jquery-plugins/jquery-plugin-treeview/  *  * Copyright Jörn Zaefferer  *...&quot;</title>
		<link rel="alternate" type="text/html" href="https://stock.wikimaxi.org/w/index.php?title=MediaWiki:Jquery.treeview.js&amp;diff=157476&amp;oldid=prev"/>
		<updated>2017-02-23T16:18:27Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;/*  * Treeview 1.4.2 - jQuery plugin to hide and show branches of a tree  *  * http://bassistance.de/jquery-plugins/jquery-plugin-treeview/  *  * Copyright Jörn Zaefferer  *...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/*&lt;br /&gt;
 * Treeview 1.4.2 - jQuery plugin to hide and show branches of a tree&lt;br /&gt;
 *&lt;br /&gt;
 * http://bassistance.de/jquery-plugins/jquery-plugin-treeview/&lt;br /&gt;
 *&lt;br /&gt;
 * Copyright Jörn Zaefferer&lt;br /&gt;
 * Released under the MIT license:&lt;br /&gt;
 *   http://www.opensource.org/licenses/mit-license.php&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
;(function($) {&lt;br /&gt;
&lt;br /&gt;
	// TODO rewrite as a widget, removing all the extra plugins&lt;br /&gt;
	$.extend($.fn, {&lt;br /&gt;
		swapClass: function(c1, c2) {&lt;br /&gt;
			var c1Elements = this.filter(&amp;#039;.&amp;#039; + c1);&lt;br /&gt;
			this.filter(&amp;#039;.&amp;#039; + c2).removeClass(c2).addClass(c1);&lt;br /&gt;
			c1Elements.removeClass(c1).addClass(c2);&lt;br /&gt;
			return this;&lt;br /&gt;
		},&lt;br /&gt;
		replaceClass: function(c1, c2) {&lt;br /&gt;
			return this.filter(&amp;#039;.&amp;#039; + c1).removeClass(c1).addClass(c2).end();&lt;br /&gt;
		},&lt;br /&gt;
		hoverClass: function(className) {&lt;br /&gt;
			className = className || &amp;quot;hover&amp;quot;;&lt;br /&gt;
			return this.hover(function() {&lt;br /&gt;
				$(this).addClass(className);&lt;br /&gt;
			}, function() {&lt;br /&gt;
				$(this).removeClass(className);&lt;br /&gt;
			});&lt;br /&gt;
		},&lt;br /&gt;
		heightToggle: function(animated, callback) {&lt;br /&gt;
			animated ?&lt;br /&gt;
				this.animate({ height: &amp;quot;toggle&amp;quot; }, animated, callback) :&lt;br /&gt;
				this.each(function(){&lt;br /&gt;
					jQuery(this)[ jQuery(this).is(&amp;quot;:hidden&amp;quot;) ? &amp;quot;show&amp;quot; : &amp;quot;hide&amp;quot; ]();&lt;br /&gt;
					if(callback)&lt;br /&gt;
						callback.apply(this, arguments);&lt;br /&gt;
				});&lt;br /&gt;
		},&lt;br /&gt;
		heightHide: function(animated, callback) {&lt;br /&gt;
			if (animated) {&lt;br /&gt;
				this.animate({ height: &amp;quot;hide&amp;quot; }, animated, callback);&lt;br /&gt;
			} else {&lt;br /&gt;
				this.hide();&lt;br /&gt;
				if (callback)&lt;br /&gt;
					this.each(callback);&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		prepareBranches: function(settings) {&lt;br /&gt;
			if (!settings.prerendered) {&lt;br /&gt;
				// mark last tree items&lt;br /&gt;
				this.filter(&amp;quot;:last-child:not(ul)&amp;quot;).addClass(CLASSES.last);&lt;br /&gt;
				// collapse whole tree, or only those marked as closed, anyway except those marked as open&lt;br /&gt;
				this.filter((settings.collapsed ? &amp;quot;&amp;quot; : &amp;quot;.&amp;quot; + CLASSES.closed) + &amp;quot;:not(.&amp;quot; + CLASSES.open + &amp;quot;)&amp;quot;).find(&amp;quot;&amp;gt;ul&amp;quot;).hide();&lt;br /&gt;
			}&lt;br /&gt;
			// return all items with sublists&lt;br /&gt;
			return this.filter(&amp;quot;:has(&amp;gt;ul)&amp;quot;);&lt;br /&gt;
		},&lt;br /&gt;
		applyClasses: function(settings, toggler) {&lt;br /&gt;
			// TODO use event delegation&lt;br /&gt;
			this.filter(&amp;quot;:has(&amp;gt;ul):not(:has(&amp;gt;a))&amp;quot;).find(&amp;quot;&amp;gt;span&amp;quot;).unbind(&amp;quot;click.treeview&amp;quot;).bind(&amp;quot;click.treeview&amp;quot;, function(event) {&lt;br /&gt;
				// don&amp;#039;t handle click events on children, eg. checkboxes&lt;br /&gt;
				if ( this == event.target )&lt;br /&gt;
					toggler.apply($(this).next());&lt;br /&gt;
			}).add( $(&amp;quot;a&amp;quot;, this) ).hoverClass();&lt;br /&gt;
&lt;br /&gt;
			if (!settings.prerendered) {&lt;br /&gt;
				// handle closed ones first&lt;br /&gt;
				this.filter(&amp;quot;:has(&amp;gt;ul:hidden)&amp;quot;)&lt;br /&gt;
						.addClass(CLASSES.expandable)&lt;br /&gt;
						.replaceClass(CLASSES.last, CLASSES.lastExpandable);&lt;br /&gt;
&lt;br /&gt;
				// handle open ones&lt;br /&gt;
				this.not(&amp;quot;:has(&amp;gt;ul:hidden)&amp;quot;)&lt;br /&gt;
						.addClass(CLASSES.collapsable)&lt;br /&gt;
						.replaceClass(CLASSES.last, CLASSES.lastCollapsable);&lt;br /&gt;
&lt;br /&gt;
	            // create hitarea if not present&lt;br /&gt;
				var hitarea = this.find(&amp;quot;div.&amp;quot; + CLASSES.hitarea);&lt;br /&gt;
				if (!hitarea.length)&lt;br /&gt;
					hitarea = this.prepend(&amp;quot;&amp;lt;div class=\&amp;quot;&amp;quot; + CLASSES.hitarea + &amp;quot;\&amp;quot;/&amp;gt;&amp;quot;).find(&amp;quot;div.&amp;quot; + CLASSES.hitarea);&lt;br /&gt;
				hitarea.removeClass().addClass(CLASSES.hitarea).each(function() {&lt;br /&gt;
					var classes = &amp;quot;&amp;quot;;&lt;br /&gt;
					$.each($(this).parent().attr(&amp;quot;class&amp;quot;).split(&amp;quot; &amp;quot;), function() {&lt;br /&gt;
						classes += this + &amp;quot;-hitarea &amp;quot;;&lt;br /&gt;
					});&lt;br /&gt;
					$(this).addClass( classes );&lt;br /&gt;
				})&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// apply event to hitarea&lt;br /&gt;
			this.find(&amp;quot;div.&amp;quot; + CLASSES.hitarea).click( toggler );&lt;br /&gt;
		},&lt;br /&gt;
		treeview: function(settings) {&lt;br /&gt;
&lt;br /&gt;
			settings = $.extend({&lt;br /&gt;
				cookieId: &amp;quot;treeview&amp;quot;&lt;br /&gt;
			}, settings);&lt;br /&gt;
&lt;br /&gt;
			if ( settings.toggle ) {&lt;br /&gt;
				var callback = settings.toggle;&lt;br /&gt;
				settings.toggle = function() {&lt;br /&gt;
					return callback.apply($(this).parent()[0], arguments);&lt;br /&gt;
				};&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// factory for treecontroller&lt;br /&gt;
			function treeController(tree, control) {&lt;br /&gt;
				// factory for click handlers&lt;br /&gt;
				function handler(filter) {&lt;br /&gt;
					return function() {&lt;br /&gt;
						// reuse toggle event handler, applying the elements to toggle&lt;br /&gt;
						// start searching for all hitareas&lt;br /&gt;
						toggler.apply( $(&amp;quot;div.&amp;quot; + CLASSES.hitarea, tree).filter(function() {&lt;br /&gt;
							// for plain toggle, no filter is provided, otherwise we need to check the parent element&lt;br /&gt;
							return filter ? $(this).parent(&amp;quot;.&amp;quot; + filter).length : true;&lt;br /&gt;
						}) );&lt;br /&gt;
						return false;&lt;br /&gt;
					};&lt;br /&gt;
				}&lt;br /&gt;
				// click on first element to collapse tree&lt;br /&gt;
				$(&amp;quot;a:eq(0)&amp;quot;, control).click( handler(CLASSES.collapsable) );&lt;br /&gt;
				// click on second to expand tree&lt;br /&gt;
				$(&amp;quot;a:eq(1)&amp;quot;, control).click( handler(CLASSES.expandable) );&lt;br /&gt;
				// click on third to toggle tree&lt;br /&gt;
				$(&amp;quot;a:eq(2)&amp;quot;, control).click( handler() );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// handle toggle event&lt;br /&gt;
			function toggler() {&lt;br /&gt;
				$(this)&lt;br /&gt;
					.parent()&lt;br /&gt;
					// swap classes for hitarea&lt;br /&gt;
					.find(&amp;quot;&amp;gt;.hitarea&amp;quot;)&lt;br /&gt;
						.swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )&lt;br /&gt;
						.swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea )&lt;br /&gt;
					.end()&lt;br /&gt;
					// swap classes for parent li&lt;br /&gt;
					.swapClass( CLASSES.collapsable, CLASSES.expandable )&lt;br /&gt;
					.swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )&lt;br /&gt;
					// find child lists&lt;br /&gt;
					.find( &amp;quot;&amp;gt;ul&amp;quot; )&lt;br /&gt;
					// toggle them&lt;br /&gt;
					.heightToggle( settings.animated, settings.toggle );&lt;br /&gt;
				if ( settings.unique ) {&lt;br /&gt;
					$(this).parent()&lt;br /&gt;
						.siblings()&lt;br /&gt;
						// swap classes for hitarea&lt;br /&gt;
						.find(&amp;quot;&amp;gt;.hitarea&amp;quot;)&lt;br /&gt;
							.replaceClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )&lt;br /&gt;
							.replaceClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea )&lt;br /&gt;
						.end()&lt;br /&gt;
						.replaceClass( CLASSES.collapsable, CLASSES.expandable )&lt;br /&gt;
						.replaceClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )&lt;br /&gt;
						.find( &amp;quot;&amp;gt;ul&amp;quot; )&lt;br /&gt;
						.heightHide( settings.animated, settings.toggle );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			this.data(&amp;quot;toggler&amp;quot;, toggler);&lt;br /&gt;
&lt;br /&gt;
			function serialize() {&lt;br /&gt;
				function binary(arg) {&lt;br /&gt;
					return arg ? 1 : 0;&lt;br /&gt;
				}&lt;br /&gt;
				var data = [];&lt;br /&gt;
				branches.each(function(i, e) {&lt;br /&gt;
					data[i] = $(e).is(&amp;quot;:has(&amp;gt;ul:visible)&amp;quot;) ? 1 : 0;&lt;br /&gt;
				});&lt;br /&gt;
				$.cookie(settings.cookieId, data.join(&amp;quot;&amp;quot;), settings.cookieOptions );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			function deserialize() {&lt;br /&gt;
				var stored = $.cookie(settings.cookieId);&lt;br /&gt;
				if ( stored ) {&lt;br /&gt;
					var data = stored.split(&amp;quot;&amp;quot;);&lt;br /&gt;
					branches.each(function(i, e) {&lt;br /&gt;
						$(e).find(&amp;quot;&amp;gt;ul&amp;quot;)[ parseInt(data[i]) ? &amp;quot;show&amp;quot; : &amp;quot;hide&amp;quot; ]();&lt;br /&gt;
					});&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// add treeview class to activate styles&lt;br /&gt;
			this.addClass(&amp;quot;treeview&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
			// prepare branches and find all tree items with child lists&lt;br /&gt;
			var branches = this.find(&amp;quot;li&amp;quot;).prepareBranches(settings);&lt;br /&gt;
&lt;br /&gt;
			switch(settings.persist) {&lt;br /&gt;
			case &amp;quot;cookie&amp;quot;:&lt;br /&gt;
				var toggleCallback = settings.toggle;&lt;br /&gt;
				settings.toggle = function() {&lt;br /&gt;
					serialize();&lt;br /&gt;
					if (toggleCallback) {&lt;br /&gt;
						toggleCallback.apply(this, arguments);&lt;br /&gt;
					}&lt;br /&gt;
				};&lt;br /&gt;
				deserialize();&lt;br /&gt;
				break;&lt;br /&gt;
			case &amp;quot;location&amp;quot;:&lt;br /&gt;
				var current = this.find(&amp;quot;a&amp;quot;).filter(function() {&lt;br /&gt;
					return location.href.toLowerCase().indexOf(this.href.toLowerCase()) == 0;&lt;br /&gt;
				});&lt;br /&gt;
				if ( current.length ) {&lt;br /&gt;
					// TODO update the open/closed classes&lt;br /&gt;
					var items = current.addClass(&amp;quot;selected&amp;quot;).parents(&amp;quot;ul, li&amp;quot;).add( current.next() ).show();&lt;br /&gt;
					if (settings.prerendered) {&lt;br /&gt;
						// if prerendered is on, replicate the basic class swapping&lt;br /&gt;
						items.filter(&amp;quot;li&amp;quot;)&lt;br /&gt;
							.swapClass( CLASSES.collapsable, CLASSES.expandable )&lt;br /&gt;
							.swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )&lt;br /&gt;
							.find(&amp;quot;&amp;gt;.hitarea&amp;quot;)&lt;br /&gt;
								.swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )&lt;br /&gt;
								.swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea );&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			branches.applyClasses(settings, toggler);&lt;br /&gt;
&lt;br /&gt;
			// if control option is set, create the treecontroller and show it&lt;br /&gt;
			if ( settings.control ) {&lt;br /&gt;
				treeController(this, settings.control);&lt;br /&gt;
				$(settings.control).show();&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			return this;&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
	// classes used by the plugin&lt;br /&gt;
	// need to be styled via external stylesheet, see first example&lt;br /&gt;
	$.treeview = {};&lt;br /&gt;
	var CLASSES = ($.treeview.classes = {&lt;br /&gt;
		open: &amp;quot;open&amp;quot;,&lt;br /&gt;
		closed: &amp;quot;closed&amp;quot;,&lt;br /&gt;
		expandable: &amp;quot;expandable&amp;quot;,&lt;br /&gt;
		expandableHitarea: &amp;quot;expandable-hitarea&amp;quot;,&lt;br /&gt;
		lastExpandableHitarea: &amp;quot;lastExpandable-hitarea&amp;quot;,&lt;br /&gt;
		collapsable: &amp;quot;collapsable&amp;quot;,&lt;br /&gt;
		collapsableHitarea: &amp;quot;collapsable-hitarea&amp;quot;,&lt;br /&gt;
		lastCollapsableHitarea: &amp;quot;lastCollapsable-hitarea&amp;quot;,&lt;br /&gt;
		lastCollapsable: &amp;quot;lastCollapsable&amp;quot;,&lt;br /&gt;
		lastExpandable: &amp;quot;lastExpandable&amp;quot;,&lt;br /&gt;
		last: &amp;quot;last&amp;quot;,&lt;br /&gt;
		hitarea: &amp;quot;hitarea&amp;quot;&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
})(jQuery);&lt;/div&gt;</summary>
		<author><name>Mory</name></author>
	</entry>
</feed>