Javascript模板技术

时间:2021-05-26

/***Template.class.js***/

functionTemplate()
{
this.classname="Template";
this.debug=false;
this.file=newHashMap();
this.root="";
this.varkeys=newHashMap();
this.varvals=newHashMap();
this.unknowns="remove";
this.halt_on_error="yes";
this.last_error="";
this.fso=newActiveXObject("Scripting.FileSystemObject");
this.set_root=_set_root;
this.set_unknowns=_set_unknowns;
this.get_var=_get_var;
this.set_file=_set_file;
this.set_var=_set_var;
this.set_block=_set_block;
this.subst=_subst;
this.parse=_parse;
this.p=_p;
this.pparse=_pparse;
this.finish=_finish;
this.loadfile=_loadfile;
this.is_dir=_is_dir;
this.file_exists=_file_exists;
this.filename=_filename;
this.varname=_varname;
this.halt=_halt;
this.haltmsg=_haltmsg;
}

/**
*设置模板文件根目录
*@paramroot
*/
function_set_root(root)
{
if(!this.is_dir(root))
{
this.halt("set_root:"+root+"isnotadirectory.");
}
this.root=root;
}

/**
*设定对未知模板变量的处理办法
*@paramunknowns
*/
function_set_unknowns(unknowns)
{
this.unknowns=unknowns;
}

/**
*设定模板文件
*@paramhandle
*@paramfilename
*/
function_set_file(handle,filename)
{
this.file.put(handle,this.filename(filename));
}

/**
*设定模板变量
*@paramvarname
*@paramvalue
*/
function_set_var(varname,value)
{
if(!this.varkeys.containsKey(varname))
{
this.varkeys.put(varname,this.varname(varname));
}
if(!this.varvals.containsKey(varname))
{
this.varvals.put(varname,value);
}
else
{
this.varvals.remove(varname);
this.varvals.put(varname,value);
}
//alert(varname+"=================="+value);
}

/**
*设定块变量
*@paramparent
*@paramhandle
*@paramname
*/
function_set_block(parent,handle,name)
{
if(!this.loadfile(parent))
{
this.halt("subst:unabletoload"+parent);
}
if(name=="")
{
name=handle;
}
varstr=this.get_var(parent);
varre=newRegExp("<!--\\s+BEGIN"+handle+"\\s+-->([\\s\\S.]*)<!--\\s+END"+handle+"\\s+-->");
//Matcherm=p.matcher(str);
//varrs=m.find();
//vart=m.group(m.groupCount());
//this.set_var(handle,t);
vararr=re.exec(str);
if(arr!=null)
this.set_var(handle,RegExp.$1);
str=str.replace(re,"{"+name+"}");
this.set_var(parent,str);
}

/**
*进行变量替换
*@paramhandle
*@return
*/
function_subst(handle)
{
if(!this.loadfile(handle))
{
this.halt("subst:unabletoload"+handle);
}
varstr=this.get_var(handle);
varkeys=this.varkeys.keySet();
//alert(keys.length);
for(vari=0;i<keys.length;i++)
{
varkey=keys[i];
varre=newRegExp(this.varkeys.get(key),"g")
str=str.replace(re,this.varvals.get(key));
}
//alert(handle+"++++++++++++++++++"+str);
returnstr;
}

/**
*进行变量复制
*@paramtarget
*@paramhandle
*@paramappend
*/
function_parse(target,handle,append)
{
varstr=this.subst(handle);
if(append)
{
this.set_var(target,this.get_var(target)+str);
}
else
{
this.set_var(target,str);
}
}

/**
*返回替换后的文件
*@paramvarname
*@return
*/
function_p(varname)
{
returnthis.finish(this.get_var(varname));
}

/**
*parse()和p()的合并
*@paramtarget
*@paramhandle
*@paramappend
*@return
*/
function_pparse(target,handle,append)
{
this.parse(target,handle,append);
document.writeln(this.p(target));
}

/**
*加载模板文件
*@paramhandle
*@return
*/
function_loadfile(handle)
{
if(this.varkeys.containsKey(handle)&&this.varvals.get(handle)!=null)
{
returntrue;
}
if(!this.file.containsKey(handle))
{
_halt("loadfile:"+handle+"isnotavalidhandle.");
returnfalse;
}
varfilename=this.file.get(handle);
if(!this.file_exists(filename))
{
this.halt("loadfile:whileloading"+handle+","+filename+"doesnotexist.");
returnfalse;
}
try
{
varfr=this.fso.OpenTextFile(filename);
vars=fr.ReadAll();
if(s=="")
{
halt("loadfile:whileloading"+handle+","+filename+"isempty.");
returnfalse;
}
this.set_var(handle,s);
}
catch(e)
{

}
returntrue;
}

/**
*获取变量
*@paramvarname
*@return
*/
function_get_var(varname)
{
if(this.varvals.containsKey(varname))
returnthis.varvals.get(varname);
else
return"";
}

