--- /dev/null
+/*\r
+ * Async Treeview 0.1 - Lazy-loading extension for Treeview\r
+ * \r
+ * http://bassistance.de/jquery-plugins/jquery-plugin-treeview/\r
+ *\r
+ * Copyright (c) 2007 Jörn Zaefferer\r
+ *\r
+ * Dual licensed under the MIT and GPL licenses:\r
+ * http://www.opensource.org/licenses/mit-license.php\r
+ * http://www.gnu.org/licenses/gpl.html\r
+ *\r
+ * Revision: $Id$\r
+ *\r
+ */\r
+\r
+;(function($) {\r
+\r
+function load(settings, root, child, container) {\r
+ $.getJSON(settings.url, {root: root}, function(response) {\r
+ function createNode(parent) {\r
+ var current = $("<li/>").attr("id", this.id || "").html("<span>" + this.text + "</span>").appendTo(parent);\r
+ if (this.classes) {\r
+ current.children("span").addClass(this.classes);\r
+ }\r
+ if (this.expanded) {\r
+ current.addClass("open");\r
+ }\r
+ if (this.hasChildren || this.children && this.children.length) {\r
+ var branch = $("<ul/>").appendTo(current);\r
+ if (this.hasChildren) {\r
+ current.addClass("hasChildren");\r
+ createNode.call({\r
+ text:"placeholder",\r
+ id:"placeholder",\r
+ children:[]\r
+ }, branch);\r
+ }\r
+ if (this.children && this.children.length) {\r
+ $.each(this.children, createNode, [branch])\r
+ }\r
+ }\r
+ }\r
+ $.each(response, createNode, [child]);\r
+ $(container).treeview({add: child});\r
+ });\r
+}\r
+\r
+var proxied = $.fn.treeview;\r
+$.fn.treeview = function(settings) {\r
+ if (!settings.url) {\r
+ return proxied.apply(this, arguments);\r
+ }\r
+ var container = this;\r
+ load(settings, "source", this, container);\r
+ var userToggle = settings.toggle;\r
+ return proxied.call(this, $.extend({}, settings, {\r
+ collapsed: true,\r
+ toggle: function() {\r
+ var $this = $(this);\r
+ if ($this.hasClass("hasChildren")) {\r
+ var childList = $this.removeClass("hasChildren").find("ul");\r
+ childList.empty();\r
+ load(settings, this.id, childList, container);\r
+ }\r
+ if (userToggle) {\r
+ userToggle.apply(this, arguments);\r
+ }\r
+ }\r
+ }));\r
+};\r
+\r
+})(jQuery);
\ No newline at end of file