odesza
v1.0.1
Published
Write clean, expressive templates with just HTML and inline JavaScript
Downloads
23
Readme
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