1.1.0 • Published 10 years ago

nunjucks-tag v1.1.0

Weekly downloads
1
License
MIT
Repository
github
Last release
10 years ago

nunjucks-tag

provide nunjucks base tag to make it easy to write custom tag.

NPM Version Build Status

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 &lt;
    • number/array/object/falsely will be ignore, 123, [12,13] {a:'b'} undefined false null => nothing
  • key-value attrs
    • string/number will output as escape string, attr1=123 attr2="test" attr3="<div" => attr1="123" attr2="test" attr3="&lt;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