One day I decided to realize how modern web applications work, so I decided to create own frameworks and relative tools for the purpose of self-education.
Here is the first part of my experiment — a template engine. It allows you to convert html markups with data to real html template.
First of all you have to import the engine class and initialize it with markup:
const { TemplateEngine } = require('template-engine');
// here you can use any template
const markup = '<div>Hello, {{name}}!</div>';
const templateEngine = new TemplateEngine(markup);
// <div>Hello, World!</div>
templateEngine.compile({ name: 'World' });
// <div>Hello, whatever else!</div>
templateEngine.compile({ name: 'whatever else' });You can use variables wrapping them with double curly braces
// markup
<div>Hello, {{name}}!</div>
// script templateEngine.compile({ name: 'World' }); // result
<div>Hello, World!</div>Usage variables inside html attributes is possible when you prefix any html attribute with vl keyword:
<div vl-class="someVariable1" vl-id="someVariable2" vl-style="someVariable3" vl-anyAttr="..."></div>The real example:
// markup
<div vl-class="className" vl-id="some-id">Hello!</div>
// script templateEngine.compile({ className: 'root', 'some-id': 'hello' }); // result
<div class="root" id="hello">Hello!</div>To create loop, use the vl-for keyword:
<div vl-for="item in items">
<p>hello {{item}}</p>
<p>{{item}} hello</p>
</div>To create condition, use the vl-if keyword:
<main>
<section vl-if="shouldShowSection" class="section">
<h1>it's true</h1>
<img src="/some-image.png" vl-if="shouldShowImage" />
<p vl-else>no image</p>
</section>
<div vl-else>
<h2>Hello!</h2>
<img src="/some-image.png" vl-if="shouldShowImage" />
</div>
</main>- Add nested loops.