https://github.com/atinux/pjs-template
Pajamas.js (PJS) Template engine
https://github.com/atinux/pjs-template
Last synced: 3 months ago
JSON representation
Pajamas.js (PJS) Template engine
- Host: GitHub
- URL: https://github.com/atinux/pjs-template
- Owner: Atinux
- License: mit
- Created: 2016-02-07T17:32:10.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2016-02-26T23:07:14.000Z (over 9 years ago)
- Last Synced: 2024-04-15T14:01:25.880Z (about 1 year ago)
- Language: JavaScript
- Size: 56.6 KB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
![]()
An async rendering template engine used by [Pajamas](https://github.com/Atinux/pjs).
PJS syntax is based on [EJS](https://github.com/mde/ejs) and can handle asynchronous templates easily.## Installation
`npm install pjs-template`
## Usage
```js
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**:
```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`:
```js
<%
var foo = 'bar';
setTimeout(function () {
foo = 'PJS';
done(); // tell PJS it's an async block
}, 100);
%>
Hello <%= foo %>!
```Render the file:
```js
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:
```js
<% 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.
```js
<% include ./hello.pjs %>
```## Customer Delimiters
Custom delimiters can be applied on a per-template basis, or globally:
```js
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)