You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
text/web/lay/modules/laytpl.js

87 lines
3.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/** layui-v2.5.6 MIT License By https://www.layui.com */
;layui.define(function(e){"use strict";
// 配置模板语法的起始和结束符
var r={open:"{{",close:"}}"},
// 定义常用的正则表达式和方法
c={
exp:function(e){ // 用于生成全局的正则表达式
return new RegExp(e,"g")
},
query:function(e,c,t){ // 生成模板查询的正则表达式
var o=["#([\\s\\S])+?","([^{#}])*?"][e||0];
return n((c||"")+r.open+o+r.close+(t||""))
},
escape:function(e){ // 转义HTML特殊字符
return String(e||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&")
.replace(/</g,"&lt;").replace(/>/g,"&gt;")
.replace(/'/g,"&#39;").replace(/"/g,"&quot;")
},
error:function(e,r){ // 输出错误信息
var c="Laytpl Error";
return "object"==typeof console&&console.error(c+e+"\n"+(r||"")),c+e
}
},
n=c.exp, // 正则表达式处理函数
t=function(e){ this.tpl=e }; // 定义一个模板处理类
t.pt=t.prototype, window.errors=0;
// 模板解析方法
t.pt.parse=function(e,t){
var o=this,p=e,a=n("^"+r.open+"#",""),l=n(r.close+"$","");
// 清理模板中的多余空格和符号
e=e.replace(/\s+|\r|\t|\n/g," ")
.replace(n(r.open+"#"),r.open+"# ")
.replace(n(r.close+"}"),"} "+r.close)
.replace(/\\/g,"\\\\")
.replace(n(r.open+"!(.+?)!"+r.close),function(e){
return e=e.replace(n("^"+r.open+"!"),"")
.replace(n("!"+r.close),"")
.replace(n(r.open+"|"+r.close),function(e){
return e.replace(/(.)/g,"\\$1")
})
})
.replace(/(?="|')/g,"\\")
.replace(c.query(),function(e){
return e=e.replace(a,"").replace(l,""),
'";'+e.replace(/\\/g,"")+';view+="'
})
.replace(c.query(1),function(e){
var c='"+(';
return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(n(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),c='"+_escape_('),c+e.replace(/\\/g,"")+')+"')
});
// 构建最终的JavaScript代码
e='"use strict";var view = "'+e+'";return view;';
try{
// 执行生成的模板代码
return o.cache=e=new Function("d, _escape_",e),e(t,c.escape)
}catch(u){
// 如果模板解析失败,输出错误信息
return delete o.cache,c.error(u,p)
}
};
// 渲染模板方法
t.pt.render=function(e,r){
var n,t=this;
return e ? (n=t.cache ? t.cache(e,c.escape) : t.parse(t.tpl,e), r ? void r(n) : n) : c.error("no data");
};
// 创建模板对象
var o=function(e){
return "string"!=typeof e ? c.error("Template not found") : new t(e)
};
// 配置模板引擎的选项
o.config=function(e){
e=e||{};
for(var c in e) r[c]=e[c]
};
// 设置模板版本
o.v="1.2.0", e("laytpl",o)
});