/*
* the param is: url,data:json[[id,title,lft,rgt,pid]] 格式,
*/
(function($,window){
jQuery.fn.mtree=function(options){
var $owner=this,
settings={url:'',data:'',collapse:true,folderitemcallback:function(id,object){return false;},itemcallback:function(id,object){return false;}};
settings=jQuery.extend(settings, $owner.settings || {}, options || {});
//todo:...
$owner.settings=settings;
var treeroot=jQuery('
');
$owner.on('click',':checkbox.mtree_item',function(){
var theurl=settings.url;
var $tthis=$(this);
if(!$tthis.is(':checked'))
return;
var id=$tthis.val();
if(id==null||id=='')
return;
if(theurl!=null && theurl!='')
{
var pnode=$tthis.parent('li');
var ulnode=pnode.children('ul');
if(!ulnode.is('UL'))
{
jQuery.getJSON(theurl, {id:id}, function(json, textStatus) {
//optional stuff to do after success
if(json==null||json=='')
return;
parsedata($tthis,json,settings.collapse);
});
}
}
var folderitemcallback=settings.folderitemcallback;
folderitemcallback(id);
});
$owner.live('click','a.mtree_item_a',function(){
var id=$(this).attr('rev')
var itemcallback=settings.itemcallback;
itemcallback(id);
});
function parsedata(treenode,data,collapse)
{
var plft=treenode.attr('lft');
var prgt=treenode.attr('rgt');
var pnode=treenode;
var tnode=null;
var valindex;
for (valindex in data) {
var val=data[valindex];
var lft=val[2];
var rgt=val[3];
var id=val[0];
var title=val[1];
var pid=val[4];
var tempnode=jQuery('');
if(rgt-lft>1)
{
var checkobj=null;
if(collapse==true||collapse=='true')
checkobj=jQuery('');
else
checkobj=jQuery('');
var labelobj=jQuery('');
checkobj.appendTo(tempnode);
labelobj.appendTo(tempnode);
}else{
var aobj=jQuery(''+title+'')
aobj.appendTo(tempnode);
}
var linode=tempnode;
while(true)
{
plft=pnode.attr('lft');
prgt=pnode.attr('rgt');
if(lft>plft&&lft');
tnode.append(linode);
pnode.append(tnode);
}
pnode=linode;
break;
}else{
var tppnode=pnode.parent("li");
if(!tppnode.is("LI"))
{
tppnode=pnode.parent("ul");
if(!tppnode.is("UL"))
break;
}
pnode=tppnode;
}
}
}
}
var url=$owner.settings.url;
var jsondata=null;
if (url!=null&&url!='') {
jQuery.getJSON('url', {}, function(json, textStatus) {
//optional stuff to do after success
jsondata=json;
});
}
if($owner.settings.data!=null&&$owner.settings.data!='')
{
try{
jsondata=$owner.settings.data;
}catch(e){alert(e);}
}
if(jsondata==null||jsondata=='')
return null;
parsedata(treeroot,jsondata,$owner.settings.collapse);
$owner.append(treeroot);
return {abort: function () {}};
}
})(jQuery,window);