123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- function template(content) {
- return compile(content);
- };
- var String = this.String;
- function toString(value, type) {
- if (typeof value !== 'string') {
- type = typeof value;
- if (type === 'number') {
- value += '';
- } else if (type === 'function') {
- value = toString(value.call(value));
- } else {
- value = '';
- }
- }
- return value;
- };
- var escapeMap = {
- "<": "<",
- ">": ">",
- '"': """,
- "'": "'",
- "&": "&"
- };
- function escapeFn(s) {
- return escapeMap[s];
- }
- function escapeHTML(content) {
- return toString(content)
- .replace(/&(?![\w#]+;)|[<>"']/g, escapeFn);
- };
- var isArray = Array.isArray || function (obj) {
- return ({}).toString.call(obj) === '[object Array]';
- };
- function each(data, callback) {
- if (isArray(data)) {
- for (var i = 0, len = data.length; i < len; i++) {
- callback.call(data, data[i], i, data);
- }
- } else {
- for (i in data) {
- callback.call(data, data[i], i);
- }
- }
- };
- var utils = template.utils = {
- $helpers: {},
- $include: function () {
- throw new Error('art-template/loader: not support `include`.');
- },
- $string: toString,
- $escape: escapeHTML,
- $each: each
- };
- var helpers = template.helpers = utils.$helpers;
- function compile(fn) {
- var render = function (data) {
- try {
- return new fn(data) + '';
- } catch (e) {
- return showDebugInfo(e)();
- }
- };
- render.prototype = fn.prototype = utils;
- render.toString = function () {
- return fn + '';
- };
- return render;
- };
- function showDebugInfo(e) {
- var type = "{Template Error}";
- var message = e.stack || '';
- if (message) {
- // 利用报错堆栈信息
- message = message.split('\n').slice(0, 2).join('\n');
- } else {
- // 调试版本,直接给出模板语句行
- for (var name in e) {
- message += "<" + name + ">\n" + e[name] + "\n\n";
- }
- }
- return function () {
- if (typeof console === "object") {
- console.error(type + "\n\n" + message);
- }
- return type;
- };
- };
- template.helper = function (name, helper) {
- helpers[name] = helper;
- };
- module.exports = template;
|