Skip to content

Instantly share code, notes, and snippets.

@maggiben
Last active February 23, 2022 15:02
Show Gist options
  • Save maggiben/7775404 to your computer and use it in GitHub Desktop.
Save maggiben/7775404 to your computer and use it in GitHub Desktop.
Mini Mustache
/*
Bare bones template engine
*/
const hydrate = function(template, scope) {
if (
template.constructor === String &&
template.length &&
scope.constructor === Object &&
Object.keys(scope).length
) {
return Object.entries(scope).reduce((view, [ key, value ]) => {
const regexp = new RegExp('\\{{' + key + '\\}}', 'gi');
return view.replace(regexp, value);
}, template.slice(0));
} else {
return null;
}
};
String.prototype.format = function() {
var formatted = this;
var arg = arguments[0];
var regexp = null;
var key = null;
if(arg === Object(arg) && arg instanceof Array !== true) {
for(key in arg) {
if(arg.hasOwnProperty(key)) {
regexp = new RegExp('\\{{' + key + '\\}}', 'gi');
formatted = formatted.replace(regexp, arg[key]);
}
}
} else {
for (var i = 0; i < arguments.length; i++) {
var regexp = new RegExp('\\{{' + i + '\\}}', 'gi');
formatted = formatted.replace(regexp, arguments[i]);
}
}
return formatted;
};
@reben1981
Copy link

const hydrate = function(template, scope) {
if (
template.constructor === String &&
template.length &&
scope.constructor === Object &&
Object.keys(scope).length
) {
return Object.entries(scope).reduce((view, [ key, value ]) => {
const regexp = new RegExp('\<%=[/' + key + '\s]+%>', 'gi');
return view.replace(regexp, value);
}, template.slice(0));
} else {
return null;
}
};
undefin

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment