nunjucks-tag
v1.1.0
Published
provide nunjucks base tag to make it easy to write custom tag
Downloads
316
Readme
nunjucks-tag
provide nunjucks base tag to make it easy to write custom tag.
Installation
npm install nunjucks-tag --save
Usage
const Tag = require('nunjucks-tag');
class CustomTag extends Tag {
constructor() {
super('custom');
this.nodeName = 'div';
}
render(context, attrs, body) {
// provide your custom logic
return super.render(context, attrs, body());
}
}
const assert = require('assert');
const nunjucks = require('nunjucks');
const env = nunjucks.configure('/view');
const html = env.renderString('{% custom attr=someVar %}{% endcustom %}', {someVar: "test"});
assert(html, '<div attr="test"></div>');
Properties
- end: whether as a close tag, default true
- useCustomParser: whether using custom parser, default true
- nodeName: the output html element's tag name, default as tagName
- tagName: the tag name use in template
Methods
- render(context, attrs, body):String - The actual renderFn, extend it to provide custom logic
- convertAttrs(attrs):String - Convert attrs to html attribute string
Custom parser rules
- Comma between attributes is optional.
- Attribute keys should only match 1 of the following 2 patterns:
- String ("data-key"="value" key="value")
- Symbol with hyphen (data-key="value")
- Attributes without value must be a simple symbol or an expression
Attribute convert rules
- all the attr name && value will be escape
- single attrs
- only allow string, will escape && ignore string with space,
"disabled" someVar "some space" "<" => disabled someValue <
- number/array/object/falsely will be ignore,
123, [12,13] {a:'b'} undefined false null => nothing
- only allow string, will escape && ignore string with space,
- key-value attrs
- string/number will output as escape string,
attr1=123 attr2="test" attr3="<div" => attr1="123" attr2="test" attr3="<div"
- SafeString will output as what they are,
attr2="<div"|safe => attr2="<div"
- object/array will output as String(item),
attr1={} attr2=["a", "b"] => attr1="[object Object] attr2="[object Array]"
- undefined/null will ignore,
attr1=undefined attr2=null => empty string
- string/number will output as escape string,