1.0.1 • Published 8 years ago

pjs-template v1.0.1

Weekly downloads
4
License
MIT
Repository
github
Last release
8 years ago

An async rendering template engine used by Pajamas. PJS syntax is based on EJS and can handle asynchronous templates easily.

Installation

npm install pjs-template

Usage

var pjs = require('pjs-template');

pjs.renderFile(path, data, options, function (err, html) { /* ... */ });
// or
pjs.render(str, data, options, function (err, html) { /* ... */ });
// or
var template = pjs.compile(str, options);
template(data, function (err, html) { /* ... */ });

With Express.js:

app.engine('pjs', require('pjs-template').__express);
app.set('view engine', 'pjs');
// You can use 'view options' to set the pjs options
app.set('view options', {
  cache: true,
  delimiter: '$'
});

Example

Template hello.pjs:

<%
var foo = 'bar';
setTimeout(function () {
  foo = 'PJS';
  done(); // tell PJS it's an async block
}, 100);
%>
Hello <%= foo %>!

Render the file:

var pjs = require('pjs-template');

pjs.renderFile('./hello.pjs', { foo: "bar" }, function (err, html) {
  console.log(html);
  // Display: Hello PJS!
});

The done() method tell PJS that it's an async block and to wait until done() is called.

If your block is not asynchronous, you don't need to use it:

<% var foo = 'bar'; %>
Hello <%= foo %>!

Will display Hello bar!

Options

  • cache (boolean) - Compiled functions are cached, requires filename option when used with the render method
  • filename - Used by cache to key caches, and for includes
  • watchFiles (boolean) - Require cache: true, watch for changes on the cached files to clear their cache automatically
  • debug - Output generated function body
  • compileDebug - When false no debug instrumentation is compiled
  • delimiter - Character to use with angle brackets for open/close
  • escapeFunction - Custom function for escaping HTML

Tags

  • <% 'Scriptlet' tag, for control-flow, no output
  • <%= Outputs the value into the template (HTML escaped)
  • <%- Outputs the unescaped value into the template
  • <%# Comment tag, no execution, no output
  • <%% Outputs a literal '<%'
  • %> Plain ending tag
  • -%> Trim-mode ('newline slurp') tag, trims following newline

Includes

Includes are relatives to the template with the include call.

<% include ./hello.pjs %>

Customer Delimiters

Custom delimiters can be applied on a per-template basis, or globally:

var pjs = require('pjs-template'),
    users = ['geddy', 'neil', 'alex'];

// Just one template
pjs.render('<?= users.join(" | "); ?>', { users: users }, { delimiter: '?' }, function (err, html) {
  // html = 'geddy | neil | alex'
});

// Or globally
pjs.delimiter = '$';
pjs.render('<$= users.join(" | "); $>', { users: users }, function (err, html) {
  // html = 'geddy | neil | alex'
});

Methods

  • pjs.renderFile(path , data, callback)
  • pjs.render(str , data, callback)
  • pjs.compile(str , opts)
  • pjs.clearCache()
  • pjs.escape(html)