(function($) { var CLASSES = $.treeview.classes; var proxied = $.fn.treeview; $.fn.treeview = function(settings) { settings = $.extend({}, settings); if (settings.add) { return this.trigger("add", [settings.add]); } if (settings.remove) { return this.trigger("remove", [settings.remove]); } return proxied.apply(this, arguments).bind("add", function(event, branches) { $(branches).prev() .removeClass(CLASSES.last) .removeClass(CLASSES.lastCollapsable) .removeClass(CLASSES.lastExpandable) .find(">.hitarea") .removeClass(CLASSES.lastCollapsableHitarea) .removeClass(CLASSES.lastExpandableHitarea); $(branches).find("li").addBack().prepareBranches(settings).applyClasses(settings, $(this).data("toggler")); }).bind("remove", function(event, branches) { var prev = $(branches).prev(); var parent = $(branches).parent(); $(branches).remove(); prev.filter(":last-child").addClass(CLASSES.last) .filter("." + CLASSES.expandable).replaceClass(CLASSES.last, CLASSES.lastExpandable).end() .find(">.hitarea").replaceClass(CLASSES.expandableHitarea, CLASSES.lastExpandableHitarea).end() .filter("." + CLASSES.collapsable).replaceClass(CLASSES.last, CLASSES.lastCollapsable).end() .find(">.hitarea").replaceClass(CLASSES.collapsableHitarea, CLASSES.lastCollapsableHitarea); if (parent.is(":not(:has(>))") && parent[0] != this) { parent.parent().removeClass(CLASSES.collapsable).removeClass(CLASSES.expandable); parent.siblings(".hitarea").addBack().remove(); } }); }; })(jQuery);