packages feed

hablo-1.0.0.0: share/js/template.js

function Template() {
	return {
		render: render
	};

	function render(template, environment) {
		if(blog.wording[template] != undefined) {
			var template = blog.wording[template];
		}
		template = template.replace(/\${\?((?:[^?]|\?[^}])*)\?}/g, renderSub(environment));
		var failed = [false];
		var result = template.replace(
			/([^$]|^)\$(?:{(\w+)}|(\w+)\b)/g,
			substitute(environment, failed)
		);
		return failed[0] ? null : result;
	}

	function renderSub(environment) {
		return function(_, sub) {
			return render(sub, environment) || '';
		};
	}

	function substitute(environment, failed) {
		return function(_, before, bracketed, raw) {
			var replaced = environment[bracketed || raw];
			if(replaced != undefined) {
				return before + replaced;
			} else {
				failed[0] = true;
			}
		}
	}
}