/* These test cases were imported from https://github.com/DefinitelyTyped/DefinitelyTyped * and includes previous contributions from the DefinitelyTyped community. * For full history prior to their migration to handlebars.js, please see: * https://github.com/DefinitelyTyped/DefinitelyTyped/commits/1ce60bdc07f10e0b076778c6c953271c072bc894/types/handlebars/handlebars-tests.ts */ import * as Handlebars from 'handlebars'; const context = { author: { firstName: 'Alan', lastName: 'Johnson' }, body: 'I Love Handlebars', comments: [{ author: { firstName: 'Yehuda', lastName: 'Katz' }, body: 'Me too!' }] }; Handlebars.registerHelper('fullName', (person: typeof context.author) => { return person.firstName + ' ' + person.lastName; }); Handlebars.registerHelper('agree_button', function(this: any) { return new Handlebars.SafeString( '' ); }); const source1 = '

Hello, my name is {{name}}. I am from {{hometown}}. I have ' + '{{kids.length}} kids:

' + ''; const template1 = Handlebars.compile(source1); template1({ name: "Alan", hometown: "Somewhere, TX", kids: [{name: "Jimmy", age: 12}, {name: "Sally", age: 4}]}); Handlebars.registerHelper('link_to', (context: typeof post) => { return '' + context.body + ''; }); const post = { url: "/hello-world", body: "Hello World!" }; const context2 = { posts: [post] }; const source2 = ''; const template2: HandlebarsTemplateDelegate<{ posts: { url: string, body: string }[] }> = Handlebars.compile(source2); template2(context2); Handlebars.registerHelper('link_to', (title: string, context: typeof post) => { return '' + title + '!'; }); const context3 = { posts: [{url: '/hello-world', body: 'Hello World!'}] }; const source3 = ''; const template3 = Handlebars.compile(source3); template3(context3); const source4 = ''; Handlebars.registerHelper('link', function(this: any, context: any) { return '' + context.fn(this) + ''; }); const template4 = Handlebars.compile<{ people: { name: string, id: number }[] }>(source4); const data2 = { 'people': [ { 'name': 'Alan', 'id': 1 }, { 'name': 'Yehuda', 'id': 2 } ]}; template4(data2); const source5 = ''; Handlebars.registerPartial('link', '{{name}}'); const template5 = Handlebars.compile(source5); const data3 = { 'people': [ { 'name': 'Alan', 'id': 1 }, { 'name': 'Yehuda', 'id': 2 } ]}; template5(data3); const source6 = '{{#list nav}}{{title}}{{/list}}'; const template6 = Handlebars.compile(source6); Handlebars.registerHelper('list', (context, options: Handlebars.HelperOptions) => { let ret = ""; }); template6([{url:"", title:""}]); const escapedExpression = Handlebars.Utils.escapeExpression(''); Handlebars.helpers !== undefined; const parsedTmpl = Handlebars.parse('

Hello, my name is {{name}}.

', { srcName: "/foo/bar/baz.hbs", ignoreStandalone: true }); const parsedTmplWithoutOptions = Handlebars.parse('

Hello, my name is {{name}}.

'); // Custom partial resolution. const originalResolvePartial = Handlebars.VM.resolvePartial; Handlebars.VM.resolvePartial = (partial: HandlebarsTemplateDelegate | undefined, context: any, options: Handlebars.ResolvePartialOptions): HandlebarsTemplateDelegate => { const name = options.name.replace(/my/,'your'); // transform name. options.name = name; return originalResolvePartial(partial, context, options); }; // #1544, allow custom helpers in knownHelpers Handlebars.compile('test', { knownHelpers: { each: true, customHelper: true } }); Handlebars.compile('test')({},{allowCallsToHelperMissing: true}); Handlebars.compile('test')({},{});