twitter/hogan.js — pull request #113 by techhead (2012-10-16 01:14:08+00:00)
Title: Piped Helpers

I don't suppose that (m)any of these changes will be merged with the main branch any time (soon), so I'll likely be maintaining a fork here.

https://github.com/techhead/hogan.js

But here's what's inside: (see test/index.js for ...er, tests... and usage examples)

##### Fixes

+ fixed `Hogan.cacheKey()` to consider delimiters (and new options)
+ allow method call chaining using dot notation
+ fixed method calls to be called with the proper `this` (must use `fixMethodCalls` option)
+ partials have access to full context stack

##### Enhancements

+ shorthand section close tag
+ pass current context (top of context stack) to method calls
+ pass `index` and `array` to method calls made within a list iteration section
+ piped helpers

##### Examples

**Method call chaining**

```
var t = Hogan.compile("{{method1.method2.method3}}"),
r = t.render({
method1: function() {
return {
method2: function() {
return {
method3: function() {
return 'test';
}
};
}
};
}
});
// r === "test"
```

**Shorthand close tag and index passed to method call**

```
var t = Hogan.compile("{#names}{^first}, {/}{.}{/names}", { delimeters: '{ }' }),
r = t.render({
names: ['Larry', 'Moe', 'Curly'],
first: function(val, index) {
return (index === 0);
}
});
// r === "Larry, Moe, Curly"
```

**Piped helpers**

```
var t = Hogan.compile("{{ names | join | ucase }}", { fixMethodCalls:1, enableHelpers:1 }),
r = t.render({
names: ['Larry', 'Moe', 'Curly'],
separator: ', ',
join: function(arr) {
return arr.join(this.separator);
},
ucase: function(val) {
return (""+val).toUpperCase();
}
});
// r === "LARRY, MOE, CURLY"
```