odesza

1.0.1 • Public • Published

Odesza

The aim is to extend ES6 template strings to be a fully featured templating engine. Since everything is parsed as a template string under the hood, the code is short and easy to understand, and you don't need to learn anything except JavaScript syntax.

  • multiple inheritance (partials, block scope, extends)
  • inline ES6 JavaScript
  • support for Express

Usage

Odesza can be used to render anything like sql or html. From code or the command line.

const odesza = require('odesza');
 
odesza.render('hello, ${name}', { name: 'foo' });
// hello, foo
 
// or render a template from a file
odesza.renderFile('template.ode', { name: 'foo'});

Variables

Variables work the same as JavaScript template strings, surrounded by ${}.

odesza.render('hello ${name}', { name: 'world' });
// hello world

JavaScript

You can use JavaScript just like in template strings

odesza.render('hello ${names.join(', ')}', { names: ['wells', 'joe'] });
// hello wells, joe

You can also write more complicated inline functions

// template.ode
${(() => {
 
  // Generates line-break separated list items based on a "names" array
  return names.map((name, index) => {
    items.push(`<div>${index + 1}${name}</div>`);
  }).join('<br/>');
})()}

Output:

<div>1: wells</div><br/>
<div>2: joe</div><br/>
<div>3: dom</div><br/>

Partials

Include an odesza template inside another, for any number of levels.

odesza.renderFile('welcome.ode', { name: 'foo' });
// welcome.ode
include greeting
Welcome, ${name}!
// greeting.ode
Hello!

Output:

Hello!
Welcome, foo

Block Scope

Block scopes allow you to define a base template, so you can extend it and create many similar templates. In the base template, you create a block using block <block-name>. In another "extended" template, you can speficy the contents of the blocks using the extends keyword. Odesza enables you to extend a template as many times and levels as you want.

odesza.renderFile('page', {
  title: 'hello world'
});
// page.ode
extends layout
 
block content
<p>
  Some content.
</p>
endblock
// layout.ode
<head>
  <title>${title}</title>
</head>
<body>
  block content
</body>

Output:

<head>
  <title>hello world</title>
</head>
<body>
  <p>
    Some content.
  </p>
</body>

Comments

Comments work the same as in Javascript, and are ignored from the template output.

// line comments
 
/* inline comments */
 
/**
 * block comments
 */

Express Support

app.set('view engine', 'ode');
app.engine('.ode', require('odesza').__express);
res.render('template', {
  foo: 'bar'
});

Command Line

You can compile odesza templates from the command line to stdout or an output file.

odesza <file> [-o <output>]

Install

project

npm i odesza --save

globally

npm i odesza -g

License

MIT

Readme

Keywords

none

Package Sidebar

Install

npm i odesza

Weekly Downloads

3

Version

1.0.1

License

MIT

Last publish

Collaborators

  • wellsjo