(function($){
var ms={
init:function(obj,args){
/*if(window.localStorage){
alert('This browser supports localStorage');
}else{
alert('This browser does NOT support localStorage');
}*/
var cacheData=window.localStorage.getItem("site_navs");//$(this).data("site_navs");
if(!cacheData){
$.getJSON(args.url,function(data){
data=args.filter(data);
//$(this).data("site_navs",data);
window.localStorage.setItem("site_navs",JSON.stringify(data));
ms.writeHtml(obj,data,args);
});
}else{
ms.writeHtml(obj, $.parseJSON(cacheData),args);
}
},
writeHtml:function(obj,data,args){
var treenodes=ms.convertSimpleJsonToTree(args,data);
var node=null;
var htmlStr="";
htmlStr=htmlStr+"
";
obj.append(htmlStr);
},
writeChild:function(obj,args,node,navClz,i){
var htmlStr="";
var childs=null;
var childnode=null;
var target=node[args.navURL];
var base=args.base;
if(fnCheckSharp(target) || fnCheckHttp(target)){
base="";
}
var clz='';
var curSel=args.curSel;
if(curSel){
if(curSel==node.code){
clz='hover';
}
}
htmlStr=htmlStr+""+""+node[args.textFiled]+"
";
childs=node[args.childName];
if(childs){
htmlStr=htmlStr+"";
return htmlStr;
}else{
return htmlStr+"";
}
},
convertSimpleJsonToTree:function(args,data){
var idFiled=args.idFiled;
var parentField=args.parentField;
var textFiled=args.textFiled;
var childName=args.childName;
var tempChildName='menus';
if(childName){
tempChildName=childName;
}
if (parentField) {
idFiled =idFiled || 'id';
textFiled =textFiled || 'text';
parentField =parentField;
var i,
l,
treeData = [],
tmpMap = [];
for (i = 0, l = data.length; i < l; i++) {
tmpMap[data[i][idFiled]] = data[i];
//tmpMap[data[i][idFiled]].state="closed";
}
for (i = 0, l = data.length; i < l; i++) {
if (tmpMap[data[i][parentField]] && data[i][idFiled] != data[i][parentField]) {
if (!tmpMap[data[i][parentField]][tempChildName])
tmpMap[data[i][parentField]][tempChildName] = [];
data[i]['text'] = data[i][textFiled];
tmpMap[data[i][parentField]][tempChildName].push(data[i]);
//tmpMap[data[i][parentField]].state="closed";
} else {
data[i]['text'] = data[i][textFiled];
//data[i].state="closed";
treeData.push(data[i]);
}
}
return treeData;
}
}
};
function fnCheckHttp(s){
var patrn=/^(\w+:\/\/)/i;
if (!patrn.exec(s)){
return false
}
return true
}
function fnCheckSharp(s){
var patrn=/^#/;
if (!patrn.exec(s)){
return false
}
return true
}
$.fn.mynav=function(options){
var args=$.extend({"idFiled":"id","parentField":"pid","textFiled":"text","childName":"menus","nav":"nav_id","navURL":"url","base":"","filter":function(vdata){ return vdata;}},options);
return this.each(function(){
ms.init($(this),args);
});
};
})(jQuery);