blob: 22b41331f12bba5957d417890fc81bf6ce23ac3a [file] [log] [blame]
//>>excludeStart('excludeAfterBuild', pragmas.excludeAfterBuild)
define(['handlebars', "underscore"], function ( Handlebars, _ ) {
function replaceLocaleStrings ( ast, mapping, options ) {
options = options || {};
mapping = mapping || {};
// Base set of things
if ( ast && ast.type === "program" && ast.statements ) {
_(ast.statements).forEach(function(statement, i){
var newString = "<!-- i18n error -->";
// If it's a translation node
if ( statement.type === "mustache" && statement.id && statement.id.original === "$" ) {
if ( statement.params.length && statement.params[0].string ) {
var key = statement.params[0].string;
newString = mapping[ key ] || (options.originalKeyFallback ? key : newString);
}
ast.statements[i] = new Handlebars.AST.ContentNode(newString);
}
// If we need to recurse
else if ( statement.program ) {
statement.program = replaceLocaleStrings( statement.program, mapping, options );
}
});
// Also cover the else blocks
if (ast.inverse) {
replaceLocaleStrings(ast.inverse, mapping, options);
}
}
return ast;
}
return function(string, mapping, options) {
options = options || {};
var ast, environment;
ast = Handlebars.parse(string);
// avoid replacing locale if mapping is `false`
if (mapping !== false) {
ast = replaceLocaleStrings(ast, mapping, options);
}
environment = new Handlebars.Compiler().compile(ast, options);
return new Handlebars.JavaScriptCompiler().compile(environment, options);
};
});
//>>excludeEnd('excludeAfterBuild')