Nerdy Programmers Mingling

    pjs-template

    1.0.1 • Public • Published

    PJS Template - An asynchronous templating engine

    npm version Dependencies Build Status Code Coverage

    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] [, opts], callback)
    • pjs.render(str [, data] [, opts], callback)
    • pjs.compile(str [, opts])
    • pjs.clearCache()
    • pjs.escape(html)

    Install

    npm i pjs-template

    DownloadsWeekly Downloads

    2

    Version

    1.0.1

    License

    MIT

    Last publish

    Collaborators

    • atinux