Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- isDom = typeof window != 'undefined';
- (function (root) {
- var self = {};
- self.addSlashes = function (str) {
- return str.replace(/\\/g, '\\\\')
- .replace(/"/g, '\\"')
- .replace(/\r/g, '\\r')
- .replace(/\n/g, '\\n');
- };
- self.escape = function (data) {
- if (typeof data != 'string') {
- data += '';
- }
- return data.replace(/&|<|>|'|"/g, function (unit) {
- return {
- '&': '&',
- '<': '<',
- '>': '>',
- '"': '"',
- "'": '''
- } [unit];
- });
- };
- self.compile = function (str) {
- var re = /\{\*(?:[\s\S]*?)\*\}|\{literal\}([\s\S]*?)\{\/literal\}|<\?([\s\S]*?)\?>|^@(.*)|(#|\$)\{(.*?)\}|\{>(.*?)\}/img;
- var matches;
- var start = 0;
- var end;
- var body = 'var out="",escape=' + self.escape + ';with(context){';
- for (;;) {
- matches = re.exec(str);
- end = matches ? re.lastIndex - matches[0].length : str.length;
- if (end > start) {
- body += 'out+="' + self.addSlashes(str.slice(start, end)) + '";';
- }
- if (!matches) {
- break;
- }
- if (matches[1]) {
- body += 'out+="' + self.addSlashes(matches[1]) + '";'
- }
- else if (matches[2]) {
- body += matches[2];
- }
- else if (matches[3]) {
- body += matches[3];
- }
- else if (matches[4]) {
- body += 'out+='
- + (matches[4] == '$'
- ? 'escape(' + matches[5] + ')'
- : matches[5])
- + ';'
- }
- else if (matches[6]) {
- body += 'out+=' + matches[6] + '(context);';
- }
- start = re.lastIndex;
- }
- body += '}return out';
- try {
- var fn = new Function('context', body);
- // console.log(fn + '');
- return function (context) {
- context = context || {};
- try {
- return fn(context);
- }
- catch (err) {
- console.log(err);
- return '';
- }
- };
- }
- catch (err) {
- console.log(err);
- return '';
- }
- };
- self.render = isDom
- ? function (id) {
- var elem = root.document.getElementById(id);
- return self.compile(elem.innerHTML);
- }
- : function (filename) {
- var fs = require('fs');
- var data = fs.readFileSync(filename, 'utf8');
- var fn = self.compile(data);
- fs.watchFile(filename, function (curr, prev) {
- fs.readFile(filename, 'utf8', function (err, data) {
- if (err) {
- throw err;
- }
- fn = self.compile(data);
- });
- });
- return function (data) {
- return fn(data);
- };
- };
- root[isDom ? 'Template' : 'exports'] = self;
- })(isDom ? window : module);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement