You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.9 KiB
72 lines
1.9 KiB
/* |
|
* 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) { |
|
$.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({ |
|
text:"placeholder", |
|
id:"placeholder", |
|
children:[] |
|
}, branch); |
|
} |
|
if (this.children && this.children.length) { |
|
$.each(this.children, createNode, [branch]) |
|
} |
|
} |
|
} |
|
$.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; |
|
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"); |
|
childList.empty(); |
|
load(settings, this.id, childList, container); |
|
} |
|
if (userToggle) { |
|
userToggle.apply(this, arguments); |
|
} |
|
} |
|
})); |
|
}; |
|
|
|
})(jQuery); |