Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->网站设计 ->JavaScript ->正文

Javascript模板技术

来源:Linuxdby.com 作者:Webmaster 时间:2007-04-13 点击: [收藏] [投稿]

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

function Template()
{
 this.classname="Template";
 this.debug=false;
 this.file=new HashMap();
 this.root="";
 this.varkeys=new  HashMap();
 this.varvals=new  HashMap();
 this.unknowns="remove";
 this.halt_on_error="yes";
 this.last_error="";
 this.fso=new ActiveXObject("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;
}

/**
 * 设置模板文件根目录
 * @param root
 */
function _set_root(root)
{
 if(!this.is_dir(root))
 {
  this.halt("set_root:"+root+" is not a directory.");
 }
 this.root=root;
}
 
/**
 * 设定对未知模板变量的处理办法
 * @param unknowns
 */
function _set_unknowns(unknowns)
{
 this.unknowns=unknowns;
}
 
/**
 * 设定模板文件
 * @param handle
 * @param filename
 */
function _set_file(handle,filename)
{
 this.file.put(handle,this.filename(filename));
}
 
/**
 * 设定模板变量
 * @param varname
 * @param value
 */
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);
}

/**
 * 设定块变量
 * @param parent
 * @param handle
 * @param name
 */
function _set_block(parent,handle,name)
{
 if(!this.loadfile(parent))
 {
  this.halt("subst:unable to load "+parent);
 }
 if(name=="")
 {
  name=handle;
 }
 var str=this.get_var(parent);
 var re=new RegExp("<!--\\s+BEGIN " + handle + "\\s+-->([\\s\\S.]*)<!--\\s+END " + handle + "\\s+-->");
 //Matcher m=p.matcher(str);
 //var rs=m.find();
 //var t=m.group(m.groupCount());
 //this.set_var(handle,t);
 var arr=re.exec(str);
 if(arr!=null)
  this.set_var(handle,RegExp.$1);
 str=str.replace(re,"{"+name+"}");
 this.set_var(parent,str);
}

/**
 * 进行变量替换
 * @param handle
 * @return
 */
function _subst(handle)
{
 if(!this.loadfile(handle))
 {
  this.halt("subst:unable to load "+handle);
 }
 var str=this.get_var(handle);
 var keys=this.varkeys.keySet();
 //alert(keys.length);
 for(var i=0;i<keys.length;i++)
 {
  var key=keys[i];
  var re=new RegExp(this.varkeys.get(key),"g")
  str=str.replace(re,this.varvals.get(key));
 }
    //alert(handle+"++++++++++++++++++"+str);
 return str;
}
 
/**
 * 进行变量复制
 * @param target
 * @param handle
 * @param append
 */
function _parse(target,handle,append)
{
 var str=this.subst(handle);
 if(append)
 {
  this.set_var(target,this.get_var(target)+str);
 }
 else
 {
  this.set_var(target,str);
 }
}

/**
 * 返回替换后的文件
 * @param varname
 * @return
 */
function _p(varname)
{
 return this.finish(this.get_var(varname));
}
 
/**
 * parse()和p()的合并
 * @param target
 * @param handle
 * @param append
 * @return
 */
function _pparse(target,handle,append)
{
 this.parse(target,handle,append);
 document.writeln(this.p(target));
}

/**
 * 加载模板文件
 * @param handle
 * @return
 */
function _loadfile(handle)
{
 if(this.varkeys.containsKey(handle) && this.varvals.get(handle)!=null)
 {
  return true;
 }
 if(!this.file.containsKey(handle))
 {
  _halt("loadfile:"+handle+" is not a valid handle.");
  return false;
 }
 var  filename=this.file.get(handle);
 if(!this.file_exists(filename))
 {
  this.halt("loadfile:while loading "+handle+","+filename+" does not exist.");

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇: java方式来写js程序(demo)   下一篇: 一段取得翻唱排行榜上歌曲名称,艺人,地址的脚本程序

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号