{"_id":"nanotemplates","_rev":"40-6dca5f3119cf5bfe85adc0a623c2e0b6","name":"nanotemplates","description":"Nanotemplates","dist-tags":{"latest":"0.7.0"},"versions":{"0.0.0":{"name":"nanotemplates","version":"0.0.0","description":"Nanotemplates","main":"lib/nano.js","dependencies":{"async":"*"},"devDependencies":{"mocha":"*"},"scripts":{"test":"mocha -R spec"},"repository":{"type":"git","url":"https://github.com/inca/nanotemplates"},"keywords":["template","engine"],"author":{"name":"Boris Okunskiy"},"license":"ISC","bugs":{"url":"https://github.com/inca/nanotemplates/issues"},"homepage":"https://github.com/inca/nanotemplates","gitHead":"0f73980ff1cec156b707fc2cdaaef285ecdc763e","_id":"nanotemplates@0.0.0","_shasum":"6f04efd1732299515f41b71955d72f5d70e91059","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"inca","email":"boris@okunskiy.name"},"maintainers":[{"name":"inca","email":"boris@okunskiy.name"}],"dist":{"shasum":"6f04efd1732299515f41b71955d72f5d70e91059","tarball":"https://registry.npmjs.org/nanotemplates/-/nanotemplates-0.0.0.tgz","integrity":"sha512-lA9vYrqQ9RnN/JzYE7UGgAG4JV3CYQNzuEIymUWsYU5L7P8ZTyoeJpy6EIUmqPyufDMU7zR8fPyxpNkovz+VEw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDWZ71hX97e6q9FmqJa0IdGoEv74LlXeUpxsEUuVhxvtAiEAq62VnvUTwn18MU8BKK5MB4+IrT6V+CLkwrudy1aoUKM="}]}},"0.0.1":{"name":"nanotemplates","version":"0.0.1","description":"Nanotemplates","main":"lib/nano.js","dependencies":{"async":"*","grunt":"*","grunt-peg":"*","nomnom":"*"},"devDependencies":{"mocha":"*"},"scripts":{"test":"mocha -R spec"},"repository":{"type":"git","url":"https://github.com/inca/nanotemplates"},"keywords":["template","engine"],"author":{"name":"Boris Okunskiy"},"license":"ISC","bugs":{"url":"https://github.com/inca/nanotemplates/issues"},"homepage":"https://github.com/inca/nanotemplates","gitHead":"613b0bff3d692bdcf2088c9f238d1f6ce3d99feb","_id":"nanotemplates@0.0.1","_shasum":"3b672acffac11ec4cbc12d35d1d7a4ff2270888e","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"inca","email":"boris@okunskiy.name"},"maintainers":[{"name":"inca","email":"boris@okunskiy.name"}],"dist":{"shasum":"3b672acffac11ec4cbc12d35d1d7a4ff2270888e","tarball":"https://registry.npmjs.org/nanotemplates/-/nanotemplates-0.0.1.tgz","integrity":"sha512-7SHKKyYQeIAyZzJnVSzw64HGgiy1VZDGxzg9hZfaBcwKS7h9IU1SQ9vQOCHVN7/lAFjXRQDl9U8Dm3FZ52xyEQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDM2ms0dHssP1uni+Z9TNDuIRIfzGJnmVMH4AwETEHangIgBvrjUk8Ckg/JbUw+abbz5vr3DdOYsG4I0Ilaph7+ysg="}]}},"0.0.2":{"name":"nanotemplates","version":"0.0.2","description":"Nanotemplates","main":"lib/nano.js","bin":{"ntl":"bin/ntl"},"dependencies":{"async":"*","grunt":"*","grunt-peg":"*","nomnom":"*"},"devDependencies":{"mocha":"*"},"scripts":{"test":"mocha -R spec"},"repository":{"type":"git","url":"https://github.com/inca/nanotemplates"},"keywords":["template","engine"],"author":{"name":"Boris Okunskiy"},"license":"ISC","bugs":{"url":"https://github.com/inca/nanotemplates/issues"},"homepage":"https://github.com/inca/nanotemplates","gitHead":"05cc0a97522b6ee8f3743a771dd5cac610fc7239","_id":"nanotemplates@0.0.2","_shasum":"47a423906a8073e4d4af93176766fe6abdaaa643","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"inca","email":"boris@okunskiy.name"},"maintainers":[{"name":"inca","email":"boris@okunskiy.name"}],"dist":{"shasum":"47a423906a8073e4d4af93176766fe6abdaaa643","tarball":"https://registry.npmjs.org/nanotemplates/-/nanotemplates-0.0.2.tgz","integrity":"sha512-On3q2dO9n0aycLA4/aeXRaSmJVTOwNcypxXWdCQkPQL1wIYBUoY9MS1aQtWx0EAdLyGmUTWMpbIWe4fKZGyDHQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDd3BcgthhtUAjYgvmXrBuSkH0Mj5CspYPJLvQO6eF6vgIhAKa+PHY5RGnRdWVf/otXcPRsWpWlcaciw3/dTKoa0oba"}]}},"0.1.0":{"name":"nanotemplates","version":"0.1.0","description":"Nanotemplates","main":"lib/nano.js","bin":{"ntl":"bin/ntl"},"dependencies":{"async":"*","grunt":"*","grunt-peg":"*","nomnom":"*","angular-expressions":"*"},"devDependencies":{"mocha":"*"},"scripts":{"test":"mocha -R spec"},"repository":{"type":"git","url":"https://github.com/inca/nanotemplates"},"keywords":["template","engine"],"author":{"name":"Boris Okunskiy"},"license":"ISC","bugs":{"url":"https://github.com/inca/nanotemplates/issues"},"homepage":"https://github.com/inca/nanotemplates","gitHead":"99b89be9ee745bb67e598283bc3952942f7b303b","_id":"nanotemplates@0.1.0","_shasum":"ad3f3b281e4b29ea13d8576a0baa667fb320a367","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"inca","email":"boris@okunskiy.name"},"maintainers":[{"name":"inca","email":"boris@okunskiy.name"}],"dist":{"shasum":"ad3f3b281e4b29ea13d8576a0baa667fb320a367","tarball":"https://registry.npmjs.org/nanotemplates/-/nanotemplates-0.1.0.tgz","integrity":"sha512-9QnHZeekQ4rc19q+UdyWQg6FE5fQQyMkolsyFZTlpr0MU2LcvM+kezQVsunWO8UWeWqcCwG60dhdAncFGVLEtA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAYWDZEEfU/rrMGUYV4+guwRDO6/Z9wB3QFd2TjQnTd2AiBM0tu+EzJzzRqSkwkdWEkhxxROlA+jt5X/AciE2Ts7OQ=="}]}},"0.1.1":{"name":"nanotemplates","version":"0.1.1","description":"Nanotemplates","main":"lib/nano.js","bin":{"ntl":"bin/ntl"},"dependencies":{"async":"*","grunt":"*","grunt-peg":"*","nomnom":"*","angular-expressions":"*"},"devDependencies":{"mocha":"*"},"scripts":{"test":"mocha -R spec"},"repository":{"type":"git","url":"https://github.com/inca/nanotemplates"},"keywords":["template","engine"],"author":{"name":"Boris Okunskiy"},"license":"ISC","bugs":{"url":"https://github.com/inca/nanotemplates/issues"},"homepage":"https://github.com/inca/nanotemplates","gitHead":"eb559b9ba9a2032a9d0350993f6095f83719026e","_id":"nanotemplates@0.1.1","_shasum":"f90115da9df16c164f6e589faaa6990a2b080a70","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"inca","email":"boris@okunskiy.name"},"maintainers":[{"name":"inca","email":"boris@okunskiy.name"}],"dist":{"shasum":"f90115da9df16c164f6e589faaa6990a2b080a70","tarball":"https://registry.npmjs.org/nanotemplates/-/nanotemplates-0.1.1.tgz","integrity":"sha512-d5nvxlxh42z7upWbYem57wc72hKZu7r3XiEFteNHz0r3/JuXTXh/TYJI1IK5na1cLZYcxkcSAL4Cq/Zu7mRRGw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBHtaZvQ+apSHM77A/lgsQl5Fluw7l8BE4ZeU4AS30LRAiEA/vs3HjbKBxhKa9B6E3K9Nh2cYHmSh0yMLO2VODFy0q8="}]}},"0.1.2":{"name":"nanotemplates","version":"0.1.2","description":"Nanotemplates","main":"lib/nano.js","bin":{"ntl":"bin/ntl"},"dependencies":{"async":"*","grunt":"*","grunt-peg":"*","nomnom":"*","angular-expressions":"*"},"devDependencies":{"mocha":"*"},"scripts":{"test":"mocha -R spec"},"repository":{"type":"git","url":"https://github.com/inca/nanotemplates"},"keywords":["template","engine"],"author":{"name":"Boris Okunskiy"},"license":"ISC","bugs":{"url":"https://github.com/inca/nanotemplates/issues"},"homepage":"https://github.com/inca/nanotemplates","gitHead":"013733bf1adc190e4a42485f95971b5b74ee060e","_id":"nanotemplates@0.1.2","_shasum":"dbba6f9c2351d10b0f40bf22ce875e5e699bd4a2","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"inca","email":"boris@okunskiy.name"},"maintainers":[{"name":"inca","email":"boris@okunskiy.name"}],"dist":{"shasum":"dbba6f9c2351d10b0f40bf22ce875e5e699bd4a2","tarball":"https://registry.npmjs.org/nanotemplates/-/nanotemplates-0.1.2.tgz","integrity":"sha512-qBhz+C/aYC3fKRHxH4fJk4X81rbXmgxsvv4vWnI98J5BEVflpIEgyD7soJLH6rqGwjuXYQvfX1bM7e83thOAoQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBM6aUuxD82WVacb/gRZKylaRVoTH1IvI5eElQmHrQWUAiBXdSpjWmAv9XF7HRpxviBL85+lYM0m0bBdxF9VydA3fA=="}]}},"0.1.3":{"name":"nanotemplates","version":"0.1.3","description":"Nanotemplates","main":"lib/nano.js","bin":{"ntl":"bin/ntl"},"dependencies":{"async":"*","grunt":"*","grunt-peg":"*","nomnom":"*","angular-expressions":"*"},"devDependencies":{"mocha":"*"},"scripts":{"test":"mocha -R spec"},"repository":{"type":"git","url":"https://github.com/inca/nanotemplates"},"keywords":["template","engine"],"author":{"name":"Boris Okunskiy"},"license":"ISC","bugs":{"url":"https://github.com/inca/nanotemplates/issues"},"homepage":"https://github.com/inca/nanotemplates","gitHead":"284434055340bf99ffb424553217af8078ccaa01","_id":"nanotemplates@0.1.3","_shasum":"5509d4dc64d9030618556393f8ddb4c60555859e","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"inca","email":"boris@okunskiy.name"},"maintainers":[{"name":"inca","email":"boris@okunskiy.name"}],"dist":{"shasum":"5509d4dc64d9030618556393f8ddb4c60555859e","tarball":"https://registry.npmjs.org/nanotemplates/-/nanotemplates-0.1.3.tgz","integrity":"sha512-kREhdXqTmRjQZbHFmYEg5pz1cP163pAwb+VMwA0r/6WKYKNqqigQVgBF1c5t8hMAEqL7ttrF0deBQs6QRmjMLQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDo9QrqGSApmN3M9Zbx1PQbkSSXeK1R9lj1Kh7P+r/NQAIhANxJ84sFxi6OX/Jcdmlr4r7zqbwDSbRrRr9vh5ceV080"}]}},"0.2.0":{"name":"nanotemplates","version":"0.2.0","description":"Nanotemplates","main":"lib/nano.js","bin":{"ntl":"bin/ntl"},"dependencies":{"async":"*","grunt":"*","grunt-peg":"*","nomnom":"*","angular-expressions":"*"},"devDependencies":{"mocha":"*"},"scripts":{"test":"mocha -R spec"},"repository":{"type":"git","url":"https://github.com/inca/nanotemplates"},"keywords":["template","engine"],"author":{"name":"Boris Okunskiy"},"license":"ISC","bugs":{"url":"https://github.com/inca/nanotemplates/issues"},"homepage":"https://github.com/inca/nanotemplates","gitHead":"e54ab568a1769d0aa55524d96faa51661f4594e5","_id":"nanotemplates@0.2.0","_shasum":"7899bd34a79198caa7f61260bc9b96032a6849c0","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"inca","email":"boris@okunskiy.name"},"maintainers":[{"name":"inca","email":"boris@okunskiy.name"}],"dist":{"shasum":"7899bd34a79198caa7f61260bc9b96032a6849c0","tarball":"https://registry.npmjs.org/nanotemplates/-/nanotemplates-0.2.0.tgz","integrity":"sha512-j6+mL+gorLtYsIQT86nfqxtmfSFpsGcfPLcOEmW06BVtHB/n4Mbjj0hhZRRSVFyIkz9c7cjOdWyrQ+xy5YNVug==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCXIKIJ66XPgY7qQRgv/e7MwyYbnp9iBS6GMjpU1lS0XAIhAPSMSabNyjft15iXIV8lB6/LcGvT7pmc/x7+ebtlT/a8"}]}},"0.3.0":{"name":"nanotemplates","version":"0.3.0","description":"Nanotemplates","main":"lib/nano.js","bin":{"ntl":"bin/ntl"},"dependencies":{"async":"*","grunt":"*","grunt-peg":"*","nomnom":"*","angular-expressions":"*","lru-cache":"*"},"devDependencies":{"mocha":"*"},"scripts":{"test":"mocha -R spec"},"repository":{"type":"git","url":"https://github.com/inca/nanotemplates"},"keywords":["template","engine"],"author":{"name":"Boris Okunskiy"},"license":"ISC","bugs":{"url":"https://github.com/inca/nanotemplates/issues"},"homepage":"https://github.com/inca/nanotemplates","gitHead":"d93500991d4237805d072f5708b4f390bc7d613f","_id":"nanotemplates@0.3.0","_shasum":"33c47f96d42a32a3b6b8a5e45c9a819682ddf945","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"inca","email":"boris@okunskiy.name"},"maintainers":[{"name":"inca","email":"boris@okunskiy.name"}],"dist":{"shasum":"33c47f96d42a32a3b6b8a5e45c9a819682ddf945","tarball":"https://registry.npmjs.org/nanotemplates/-/nanotemplates-0.3.0.tgz","integrity":"sha512-meYtjDuEVW8G15TuTeSYgC3iBNcrq6UGC47a5G6kg+iNPsnT+X5PHoq8S7HZFd4nZGWSascIXgAbNjy0NVcbEw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDqb2R/7gYQy+WS9/BDPIQVgRBilwnB8efI2to4CkJjiAiEA6f61ZPQKqw8p1xGw8N6XKbCU/m2PgYwi7ErPxWWFecE="}]}},"0.3.1":{"name":"nanotemplates","version":"0.3.1","description":"Nanotemplates","main":"lib/nano.js","bin":{"ntl":"bin/ntl"},"dependencies":{"async":"*","fallback":"*","grunt":"*","grunt-peg":"*","nomnom":"*","angular-expressions":"*","lru-cache":"*"},"devDependencies":{"mocha":"*"},"scripts":{"test":"mocha -R spec"},"repository":{"type":"git","url":"https://github.com/inca/nanotemplates"},"keywords":["template","engine"],"author":{"name":"Boris Okunskiy"},"license":"ISC","bugs":{"url":"https://github.com/inca/nanotemplates/issues"},"homepage":"https://github.com/inca/nanotemplates","gitHead":"5c3e338d04d5340265619493d8892a8120f50853","_id":"nanotemplates@0.3.1","_shasum":"89337037e31ea4bd0d428f89c6406ea4866704b3","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"inca","email":"boris@okunskiy.name"},"maintainers":[{"name":"inca","email":"boris@okunskiy.name"}],"dist":{"shasum":"89337037e31ea4bd0d428f89c6406ea4866704b3","tarball":"https://registry.npmjs.org/nanotemplates/-/nanotemplates-0.3.1.tgz","integrity":"sha512-400I1eAdyp2P+Yq09XUw7mlizkF1zYLqUqE5Pv8C6u+AxGxXYqPzvj2m773vNbbTJOjmArGTtX4wJSzvwDeMZQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLPUR+SZSvUT36q0AJXeP/35tQnBZglQ+Gj3Ly+HCElQIgLwclqBJh4UTjhWlCvrOvx+NCaPDjgD+xFmGkhp6ivwk="}]}},"0.3.2":{"name":"nanotemplates","version":"0.3.2","description":"Nanotemplates","main":"lib/nano.js","bin":{"ntl":"bin/ntl"},"dependencies":{"async":"*","fallback":"*","grunt":"*","grunt-peg":"*","nomnom":"*","angular-expressions":"*","lru-cache":"*"},"devDependencies":{"mocha":"*"},"scripts":{"test":"mocha -R spec"},"repository":{"type":"git","url":"https://github.com/inca/nanotemplates"},"keywords":["template","engine"],"author":{"name":"Boris Okunskiy"},"license":"ISC","bugs":{"url":"https://github.com/inca/nanotemplates/issues"},"homepage":"https://github.com/inca/nanotemplates","gitHead":"8b615455d82bb5fc490b0b7c591bce3333565143","_id":"nanotemplates@0.3.2","_shasum":"b5cf2a3528b5cd92c080842afadd2b74c7c73abf","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"inca","email":"boris@okunskiy.name"},"maintainers":[{"name":"inca","email":"boris@okunskiy.name"}],"dist":{"shasum":"b5cf2a3528b5cd92c080842afadd2b74c7c73abf","tarball":"https://registry.npmjs.org/nanotemplates/-/nanotemplates-0.3.2.tgz","integrity":"sha512-yycU1ypv6LFwViGBDxnPOveUETathz5pBvYL4Kba8C6NLzEJwtlphGJNkIim8qzw/uc4vpWFqnQ4JllEP4RmBw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCE+ZxdaalRFtXmOHwkHAKSiplqscDjTEv3IVyyRUTCTQIhAKBvXhMlN5bKkIWONc6E5bsbJrxYNMFxTfolKd/x1726"}]}},"0.3.3":{"name":"nanotemplates","version":"0.3.3","description":"Nanotemplates","main":"lib/nano.js","bin":{"ntl":"bin/ntl"},"dependencies":{"async":"*","fallback":"*","grunt":"*","grunt-peg":"*","nomnom":"*","angular-expressions":"*","lru-cache":"*"},"devDependencies":{"mocha":"*"},"scripts":{"test":"mocha -R spec"},"repository":{"type":"git","url":"https://github.com/inca/nanotemplates"},"keywords":["template","engine"],"author":{"name":"Boris Okunskiy"},"license":"ISC","bugs":{"url":"https://github.com/inca/nanotemplates/issues"},"homepage":"https://github.com/inca/nanotemplates","gitHead":"3494ca34cf0ad08763d85b699de83dbd6cda5d58","_id":"nanotemplates@0.3.3","_shasum":"c260a94092da98d9395d142aed7e529fdba24544","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"inca","email":"boris@okunskiy.name"},"maintainers":[{"name":"inca","email":"boris@okunskiy.name"}],"dist":{"shasum":"c260a94092da98d9395d142aed7e529fdba24544","tarball":"https://registry.npmjs.org/nanotemplates/-/nanotemplates-0.3.3.tgz","integrity":"sha512-n9/yYZbenaJfnjqQXlvnMgAccXM0bYmmvYbTkQgbNSedIW03+ypgfkl/ZEFlMGgdqeNZwB1KTFnb13UkA3C8Fg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHGKLwEcRwCBehRSstr7keaCcVCSsPiNrafZt7NOkhvpAiEA/QnfkjNfUbLvCnEFW3rtyTvBcOIx3jTfZWvjtrrofLQ="}]}},"0.3.4":{"name":"nanotemplates","version":"0.3.4","description":"Nanotemplates","main":"lib/nano.js","bin":{"ntl":"bin/ntl"},"dependencies":{"async":"*","fallback":"*","grunt":"*","grunt-peg":"*","nomnom":"*","angular-expressions":"*","lru-cache":"*"},"devDependencies":{"mocha":"*"},"scripts":{"test":"mocha -R spec"},"repository":{"type":"git","url":"https://github.com/inca/nanotemplates"},"keywords":["template","engine"],"author":{"name":"Boris Okunskiy"},"license":"ISC","bugs":{"url":"https://github.com/inca/nanotemplates/issues"},"homepage":"https://github.com/inca/nanotemplates","gitHead":"f601ee7e9dc2f11084595f547c63df9ceab56665","_id":"nanotemplates@0.3.4","_shasum":"b01dc5305ca4b1dc6f66887bac4f85ebed877af1","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"inca","email":"boris@okunskiy.name"},"maintainers":[{"name":"inca","email":"boris@okunskiy.name"}],"dist":{"shasum":"b01dc5305ca4b1dc6f66887bac4f85ebed877af1","tarball":"https://registry.npmjs.org/nanotemplates/-/nanotemplates-0.3.4.tgz","integrity":"sha512-OBGQSZGrzl4sWNTiIVnG4EK0XeOmrXB5PPY4Xl9w0jO1KEKTAnVKUQi2p4xHEUzf8OwkXvuwMAru+ZXlV2nu5g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsjzIcjrvGu5pREWcvGG7FZgyqwHU+lOcyYuPr7vWXdAIgZkJGN3W7HOEMJ1EleYcbFBg7ySd7uYw1UecBYWwEfI0="}]}},"0.3.5":{"name":"nanotemplates","version":"0.3.5","description":"Nanotemplates","main":"lib/nano.js","bin":{"ntl":"bin/ntl"},"dependencies":{"async":"*","fallback":"*","grunt":"*","grunt-peg":"*","nomnom":"*","angular-expressions":"*","lru-cache":"*"},"devDependencies":{"mocha":"*"},"scripts":{"test":"mocha -R spec"},"repository":{"type":"git","url":"https://github.com/inca/nanotemplates"},"keywords":["template","engine"],"author":{"name":"Boris Okunskiy"},"license":"ISC","bugs":{"url":"https://github.com/inca/nanotemplates/issues"},"homepage":"https://github.com/inca/nanotemplates","gitHead":"d2d9b1d188414a6723ce59ad79396a5d68fc355a","_id":"nanotemplates@0.3.5","_shasum":"605a813d168453a879c79c5bae82b39472fd2d48","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"inca","email":"boris@okunskiy.name"},"maintainers":[{"name":"inca","email":"boris@okunskiy.name"}],"dist":{"shasum":"605a813d168453a879c79c5bae82b39472fd2d48","tarball":"https://registry.npmjs.org/nanotemplates/-/nanotemplates-0.3.5.tgz","integrity":"sha512-AOs3SCW+hjrY+6TGCyC0iJOB44tSXwIcXZNrtWtHj6B1UGWJcia6211Lgazg6ryh/89HgSDs0gLwd+QDVrVJ8Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1LMw0M1vWxan9xR9Txp0VcY+hSaiZYK7fhf/Ehu9JwAIgO5ujIrw/gJ1V/fwj9B/M14HTjEILcF1WfCab90dDLzI="}]}},"0.3.6":{"name":"nanotemplates","version":"0.3.6","description":"Nanotemplates","main":"lib/nano.js","bin":{"ntl":"bin/ntl"},"dependencies":{"async":"*","fallback":"*","grunt":"*","grunt-peg":"*","nomnom":"*","angular-expressions":"*","lru-cache":"*"},"devDependencies":{"mocha":"*"},"scripts":{"test":"mocha -R spec"},"repository":{"type":"git","url":"https://github.com/inca/nanotemplates"},"keywords":["template","engine"],"author":{"name":"Boris Okunskiy"},"license":"ISC","bugs":{"url":"https://github.com/inca/nanotemplates/issues"},"homepage":"https://github.com/inca/nanotemplates","gitHead":"db3cd00bf888b13188f44e6515cd7c1fe1781291","_id":"nanotemplates@0.3.6","_shasum":"d1d341986c2558906a89f74498d8b7843c644c77","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"inca","email":"boris@okunskiy.name"},"maintainers":[{"name":"inca","email":"boris@okunskiy.name"}],"dist":{"shasum":"d1d341986c2558906a89f74498d8b7843c644c77","tarball":"https://registry.npmjs.org/nanotemplates/-/nanotemplates-0.3.6.tgz","integrity":"sha512-oDTM/obLI+mRti6y25MsmrREU5jM8dRrwkPZ424WV42xrzVstyMl9XYiagICrS7Sny5ir5TiWx8pcLRToXmOSw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDIjIy4aMC18xAIFwng5ieUho5y6t6ScZ7+uPU8po1LHAiEAtioCwKPH/zUKqSbdXjmsk6uPArwY+e6zYoizbzaBFZo="}]}},"0.3.7":{"name":"nanotemplates","version":"0.3.7","description":"Nanotemplates","main":"lib/nano.js","bin":{"ntl":"bin/ntl"},"dependencies":{"async":"*","fallback":"*","grunt":"*","grunt-peg":"*","nomnom":"*","angular-expressions":"*","lru-cache":"*"},"devDependencies":{"mocha":"*"},"scripts":{"test":"mocha -R spec"},"repository":{"type":"git","url":"https://github.com/inca/nanotemplates"},"keywords":["template","engine"],"author":{"name":"Boris Okunskiy"},"license":"ISC","bugs":{"url":"https://github.com/inca/nanotemplates/issues"},"homepage":"https://github.com/inca/nanotemplates","gitHead":"7a5b23ed4e6ed429023f7b73f15efc6f5096e132","_id":"nanotemplates@0.3.7","_shasum":"e91040d4e21dfcec8989d18fd5f15cbe4ef9f6af","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"inca","email":"boris@okunskiy.name"},"maintainers":[{"name":"inca","email":"boris@okunskiy.name"}],"dist":{"shasum":"e91040d4e21dfcec8989d18fd5f15cbe4ef9f6af","tarball":"https://registry.npmjs.org/nanotemplates/-/nanotemplates-0.3.7.tgz","integrity":"sha512-rBbMRAthoQtItpM0qa2HLZF8lKLjKFj4Wz/eCe5Tn9W7LhqAuFqIjqUuLrGZMw0Co7gZZhBupAk78YNdI83SjQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHp0sRhnDHmzOhLEGSI719UGXts2cqg7oag+Os5yB9doAiEAyf5KNoLYF2QubiXap1rlg/rcrSQMxYNodpot7Ah1SZI="}]}},"0.3.9":{"name":"nanotemplates","version":"0.3.9","description":"Nanotemplates","main":"lib/nano.js","bin":{"ntl":"bin/ntl"},"dependencies":{"async":"*","fallback":"*","grunt":"*","grunt-peg":"*","nomnom":"*","angular-expressions":"*","lru-cache":"*"},"devDependencies":{"mocha":"*"},"scripts":{"test":"mocha -R spec"},"repository":{"type":"git","url":"https://github.com/inca/nanotemplates"},"keywords":["template","engine"],"author":{"name":"Boris Okunskiy"},"license":"ISC","bugs":{"url":"https://github.com/inca/nanotemplates/issues"},"homepage":"https://github.com/inca/nanotemplates","gitHead":"af8f9e19f6472806ae129402e1248179cfb92c5f","_id":"nanotemplates@0.3.9","_shasum":"0a0c68b0bc12435e24e7686610451ad90b6705fa","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"inca","email":"boris@okunskiy.name"},"maintainers":[{"name":"inca","email":"boris@okunskiy.name"}],"dist":{"shasum":"0a0c68b0bc12435e24e7686610451ad90b6705fa","tarball":"https://registry.npmjs.org/nanotemplates/-/nanotemplates-0.3.9.tgz","integrity":"sha512-Do5DtEPbdyIE1mxhd3IiXT28V+OM4GVDmFPS1YlyfZKTl0wdnhAzXKFmaVXVksaaC9pCg9SywcyF60qKUWqMzA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDsHi2OpIUNM8CSh6xqS36YVogpKgurca1DHNZJumQvBgIhAOWu3aW8OnSQZ3/uJxpACMU5rE0N1l32WCa1Q7pGOOxl"}]}},"0.4.0":{"name":"nanotemplates","version":"0.4.0","description":"Nanotemplates","main":"lib/nano.js","bin":{"ntl":"bin/ntl"},"dependencies":{"async":"*","fallback":"*","grunt":"*","grunt-peg":"*","nomnom":"*","angular-expressions":"*","lru-cache":"*"},"devDependencies":{"mocha":"*"},"scripts":{"test":"mocha -R spec"},"repository":{"type":"git","url":"https://github.com/inca/nanotemplates"},"keywords":["template","engine"],"author":{"name":"Boris Okunskiy"},"license":"ISC","bugs":{"url":"https://github.com/inca/nanotemplates/issues"},"homepage":"https://github.com/inca/nanotemplates","gitHead":"1cbd342ee1d5fbc2bcf4720627df66142c573a94","_id":"nanotemplates@0.4.0","_shasum":"d488b7651b8b480278f0d5544a0c2ed2ad8d4dde","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"inca","email":"boris@okunskiy.name"},"maintainers":[{"name":"inca","email":"boris@okunskiy.name"}],"dist":{"shasum":"d488b7651b8b480278f0d5544a0c2ed2ad8d4dde","tarball":"https://registry.npmjs.org/nanotemplates/-/nanotemplates-0.4.0.tgz","integrity":"sha512-BrmpmghrV6BjSnQSQG8z+tAegTwEJR4luGbv/4w0FfF6/9NF+KYs1i2x3OzRjMsnJUYwb6YBbwE4C3SaeCipPA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDmk6UIwSrvQYQ9s8f5uni/1HL5pW7ptsnzDzjDFHvHJgIgDqQv/BlwmiYJ89q4q2i+i/sLKuVE3IQgrA99crTPPI8="}]}},"0.5.0":{"name":"nanotemplates","version":"0.5.0","description":"Nanotemplates","main":"lib/main.js","bin":{"ntl":"bin/ntl"},"dependencies":{"async":"*","fallback":"*","nomnom":"*","angular-expressions":"*","lru-cache":"*","path-browserify":"*","glob":"*"},"devDependencies":{"mocha":"*","grunt":"*","grunt-peg":"*","brfs":"*"},"browser":{"lib/main.js":"lib/browser.js","path":"path-browserify","fs":false,"nomnom":false,"glob":false},"browserify":{"transform":["brfs"]},"scripts":{"test":"mocha -R spec"},"repository":{"type":"git","url":"https://github.com/inca/nanotemplates"},"keywords":["template","engine"],"author":{"name":"Boris Okunskiy"},"license":"ISC","bugs":{"url":"https://github.com/inca/nanotemplates/issues"},"homepage":"https://github.com/inca/nanotemplates","gitHead":"e10f12003736fedbfdf82cb47d9d3d2f975ff2d1","_id":"nanotemplates@0.5.0","_shasum":"5789d05e768b47575f5b8879d4d688a6e6831749","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"inca","email":"boris@okunskiy.name"},"maintainers":[{"name":"inca","email":"boris@okunskiy.name"}],"dist":{"shasum":"5789d05e768b47575f5b8879d4d688a6e6831749","tarball":"https://registry.npmjs.org/nanotemplates/-/nanotemplates-0.5.0.tgz","integrity":"sha512-txMi/JUINamppVep80J+ZCvYKH5hQvq0Q85UDZQcv0i35bsRKOmn5aNXs+11pNMQlZk5aatS2Up+XThas1JvzQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDtXsNW6qm9vR8YrUtXLLcMPID2W3naph0NOD9z5wQ7BwIgTRjY5WohC7g/7nfmo+vMcFBUHJ9puBvGp13iygb9WFg="}]}},"0.5.1":{"name":"nanotemplates","version":"0.5.1","description":"Nanotemplates","main":"lib/main.js","bin":{"ntl":"bin/ntl"},"dependencies":{"async":"*","fallback":"*","nomnom":"*","angular-expressions":"*","lru-cache":"*","path-browserify":"*","glob":"*"},"devDependencies":{"mocha":"*","grunt":"*","grunt-peg":"*","brfs":"*"},"browser":{"lib/main.js":"lib/browser.js","path":"path-browserify","fs":false,"nomnom":false,"glob":false},"browserify":{"transform":["brfs"]},"scripts":{"test":"mocha -R spec"},"repository":{"type":"git","url":"https://github.com/inca/nanotemplates"},"keywords":["template","engine"],"author":{"name":"Boris Okunskiy"},"license":"ISC","bugs":{"url":"https://github.com/inca/nanotemplates/issues"},"homepage":"https://github.com/inca/nanotemplates","gitHead":"4362321f520c2b1ce72a21753306bb7a12913e13","_id":"nanotemplates@0.5.1","_shasum":"c55f622e5a8f07f7b7402202908c7c74d5e7c695","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"inca","email":"boris@okunskiy.name"},"maintainers":[{"name":"inca","email":"boris@okunskiy.name"}],"dist":{"shasum":"c55f622e5a8f07f7b7402202908c7c74d5e7c695","tarball":"https://registry.npmjs.org/nanotemplates/-/nanotemplates-0.5.1.tgz","integrity":"sha512-KLwHPaVRINTN/RqMjgbDuZJXzQhArVSLjFE/1XQYa5tAZ40cxa7/FUJcumP4gGIqEs3NNVBeiHFt2aWpF5SW1g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDPRY+S+mcOmnfDkVmOXU+m98yf/q1quwkz+xiOOyMv6AIgeE3y82uC65GticGcgtVxBjDcLMw5cekYHS3zNfsTZTY="}]}},"0.6.0":{"name":"nanotemplates","version":"0.6.0","description":"Nanotemplates","main":"lib/main.js","bin":{"ntl":"bin/ntl"},"dependencies":{"async":"*","fallback":"*","nomnom":"*","angular-expressions":"*","lru-cache":"*","path-browserify":"*","glob":"*"},"devDependencies":{"mocha":"*","grunt":"*","grunt-peg":"*","brfs":"*","eslint":"~0.x.x","pre-commit":"*"},"pre-commit":["test"],"browser":{"lib/main.js":"lib/browser.js","path":"path-browserify","fs":false,"nomnom":false,"glob":false},"browserify":{"transform":["brfs"]},"scripts":{"pretest":"eslint .","test":"mocha -R spec"},"repository":{"type":"git","url":"https://github.com/inca/nanotemplates"},"keywords":["template","engine"],"author":{"name":"Boris Okunskiy"},"license":"ISC","bugs":{"url":"https://github.com/inca/nanotemplates/issues"},"homepage":"https://github.com/inca/nanotemplates","gitHead":"5da3d9ba6e2561f3460fbb819384bb8eaf8f7d0c","_id":"nanotemplates@0.6.0","_shasum":"b3d6e43d490bc8a47e950dcf555146b6a0fa4ea9","_from":".","_npmVersion":"2.13.0","_nodeVersion":"2.4.0","_npmUser":{"name":"inca","email":"boris@okunskiy.name"},"maintainers":[{"name":"inca","email":"boris@okunskiy.name"}],"dist":{"shasum":"b3d6e43d490bc8a47e950dcf555146b6a0fa4ea9","tarball":"https://registry.npmjs.org/nanotemplates/-/nanotemplates-0.6.0.tgz","integrity":"sha512-5ilMLR/1k9IWObyCpGMDh0yxzNdQ/OPUPYb0LEc3GMExJR06l61S8hVv9M19nnWpx4+Z2yzetqwdJ0zGPInWJg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEoYKjvzkq8ZyQQBl024BfWRJ6iAJnScVL0JuP06vX3XAiB/Zc+YxUIFYBK8Xfw+FqQmcsudsbfVWyP1Ip+/nPlpzQ=="}]}},"0.7.0":{"name":"nanotemplates","version":"0.7.0","description":"Nanotemplates","main":"lib/main.js","bin":{"ntl":"bin/ntl"},"dependencies":{"async":"*","fallback":"*","nomnom":"*","angular-expressions":"*","lru-cache":"*","path-browserify":"*","glob":"*"},"devDependencies":{"mocha":"*","grunt":"*","grunt-peg":"*","brfs":"*","eslint":"~0.x.x","pre-commit":"*"},"pre-commit":["test"],"browser":{"lib/main.js":"lib/browser.js","path":"path-browserify","fs":false,"nomnom":false,"glob":false},"browserify":{"transform":["brfs"]},"scripts":{"pretest":"eslint .","test":"mocha -R spec"},"repository":{"type":"git","url":"https://github.com/inca/nanotemplates"},"keywords":["template","engine"],"author":{"name":"Boris Okunskiy"},"license":"ISC","bugs":{"url":"https://github.com/inca/nanotemplates/issues"},"homepage":"https://github.com/inca/nanotemplates","gitHead":"54b3ac785c919d9335e4a196bae1e90a7c099765","_id":"nanotemplates@0.7.0","_shasum":"33cef5201422aac55d8aa7a92058cbac13a840a5","_from":".","_npmVersion":"2.13.0","_nodeVersion":"2.4.0","_npmUser":{"name":"inca","email":"boris@okunskiy.name"},"maintainers":[{"name":"inca","email":"boris@okunskiy.name"}],"dist":{"shasum":"33cef5201422aac55d8aa7a92058cbac13a840a5","tarball":"https://registry.npmjs.org/nanotemplates/-/nanotemplates-0.7.0.tgz","integrity":"sha512-qgu7SARDlLt/1D4yXmMeCJofTYbLfQ8iqyzccZHo9Wiym3YSJFfg9ZbHJ1Y1zm9YKE2JRuhccXFWpcC4YQHi0w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF0PngaWF1loceaFXR2iyhIBQJfcFdBTqLKkne5fd3lMAiEAneW3SsdOJX0vwTxPfUNAGhf3XHD/amCDJSP9axtTwqc="}]}}},"readme":"# Nanotemplates\n\nIsomorphic template engine for composing DRY HTML and SVG.\n\n## Key features\n\n  * **Safety** — runtime is done via Angular expressions engine (which is considered safe),\n\n  * **Intuitive** — extremely simple, yet enormously powerful\n\n  * **IDE-friendly** — templates are based on custom HTML tags, so you don't have\n    to install code highlighters\n\n  * **Performance** — once compiled the templates can be cached to provide light-speed rendering\n\n  * **Flexible** — template loading is abstracted from file system: it is easy to implement custom loading (e.g. from database or network)\n\n  * **Asynchronous compiler** — no `fs.readFileSync`s (hello, Jade!)\n\nNanotemplates are best suited for HTML and SVG, but you can use them to\nrender virtually any text.\n\nSince v.0.5.0 Nanotemplates also work perfectly in browsers, resolving\nbundled templates from script tags.\n\n## Usage\n\n```\n// Configure renderer instance\nvar nano = require('nanotemplates')({\n  basedir: 'templates/directory'\n});\n\n// Render file\nnano.render('path/to/template.html', { data: 'values' }, function (err, html) {\n  // ...\n});\n\n// Compile into reusable template\nnano.compile('path/to/template.html', function (err, fn) {\n  // ...\n  fn({ data: 'values' });\n});\n```\n\nTemplates are resolved relatively to `basedir`. Paths inside include tags are\nrelative to their call site (e.g. including `../layout.html` from\n`templates/users/index.html` will include `templates/layout.html`).\n\nReferencing templates outside `basedir` is not allowed.\n\n## Compiling and rendering\n\nLike with almost every other template engines, Nanotemplates are processed in two phases:\n\n  * _compiling_ involves loading files, parsing them, processing compile-time stuff and generating a reusable template function;\n\n  * _rendering_ involves invoking the template function with data object\n\nOnce template function is compiled it can be invoked with different data objects.\nIt is generally a good practice to cache compiled functions in production\nto speed things up.\n\n## Templates Syntax — Static Constructs\n\nFollowing features are processed _statically_ (at compile time).\n\n### Includes\n\nOne file can be included into another one with `<include file=\"path/to/file\"/>`.\n\nPaths that start with `/` are relative to `basedir`, all other paths are relative\nto the file where they are used.\n\nSimple includes are useful for reusing fragments.\n\nIncludes are processed statically, so there is currently no support for dynamic values in paths (sorry about that).\n\n#### Example\n\nindex.html:\n\n    <!doctype html>\n    <html>\n      <head>\n      </head>\n      <body>\n        <include file='header.html'/>\n        <h1>Content</h1>\n      </body>\n    </html>\n\nheader.html:\n\n    <header>Hello World!</header>\n\nRendered index.html:\n\n    <!doctype html>\n    <html>\n      <head>\n      </head>\n      <body>\n        <header>Hello World!</header>\n        <h1>Content</h1>\n      </body>\n    </html>\n\n### Layouts, blocks, definitions\n\nMore complex template composition scenarios involve reusing of _layouts_ (abstract markup that defines document structure) and _components_ (self-contained markup with parameters).\n\nThese scenarios can be implemented by using includes together with _blocks_ — named placeholders for actual content. Blocks can be declared anywhere using `<block:block_name>` tag, they can also contain\narbitrary default content.\n\nConcrete pages provide block definitions using `<def:block_name>` inside\n`<include>` tags. Each definition is local to its include (and its descendants)\nbut is not \"visible\" to siblings.\n\n#### Example\n\nlayout.html:\n\n    <!doctype html>\n    <html>\n      <head>\n      </head>\n      <body>\n        <block:content/>\n      </body>\n    </html>\n\nindex.html:\n\n    <include file='layout.html'>\n\n      <def:content>\n        <h1>Hello World!</h1>\n      </def:content>\n\n    </include>\n\nRendered index.html:\n\n    <!doctype html>\n    <html>\n      <head>\n      </head>\n      <body>\n        <h1>Hello World!</h1>\n      </body>\n    </html>\n\n#### More complex example\n\nIt is often convenient to inherit layouts. Consider the following example (based on the previous one).\n\nusers/layout.html:\n\n    <include file='../layout.html'>\n\n      <def:content>\n        <nav>\n          <a href='/'>Back to home</a>\n        </nav>\n        <section>\n          <block:content/>\n        </section>\n      </def:content>\n\n    </include>\n\nusers/list.html:\n\n    <include file='layout.html'>\n\n      <def:content>\n        <ul>\n          <li>Alice</li>\n          <li>Joe</li>\n          <li>Jane</li>\n        </ul>\n      </def:content>\n\n    </include>\n\nRendered users/list.html:\n\n    <!doctype html>\n    <html>\n      <head>\n      </head>\n      <body>\n        <nav>\n          <a href='/'>Back to home</a>\n        </nav>\n        <section>\n          <ul>\n            <li>Alice</li>\n            <li>Joe</li>\n            <li>Jane</li>\n          </ul>\n        </section>\n      </body>\n    </html>\n\nYou see, users/layout.html provides partial definition for `content` by defining\nanother block (with the same name). In fact, the result is quite intuitive if you\nfollow the templates code \"inside-out\" (`users/list.html` -> `users/layout.html` -> `layout.html`).\n\n### Inline file\n\nUse `<inline file=\"some/file\"/>` to include the contents of specified file \"as is\".\n\nUnline includes, inlined files are not compiled (so blocks and definitions are not supported).\n\nBy default, the contents of inlined file will be HTML-escaped to prevent XSS (i.e. `<` are replaced with `&lt;`, '&' with '&amp;', etc.). To disable escaping type `!` at the start of file path `<inline file=\"!path/to/file\"/>`.\n\n## Template Syntax — Dynamic Constructs\n\nFollowing features involve working with template data (at the render phase).\n\nMost dynamic constructs are _scoped_, i.e. variables defined in inner tags\nare not visible outside.\n\n### Expressions\n\nExpressions are used to access and modify data provided at the rendering phase.\n\nExpressions are parsed with [Angular Expressions](https://github.com/peerigon/angular-expressions)\nwhich currently represent the safest way to execute simple JavaScript statements\nwhile disallowing access to potentially harmful constructs like `eval` or `Function`.\n\nAlso, Angular expressions are awesome, because they are forgiving to nulls and undefined variables.\n\n#### Interpolation\n\nExpressions like `#{user.name || 'Anonymous'}` are evaluated at rendering phase and their results are included into the rendered templates. In the example above `user` may not exist, or may not have `name` property — in both cases the \"Anonymous\" will be rendered.\n\n#### Escaping\n\nExpressions in `#{expr}` are HTML-escaped (i.e. `<` are replaced with `&lt;`, `&` — with `&amp;`, etc.) To avoid escaping use `!{expr}` syntax.\n\n### Variable Assignment\n\nUse `<var:myVar>expr</var:myVar>` to define `myVar` variable with value equal to\nthe result of `expr` evaluation.\n\nVariables defined on \"top-level\" scope are bound directly to `data` object, but variables from inner scopes do not leak outside.\n\n### If Statement\n\nConditional statements are implemented like this:\n\n    <if>\n      <when expr=\"!friends\">\n        <p>You have no friends.</p>\n      </when>\n      <when expr=\"friends == 1\">\n        <p>You have one friend.</p>\n      </when>\n      <when expr=\"friends > 1 && friends < 5\">\n        <p>You have a few friends.</p>\n      </when>\n      <otherwise>\n        <p>You have #{friends} friends.</p>\n      </otherwise>\n    </if>\n\nSimple single-expression ifs are also supported:\n\n    <if expr='happy'>Yay!</if>\n\n### Case Statement\n\nCase statements resemble regular switch-case, but allow matching non-declarative conditions:\n\n    <case:e expr=\"friends\">\n      <when expr=\"1\">\n        <p>You have one friend.</p>\n      </when>\n      <when expr=\"e > 1 && e <= 5\">\n        <p>You have a few friends.</p>\n      </when>\n      <when expr=\"e > 5\">\n        <p>You have a #{e} friends.</p>\n      </when>\n      <otherwise>\n        <p>You have no friends.</p>\n      </otherwise>\n    </case:e>\n\nIn this example `friends` expression is evaluated and becomes accessible as local variable `e`.\n\n### Each Statement\n\nTo iterate over collections (arrays or objects) use `<each:varName in=\"collection\">...`.\n\n#### Each with Array\n\nLet's say your data looks like this:\n\n```\n{\n  users: [\n    { name: 'Alice' },\n    { name: 'Joe' },\n    { name: 'Jane' }\n  ];\n}\n```\n\nAnd your template like this:\n\n    <ul>\n      <each:user in=\"users\">\n        <li>#{user_index}: #{user.name}</li>\n      </each:user>\n    </ul>\n\nHere's what will be rendered:\n\n    <ul>\n      <li>0: Alice</li>\n      <li>1: Joe</li>\n      <li>2: Jane</li>\n    </ul>\n\nThere you define the `user` variable which will hold the value on each iteration.\n\nSome additional variables become available inside `<each:user>` scope:\n\n  * `user_index` — zero-based index of current element;\n  * `user_last` — boolean indicating whether current element is the last one;\n  * `user_has_next` — same as `!user_last`\n\n#### Each with Object\n\nLet's say your data looks like this:\n\n```\n{\n  users: {\n    alice: 'Alice',\n    bob: 'Bob'\n  };\n}\n```\n\nAnd your template like this:\n\n    <ul>\n      <each:user in=\"users\">\n        <li>#{user_key}: #{user}</li>\n      </each:user>\n    </ul>\n\nHere's what will be rendered:\n\n    <ul>\n      <li>alice: Alice</li>\n      <li>bob: Bob</li>\n    </ul>\n\nAgain, `user` variable holds the value on each iteration. Keys are always\nsorted in alphabetical order.\n\nSome additional variables become available inside `<each:user>` scope:\n\n  * `user_key` — key of current element;\n  * `user_last` — boolean indicating whether current element is the last one;\n  * `user_has_next` — same as `!user_last`\n\n## Template Loading\n\nAlthough it may seem that Nanotemplates heavily depend on file system, the engine\nitself is abstracted.\n\n## Grammar\n\nA [PegJS](http://pegjs.org) grammar [is available](https://github.com/inca/nanotemplates/tree/master/grammar/template.peg).\n\n## Notes on compilation\n\nTags like `include`, `inline`, `block`, `def`, `append`, `prepend`, etc. are\ncompiled _statically_. This means no support for dynamic includes (sorry), but\nOTOH you can cache statically compiled functions for rendering same templates with different data almost at the light speed.\n\nCompilation is done like this:\n\n  * AST nodes are visited recursively with `_process_<nodetype>` methods;\n  * each method returns a string statement (code);\n  * you can use stuff from `runtime.js` in statements (but not in templates themselves);\n  * buffered statements (the ones that actually spit content) look like `out.push(something)`;\n  * expressions are compiled via Angular Expressions library, each expression is pushed into an array and becomes available inside code via `$$[<index>]`;\n  * `locals` object is the data you provide to compiled function at rendering stage;\n  * every scope-sensitive code is wrapped into a function, which copies locals object;\n  * all statements are simply joined with semicolon and are wrapped into `function (locals) { }`\n\n## Premise\n\nThere are lots of template engines for Node.js, both [simple](http://underscorejs.org) and [immense](http://jade-lang.com).\n\nJust like you we hate reinventing the wheels. However, we started this project, because, apparently, no template engine out there can simultaneously meet three following conditions:\n\n  * does not allow arbitrary JavaScript execution like `for (;;) { }`, so that\n    it could be used by untrusted users;\n  * is flexible enough to write almost any app you could think of (i.e.\n    supports includes, layouts, scoping, etc, etc, etc);\n  * provides abstraction layer over file system (e.g. to be able to load\n    templates from database or via network)\n\nWe hope that Nanotemplates are what you are expecting them to be.\n\n## Contributing\n\nWe're glad you asked!\n\nUltimately the best way to contribute to the project is to try it out and share your opinion. Feel free to fire issues and send pull requests.\n\n## License\n\nCopyright (C) 2015 Boris Okunskiy <boris@okunskiy.name> (ISC license)\n\nPermission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.\n","maintainers":[{"name":"inca","email":"boris@okunskiy.name"}],"time":{"modified":"2022-06-20T20:18:49.727Z","created":"2015-01-27T19:06:45.648Z","0.0.0":"2015-01-27T19:06:45.648Z","0.0.1":"2015-01-28T16:38:49.157Z","0.0.2":"2015-01-28T19:46:06.598Z","0.1.0":"2015-01-30T22:12:24.371Z","0.1.1":"2015-01-31T07:16:55.188Z","0.1.2":"2015-01-31T21:37:43.706Z","0.1.3":"2015-01-31T22:48:02.326Z","0.2.0":"2015-02-01T09:39:45.548Z","0.3.0":"2015-02-01T20:12:14.064Z","0.3.1":"2015-02-02T08:34:11.381Z","0.3.2":"2015-02-02T08:44:32.253Z","0.3.3":"2015-02-04T09:07:43.841Z","0.3.4":"2015-02-04T09:17:18.196Z","0.3.5":"2015-02-04T09:20:00.720Z","0.3.6":"2015-02-10T07:45:54.482Z","0.3.7":"2015-03-05T07:46:17.387Z","0.3.9":"2015-04-06T11:19:38.053Z","0.4.0":"2015-04-08T07:59:39.188Z","0.5.0":"2015-05-03T13:25:26.311Z","0.5.1":"2015-07-08T07:36:58.840Z","0.6.0":"2015-08-04T14:17:23.563Z","0.7.0":"2015-08-04T14:28:39.089Z"},"homepage":"https://github.com/inca/nanotemplates","keywords":["template","engine"],"repository":{"type":"git","url":"https://github.com/inca/nanotemplates"},"author":{"name":"Boris Okunskiy"},"bugs":{"url":"https://github.com/inca/nanotemplates/issues"},"license":"ISC","readmeFilename":"README.md"}