diff options
Diffstat (limited to 'mod/pages/vendors/jquery-treeview/jquery.treeview.async.js')
| -rw-r--r-- | mod/pages/vendors/jquery-treeview/jquery.treeview.async.js | 110 | 
1 files changed, 110 insertions, 0 deletions
diff --git a/mod/pages/vendors/jquery-treeview/jquery.treeview.async.js b/mod/pages/vendors/jquery-treeview/jquery.treeview.async.js new file mode 100644 index 000000000..005231054 --- /dev/null +++ b/mod/pages/vendors/jquery-treeview/jquery.treeview.async.js @@ -0,0 +1,110 @@ +/*
 + * Async Treeview 0.1 - Lazy-loading extension for Treeview
 + * 
 + * http://bassistance.de/jquery-plugins/jquery-plugin-treeview/
 + *
 + * Copyright (c) 2007 Jörn Zaefferer
 + *
 + * Dual licensed under the MIT and GPL licenses:
 + *   http://www.opensource.org/licenses/mit-license.php
 + *   http://www.gnu.org/licenses/gpl.html
 + *
 + * Revision: $Id$
 + *
 + */
 +
 +;(function($) {
 +
 +function load(settings, root, child, container) {
 +	function createNode(parent) {
 +		var current = $("<li/>").attr("id", this.id || "").html("<span>" + this.text + "</span>").appendTo(parent);
 +		if (this.classes) {
 +			current.children("span").addClass(this.classes);
 +		}
 +		if (this.expanded) {
 +			current.addClass("open");
 +		}
 +		if (this.hasChildren || this.children && this.children.length) {
 +			var branch = $("<ul/>").appendTo(current);
 +			if (this.hasChildren) {
 +				current.addClass("hasChildren");
 +				createNode.call({
 +					classes: "placeholder",
 +					text: " ",
 +					children:[]
 +				}, branch);
 +			}
 +			if (this.children && this.children.length) {
 +				$.each(this.children, createNode, [branch])
 +			}
 +		}
 +	}
 +	$.ajax($.extend(true, {
 +		url: settings.url,
 +		dataType: "json",
 +		data: {
 +			root: root
 +		},
 +		success: function(response) {
 +			child.empty();
 +			$.each(response, createNode, [child]);
 +	        $(container).treeview({add: child});
 +	    }
 +	}, settings.ajax));
 +	/*
 +	$.getJSON(settings.url, {root: root}, function(response) {
 +		function createNode(parent) {
 +			var current = $("<li/>").attr("id", this.id || "").html("<span>" + this.text + "</span>").appendTo(parent);
 +			if (this.classes) {
 +				current.children("span").addClass(this.classes);
 +			}
 +			if (this.expanded) {
 +				current.addClass("open");
 +			}
 +			if (this.hasChildren || this.children && this.children.length) {
 +				var branch = $("<ul/>").appendTo(current);
 +				if (this.hasChildren) {
 +					current.addClass("hasChildren");
 +					createNode.call({
 +						classes: "placeholder",
 +						text: " ",
 +						children:[]
 +					}, branch);
 +				}
 +				if (this.children && this.children.length) {
 +					$.each(this.children, createNode, [branch])
 +				}
 +			}
 +		}
 +		child.empty();
 +		$.each(response, createNode, [child]);
 +        $(container).treeview({add: child});
 +    });
 +    */
 +}
 +
 +var proxied = $.fn.treeview;
 +$.fn.treeview = function(settings) {
 +	if (!settings.url) {
 +		return proxied.apply(this, arguments);
 +	}
 +	var container = this;
 +	if (!container.children().size())
 +		load(settings, "source", this, container);
 +	var userToggle = settings.toggle;
 +	return proxied.call(this, $.extend({}, settings, {
 +		collapsed: true,
 +		toggle: function() {
 +			var $this = $(this);
 +			if ($this.hasClass("hasChildren")) {
 +				var childList = $this.removeClass("hasChildren").find("ul");
 +				load(settings, this.id, childList, container);
 +			}
 +			if (userToggle) {
 +				userToggle.apply(this, arguments);
 +			}
 +		}
 +	}));
 +};
 +
 +})(jQuery);
\ No newline at end of file  | 
