Skip to content

Commit d08e515

Browse files
author
sentsin
committed
修复潜在bug
1 parent 27f4f7c commit d08e515

File tree

2 files changed

+18
-16
lines changed

2 files changed

+18
-16
lines changed

laytpl.dev.js

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,10 @@ var tool = {
2323
//匹配满足规则内容
2424
query: function(type, _, __){
2525
var types = [
26-
'#([\\s\\S])*?', //js语句
27-
'#|', //语句开合
26+
'#([\\s\\S])+?', //js语句
2827
'([^{#}])*?' //普通字段
2928
][type || 0];
30-
return tool.exp((_||'') + config.open + types + config.close + (__||''));
29+
return exp((_||'') + config.open + types + config.close + (__||''));
3130
},
3231
escape: function(html){
3332
return String(html||'').replace(/&(?!#?[a-zA-Z0-9]+;)/g, '&')
@@ -40,7 +39,7 @@ var tool = {
4039
}
4140
};
4241

43-
var Tpl = function(tpl){
42+
var exp = tool.exp, Tpl = function(tpl){
4443
this.tpl = tpl;
4544
};
4645

@@ -49,21 +48,24 @@ Tpl.pt = Tpl.prototype;
4948
//核心引擎
5049
Tpl.pt.parse = function(tpl, data){
5150
var that = this, tplog = tpl;
52-
53-
tpl = tpl.replace(/\n|\t|\r/g, '').replace(/(?=\"|\')/g, '\\').replace(tool.query(), function(str){
54-
str = str.replace(/\\"|\\'/g, '"');
55-
return '";' + str.replace(tool.query(1, '^', '$'), '') + '; view+="';
56-
}).replace(tool.query(2), function(str){
51+
var jss = exp('^'+config.open+'#', ''), jsse = exp(config.close+'$', '');
52+
53+
tpl = tpl.replace(/[\r\t\n]/g, ' ').replace(exp(config.open+'#'), config.open+'# ')
54+
.replace(exp(config.close+'}'), '} '+config.close)
55+
.replace(/(?="|')/g, '\\').replace(tool.query(), function(str){
56+
str = str.replace(jss, '').replace(jsse, '');
57+
return '";' + str.replace(/\\/g, '') + '; view+="';
58+
}).replace(tool.query(1), function(str){
59+
var start = '"+(';
5760
if(str.replace(/\s/g, '') === config.open+config.close){
5861
return '';
5962
}
60-
var sexp = '^'+config.open, start = '(';
61-
if(tool.exp(sexp+'=').test(str)){
62-
sexp += '=';
63-
start = '_escape_('
63+
str = str.replace(exp(config.open+'|'+config.close), '');
64+
if(/^=/.test(str)){
65+
str = str.replace(/^=/, '');
66+
start = '"+_escape_(';
6467
}
65-
str = str.replace(tool.exp(sexp), '"+' + start).replace(tool.exp(config.close + '$'), ')+"');
66-
return str.replace(/\\"|\\'/g, '"');
68+
return start + str.replace(/\\/g, '') + ')+"';
6769
});
6870

6971
tpl = '"use strict";var view = "' + tpl + '";return view;';

laytpl.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)