init commit
This commit is contained in:
137
public/assets/libs/art-template/src/syntax.js
Normal file
137
public/assets/libs/art-template/src/syntax.js
Normal file
@@ -0,0 +1,137 @@
|
||||
// 定义模板引擎的语法
|
||||
|
||||
|
||||
defaults.openTag = '{{';
|
||||
defaults.closeTag = '}}';
|
||||
|
||||
|
||||
var filtered = function (js, filter) {
|
||||
var parts = filter.split(':');
|
||||
var name = parts.shift();
|
||||
var args = parts.join(':') || '';
|
||||
|
||||
if (args) {
|
||||
args = ', ' + args;
|
||||
}
|
||||
|
||||
return '$helpers.' + name + '(' + js + args + ')';
|
||||
}
|
||||
|
||||
|
||||
defaults.parser = function (code, options) {
|
||||
|
||||
// var match = code.match(/([\w\$]*)(\b.*)/);
|
||||
// var key = match[1];
|
||||
// var args = match[2];
|
||||
// var split = args.split(' ');
|
||||
// split.shift();
|
||||
|
||||
code = code.replace(/^\s/, '');
|
||||
|
||||
var split = code.split(' ');
|
||||
var key = split.shift();
|
||||
var args = split.join(' ');
|
||||
|
||||
|
||||
|
||||
switch (key) {
|
||||
|
||||
case 'if':
|
||||
|
||||
code = 'if(' + args + '){';
|
||||
break;
|
||||
|
||||
case 'else':
|
||||
|
||||
if (split.shift() === 'if') {
|
||||
split = ' if(' + split.join(' ') + ')';
|
||||
} else {
|
||||
split = '';
|
||||
}
|
||||
|
||||
code = '}else' + split + '{';
|
||||
break;
|
||||
|
||||
case '/if':
|
||||
|
||||
code = '}';
|
||||
break;
|
||||
|
||||
case 'each':
|
||||
|
||||
var object = split[0] || '$data';
|
||||
var as = split[1] || 'as';
|
||||
var value = split[2] || '$value';
|
||||
var index = split[3] || '$index';
|
||||
|
||||
var param = value + ',' + index;
|
||||
|
||||
if (as !== 'as') {
|
||||
object = '[]';
|
||||
}
|
||||
|
||||
code = '$each(' + object + ',function(' + param + '){';
|
||||
break;
|
||||
|
||||
case '/each':
|
||||
|
||||
code = '});';
|
||||
break;
|
||||
|
||||
case 'echo':
|
||||
|
||||
code = 'print(' + args + ');';
|
||||
break;
|
||||
|
||||
case 'print':
|
||||
case 'include':
|
||||
|
||||
code = key + '(' + split.join(',') + ');';
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
// 过滤器(辅助方法)
|
||||
// {{value | filterA:'abcd' | filterB}}
|
||||
// >>> $helpers.filterB($helpers.filterA(value, 'abcd'))
|
||||
// TODO: {{ddd||aaa}} 不包含空格
|
||||
if (/^\s*\|\s*[\w\$]/.test(args)) {
|
||||
|
||||
var escape = true;
|
||||
|
||||
// {{#value | link}}
|
||||
if (code.indexOf('#') === 0) {
|
||||
code = code.substr(1);
|
||||
escape = false;
|
||||
}
|
||||
|
||||
var i = 0;
|
||||
var array = code.split('|');
|
||||
var len = array.length;
|
||||
var val = array[i++];
|
||||
|
||||
for (; i < len; i ++) {
|
||||
val = filtered(val, array[i]);
|
||||
}
|
||||
|
||||
code = (escape ? '=' : '=#') + val;
|
||||
|
||||
// 即将弃用 {{helperName value}}
|
||||
} else if (template.helpers[key]) {
|
||||
|
||||
code = '=#' + key + '(' + split.join(',') + ');';
|
||||
|
||||
// 内容直接输出 {{value}}
|
||||
} else {
|
||||
|
||||
code = '=' + code;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
return code;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user