35 lines
819 B
JavaScript
35 lines
819 B
JavaScript
import blog from Hablo.Config;
|
|
|
|
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;
|
|
}
|
|
}
|
|
}
|