/**
*判断目录
*@parampath
*@return
*/
function_is_dir(path)
{
if(this.fso.FolderExists(path))
returntrue;
else
returnfalse;
}

/**
*判断文件
*@paramfilename
*@return
*/
function_file_exists(filename)
{
if(this.fso.FileExists(filename))
returntrue;
else
returnfalse;
}

/**
*文件名处理
*@paramfilename
*@return
*/
function_filename(filename)
{
if(!this.file_exists(this.root+filename))
{
this.halt("filename:file"+filename+"doesnotexist.");
}
returnthis.root+filename;
}

/**
*变量名处理
*@paramvarname
*@return
*/
function_varname(varname)
{
return"{"+varname+"}";
}

/**
*完成字符串的处理
*@paramstr
*@return
*/
function_finish(str)
{
varre=newRegExp("{[^\\t\\r\\n\\}]+\\}","g");
if(this.unknowns=="remove")
{
str=str.replace(re,"");
}
elseif(this.unknowns=="comment")
{
str=str.replace(re,"<!--TemplateVariableundefined-->");
}
else
{

}
returnstr;
}

function_halt(msg)
{
this.last_error=msg;
if(this.halt_on_error!="no")
{
_haltmsg(msg);
}
if(this.halt_on_error=="yes")
{
alert("Halted.");
//System.exit(0);
}
}

function_haltmsg(msg)
{
alert("TemplateError:"+msg);
}


/**
*HashMap构造函数
*/
functionHashMap()
{
this.length=0;
this.prefix="hashmap_prefix_20050524_";
}
/**
*向HashMap中添加键值对
*/
HashMap.prototype.put=function(key,value)
{
this[this.prefix+key]=value;
this.length++;
}
/**
*从HashMap中获取value值
*/
HashMap.prototype.get=function(key)
{
returntypeofthis[this.prefix+key]=="undefined"
?null:this[this.prefix+key];
}
/**
*从HashMap中获取所有key的集合,以数组形式返回
*/
HashMap.prototype.keySet=function()
{
vararrKeySet=newArray();
varindex=0;
for(varstrKeyinthis)
{
if(strKey.substring(0,this.prefix.length)==this.prefix)
arrKeySet[index++]=strKey.substring(this.prefix.length);
}
returnarrKeySet.length==0?null:arrKeySet;
}
/**
*从HashMap中获取value的集合,以数组形式返回
*/
HashMap.prototype.values=function()
{
vararrValues=newArray();
varindex=0;
for(varstrKeyinthis)
{
if(strKey.substring(0,this.prefix.length)==this.prefix)
arrValues[index++]=this[strKey];
}
returnarrValues.length==0?null:arrValues;
}
/**
*获取HashMap的value值数量
*/
HashMap.prototype.size=function()
{
returnthis.length;
}
/**
*删除指定的值
*/
HashMap.prototype.remove=function(key)
{
deletethis[this.prefix+key];
this.length--;
}
/**
*清空HashMap
*/
HashMap.prototype.clear=function()
{
for(varstrKeyinthis)
{
if(strKey.substring(0,this.prefix.length)==this.prefix)
deletethis[strKey];
}
this.length=0;
}
/**
*判断HashMap是否为空
*/
HashMap.prototype.isEmpty=function()
{
returnthis.length==0;
}
/**
*判断HashMap是否存在某个key
*/
HashMap.prototype.containsKey=function(key)
{
for(varstrKeyinthis)
{
if(strKey==this.prefix+key)
returntrue;
}
returnfalse;
}
/**
*判断HashMap是否存在某个value
*/
HashMap.prototype.containsValue=function(value)
{
for(varstrKeyinthis)
{
if(this[strKey]==value)
returntrue;
}
returnfalse;
}
/**
*把一个HashMap的值加入到另一个HashMap中,参数必须是HashMap
*/
HashMap.prototype.putAll=function(map)
{
if(map==null)
return;
if(map.constructor!=JHashMap)
return;
vararrKey=map.keySet();
vararrValue=map.values();
for(variinarrKey)
this.put(arrKey[i],arrValue[i]);
}
//toString
HashMap.prototype.toString=function()
{
varstr="";
for(varstrKeyinthis)

{
if(strKey.substring(0,this.prefix.length)==this.prefix)
str+=strKey.substring(this.prefix.length)
+":"+this[strKey]+"\r\n";
}
returnstr;
}



<!--main.htm-->

<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"
"http://E","欢迎光临");
for(vari=0;i<10;i++)
{
tmplt.set_var("cols","");
for(varj=0;j<10;j++)
{
tmplt.set_var("NUMBER",i+"."+j);
tmplt.parse("cols","BCOLS",true);
}
tmplt.parse("rows","BROWS",true);
}
tmplt.parse("HEAD","head",false);
tmplt.parse("FOOT","foot",false);
tmplt.pparse("out","fh",false);
</script>

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章