/**
*name: jquery.checkTree
*author: Elyor Latipov
*version: 0.1.1
*/
/**input data format:
[{
item:{id:'id', label:'label',value:1, checked:false},
chidren:[{
item:{id:'id', label:'label', checked:false},
chidren:[...]
}]
}, ....]
*/
(function ($) {
jQuery.fn.checkTree = function (settings) {
settings = $.extend({
data: [], // input data which will be used to initilze the tree
onExpand: null, // an event will be triggered when the tree node was expanded
onCollapse: null, // an event will be triigered when the tree node was collapsed
onPreCheck: null, // an event will be triggered before the tree node was checked
onCheck: null, // an event will be triggered when the tree node was checked
onUnCheck: null, // an event will be triggered when the tree node was unchecked
onLabelHoverOver: null,// an event will be triggered when mouse hover over the label
onLabelHoverOut: null // an event will be triggered when mouse hover out the label
}, settings);
var container = $(this), $tree = this;
//get children html tag string
function getChildrenHtml(treesdata) {
var result = '', len = treesdata.length, node, clen, arrowClass, checkedClass = ''
checkedChildren;
for (i = 0; i < len; i++) {
node = treesdata[i];
$.data($tree, node.item.id, node); //attach node data to node id
clen = node.children ? node.children.length : 0;
arrowClass = 'collapsed';
if (clen === 0) {
arrowClass = 'nochildren';
checkClass = node.item.checked ? 'checked' : '';
} else {
var checkedChildren = $.grep(node.children, function (el) {
return el.item.checked;
});
checkClass = checkedChildren.length === 0 ? '' : checkedChildren.length === clen ? 'checked' : 'half_checked';
}
result += '
';
}
return result;
}
//display children node with data source
function updateChildrenNodes($li, data, isExpanded) {
if (data.children && data.children.length > 0) {
var innerHtml = isExpanded ? '