# plaintemplate

> simplistic plain text templatng

Latest version **1.0.2** (published 2016-07-15) · MIT license · 0 weekly downloads

## Install

```sh
npm install plaintemplate
pnpm add plaintemplate
yarn add plaintemplate
bun add plaintemplate
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.2 |
| Published | 2016-07-15 |
| First published | 2015-12-09 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 4 |
| Known vulnerabilities | 0 (+1 in 1 direct dependencies) |
| Install scripts | no |
| GitHub stars | 2 |
| Author | Kyle E. Mitchell |
| Maintainers | kemitchell |

## Links

- npm: https://www.npmjs.com/package/plaintemplate
- Repository: https://github.com/kemitchell/plaintemplate.js
- Homepage: https://github.com/kemitchell/plaintemplate.js#readme
- Issues: https://github.com/kemitchell/plaintemplate.js/issues
- npm.io page: https://npm.io/package/plaintemplate

## Dependencies (4)

- [asap](https://npm.io/package/asap.md) ^2.0.3
- [merge](https://npm.io/package/merge.md) ^1.2.0
- [map-async](https://npm.io/package/map-async.md) ^0.1.1
- [plaintemplate-parse](https://npm.io/package/plaintemplate-parse.md) ^0.1.0

## Recent versions

- 1.0.2 (latest) — 2016-07-15
- 1.0.1 — 2016-02-24
- 1.0.0 — 2016-02-24
- 0.1.3 — 2015-12-14
- 0.1.2 — 2015-12-09
- 0.1.1 — 2015-12-09
- 0.1.0 — 2015-12-09

## README

Roll your own Mustache-like plaintext template language with custom
syntax and template directives.

```javascript
var plaintemplate = require('plaintemplate')
var assert = require('assert')

var processor = plaintemplate(
  // Template directive handler
  function handler(token, context, stringify) {
    var directive = token.tag.trim()
    // Repeate a tag's contents five times.
    if (directive.startsWith('five')) {
      var output = ''
      for (var counter = 0; counter < 5; counter++) {
        output += stringify(token.content, context, handler)
      }
      return output
    // Insert a string from context.
    } else if (directive.startsWith('=')) {
      var key = directive.split(' ')[1]
      return context[key]
    } else throw new Error('Invalid directive')
  },
  // Use custom double-parentheses template tags.
  {open: '((', close: '))', start: '{', end: '}'}
)

processor(
  // Template input
  '(( five { ))Howdy, (( = name ))! (( } ))',
  // Context
  {name: 'John'},
  // Callback
  function (error, result) {
    assert.deepStrictEqual(
      result,
      'Howdy, John! ' +
      'Howdy, John! ' +
      'Howdy, John! ' +
      'Howdy, John! ' +
      'Howdy, John! '
    )
  }
)
```

The package exports a single function of two arguments:

1. _Tag Hangler_, optional (omit with `undefined`), a function of three
   arguments:

    1. _Token_, the [plaintemplate-parse][parse] tag token object to
       stringify

    2. _Context_, the context in which the token is to be stringified

    3. _Stringify_, a function used to recursively stringify other
       [plaintemplate-parse][parse] tokens, of three arguments:

        1. _Content_, an array of [plaintemplate-parse][parse] text and
           tag token objects, probably a tag token's content property

        2. _Context_

        3. _Tag Handler_

    4. _Callback_, an error-first function

2. _Parser Options_, optional, an object, passed directly to
   [plaintemplate-parse][parse]

The function returns another function of three arguments:

1. _Input_, a string, containing template text and tags

2. _Context_, an object, containing values that affect the template

3. _Callback_, an error-first function yielding the result of template
   processing

The default tag handler defines a number of template tag directives:

1. `insert X`. Replaces a tag with the value of `X` in context. Throws
   an error if `X` does not exist in context.

2. `if X`. Renders the tag's contents only if `X` exists in context and
   has a "truthy" value. Throws an error if `X` does not exist in context.

3. `unless X`. Renders the tag's contents only if `X` exists in context
   and has a "falsey" value. Throws an error if `X` does not exist in
   context.

4. `each X`. Renders the tag's contents once for every array element of
   `X` in context. Throws an error if `X` does not exist in context,
   or if `X` exists in context, but is not an array. Sets a number of
   additional variables in context when rendering the tag's contents:

    1. `element`, the array element being rendered

    2. `odd`, if the index of the element in the array (counting from 1)
       is odd

    3. `even`, if the index of the element in the array (counting from
       1) is even

    4. `first`, true if the element is the first element of the array

    5. `last`, true if the element is the last element of the array

[parse]: https://www.npmjs.com/packages/plaintemplate-parse

---
_Source: https://npm.io/package/plaintemplate · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
