by welefen

This commit is contained in:
welefen 2013-10-30 17:22:56 +08:00
parent 4cfccf257d
commit c5ec097dba
15 changed files with 148 additions and 32 deletions

View File

@ -1,4 +1,5 @@
module.exports = {
//"配置项": "配置值"
deny_ip: []
deny_ip: [],
tpl_engine_type: ""
};

View File

@ -5,12 +5,11 @@ module.exports = Action(function(){
},
indexAction: function(){
var cookie = this.cookie("name");
this.header("Access-Control-Allow-Origin", "*");
console.log(__request.headers);
//this.cookie("name", "welefen test");
this.echo("welefen");
this.end();
//this.redirect("http://www.baidu.com");
this.assign({
name: "welefen"
})
this.display();
},
testAction: function(test, test2){
console.log("test value: " + test + ","+test2);

View File

@ -87,12 +87,12 @@ global.Behavior = function(obj){
* 调用一个指定的行为
* @param {[type]} name [description]
*/
global.B = function(name){
global.B = function(name, data){
var cls = name + "Behavior";
if (APP_DEBUG) {
G('behavior_start');
};
var result = think_require(cls)().run();
var result = think_require(cls)().run(data);
if (APP_DEBUG) {
G('behavior_end');
};
@ -103,10 +103,10 @@ global.B = function(name){
* 处理标签扩展
* @return {[type]} [description]
*/
global.tag = function(name){
global.tag = function(name, data){
var sys_tags = C('sys_tags.' + name);
var tags = C('tags.' + name);
global.__behavior_value = undefined;
global.__behavior_data = data;
if (tags) {
var override = false;
if (typeof tags[0] == 'boolean') {
@ -124,13 +124,13 @@ global.tag = function(name){
G(name + '_start');
};
tags.forEach(function(b){
var result = B(b);
var result = B(b, __behavior_data);
if (result !== undefined) {
__behavior_value = result;
__behavior_data = result;
};
})
};
return __behavior_value;
return __behavior_data;
}
/**
* 记录时间和内存使用情况

View File

@ -19,8 +19,8 @@ module.exports = {
url_module_map: {}, //模块别名,隐藏真实模块名
url_action_map: {}, //Action别名
app_group_mode: 0, //0为普通分组1为独立分组
call_method: "__call", //当找不到方法时调用什么方法
url_params_bind: true, //方法参数绑定
call_method: "__call", //当找不到方法时调用什么方法,这个方法存在时才有效
url_params_bind: true, //方法参数绑定,将URL参数值绑定到action的参数上
class_file_suffix: ".class.js", //类文件后缀
action_suffix: "Action", //action后缀
cookie_expires: 0, //cookie默认保持时间数默认随浏览器关闭失效
@ -29,12 +29,10 @@ module.exports = {
tpl_content_type: "text/html", //模版输出类型
tpl_file_suffix: ".html", //模版文件名后缀
tpl_file_depr: "_", //module和action之间的分隔符
tpl_engine_type: "nsmarty", //模版引擎名称
tpl_engine_type: "ejs", //模版引擎名称
tpl_engine_config: { //模版引擎需要的配置
left_delimiter: "{=",
right_delimiter: "=}",
auto_literal: false,
force_compile: false
open: "{%",
end: "%}",
}
};

View File

@ -11,8 +11,8 @@ module.exports = {
action_begin: [],
action_end: [],
view_begin: [],
view_template: [],
view_parse: [],
view_template: ["LocationTemplate"],
view_parse: ["ParseTemplate"],
view_filter: [],
view_end: []
}

View File

@ -5,7 +5,7 @@
*/
var url = require("url");
var Dispatcher = think_require("Dispatcher");
var behavior = Behavior(function(){
var behavior = module.exports = Behavior(function(){
return {
options: {
'url_route_on': false, //是否开启自定义URL路由
@ -166,5 +166,4 @@ var behavior = Behavior(function(){
return reg;
}
}
});
module.exports = behavior;
});

View File

@ -2,7 +2,7 @@
* 阻止ip来源访问
* @return {[type]} [description]
*/
var behavior = Behavior(function(){
var behavior = module.exports = Behavior(function(){
return {
options: {
deny_ip: []
@ -29,5 +29,4 @@ var behavior = Behavior(function(){
return true;
}
}
});
module.exports = behavior;
});

View File

@ -0,0 +1,41 @@
/**
* 定位模版的行为
* @return {[type]} [description]
*/
var behavior = module.exports = Behavior(function(){
return {
run: function(templateFile){
if (!is_file(templateFile)) {
return this.parseTemplateFile(templateFile);
};
},
parseTemplateFile: function(templateFile){
templateFile = templateFile || "";
if (!templateFile) {
templateFile = [
TMPL_PATH, "/", __http.req.group, "/",
__http.req.module.toLowerCase(),
C('tpl_file_depr'),
__http.req.action.toLowerCase(),
C('tpl_file_suffix')
].join("");
}else if(templateFile.indexOf(C('tpl_file_suffix')) === -1){
var path = templateFile.split(":");
var action = path.pop();
var module = path.pop() || __http.req.module.toLowerCase();
var group = ucfirst(path.pop()) || __http.req.group;
templateFile = [
TMPL_PATH, "/", group, "/",
module,
C('tpl_file_depr'),
action,
C('tpl_file_suffix')
].join("");
}
if (!is_file(templateFile)) {
throw_error(templateFile + " is not exist");
};
return templateFile;
}
}
});

View File

@ -0,0 +1,18 @@
/**
* 调用对应的模版引擎解析模版
* @return {[type]} [description]
*/
var behavior = module.exports = Behavior(function(){
return {
run: function(data){
var content = data.content || data.file;
var engine = C('tpl_engine_type');
//不使用模版引擎
if (!engine) {
return file_get_contents(content);
};
var engineClass = ucfirst(engine) + "Template";
return think_require(engineClass).fetch(content, data.var);
}
}
});

View File

@ -44,7 +44,7 @@ var App = {
};
};
if (!/^[A-Za-z](\w)*$/.test(action)) {
throw_error('action error');
throw_error('action name error');
};
if (typeof module[action] == 'function') {
if (C('url_params_bind')) {

View File

@ -88,6 +88,10 @@ var Think = {
EXTEND_PATH + "/Driver/Cache/" + sysfile,
THINK_LIB_PATH + "/Driver/Cache/" + sysfile
],
Template: [
EXTEND_PATH + "/Driver/Template/" + sysfile,
THINK_LIB_PATH + "/Driver/Template/" + sysfile
]
};
for(var name in config){
var length = name.length;

View File

@ -17,16 +17,39 @@ var view = module.exports = Class(function(){
};
return this.tVar[name];
},
display: function(templateFile, charset, conentType, content, prefix){
display: function(templateFile, charset, contentType, content, prefix){
tag("view_begin");
content = this.fetch(templateFile, content, prefix);
this.render(content, charset, contentType);
tag("view_end");
__response.end();
},
render: function(conent, charset, contentType){
render: function(content, charset, contentType){
if (charset === undefined) {
charset = C('encoding');
};
if (contentType === undefined) {
contentType = C('tpl_content_type');
};
__http.res.setHeader("Content-Type", contentType + "; charset="+charset);
__http.res.setHeader("X-Powered-By", "thinkjs");
__response.write(content || "", C('encoding'));
},
fetch: function(templateFile, content, prefix){
if (content === undefined) {
templateFile = tag("view_template", templateFile);
if (!is_file(templateFile)) {
return "";
};
};
content = tag("view_parse", {
"var": this.tVar,
"file": templateFile,
"content": content,
"prefix": prefix
});
content = tag("view_filter", content);
return content;
}
}
})

View File

@ -0,0 +1,11 @@
/**
* ejs
* https://github.com/visionmedia/ejs
* @type {[type]}
*/
var ejs = require("ejs");
var template = module.exports = {
fetch: function(templateFile, tVar){
}
}

View File

@ -0,0 +1,13 @@
/**
* jade
* @type {[type]}
*/
var jade = require("jade");
var template = module.exports = {
fetch: function(templateFile, tVar){
var content = file_get_contents(templateFile);
var fn = jade.compile(content, {});
var html = fn(tVar);
return html;
}
}

View File

@ -0,0 +1,10 @@
/**
* nsmarty模版
* @type {[type]}
*/
var nsmarty = require("nsmarty");
var template = module.exports = {
fetch: function(templateFile, tVar){
}
}