| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 | // doT.js// 2011, Laura Doktorova// https://github.com/olado/doT//// doT.js is an open source component of http://bebedo.com//// doT is a custom blend of templating functions from jQote2.js// (jQuery plugin) by aefxx (http://aefxx.com/jquery-plugins/jqote2/)// and underscore.js (http://documentcloud.github.com/underscore/)// plus extensions.//// Licensed under the MIT license.//(function() {	var doT = { version : '0.1.7' };	if (typeof module !== 'undefined' && module.exports) {		module.exports = doT;	} else {		this.doT = doT;	}	doT.templateSettings = {		evaluate:    /\{\{([\s\S]+?)\}\}/g,		interpolate: /\{\{=([\s\S]+?)\}\}/g,		encode:      /\{\{!([\s\S]+?)\}\}/g,		use:         /\{\{#([\s\S]+?)\}\}/g, //compile time evaluation		define:      /\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g, //compile time defs		conditionalStart: /\{\{\?([\s\S]+?)\}\}/g,		conditionalEnd: /\{\{\?\}\}/g,		varname: 'it',		strip : true,		append: true	};	function resolveDefs(c, block, def) {		return ((typeof block === 'string') ? block : block.toString())		.replace(c.define, function (match, code, assign, value) {			if (code.indexOf('def.') === 0) {				code = code.substring(4);			}			if (!(code in def)) {				if (assign === ':') {					def[code]= value;				} else {					eval("def[code]=" + value);				}			}			return '';		})		.replace(c.use, function(match, code) {			var v = eval(code);			return v ? resolveDefs(c, v, def) : v;		});	}	doT.template = function(tmpl, c, def) {		c = c || doT.templateSettings;		var cstart = c.append ? "'+(" : "';out+=(", // optimal choice depends on platform/size of templates		    cend   = c.append ? ")+'" : ");out+='";		var str = (c.use || c.define) ? resolveDefs(c, tmpl, def || {}) : tmpl;		str = ("var out='" +			((c.strip) ? str.replace(/\s*<!\[CDATA\[\s*|\s*\]\]>\s*|[\r\n\t]|(\/\*[\s\S]*?\*\/)/g, ''): str)			.replace(/\\/g, '\\\\')			.replace(/'/g, "\\'")			.replace(c.interpolate, function(match, code) {				return cstart + code.replace(/\\'/g, "'").replace(/\\\\/g,"\\").replace(/[\r\t\n]/g, ' ') + cend;			})			.replace(c.encode, function(match, code) {				return cstart + code.replace(/\\'/g, "'").replace(/\\\\/g, "\\").replace(/[\r\t\n]/g, ' ') + ").toString().replace(/&(?!\\w+;)/g, '&').split('<').join('<').split('>').join('>').split('" + '"' + "').join('"').split(" + '"' + "'" + '"' + ").join(''').split('/').join('/'" + cend;			})			.replace(c.conditionalEnd, function(match, expression) {				return "';}out+='";			})			.replace(c.conditionalStart, function(match, expression) {				var code = "if(" + expression + "){";				return "';" + code.replace(/\\'/g, "'").replace(/\\\\/g,"\\").replace(/[\r\t\n]/g, ' ')  + "out+='";			})			.replace(c.evaluate, function(match, code) {				return "';" + code.replace(/\\'/g, "'").replace(/\\\\/g,"\\").replace(/[\r\t\n]/g, ' ') + "out+='";			})			+ "';return out;")			.replace(/\n/g, '\\n')			.replace(/\t/g, '\\t')			.replace(/\r/g, '\\r')			.split("out+='';").join('')			.split("var out='';out+=").join('var out=');		try {			return new Function(c.varname, str);		} catch (e) {			if (typeof console !== 'undefined') console.log("Could not create a template function: " + str);			throw e;		}	};	doT.compile = function(tmpl, def) {		return doT.template(tmpl, null, def);	};}());
 |