A fast, easy to use, general purpose template view engine for nodejs.
install
npm install magnum
contents ## overview
Magnum is a general purpose logic driven templating engine for nodejs developers. Magnum templates allow developers to easily script complex view logic with a javascript like syntax. Magnum focuses on being general purpose to enable developers can leverage it for code generation, html templates, xml or other niche template scenarios.
Inspired by Microsoft Razor
## exampleThe following is a quick example demonstrating rendering a template.
layout.html
@section header @section body
view.html
@import 'layout.html' @section header { @(context.title)} @section body { Welcome}
app.js
var magnum = var context = title: 'my page' var html = magnum console
outputs
my page Welcome
The following outlines magnums methods.
### compileThe compile() method compiles the template file and returns a template object.
var magnum = var template = magnum // store for later //...later var context = title: 'my page' var html = template // render console
To quickly compile and render a view, call the magnum.render() method.
var magnum = var output = magnum
context
When calling render() on a template (or via magnum itself), you can optionally pass a data context object to be rendered. Magnum encapulates all data passed on the "context" object which is passed to magnum template on the render() method. Consider the following..
template.html
Hi @(context.name) @for(var i = 0; i < context.fruits.length; i++) { @(context.fruits[i]) }
app.js
var magnum = var context = name : 'dave' fruits : 'apples' 'oranges' 'kiwifruit' 'mangos' 'grapes' var html = magnum
the context can be accessed in the following way...
## syntaxThe following syntax is available inside magnum templates.
### expressionsThe expression syntax allows a user to emit the value within. The following are examples.
@* strings *@
@('hello world')
@* numbers *@
@(123)
@* conditions: displays false) *@
@(10 > 20)
@* ternary: displays 'cat' *@
@(true ? 'cat' : 'dog')
@* variables *@
@(myvariable)
@* functions: displays 'hello world' *@
@{ var message = function() { return 'hello world' } }
@(message())
### if statement
if statments are supported.
@if(expression) {
some content
}
@if(a > 10) {
some content
}
@(user.loggedin) {
<span>welcome</span>
}
### for statement
the following for loops are supported.
@for(var i = i; i < 100; i++) {
@(i)
}
@for(var n in list) {
@(list[n])
}
### code
code blocks can be useful for adding template side rendering logic.
@{
var message = 'hello'
}
@(message)
### comments
```
@*
this comment will not be rendered!
*@
```
### layouts and sections
Mangum supports layouts and sections. This section describes how to use them.
import
Use the import statement to have one template inheriate from another. This will allow the child template to (optionally) override the sections of the parent.
layout.html
layout.html will be the parent template, here we define three sections.. header, body and footer.
@section header @section body @section footer { copyright 2013 }
view.html
Inside view.html, we inheriate from layout.html with the import keyword. Inside view.html, we define sections for header and body. Note that the default content for the footer not overridden. If the child template does not override a parents section, the parents section will be used instead.
@import 'layout.html' @section header { @(context.title)} @section body { Welcome}
render
Magnum templates allow the user to render snippets of content in place. The following renders a template named navigation.html in place.
navigation.html
home about contact
layout.html
@render 'navigation.html' @section content
var express = var magnum = //----------------------------------------------// setup: create and apply render method//---------------------------------------------- var app = app //----------------------------------------------// render the template...//---------------------------------------------- app