Handlebars.js definitions and tests added

This commit is contained in:
Boris Yankov
2012-10-23 22:57:53 +03:00
parent dd5444a11b
commit 45eac85afb
3 changed files with 102 additions and 3 deletions
+21
View File
@@ -0,0 +1,21 @@
// Type definitions for Handlebars 1.0
// Project: http://handlebarsjs.com/
// Definitions: https://github.com/borisyankov/DefinitelyTyped
interface HandlebarsStatic {
registerHelper(name: string, fn: Function, inverse?: bool): void;
registerPartial(name: string, str): void;
K();
createFrame(object);
Exception(message: string): void;
SafeString(str: string): void;
parse(string: string);
print(ast);
logger;
log(level, str): void;
compile(environment, options?, context?, asObject?);
}
declare var Handlebars: HandlebarsStatic;
+4 -3
View File
@@ -10,8 +10,10 @@ Complete
* [async](https://github.com/caolan/async)
* [Backbone.js](http://backbonejs.org/)
* [Bootstrap](http://twitter.github.com/bootstrap/)
* [ember.js](http://emberjs.com/)
* [Express](http://expressjs.com/) (from TypeScript samples)
* [Fancybox](http://fancybox.net/)
* [Handlebars](http://handlebarsjs.com/)
* [History.js](https://github.com/balupton/History.js/)
* [Humane.js](http://wavded.github.com/humane-js/) (by [jmvrbanac](https://github.com/jmvrbanac))
* [Impress.js](https://github.com/bartaz/impress.js)
@@ -31,13 +33,12 @@ Complete
Next
----
* ember.js
* Facebook SDK
* Knockout.Mapping
* Angular.js
* Facebook SDK
* jQuery.Validate
* jQuery Mobile
* google.visualization
* Angular.js
* Meteor
* PhoneGap
* Isotope
+77
View File
@@ -0,0 +1,77 @@
/// <reference path="../Definitions/handlebars-1.0.d.ts" />
var context = {
author: { firstName: "Alan", lastName: "Johnson" },
body: "I Love Handlebars",
comments: [{
author: { firstName: "Yehuda", lastName: "Katz" },
body: "Me too!"
}]
};
Handlebars.registerHelper('fullName', (person) => {
return person.firstName + " " + person.lastName;
});
Handlebars.registerHelper('agree_button', () => {
return new Handlebars.SafeString(
"<button>I agree. I " + this.emotion + " " + this.name + "</button>"
);
});
var source = "<p>Hello, my name is {{name}}. I am from {{hometown}}. I have " +
"{{kids.length}} kids:</p>" +
"<ul>{{#kids}}<li>{{name}} is {{age}}</li>{{/kids}}</ul>";
var template = Handlebars.compile(source);
var data = { "name": "Alan", "hometown": "Somewhere, TX",
"kids": [{"name": "Jimmy", "age": "12"}, {"name": "Sally", "age": "4"}]};
var result = template(data);
Handlebars.registerHelper('link_to', (context) => {
return "<a href='" + context.url + "'>" + context.body + "</a>";
});
var context2 = { posts: [{url: "/hello-world", body: "Hello World!"}] };
var source2 = "<ul>{{#posts}}<li>{{{link_to this}}}</li>{{/posts}}</ul>"
var template2 = Handlebars.compile(source2);
template2(context2);
Handlebars.registerHelper('link_to', (title, context) => {
return "<a href='/posts" + context.url + "'>" + title + "!</a>"
});
var context3 = { posts: [{url: "/hello-world", body: "Hello World!"}] };
var source3 = '<ul>{{#posts}}<li>{{{link_to "Post" this}}}</li>{{/posts}}</ul>'
var template3 = Handlebars.compile(source3);
template3(context3);
var source4 = "<ul>{{#people}}<li>{{#link}}{{name}}{{/link}}</li>{{/people}}</ul>";
Handlebars.registerHelper('link', (context, options) => {
return '<a href="/people/' + this.id + '">' + context.fn(this) + '</a>';
});
var template4 = Handlebars.compile(source4);
var data2 = { "people": [
{ "name": "Alan", "id": 1 },
{ "name": "Yehuda", "id": 2 }
]};
template4(data2);
var source5 = "<ul>{{#people}}<li>{{> link}}</li>{{/people}}</ul>";
Handlebars.registerPartial('link', '<a href="/people/{{id}}">{{name}}</a>')
var template5 = Handlebars.compile(source5);
var data3 = { "people": [
{ "name": "Alan", "id": 1 },
{ "name": "Yehuda", "id": 2 }
]};
template5(data3);
Handlebars.registerHelper('list', (items, fn) => {
var out = "<ul>";
for(var i=0, l=items.length; i<l; i++) {
out = out + "<li>" + fn(items[i]) + "</li>";
}
return out + "</ul>";
});
Handlebars.registerHelper('fullName', (person) => {
return person.firstName + " " + person.lastName;
});