Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Simplified interface to {dust} and file templates for Node.js

branch: master
README.md

{dust} with fs

Description

This is a simplified interface to use templates from filesystem with {dust} using Node.js.

Installation for Node.js

Simplest way to install is to use npm, just simply npm install dustfs. This will also install {dust} from npm.

License

MIT-style license, see INSTALL.txt.

Example 1 - Single template

File templates/hello.dust:

Hello {name}!

File hello.js:

var dustfs = require('dustfs');
dustfs.dirs('templates'); // Read templates from this directory
dustfs.render('hello.dust', {'name':'Captain Jack'}, function(err, out) {
    if(err) console.log('Error: '+err);
    else console.log(out);
});

Results for node hello.js:

Hello Captain Jack!

Example 2 - Multiple templates

File templates/layout.dust:

<body>
<div id="header">
{+header}
Header
{/header}
</div>
<div id="content">
{+content}
Default content.
{/content}
</div>
</body>

File templates/partial.dust:

{>"layout.dust"/}

{<header}
Hello, {name}!
{/header}

{<content}
This is our own content.
{/content}

File partial.js:

var dustfs = require('dustfs');
dustfs.debug(true);       // Enable optional debug using console.log
dustfs.dirs('templates'); // Read templates from that sub directory
dustfs.render('partial.dust', {'name':'Captain Jack'}, function(err, out) {
    if(err) console.log('Error: '+err);
    else console.log('Output:\n' + out);
});

Results for node partial.js:

[dustfs] [partial.dust] Waiting until directory loading is done before rendering...
[dustfs] [layout.dust] Template compiled from templates/layout.dust
[dustfs] [layout.dust] Template loaded: templates/layout.dust
[dustfs] [hello.dust] Template compiled from templates/hello.dust
[dustfs] [hello.dust] Template loaded: templates/hello.dust
[dustfs] [partial.dust] Template compiled from templates/partial.dust
[dustfs] [partial.dust] Template loaded: templates/partial.dust
[dustfs] [partial.dust] Loading done! Let's render!
[dustfs] [partial.dust] Rendering template...
Output:
<body><div id="header">Hello, Captain Jack!</div><div id="content">This is our own content.</div></body>

dustfs.dirs()

dustfs.dirs(directory) will compile and load all .dust files from the directory.

There is multiple ways to call dustfs.dirs.

Full syntax is: [returns EventEmiter] dustfs.dirs(dir[, dir2[, ...[, callback]]])

Note that using callbacks is not required since dustfs.render() will also wait for any ongoing loading.

Call to dustfs.dirs(dir[, dir2[, ...]]) returns an EventEmitter which can be used to catch errors or to catch when the loading has ended:

var loading = dustfs.dirs('templates', 'docroot');
loading.on('error', function(err) {
    console.log('Error: '+err);
});
loading.on('end', function() {
    console.log('Loading done!');
});

Call to dustfs.dirs(dir[, callback]) is a second way to handle events:

var loading = dustfs.dirs('templates', function(err) {
    if(err) console.log('Errors: ' + err);
    else console.log('Loading done!');
});

dustfs.render()

Call to dustfs.render(name, context, callback) will render the named template with provided context, and after that execute the callback with results:

dustfs.render('partial.dust', {'name':'Captain Jack'}, function(err, out) {
    if(err) console.log('Error: '+err);
    else console.log('Output:\n' + out);
});
Something went wrong with that request. Please try again.