art-template
Version:
JavaScript Template Engine
100 lines (86 loc) • 2.35 kB
JavaScript
;
/*! art-template@runtime | https://github.com/goofychris/art-template */
var globalThis = typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {};
var runtime = Object.create(globalThis);
var ESCAPE_REG = /["&'<>]/;
/**
* 编码模板输出的内容
* @param {any} content
* @return {string}
*/
runtime.$escape = function (content) {
return xmlEscape(toString(content));
};
/**
* 迭代器,支持数组与对象
* @param {array|Object} data
* @param {function} callback
*/
runtime.$each = function (data, callback) {
if (Array.isArray(data)) {
for (var i = 0, len = data.length; i < len; i++) {
callback(data[i], i);
}
} else {
for (var _i in data) {
callback(data[_i], _i);
}
}
};
// 将目标转成字符
function toString(value) {
if (typeof value !== 'string') {
if (value === undefined || value === null) {
value = '';
} else if (typeof value === 'function') {
value = toString(value.call(value));
} else {
value = JSON.stringify(value);
}
}
return value;
}
// 编码 HTML 内容
function xmlEscape(content) {
var html = '' + content;
var regexResult = ESCAPE_REG.exec(html);
if (!regexResult) {
return content;
}
var result = '';
var i = void 0,
lastIndex = void 0,
char = void 0;
for (i = regexResult.index, lastIndex = 0; i < html.length; i++) {
switch (html.charCodeAt(i)) {
case 34:
char = '"';
break;
case 38:
char = '&';
break;
case 39:
char = ''';
break;
case 60:
char = '<';
break;
case 62:
char = '>';
break;
default:
continue;
}
if (lastIndex !== i) {
result += html.substring(lastIndex, i);
}
lastIndex = i + 1;
result += char;
}
if (lastIndex !== i) {
return result + html.substring(lastIndex, i);
} else {
return result;
}
}
module.exports = runtime;