Javascript模板技术
Javascript模板技术
发布时间:2016-12-30 来源:查字典编辑
摘要:/***Template.class.js***/functionTemplate(){this.classname="Template";...

/***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("<>([sS.]*)<>");

//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("{[^trn}]+}","g");

if(this.unknowns=="remove")

{

str=str.replace(re,"");

}

elseif(this.unknowns=="comment")

{

str=str.replace(re,"<>");

}

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]+"rn";

}

returnstr;

}

<>

<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"

"http://www.w3.org/TR/html4...

<html>

<head>

<metahttp-equiv="Content-Type"content="text/html;charset=gb2312">

<title>无标题文档</title>

</head>

<body>

<p>{HEAD}</p>

<p>{WELCOME}

</p>

<tablewidth="100%"border="1"cellspacing="1"cellpadding="3">

<>

<tr>

<>

<td>{NUMBER}</td>

<>

</tr>

<>

</table>

<p>{FOOT}</p>

</body>

</html>

<>

<tablewidth="100%"border="1"cellspacing="1"cellpadding="3">

<tr>

<td>网站首页</td>

</tr>

</table>

<>

<tablewidth="100%"border="1"cellspacing="1"cellpadding="3">

<tr>

<td>版权所有:网站梦工厂</td>

</tr>

</table>

<>

<scriptsrc="/script/Template.class.js"></script>

<script>

vartmplt=newTemplate();

varroot=location.href;

root=unescape(root.substring(8,root.lastIndexOf("/")+1));

tmplt.set_root(root);

tmplt.set_file("fh","tpl/main.htm");

tmplt.set_file("head","tpl/head.htm");

tmplt.set_file("foot","tpl/foot.htm");

tmplt.set_block("fh","BROWS","rows");

tmplt.set_block("BROWS","BCOLS","cols");

tmplt.set_var("WELCOME","欢迎光临");

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>

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类