Sjablong
Templating engine with the combined powers of handlebars, front-matter, JSON Schema and Sjablong-fields
What can Sjablong do?
- Replace placeholders in text (Sjablong-fields, mustache or handlebars-expressions)
- Generate JSON Schema from Sjablong-fields and validate data against it
- Have default values for the template by front-matter or Sjablong-fields
- Convert Markup to HTML
Sjablong-fields
A Sjablong-field starts with [[ and ends with ]]
Inbetween the tags you define keyvalue-pair in the format key="value"
The only required key in a Sjablong-field is path. This it path in the data it should be replaced with.
The Sjablong-fields can be used to generate a JSONSchema to validate the data with.
Field examples
| label | Name/title of the field | No | Firstname |
| path | The path in the data object it should be replaced with | Yes | name.firstname |
| description | Description of the field | No | Firstname of the recipient |
| required | Should the field be required? | No | true |
| default | The default value of the field | No | Bob |
| preview | If replacePlacehold's preview option is true | No | Bob |
Examples
Sjablong-felt on a single line
[[label="fornavn":path="name.firstname"]]
Sjablong-felt with multiline default value
[[label="test":path="test":default="Line1\nLine2\nLine3"]]
Sjablong-felt on multiple lines (It is not necessary to indent the pairs)
[[
label="Firstname"
path="name.firstname"
]]
Sjablong-felt on multiple lines with more fields
[[
label="fornavn"
path="name.firstname"
descriptione="First name of the recipient"
required="true"
default="Bob"
preview="Bob"
]]
Functions
replacePlaceholder
const template = `[[path=firstName:preview="Preview user":default="Wilson"]]`
const data = { firstName: 'Bob'}
const replaced = replacePlaceholders(templateText, data);
const data = {}
const replaced = replacePlaceholders(templateText, data);
const template = `[[path=firstName:preview="Preview user"]]`
const data = {}
const replaced = replacePlaceholders(templateText, data, { preview: true });
const template = `[[path=firstName]] {{lastName}}`
const data = { firstName: 'Bob', lastName: 'Bobson' }
const replaced = replacePlaceholders(templateText, data);
generateSchema
Retreives all Sjablong-fields from a template and generates a JSON schema from it.
The schema can then be used to validate data before replacing placeholders.
const template = `[[path=firstName:preview="Preview user"]]`
const schema = Sjablong.generateSchema(template);
const template = `[[path=firstName]][[path=age:type=number]]`
const schema = Sjablong.generateSchema(template, { requireAll: true, });
const template = `[[path=firstName]][[path=address.city:type=string]]`
const schema = Sjablong.generateSchema(template, { requireAll: true, });
const template = `[[path=firstName]][[path=address.city:type=string]]`
const schema = Sjablong.generateSchema(template);
const flatten = Sjablong.flattenSchema(schema);
const data = { firstName: 'Brede Skuldre' }
const template = `[[path=firstName]][[path=address.city:type=string:required=true]]`
const schema = Sjablong.generateSchema(template);
Sjablong.validateData(schema, data);
const data = { firstName: 'Brede Skuldre', address: { city: 5 } }
const template = `[[path=firstName]][[path=address.city:type=string]]`
const schema = Sjablong.generateSchema(template);
Sjablong.validateData(schema, data);