LoTe
A minimalistic, whitespace-sensitive template engine for writing HTML, XML and similar types of structured documents. Written in typescript for Node.js and (probably) browsers.
Why another template engine?
LoTe was developed as a robust replacement for Pug (Jade) language after it's gluttony became unbearable. LoTe has plain declarative syntax and relies on typescript mixins to implement complex logic.
Syntax
Template:
html("en")
head("LoTe")
keywords/("LoTe, template engine, typescript, javascript, nodejs")
body
h1\Lote - node template engine
-this is a comment
p
\A minimalistic, whitespace-sensitive template language for writing
\ HTML, XML and similar types of structured documents.
\ Implemented with typescript for
a("http://nodejs.org")\node
\ and (probably) browsers.
Render output (pretty-printed):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta name="keywords" content="LoTe, template engine, typescript, javascript, nodejs"/>
<title>LoTe</title>
</head>
<body>
<h1>Lote - node template engine</h1>
<p>
A minimalistic, whitespace-sensitive template engine for writing
HTML, XML and similar types of structured documents.
Implemented with typescript for
<a href="http://nodejs.org">node</a>
and (probably) browsers.
</p>
</body>
</html>
API
import * as lote from 'lote';
import {pack as emitters} from 'lote-basic-html-emitters';
const template: string = 'strings of LoTe...';
let renderer: lote.TRenderer;
try
{
// Product of template compilation.
// Might be safely and efficiently (de)serialized.
let commands_sequence: lote.TCommandsSequence;
// Compile template with default options.
// An instance of lote.TCompilationErrorException may be thrown.
commands_sequence = lote.Compile(template);
// Wrap command sequence into utility class.
renderer = new lote.TRenderer(commands_sequence);
// Check that template can be rendered with given emitters.
// An instance of lote.TValidationErrorException may be thrown.
renderer.Validate(emitters);
}
catch(e)
{
console.log(e);
process.exit(1);
}
// Prerender document. This optional pass will speedup final rendering
// by invoking emitters that make no use of runtime data.
renderer.Advance(html_emitters);
// Container with some runtime data.
let locals: any = {whatever:42};
// Render document.
const document: string = renderer.Render(html_emitters, locals);
Node.js Support
LoTe works fine in Node.js 4.5 and newer. Distributed as lote npm module. Typings are included.
Browser Support
Technically LoTe should work in browsers but right now it only exists as Node.js module.
Dependencies
LoTe itself has no dependencies.
If you want to build it from source you will need: 1) Node.js 4.5 and newer. 2) Typescript 2.0 or newer. 3) Microsoft Visual Studio 2015 with Web, Node.js and Typescript tools. 4) PowerShell 2.0 or newer. 5) npm 2.0 or newer.