(function ($) {
$.extend($.tree.callback,{
/*CheckNode状态改变以后,回调函数*/
oncheckchanged:function(NODE,TREE_OBJ){
return true;
}
});
$.extend($.tree.plugins, {
"checkbox" : {
defaults : {
three_state : true
},
get_checked : function (t) {
if(!t) t = $.tree.focused();
return t.container.find("a.checked").parent();
},
get_undeterminded : function (t) {
if(!t) t = $.tree.focused();
return t.container.find("a.undetermined").parent();
},
get_unchecked : function (t) {
if(!t) t = $.tree.focused();
return t.container.find("a:not(.checked, .undetermined)").parent();
},
check : function (n) {
if(!n) return false;
var t = $.tree.reference(n);
n = t.get_node(n);
if(n.children("a").hasClass("checked")) return true;
var opts = $.extend(true, {}, $.tree.plugins.checkbox.defaults, t.settings.plugins.checkbox);
if(opts.three_state) {
n.find("li").andSelf().children("a").removeClass("unchecked undetermined").addClass("checked");
n.parents("li").each(function () {
if($(this).children("ul").find("a:not(.checked):eq(0)").size() > 0) {
$(this).parents("li").andSelf().children("a").removeClass("unchecked checked").addClass("undetermined");
return false;
}
else $(this).children("a").removeClass("unchecked undetermined").addClass("checked");
});
}
else n.children("a").removeClass("unchecked").addClass("checked");
t.callback("oncheckchanged", [n,t]);
return true;
},
uncheck : function (n) {
if(!n) return false;
var t = $.tree.reference(n);
n = t.get_node(n);
if(n.children("a").hasClass("unchecked")) return true;
var opts = $.extend(true, {}, $.tree.plugins.checkbox.defaults, t.settings.plugins.checkbox);
if(opts.three_state) {
n.find("li").andSelf().children("a").removeClass("checked undetermined").addClass("unchecked");
n.parents("li").each(function () {
if($(this).find("a.checked, a.undetermined").size() - 1 > 0) {
$(this).parents("li").andSelf().children("a").removeClass("unchecked checked").addClass("undetermined");
return false;
}
else $(this).children("a").removeClass("checked undetermined").addClass("unchecked");
});
}
else n.children("a").removeClass("checked").addClass("unchecked");
t.callback("oncheckchanged", [n,t]);
return true;
},
toggle : function (n) {
if(!n) return false;
var t = $.tree.reference(n);
n = t.get_node(n);
if(n.children("a").hasClass("checked")) $.tree.plugins.checkbox.uncheck(n);
else $.tree.plugins.checkbox.check(n);
},
get_nodestate :function(n){
if(!n) return false;
var t = $.tree.reference(n);
n = t.get_node(n);
return n.children("a").hasClass("checked");
},
callbacks : {
onchange : function(n, t) {
$.tree.plugins.checkbox.toggle(n);
}
}
}
});
})(jQuery);