UNPKG

art-template

Version:
100 lines (86 loc) 2.35 kB
'use strict'; /*! 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 = '&#34;'; break; case 38: char = '&#38;'; break; case 39: char = '&#39;'; break; case 60: char = '&#60;'; break; case 62: char = '&#62;'; 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;