Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/peternaydenov/tag-templates

Template engine build on top of javascript native technologies: template literals and tag functions.
https://github.com/peternaydenov/tag-templates

Last synced: 4 days ago
JSON representation

Template engine build on top of javascript native technologies: template literals and tag functions.

Awesome Lists containing this project

README

        

# Tag Templates (@peter.naydenov/tag-templates)

![version](https://img.shields.io/github/package-json/v/peterNaydenov/tag-templates)
![license](https://img.shields.io/github/license/peterNaydenov/tag-templates)
![issues](https://img.shields.io/github/issues/peterNaydenov/tag-templates)
![language](https://img.shields.io/github/languages/top/peterNaydenov/tag-templates)
![npm bundle size (scoped version)](https://img.shields.io/bundlephobia/minzip/%40peter.naydenov/tag-templates/1.4.0)

Template engine build on top of javascript native technologies: template literals and tag functions.

## Installation
Install the package:

```
npm i @peter.naydenov/tag-templates

```

Add module to the script:

```js
// with commonjs:
const tagTemplates = require ( '@peter.naydenov/tag-templates' );

// with es6:
import tagTemplates from '@peter.naydenov/tag-templates'
```

## Methods
Engine have just two methods: addTemplate and render. Both are receiving parameters as text strings. Look at "**How to use it**" section.

```js
{
addTemplate : 'Write a template'
render : 'Convert data+template into a rendered block'
}
```

## Configuration object

All configuration fields are optional.
```js
{
TG_PRX : '{{' // Change default placeholder's opening tag
, TG_SFX : '}}' // Change default placeholder's opening tag
, DV : ':' // Chnage default props divider
, debug : false // Set on 'true' to receive more warnings and error messages
}
```

## How to use it

```js
const tagTemplates = require ( '@peter.naydenov/tag-templates' );

// Create a render engine instance:
const engine = tagTemplates ()

// Set a template "hello".
engine.addTemplate`
hello
Hello {{name}}

{{msg}}

`

// Other technique when template is defined as external variable.
let nextTemplate = `
show

User {{name}} is {{age}} years old.

`
engine.addTemplate`${nextTemplate}`

// After version 1.2.0 "addTemplate" could work like:
let
title = '

{{title}}

'
, txt = '

{{text}}

'
;

engine.addTemplate`
news
${title}
${txt}`

engine.render`
news
title : my own news channel
txt : Just started to write `
/**
* result:
* my own news channel
*

Just started to write


*
*/


// Render template 'hello' with data:
let block = engine.render`
hello
name : Peter
msg : Welcome to this page`
/**
* result:
* Hello Peter
*

Welcome to this page


*/

// Other way to provide the data for template "hello"
let
myMsg = 'Other message'
, myName = 'Kris'
;
block = engine.render`
hello
name : ${myName}
msg : ${myMsg}`
/**
* result:
* Hello Kris
*

Other message


*/
```

If templates for your project are already created and they are not in mustache style, then modify the template engine by providing a configuration object:

```js
let
config = {
TG_PRX : '<<' // Change of opening tag
, TG_SFX : '>>>' // Change of closing tag
, DV : '-->' // Data devider is also customizable
}
, vm = tagTemplates ( config )
;
// Provide template with your custom style
vm.addTemplate`
test
Your name is <>>`
// Render
let block = vm.render`
test
name --> Peter`
// Result --> 'Your name is Peter'
```

## Links

- [History of changes](https://github.com/PeterNaydenov/tag-templates/blob/master/CHANGELOG.md)

## Credits
'@peter.naydenov/tag-templates' was created by Peter Naydenov.

## License
'@peter.naydenov/tag-templates' is released under the MIT License.