pub
pubjs
npm i pubjs
pub

pubjs

A node.js templating language with arbitrary nesting

by Maxwell Krohn

0.0.9 (see all)TypeScript:Not Found
npm i pubjs
Readme

pubjs

Yet another node.js templating system.

It differs from all others we've seen because it offer arbitrary nesting of code and HTML output.

Tutorial and Code Examples

By default, input is in HTML mode, in which all input data is passed through as output data, with the exception of expressions of the form %{foo}, which are first evaluated by JavaScript, and then output:

<b>Name</b>: %{name}<br/>
<b>Passion</b>: %{passion}<br/>

However you can switch from HTML mode into JavaScript mode, with the {% .. %} environment. Inside a JavaScript environment, use normal JavaScript, and also the function print to output HTML:

<b>Name</b>: %{name}<br/>
{% if (pet) { print ("<b>Pet</b>: ", pet); } 
   else     { print ("<i>no pets</i>"); } %}</br>
<b>Passion</b>: %{passion}<br/>

You can also switch back to HTML mode from within JavaScript mode, with any block of the form {{..}}. An equivalent way to write the above is:

<b>Name</b>: %{name}<br/>
{% if (pet) {{<b>Pet</b>: %{pet} }}
   else     {{<i>No pets!</i>}} %}</br>
<b>Passion</b>: %{passion}<br/>

And as advertised, you are free to go as deeply nested as you please:

<b>Name</b>: %{name}<br/>
{% if (pet) {{
    <b>Pet</b>:
    {% if (pet.type == "dog") {{
           Goes woof! (and is
           {% if (pet.sex == "M") {{neutered}}
              else                {{spayed}}
           %}
           so doesn't reproduce)
       }} else if (pet.type == "cat") {{
            Goes meow!
       }}
    %}
}} else {{<i>no pet!</i>}} %}

We've also taken the liberty of adding a bona fide foreach to JavaScript, for simplified iteration:

<table>
{% 
   foreach (var row in rows) {{
       <tr>
       {% 
           foreach (var col in row) {{
               <td>%{col}</td>
           }} 
        %}
        </tr>
    }}
%}
</table>

Usage

To install:

npm install -g pubjs

To use in express:


// Regigster the handler...
app.register ('.pjs', require ('pubjs'));

// Then invoke it as needs be...
app.get('/', function(req, res){
  res.render('index.pjs', {
    title: 'Express'
  });
});

TODOS

  • regtest suite
  • documentation (flesh out this file)

Downloads/wk

1

GitHub Stars

11

LAST COMMIT

4yrs ago

MAINTAINERS

1

CONTRIBUTORS

1

OPEN ISSUES

0

OPEN PRs

0
VersionTagPublished
0.0.9
latest
11yrs ago
No alternatives found
No tutorials found
Add a tutorial
No dependencies found

Rate & Review

100
No reviews found
Be the first to rate