Wagon is a very fast and cool templating engine for fast development.
Here is quick example on the syntax.
<div id="myDiv">
{#if (usingWagon === true)}
{niceMessage()}
{:else}
Use it because it is cool.
{/if}
</div>
As you can see, it is literally javascript in html.
Now lets try to compile this template.
let renderer = Template.fromFile("fullPathToTemplate.html").compile();
console.log(
renderer({
usingWagon: true,
niceMessage: () => "Yay, you are using Wagon!",
})
);
Ouputs
<div id="myDiv">Yay, you are using Wagon!</div>
Time to spice things up!
with for loops...
{#for (let i = 0; i < 10; i ++>)}
{i}
{/for}
Outputs...
0 1 2 3 4 5 6 7 8 9
with while loops...
{#while (true)}
Oops no good
{/while}
Outputs...
Nothing just like any javascript never ending loop.
with literally javascript code...
{%
class Human {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
return `Hello, my name is ${this.name} and I am ${this.age}.`
}
}
}
{new Human("Bob", 20).greet()}
Outputs...
Hello, my name is Bob and I am 20
syntax | description | example |
---|---|---|
{code} |
Evaluated and displayed | {"You will see me"} |
{% code} |
Evaluated, but not displayed | {% let m = "You will not"} |
{# block statement} |
Open a block statement | {# if (true)} |
{: block statement} |
Chains a block statement | {: else if (true)} |
{/...} |
Closes a block statement | {/ if} |
{@ code} |
Evaluated during compile time | {@ this.include("./partial.html")} |
name | description |
---|---|
$main |
Root template name (full path) |
$html |
In generation HTML |
$code |
Generated code |
data |
Props passed from the renderer |
$html
can be modified by the template.
So...
{% $html += "Hello world"}
will be the same as...
{"Hello world"}
or even simpler...
Hello world
name | description |
---|---|
this.main |
Root template name (full path) |
this.name |
Current template name (full path) |
this.raw |
Raw template |
this.code |
In genration code |
this.vars |
Render time variable names. eg. $html |
this.define(string name, any value) |
Define a constant |
this.include(string relativePath) |
Inserts compiled code from another template |
this.add(string code) |
Inserts code during compile time |
There is syntax highlighter in the VScode Marketplace. https://marketplace.visualstudio.com/items?itemName=str1z.html-wagon-syntax-highlighting