1.1.0 • Published 10 years ago
nunjucks-tag v1.1.0
nunjucks-tag
provide nunjucks base tag to make it easy to write custom tag.
Installation
  npm install nunjucks-tag --saveUsage
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,