packages feed

hablo-1.1.0.1: share/js/Template.js

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;
    }
  }
}