Dust templates
RenderAPI
render(renderer)
renderer
Type: Function
Map a context to a promise to render that context. The promise should fulfill
or fail with the success or fail outputs of Dust's render callback. See
rendering promises for example use of
when's lift
method.
Using a File for Rendering Context
The simplest use case takes a JSON file as context to render templates.
Precompile a Bunch of Templates
var gulp = require('gulp');
var compile = require('gulp-dust');
var concat = require('gulp-concat');
var insert = require('gulp-insert');
var rename = require('gulp-rename');
gulp.task('pre', function () {
// grep for "//" type comments and issue error
return gulp.src('./templates/**/*.dust')
.pipe(rename({ extname: "" }))
.pipe(compile())
.pipe(concat('blob.js'))
.pipe(insert.prepend('var dust = require("dustjs-linkedin");'))
.pipe(gulp.dest('precompiled'));
});
Create Some Rendering Promises
In some other module, say rendering_promises.js
, create a promise generator.
We're after a function that maps a context to a promise to render that context,
e.g. partial1({k1:v1, k2:v2}).done(console.log, console.error)
.
var dust = require('dustjs-linkedin');
var when = require('when/node');
/*
* Memoize the partials for Dust to use later. Beware of name
* collisions--another module that memoizes additional partials can clobber
* these ones.
*/
require('precompiled/blob');
exports.partial1 = function (context) {
return when.lift(dust.render)('memoized/path/to/some/partial', context);
};
exports.partial2 = function (context) {
return when.lift(dust.render)('memoized/path/to/another/partial', context);
};
Rendering a Template
var render = require('gulp-dust-render');
var partials = require('./rendering-promises');
gulp.task('render', ['pre'], function () {
gulp.src('./contexts/**/*.json')
.pipe(render(partials.partial1))
.pipe(rename({ extname : "js" }))
.pipe(gulp.dest('compiled'));
});
Object for Rendering Context
vinyl-source-stream transforms a text stream to a Gulp-compatible stream.
Create a Data Source
Start the pipeline with some text. The following helper should be helpful.
function sstream(text) {
var s = new stream.Readable(text);
s._read = function noop() {};
s.push(text);
s.push(null);
return s;
}
vinyl-source-stream
Pipe the Stream through
gulp-buffer
Buffer the Stream with
gulp-dust-render
Pipe the Stream through Template without Context
Arises when the precompile stage completely determines the template.
Start the Pipeline
function renderingStream(promise) {
var s = new stream.Readable;
s._read = function noop() {};
promise.done(
function (rendering) {
s.push(rendering);
s.push(null);
},
console.error
);
return s;
}
vinyl-source-stream
Pipe the Stream through Pipe the Stream to its target
License
MIT © Tim Popham