var Tree = function (element, options) { this.$element = $(element); this.options = $.extend({}, $.fn.tree.defaults, options); this.init(); }; Tree.prototype = { constructor: Tree, init: function () { var that = $(this); this.$element.find("label.tree-toggler, .icon-folder-close, .icon-folder-open").click( function () { if ($(this).parent().parent().children("ul.tree").is(":visible")) { $(this).parent().children(".icon-folder-open") .removeClass("icon-folder-open") .addClass("icon-folder-close"); that.trigger('collapse'); } else { $(this).parent().children(".icon-folder-close") .removeClass("icon-folder-close") .addClass("icon-folder-open"); that.trigger('expand'); } $(this).parent().parent().children("ul.tree").toggle(300); } ); this.$element.find("li").click( function () { $('.tree-selected').removeClass("tree-selected"); $('li input:checked').parent().addClass("tree-selected"); } ); return $(this); }, collapseAll : function($speed) { this.$element.find("label.tree-toggler").each( function() { $(this).parent().children(".icon-folder-open") .removeClass("icon-folder-open") .addClass("icon-folder-close"); $(this).parent().parent().children("ul.tree").hide($speed); } ); return $(this); }, expandAll : function($speed) { this.$element.find("label.tree-toggler").each( function() { $(this).parent().children(".icon-folder-close") .removeClass("icon-folder-close") .addClass("icon-folder-open"); $(this).parent().parent().children("ul.tree").show($speed); } ); return $(this); }, }; $.fn.tree = function (option, value) { var methodReturn; var $set = this.each( function () { var $this = $(this); var data = $this.data('tree'); var options = typeof option === 'object' && option; if (!data){ $this.data('tree', (data = new Tree(this, options))); } if (typeof option === 'string') { methodReturn = data[option](value); } } ); return (methodReturn === undefined) ? $set : methodReturn; }; $.fn.tree.Constructor = Tree;