Skip to content

Instantly share code, notes, and snippets.

@gerardpaapu
Last active January 3, 2016 10:09
Show Gist options
  • Save gerardpaapu/8447762 to your computer and use it in GitHub Desktop.
Save gerardpaapu/8447762 to your computer and use it in GitHub Desktop.
define(function () {
var infix = /\{(\d+)((:[_a-z][_a-z0-9]*)(\|[_a-z][_a-z0-9]*))?\}/gmi;
var filters = {};
function getFilter(k) {
if (!(k in filters)) {
throw new Error('No such filter: "' + k + '"');
}
return filters[k];
}
function getFilters(str) {
if (str == null || str.length === 0) {
return [];
} else {
return str.substring(1).split('|').map(getFilter);
}
}
function format(string) {
var values = [].slice.call(arguments, 1);
return string.replace(infix, function ($0, $1, $2, $3) {
return getFilters($2).reduce(function (v, filter) {
return filter(v);
}, values[+$1]);
});
}
format.defineFilter = function (k, f) {
filters[k] = f;
};
format.defineFilter('uri', encodeURI);
format.defineFilter('component', encodeURIComponent);
format.defineFilter('html', function (str) {
return String(str).
replace(/&/g, '&').
replace(/</g, '&lt;').
replace(/>/g, '&gt;').
replace(/"/g, '&quot;').
replace(/'/g, '&#39;');
});
var call = Function.prototype.call;
format.defineFilter('upper', call.bind(String.prototype.toUpperCase)),
format.defineFilter('lower', call.bind(String.prototype.toLowerCase));
return format;
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment