网站制作

本类阅读TOP10

·IIS 安装配置全攻略
·用VS.NET打开网上下载的.NET web项目出错的解决办法
·HTML 4.0 语言快速参考
·限制TextArea区的文字输入数量
·如何在网页上实现进度条
·Apache的配置步骤及测试
·谈谈Jesse James Garrett提到的Ajax
·html基础学习笔记(2)
·页面垂直居中的两种方法
·用asp遍历目录下文件的例子

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
Javascript模板技术

作者:未知 来源:月光软件站 加入时间:2005-6-5 月光软件站

/***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.");
  return false;
 }
 try
 {
  var fr=this.fso.OpenTextFile(filename);
  var s=fr.ReadAll();
  if(s=="")
  {
   halt("loadfile:while loading "+handle+","+filename+" is empty.");
   return false;
  }
  this.set_var(handle,s);
 }
 catch(e)
 {
  
 }
 return true;
}

/**
 * 获取变量
 * @param varname
 * @return
 */
function _get_var(varname)
{
 if(this.varvals.containsKey(varname))
  return this.varvals.get(varname);
 else
  return "";
}

/**
 * 判断目录
 * @param path
 * @return
 */
function _is_dir(path)
{
 if(this.fso.FolderExists(path))
  return true;
 else
  return false;
}
 
/**
* 判断文件
* @param filename
* @return
*/
function _file_exists(filename)
{
 if(this.fso.FileExists(filename))
  return true;
 else
  return false;
}
 
/**
 * 文件名处理
 * @param filename
 * @return
 */
function _filename(filename)
{
 if(!this.file_exists(this.root+filename))
 {
  this.halt("filename:file "+filename+" does not exist.");
 }
 return this.root+filename;
}
 
/**
 * 变量名处理
 * @param varname
 * @return
 */
function _varname(varname)
{
 return "{"+varname+"}";
}
 
/**
 * 完成字符串的处理
 * @param str
 * @return
 */
function _finish(str)
{
 var re=new RegExp("{[^ \\t\\r\\n\\}]+\\}","g");
 if(this.unknowns=="remove")
 {
  str=str.replace(re,"");
 }
 else if(this.unknowns=="comment")
 {
  str=str.replace(re,"<!-- Template Variable undefined -->");
 }
 else
 {
  ;
 }
 return str;
}

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("Template Error:"+msg);
}


/**
 * HashMap构造函数
 */
function HashMap()
{
    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)
{
    return typeof this[this.prefix + key] == "undefined"
            ? null : this[this.prefix + key];
}
/**
 * 从HashMap中获取所有key的集合,以数组形式返回
 */
HashMap.prototype.keySet = function()
{
    var arrKeySet = new Array();
    var index = 0;
    for(var strKey in this)
    {
        if(strKey.substring(0,this.prefix.length) == this.prefix)
            arrKeySet[index ++] = strKey.substring(this.prefix.length);
    }
    return arrKeySet.length == 0 ? null : arrKeySet;
}
/**
 * 从HashMap中获取value的集合,以数组形式返回
 */
HashMap.prototype.values = function()
{
    var arrValues = new Array();
    var index = 0;
    for(var strKey in this)
    {
        if(strKey.substring(0,this.prefix.length) == this.prefix)
            arrValues[index ++] = this[strKey];
    }
    return arrValues.length == 0 ? null : arrValues;
}
/**
 * 获取HashMap的value值数量
 */
HashMap.prototype.size = function()
{
    return this.length;
}
/**
 * 删除指定的值
 */
HashMap.prototype.remove = function(key)
{
    delete this[this.prefix + key];
    this.length --;
}
/**
 * 清空HashMap
 */
HashMap.prototype.clear = function()
{
    for(var strKey in this)
    {
        if(strKey.substring(0,this.prefix.length) == this.prefix)
            delete this[strKey];  
    }
    this.length = 0;
}
/**
 * 判断HashMap是否为空
 */
HashMap.prototype.isEmpty = function()
{
    return this.length == 0;
}
/**
 * 判断HashMap是否存在某个key
 */
HashMap.prototype.containsKey = function(key)
{
    for(var strKey in this)
    {
       if(strKey == this.prefix + key)
          return true; 
    }
    return false;
}
/**
 * 判断HashMap是否存在某个value
 */
HashMap.prototype.containsValue = function(value)
{
    for(var strKey in this)
    {
       if(this[strKey] == value)
          return true; 
    }
    return false;
}
/**
 * 把一个HashMap的值加入到另一个HashMap中,参数必须是HashMap
 */
HashMap.prototype.putAll = function(map)
{
    if(map == null)
        return;
    if(map.constructor != JHashMap)
        return;
    var arrKey = map.keySet();
    var arrValue = map.values();
    for(var i in arrKey)
       this.put(arrKey[i],arrValue[i]);
}
//toString
HashMap.prototype.toString = function()
{
    var str = "";
    for(var strKey in this)

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

<!--     main.htm     -->

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>

<body>
<p>{HEAD}</p>
<p>{WELCOME}
</p>
<table width="100%"  border="1" cellspacing="1" cellpadding="3">
  <!-- BEGIN BROWS -->
  <tr>
   <!-- BEGIN BCOLS -->
    <td>{NUMBER}</td>
 <!-- END BCOLS -->
  </tr>
  <!-- END BROWS -->
</table>
<p>{FOOT}</p>
</body>
</html>


<!--      head.htm       -->

<table width="100%"  border="1" cellspacing="1" cellpadding="3">
  <tr>
    <td>网站首页</td>
  </tr>
</table>


<!--     foot.htm       -->

<table width="100%"  border="1" cellspacing="1" cellpadding="3">
  <tr>
    <td>版权所有:网站梦工厂</td>
  </tr>
</table>


<!--    index.htm     -->

<script src="script/Template.class.js"></script>
<script>
var tmplt=new Template();
var root=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(var i=0;i<10;i++)
{
 tmplt.set_var("cols","");
 for(var j=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>




相关文章

相关软件




月光软件源码下载编程文档电脑教程网站优化网址导航网络文学游戏天地生活休闲写作范文安妮宝贝站内搜索
电脑技术编程开发网络专区谈天说地情感世界游戏元素分类游戏热门游戏体育运动手机专区业余爱好影视沙龙
音乐天地数码广场教育园地科学大观古今纵横谈股论金人文艺术医学保健动漫图酷二手专区地方风情各行各业

月光软件站·版权所有