| @@ -13,7 +13,8 @@ var Mustache = function() { | |||||
| pragmas: {}, | pragmas: {}, | ||||
| buffer: [], | buffer: [], | ||||
| pragmas_implemented: { | pragmas_implemented: { | ||||
| "IMPLICIT-ITERATOR": true | |||||
| "IMPLICIT-ITERATOR": true, | |||||
| "TRANSLATION-HINT": true | |||||
| }, | }, | ||||
| context: {}, | context: {}, | ||||
| @@ -34,8 +35,15 @@ var Mustache = function() { | |||||
| } | } | ||||
| } | } | ||||
| // Branching or moving down the partial stack, save any translation mode info. | |||||
| if (this.pragmas['TRANSLATION-HINT']) { | |||||
| context['_mode'] = this.pragmas['TRANSLATION-HINT']['mode']; | |||||
| } | |||||
| template = this.render_pragmas(template); | template = this.render_pragmas(template); | ||||
| template = this.render_i18n(template, context, partials); | |||||
| var html = this.render_section(template, context, partials); | var html = this.render_section(template, context, partials); | ||||
| var stillNeedsToRender = (html === template); | var stillNeedsToRender = (html === template); | ||||
| @@ -110,6 +118,27 @@ var Mustache = function() { | |||||
| return this.render(partials[name], context[name], partials, true); | return this.render(partials[name], context[name], partials, true); | ||||
| }, | }, | ||||
| render_i18n: function(html, context, partials) { | |||||
| if (html.indexOf(this.otag + "_i") == -1) { | |||||
| return html; | |||||
| } | |||||
| var that = this; | |||||
| var regex = new RegExp(this.otag + "\\_i" + this.ctag + | |||||
| "\\s*([\\s\\S]+?)" + this.otag + "\\/i" + this.ctag, "mg"); | |||||
| // for each {{_i}}{{/i}} section do... | |||||
| return html.replace(regex, function(match, content) { | |||||
| var translation_mode = undefined; | |||||
| if (that.pragmas && that.pragmas["TRANSLATION-HINT"] && that.pragmas["TRANSLATION-HINT"]['mode']) { | |||||
| translation_mode = { _mode: that.pragmas["TRANSLATION-HINT"]['mode'] }; | |||||
| } else if (context['_mode']) { | |||||
| translation_mode = { _mode: context['_mode'] }; | |||||
| } | |||||
| return that.render(_(content, translation_mode), context, partials, true); | |||||
| }); | |||||
| }, | |||||
| /* | /* | ||||
| Renders inverted (^) and normal (#) sections | Renders inverted (^) and normal (#) sections | ||||
| */ | */ | ||||
| @@ -333,7 +362,7 @@ var Mustache = function() { | |||||
| if(send_fun) { | if(send_fun) { | ||||
| renderer.send = send_fun; | renderer.send = send_fun; | ||||
| } | } | ||||
| renderer.render(template, view, partials); | |||||
| renderer.render(template, view || {}, partials); | |||||
| if(!send_fun) { | if(!send_fun) { | ||||
| return renderer.buffer.join("\n"); | return renderer.buffer.join("\n"); | ||||
| } | } | ||||