npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

pjs-template

v1.0.1

Published

Pajamas.js Template (pjs-template) - EJS with async rendering

Downloads

12

Readme

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)