smarty/lib/main.js

90 lines
1.8 KiB
JavaScript
Raw Normal View History

2017-02-05 14:54:47 +08:00
/**
2017-03-17 18:07:35 +08:00
* nodeJS 模板引擎(依赖doJS框架)
2017-02-05 14:54:47 +08:00
* @authors yutent (yutent@doui.cc)
2017-03-17 18:07:35 +08:00
* @date 2015-12-28 13:57:12
2017-02-05 14:54:47 +08:00
*
*/
"use strict";
2017-03-17 18:35:15 +08:00
require('es.shim')
2017-03-17 18:07:35 +08:00
const Tool = require('./tool'),
fs = require('fs'),
path = require('path'),
md5 = require('./md5');
class Smarty {
constructor(conf){
this.conf = {}
if(!Object.empty(conf))
this.conf = conf
this.conf.cache = this.conf.hasOwnProperty('cache') ? this.conf.cache : true
this.tool = new Tool(conf)
this.data = {} //预定义的变量储存
this.cache = {} //模块缓存
}
/**
* 定义变量
* @param {Str} key 变量名
* @param {any} val
*/
assign(key, val){
key += ''
if(!key)
return this
this.data[key] = val
return this
}
/**
* [render 模板渲染]
* @param {String} tpl 模板路径
* @param {String} uuid 唯一标识
* @return {Promise} 返回一个Promise对象
*/
render(tpl = '', uuid = ''){
return new Promise((yes, no) => {
if(!tpl)
return no('argument[tpl] can not be empty')
if(!/\.tpl$/.test(tpl))
tpl += '.tpl'
let cacheId = md5(tpl + uuid);
if(this.conf.cache && this.cache[cacheId])
return yes(this.cache[cacheId])
if(!fs.existsSync(tpl))
return no('Can not find template "' + tpl + '"')
this.tool.config('path', path.parse(tpl).dir + '/')
this.cache[cacheId] = fs.readFileSync(tpl) + ''
try{
this.cache[cacheId] = this.tool.parse(this.cache[cacheId], this.data)
yes(this.cache[cacheId])
}catch(err){
no(err)
}
})
}
}
module.exports = Smarty
2017-02-05 14:54:47 +08:00