Dust template compiler for locator.
This component is a result of the integration between YUI and Locator component from Yahoo! to compile Dust templates into YUI Modules that could be used on the server thru express and on the client thru YAF.
The beauty of this is that you will NOT need to download the full dust
parser component or the template itself, instead you use YUI Loader to load modules that will provision the dust
templates in a form of javascript functions ready to be execute to produce an HTML fragment.
Install using npm:
$ npm install locator-dust
By installing the module in your express application folder, you should be able to use it thru Locator.
Normally, you will plug the locator plugin exposed by locator-dust
into the locator instance, and locator will be able to analyze every file in your express app, and it will compile any *.dust
into a YUI module that can be used thru express-yui
for example. The example below describes how to use the yui plugin with locator:
var Locator = require('locator'),
LocatorDust = require('locator-dust'),
loc = new Locator();
// using locator-dust yui plugin
loc.plug(LocatorDust.yui());
// walking the filesystem for an express app
loc.parseBundle(__dirname, {});
You can try a working example here:
https://github.com/yahoo/locator-dust/tree/master/example
On the client side, any Dust template will be accessible as well thru yui
as a regular YUI module. Here is an example:
app.yui.use('<name-of-app>-templates-bar', function (Y) {
var html = Y.Template._cache['<name-of-app>/bar']({
tagline: 'testing with some data for template bar'
});
});
In the example above, the <package-name>
is the package name specified in the package.json
for the npm package that contains the template, which is usually the express application. bar
comes from bar.dust
where the filename is used as the name to register the template under Y.Template
. By using the yui module name, you will be able to invoke the render action to produce a html fragment.
note: in the near future, Y.Template.render()
will be the formal API instead of using the _cache
object, which is protected.
If you want to use a different template name, you can write your own parser:
// using locator-dust yui plugin
loc.plug(LocatorDust.yui({
nameParser: function (source_path) {
var libpath = require('path'),
name = libpath.basename(source_path, libpath.extname(source_path));
if (source_path.indexOf('partials') > 0) {
name += '-partial';
}
return name;
}
}));
In the example above, when trying to parse /path/to/foo.dust
it will return foo
, but when trying to /path/to/partials/bar.dust
it will return foo-partial
, that will avoid collisions while giving you full control over the name resolution for the compiled templates.
- Add
partials
support. - Add
helpers
rehydration.
This software is free to use under the Yahoo! Inc. BSD license. See the LICENSE file for license text and copyright information.
See the CONTRIBUTE file for info.