{"_id":"dryml","_rev":"84-105858a94e58e7a7b79658f8830d5c3b","name":"dryml","description":"DRYML for Node","dist-tags":{"latest":"0.4.13"},"versions":{"0.1.2":{"name":"dryml","description":"DRYML for Node","version":"0.1.2","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","ejs","express"],"main":"./lib/dryml","engines":{"node":">= 0.2.6"},"dependencies":{"node-xml":"http://cloud.github.com/downloads/jupiter/node-dryml/node-xml.tgz","vows":">= 0.5.6","express":">= 1.0.7"},"scripts":{"test":"echo \"Expresso:\n\" && expresso test/*.test* && echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"http://github.com/jupiter/dryml.git"},"_id":"dryml@0.1.2","_engineSupported":true,"_npmVersion":"0.2.18","_nodeVersion":"v0.4.0","directories":{"lib":"./lib"},"files":[""],"_defaultsLoaded":true,"dist":{"shasum":"8f80351a24aa498bda3e6ec31b9dc768ad6929c9","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.1.2.tgz","integrity":"sha512-DzmZ5ltgn8uKXOkzfP5y6F1eZ8VDvm824+ckXCFWwNngMqoJ62Nw3THuSafb3aprkZoYaWd5Cezm3WgD10FnhA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3sJoUTkON980tf9d+1eiZ/hRIjMWdOdR+CQiieEPjmAIgKHKHMrEsUBZ2R1xW/LHZpSA5TDhmvIYekxWGwHE8jO4="}]}},"0.1.3":{"name":"dryml","description":"DRYML for Node","version":"0.1.3","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","ejs","express"],"main":"./lib/dryml","engines":{"node":">= 0.2.6"},"dependencies":{"node-xml":"http://cloud.github.com/downloads/jupiter/node-dryml/node-xml.tgz","vows":">= 0.5.6","express":">= 1.0.7"},"scripts":{"test":"echo \"Expresso:\n\" && expresso test/*.test* && echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"http://github.com/jupiter/dryml.git"},"_id":"dryml@0.1.3","_engineSupported":true,"_npmVersion":"0.2.18","_nodeVersion":"v0.4.0","directories":{"lib":"./lib"},"files":[""],"_defaultsLoaded":true,"dist":{"shasum":"fcf73fe12004066f19f748da2571e51414c746a2","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.1.3.tgz","integrity":"sha512-Vo+ynCe0Yz43hryK8h+9uhoj/4vko+x/0LX1rYcCEzKeN8QFtVf9BgMOk09OXSf4aRSsW9l3h6Q2l5jswtTlmQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBR4eCUif7RVmZX3OuzjXNcSYXcaATlcPsU5KH1qP1vbAiEAu73o2CWXGYwhfNolQ00CZgwnargdQO879yH2J83/GBg="}]}},"0.1.4":{"name":"dryml","description":"DRYML for Node","version":"0.1.4","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.2.6"},"dependencies":{"node-xml":"http://cloud.github.com/downloads/jupiter/node-dryml/node-xml.tgz","vows":">= 0.5.6","express":">= 1.0.7"},"scripts":{"test":"echo \"Expresso:\n\" && expresso test/*.test* && echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/dryml.git"},"_id":"dryml@0.1.4","_engineSupported":true,"_npmVersion":"0.3.0-6","_nodeVersion":"v0.4.0","directories":{"lib":"./lib"},"files":[""],"_defaultsLoaded":true,"dist":{"shasum":"7dff1664a8b5373a100c7498d4d1bda262b401db","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.1.4.tgz","integrity":"sha512-rUvDat+vCJ0+tUo3z0TvKRSHGGZ+/m7CZSlBDdDXojWRrBgolqF/3Jp84WL04t3yXolhfTLFZBjphziQd4fPlg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3rwP0tuj/fq/xXTUVvQ3jNYDRbkdP2jmB6zTgusBnfgIgXZE6kSOmrCqqizrYCgC9jY0G+jWk5z+iohOS5Psxm+k="}]}},"0.1.5":{"name":"dryml","description":"DRYML for Node","version":"0.1.5","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.2.6"},"dependencies":{"node-xml":"http://cloud.github.com/downloads/jupiter/node-dryml/node-xml.tgz","vows":">= 0.5.6","express":">= 1.0.7"},"scripts":{"test":"echo \"Expresso:\n\" && expresso test/*.test* && echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"_id":"dryml@0.1.5","_engineSupported":true,"_npmVersion":"0.3.0-6","_nodeVersion":"v0.4.0","directories":{"lib":"./lib"},"files":[""],"_defaultsLoaded":true,"dist":{"shasum":"d194571a06b2e52172bba7185bb8d2d9697b3158","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.1.5.tgz","integrity":"sha512-88oM9kRgiTfKNB/OkEfASMZyVNVqEH0G798KJY8g1iTbUF9bcqW2ricSlcuzx6GV1z7bi5svF79NSyjdzzkw8Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDOztUy9mWKIq+qJk3aIhl2bKcvp0vGRevA8lmPBguPCQIgEtOVjCq9ALZUcOgQSMA8/DHoLqNbIG0CXr8P3NaHM08="}]}},"0.1.6":{"name":"dryml","description":"DRYML for Node","version":"0.1.6","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.2.6"},"dependencies":{"node-xml":"http://cloud.github.com/downloads/jupiter/node-dryml/node-xml.tgz","vows":">= 0.5.6","express":">= 1.0.7","underscore":">= 1.1.0"},"scripts":{"test":"echo \"Expresso:\n\" && expresso test/*.test* && echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"_id":"dryml@0.1.6","_engineSupported":true,"_npmVersion":"0.3.0-6","_nodeVersion":"v0.4.0","directories":{"lib":"./lib"},"files":[""],"_defaultsLoaded":true,"dist":{"shasum":"9c0ec8dcd58787dece98fbd246d87c0479544aee","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.1.6.tgz","integrity":"sha512-FufVnTIVvnTD/H8i427M2yOVHLJaOLQ7eYOpCdbT+09THMatP6Kd9bCn29Jcvq5l03ZW0GoViPXXFMJhaoKk7A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAhpZx9TtRZxQgXGKDAtfIoSOL9O8O0LHf1KCtXe/8tNAiBpRu1StqhnSxXW/W+rRxMFw6Mols47dbxA+28oMrBlSw=="}]}},"0.1.7":{"name":"dryml","description":"DRYML for Node","version":"0.1.7","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.2.6"},"dependencies":{"node-xml":"http://cloud.github.com/downloads/jupiter/node-dryml/node-xml.tgz","vows":">= 0.5.6","express":">= 1.0.7","underscore":">= 1.1.0"},"scripts":{"test":"echo \"Expresso:\n\" && expresso test/*.test* && echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"_id":"dryml@0.1.7","_engineSupported":true,"_npmVersion":"0.3.0-6","_nodeVersion":"v0.4.0","directories":{"lib":"./lib"},"files":[""],"_defaultsLoaded":true,"dist":{"shasum":"218088e1089e0cb0b077e489634ac470974985d8","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.1.7.tgz","integrity":"sha512-rZkbFFHUNTAVT1KFPcUSO9k9DPTss8m9DLD5XZ8Mtfde2jTeIxPSdNQDepGZkNUuXA/m79fuKwsBPOWrRM+pnQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC0Es5lH9Pp7yYU/fLmgH2EFQjaHAe/+sVytIdsETeX1AIgH5oTmxXxZ72kepo58xpeqbaOCsYGeX5BpRDpXnMYPWE="}]}},"0.1.8":{"name":"dryml","description":"DRYML for Node","version":"0.1.8","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.2.6"},"dependencies":{"node-xml":"http://cloud.github.com/downloads/jupiter/node-dryml/node-xml.tgz","vows":">= 0.5.6","express":">= 1.0.7","underscore":">= 1.1.0","JS-Entities":">= 0.1.0"},"scripts":{"test":"echo \"Expresso:\n\" && expresso test/*.test* && echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"_id":"dryml@0.1.8","_engineSupported":true,"_npmVersion":"0.3.0-6","_nodeVersion":"v0.4.0","directories":{"lib":"./lib"},"files":[""],"_defaultsLoaded":true,"dist":{"shasum":"75b5816e81600085199603fcbbe3cd60e52439cb","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.1.8.tgz","integrity":"sha512-bGk/fgkPYPv6chE6BD2lKMhWJ5gm6QdXNgaGr6bFlSpyecCrwcWY4aJEBrdaVdkdZtxmX/U+GDsG1IyKz1LrDg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDVhiz0LCq2IyAMBLA0OoWwry2PVyYwu1WWSiGWR/B7CwIgZgXDo+ta2Ru4K87Xh5MJw94r2MHbat8MMQ5u+zjLQpg="}]}},"0.1.9":{"name":"dryml","description":"DRYML for Node","version":"0.1.9","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.2.6"},"dependencies":{"node-xml":"http://cloud.github.com/downloads/jupiter/node-dryml/node-xml.tgz","vows":">= 0.5.6","express":">= 1.0.7","expresso":">= 0.7.0","underscore":">= 1.1.0","JS-Entities":">= 0.1.0"},"scripts":{"test":"echo \"Expresso:\n\" && expresso test/*.test* && echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"_id":"dryml@0.1.9","_engineSupported":true,"_npmVersion":"0.3.15","_nodeVersion":"v0.4.0","dist":{"shasum":"e71bdd287596aeba7e61ebf23321b9e9cf1d6a53","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.1.9.tgz","integrity":"sha512-CfPThBzcODioeYcn/FDnjAB+V2TEnsC7cZJYPXkBw+FeZrp7J5HUnjrsVZ+GlVz6zC98PsDQHuz9FxRDj7dcTw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICUPioyMmE2RuGPVieXUKGBZXope5omTriZOfg4RoVUBAiEA7ZzUr2aDsxUAqDgCxozxCLk+v99hzCJqHSJONL+R6+0="}]},"directories":{}},"0.1.10":{"name":"dryml","description":"DRYML for Node","version":"0.1.10","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.2.6"},"dependencies":{"node-xml":"http://cloud.github.com/downloads/jupiter/node-dryml/node-xml.tgz","vows":">= 0.5.6","express":">= 1.0.7","expresso":">= 0.7.0","underscore":">= 1.1.0","JS-Entities":">= 0.1.0"},"scripts":{"test":"echo \"Expresso:\n\" && expresso test/*.test* && echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"_id":"dryml@0.1.10","_engineSupported":true,"_npmVersion":"0.3.15","_nodeVersion":"v0.4.0","directories":{"lib":"./lib"},"files":[""],"_defaultsLoaded":true,"dist":{"shasum":"56e7482ad4a09d8516386987abea92086eda994c","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.1.10.tgz","integrity":"sha512-8G8uWnYbG4YS+tPSPWBdjDgbqa7e4Cs0WXDAanLZm2iuxseXd9moeBWqW2Yv+Bg99ct0owbLdZaNu5xRsx8w9Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD8PI8lINqbeeDZQtbXKQQSLyymUHCNflVQTO5CVtCR+AIhANGZJdRWjnIhComcVbmCrS1qUO84/zTFz0+mcUhOsoMp"}]}},"0.1.11":{"name":"dryml","description":"DRYML for Node","version":"0.1.11","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.2.6"},"dependencies":{"node-xml":"http://cloud.github.com/downloads/jupiter/node-dryml/node-xml.tgz","vows":">= 0.5.6","express":">= 1.0.7","expresso":">= 0.7.0","underscore":">= 1.1.0","JS-Entities":">= 0.1.0"},"scripts":{"test":"echo \"Expresso:\n\" && expresso test/*.test* && echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"_id":"dryml@0.1.11","_engineSupported":true,"_npmVersion":"0.3.15","_nodeVersion":"v0.4.2","directories":{"lib":"./lib"},"files":[""],"_defaultsLoaded":true,"dist":{"shasum":"6a4cce4171fb2e7e6fbd5ac898314be9d2a0ce41","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.1.11.tgz","integrity":"sha512-BKgTiQ688EJ8m9WRtQOkL5MouwoCfOhFEWDzWb/nKb0OU+Ph7aYZU794233I09AkZPcMUZ1xeoxSupw0TJKx7w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBWp7CXlouSZcyanSGnZIACbdzGD2kMnatwK62MXWLzmAiEAwpj87jZBDo0OXsALTOMBsNOaUthHod1P1zokwSMMU6w="}]}},"0.1.12":{"name":"dryml","description":"DRYML for Node","version":"0.1.12","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.2.6"},"dependencies":{"node-xml":"http://cloud.github.com/downloads/jupiter/node-dryml/node-xml.tgz","vows":">= 0.5.6","express":">= 1.0.7","expresso":">= 0.7.0","underscore":">= 1.1.0","JS-Entities":">= 0.1.0"},"scripts":{"test":"echo \"Expresso:\n\" && expresso test/*.test* && echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"_id":"dryml@0.1.12","_engineSupported":true,"_npmVersion":"0.3.15","_nodeVersion":"v0.4.2","dist":{"shasum":"897f3bcff9229f58320a733e78e4ea62799c4db0","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.1.12.tgz","integrity":"sha512-aPwv78wlMW6z177u6ucdoyj48nohMvqKIvolcjbECuo9FioekWKnzL7OgV29hnifb+iOexXgru7dRF9TWt2Lpw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDIcWGBi9o5aaBmqjaeueVDQeQ9YBsEFZSmtKR4fIsiVwIgd+05zQO+WiRLWCxUNJb7VknvTnR8Pb3rEP0jEUHnctk="}]},"directories":{}},"0.1.15":{"name":"dryml","description":"DRYML for Node","version":"0.1.15","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.2.6"},"dependencies":{"node-xml":"http://cloud.github.com/downloads/jupiter/node-dryml/node-xml.tgz","vows":">= 0.5.6","express":">= 1.0.7","expresso":">= 0.7.0","underscore":">= 1.1.0","JS-Entities":">= 0.1.0"},"scripts":{"test":"echo \"Expresso:\n\" && expresso test/*.test* && echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"_npmJsonOpts":{"file":"/Users/pieter/.npm/dryml/0.1.15/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"dryml@0.1.15","devDependencies":{},"_engineSupported":true,"_npmVersion":"1.0.18","_nodeVersion":"v0.4.8","_defaultsLoaded":true,"dist":{"shasum":"5c4d9ec116968384d1e63c1eaa517ea9972cb36d","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.1.15.tgz","integrity":"sha512-BayjqbCTT00C6/yD7SZrFx7GuzZiITxpms5unrbZ4qHgouUX/nKdILzjVzAWsFpH2N6GoH7SZ/ixL0AfVwdEsQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDlPZk8hDJAmSsUm1c4FkMWLSkPsNASVqme37dK8tvcfQIhAPVKSiNltJFJxyIMYiiKZao1wotew0qDK9f/5btAsdCu"}]},"maintainers":[{"name":"jupiter","email":"pieter@wavana.com"}],"directories":{}},"0.2.0":{"name":"dryml","description":"DRYML for Node","version":"0.2.0","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.2.6"},"dependencies":{"node-xml":"http://cloud.github.com/downloads/jupiter/node-dryml/node-xml.tgz","vows":">= 0.5.6","express":">= 1.0.7","expresso":">= 0.7.0","underscore":">= 1.1.0","JS-Entities":">= 0.1.0"},"scripts":{"test":"echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"_npmJsonOpts":{"file":"/Users/pieter/.npm/dryml/0.2.0/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"dryml@0.2.0","devDependencies":{},"_engineSupported":true,"_npmVersion":"1.0.18","_nodeVersion":"v0.4.8","_defaultsLoaded":true,"dist":{"shasum":"ae04e3b12717606796aca884a079c8aabe8bf73c","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.2.0.tgz","integrity":"sha512-ZYaoaaFOuNkwHUbetB9SPrsM0G9lVAFUs6dRE+RrbuVRbPfub7BSe1X6Sa2IYjdPuQOwHTSUFgL0aXYB2wPM1Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG+/Pk1PSDSOqobwsd/uWf9CVeHJLr4e4ts0dYaz5fXfAiAHpRtXGyB8/jmY0ATgyfV+PtPFN73I9rJPil8FaA2CUw=="}]},"maintainers":[{"name":"jupiter","email":"pieter@wavana.com"}],"directories":{}},"0.2.1":{"name":"dryml","description":"DRYML for Node","version":"0.2.1","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.2.6"},"dependencies":{"node-xml":"http://cloud.github.com/downloads/jupiter/node-dryml/node-xml.tgz","vows":">= 0.5.6","express":">= 1.0.7","expresso":">= 0.7.0","underscore":">= 1.1.0","JS-Entities":">= 0.1.0"},"scripts":{"test":"echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"_npmJsonOpts":{"file":"/Users/pieter/.npm/dryml/0.2.1/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"dryml@0.2.1","devDependencies":{},"_engineSupported":true,"_npmVersion":"1.0.18","_nodeVersion":"v0.4.8","_defaultsLoaded":true,"dist":{"shasum":"a374e719228637904e0ff205d426350d2a5e6390","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.2.1.tgz","integrity":"sha512-j7CAY5Vu10ooEHGVZPXoM+1wS0b+CWVtmxOx8a9MnnzPYIjrtQUGk7BoYznImE2UAhM2K4ye2N9s3uHrNqBB0A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC0d5om70XRbmr5J9g8mXA8B3sKZb21KaiNWp4iPu9uswIgGpBkt4hBvM8z5LVb7gsG0SUIXFmeGklaG70+9gcoNfo="}]},"maintainers":[{"name":"jupiter","email":"pieter@wavana.com"}],"directories":{}},"0.2.2":{"name":"dryml","description":"DRYML for Node","version":"0.2.2","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.2.6"},"dependencies":{"node-xml":"http://cloud.github.com/downloads/jupiter/node-dryml/node-xml.tgz","vows":">= 0.5.6","express":">= 1.0.7","expresso":">= 0.7.0","underscore":">= 1.1.0","JS-Entities":">= 0.1.0"},"scripts":{"test":"echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"_npmJsonOpts":{"file":"/Users/pieter/.npm/dryml/0.2.2/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"dryml@0.2.2","devDependencies":{},"_engineSupported":true,"_npmVersion":"1.0.18","_nodeVersion":"v0.4.8","_defaultsLoaded":true,"dist":{"shasum":"db9f72dfb8c05e996cac3075adea2bd63ee35a4b","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.2.2.tgz","integrity":"sha512-Mz4LBw4BzxNob08mZr7Cp/XVaDbs6KlYunLe7y79h0z1GkPYcpXK6+2EbfQgqLwZqWlqZ9rM2iXtpI8j9kL7iw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD7sYv5QGgyZ8qcpOVg9+preOqFz1wJQCAUJAApx3AJeAIhAOoh/sfo97WkfJfv6kwU1D3LchcbS8orfjPmXxGmyXE+"}]},"maintainers":[{"name":"jupiter","email":"pieter@wavana.com"}],"directories":{}},"0.2.3":{"name":"dryml","description":"DRYML for Node","version":"0.2.3","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.2.6"},"dependencies":{"node-xml":"http://cloud.github.com/downloads/jupiter/node-dryml/node-xml.tgz","vows":">= 0.5.6","express":">= 1.0.7","expresso":">= 0.7.0","underscore":">= 1.1.0","JS-Entities":">= 0.1.0"},"scripts":{"test":"echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"_npmUser":{"name":"jupiter","email":"pieter@wavana.com"},"_id":"dryml@0.2.3","devDependencies":{},"_engineSupported":true,"_npmVersion":"1.0.104","_nodeVersion":"v0.5.0","_defaultsLoaded":true,"dist":{"shasum":"b4646607715968f2ea3b4409bfae1b48746f875e","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.2.3.tgz","integrity":"sha512-XsUJRxItrQFQJuHN8Xh+bT8+dLXlcjj38/GTs7p9B10Y7eTkFPD9t0SjEFBcy1H2abSmzTo8jpYPQdXHzVuiLA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBt7FA0jbH6hwxUSJwRV3fKp1m+TWhTgzys8vvl0BGKIAiBPw2+M1MDjDQF4le5AolaKMEZfW8lUg9HmVLlJYUfoZA=="}]},"maintainers":[{"name":"jupiter","email":"pieter@wavana.com"}],"directories":{}},"0.3.0":{"name":"dryml","description":"DRYML for Node","version":"0.3.0","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.6.0"},"dependencies":{"node-xml":"https://github.com/downloads/jupiter/node-dryml/node-xml-1.0.1.tgz","underscore":">= 1.1.0","JS-Entities":">= 0.1.0"},"devDependencies":{"vows":">= 0.5.6","express":">= 1.0.7","expresso":">= 0.7.0"},"scripts":{"test":"echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"_npmUser":{"name":"jupiter","email":"pieter@wavana.com"},"_id":"dryml@0.3.0","optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0","_nodeVersion":"v0.6.1","_defaultsLoaded":true,"dist":{"shasum":"bb5deba0f38fc1212334d6822776c85c25f3a5e7","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.3.0.tgz","integrity":"sha512-CrDrsCMjNiQIUp5iUQFFTXlT0/9RV0jtWUOb4Z7Ir1JCqInsUVEkHCreIXUYtfoqIeFmTcshTPnIzmPtI7pkhA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQChQTyupLzldz5EHg0t71OLpD9icp+nTDY+tpxem/3hWgIhANbjd0jIOaQFLDhDVYLAqDAwC+ZB4Bfh06+9YwlQ1PuX"}]},"readme":"# DRYML - a template engine ![Project status](http://stillmaintained.com/jupiter/node-dryml.png)\n\nA template engine for Node and Express that is compatible with EJS <https://github.com/visionmedia/ejs> yet has the power and view refactoring savvy of DRYML. \n\nDRYML as a template language was originally developed by Tom Locke for the Rails template engine as part of the web app builder, Hobo. See <http://hobocentral.net/manual/chapters/3_dryml.html> and <http://cookbook.hobocentral.net/manual/dryml-guide>.  \n\n## Installation\n\n    $ npm install dryml\n    \nRun tests:\n\n    $ npm test dryml\n\n## Usage Example\n\nFrom String:\n\n    require('dryml');\n\n    dryml.render(str, options, function(err, buffer){\n      console.log(buffer.str);\n    });\n    \nFor Express:\n\n    app.get('/', function(req, res){\n    \tdryml.renderView('index', options, res);\n    });\n    \nIt is currently asynchronous, so does not work as standard Express view plugin.\n    \n## Options\n\n  - `locals`          Local variables object\n  - `scope`           Function execution context\n  - `debug`           Output sources and useful string\n  - `trimWhitespace`  Removes all whitespace between tags\n  - `cache`           true/false whether to use cached tags/taglibs, default: true, default can be set on dryml object\n  \n## DRYML Syntax\n\n### Basic Layout (Pre-refactor)\n\nDefining a tag (like a inline partial, to be reused):\n\n    <def tag=\"page\" attrs=\"title\">\n      <html>\n        <head>\n          <title><%= title %></title>\n          <script type=\"text/javascript\">\n              // Etc.\n          </script>\n        </head>\n        <body merge-attrs=\"*\">\n          <div class=\"wrapper\">\n            <tagbody/>\n          </div>\n        </body>\n      </html>\n    </def>\n    \nNote: Tags can be defined with/without prefixes, e.g.  `<myns:def tag=\"img\">` is called by using `<myns:img>` is called, and `<def tag=\"image\">` is called by using `<image>` (standard HTML tag names not allowed)\n    \nUsing a tag:\n    \n    <page title=\"Welcome\" class=\"welcome\">\n      <h1>Welcome</h1>\n      <div class=\"content\">\n        <p>Some Content</p>\n      </div>\n      <div class=\"navigation\">\n        <ul>\n          <li><a href=\"/one\">One</a></li>\n          <li><a href=\"/two\">Two</a></li>\n          <li class=\"selected\"><a href=\"/three\">Three</li>\n        </ul>\n      </div>\n    </page>\n    \nOutput:\n\n    <html>\n      <head>\n        <title>Welcome</title>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>            \n      </head>\n      <body class=\"welcome\">\n        <div class=\"wrapper\">\n          <h1>Welcome</h1>\n          <div class=\"content\">\n            <p>Some Content</p>\n          </div>\n          <div class=\"navigation\">\n            <ul>\n              <li><a href=\"/one\">One</a></li>\n              <li><a href=\"/two\">Two</a></li>\n              <li class=\"selected\"><a href=\"/three\">Three</li>\n            </ul>\n          </div>\n        </div>\n      </body>\n    </html>    \n    \n### After Refactor (Important)\n\nDefining multiple tags (in separate taglib file):\n\n    <def tag=\"navigation\" attrs=\"options,selected\">\n      <ul>\n        <% for (var key in options) { %>\n            <li class=\"%{ (key == selected) ? 'selected' : '' }\"><a href=\"#{ '/' + key }\"><%= options[key] %></a></li>\n        <% } %>\n        <tagbody/>\n      </ul>\n    </def>\n\n    <def tag=\"page\" attrs=\"title,navigation\">\n      <html>\n        <head>\n          <title><%= title %></title>\n        </head>\n        <body merge-attrs=\"*\">\n           <h1><%= title %></h1>\n           <div class=\"content\">\n            <tagbody />\n           </div>\n           <div class=\"navigation\">\n            <navigation options=\"#{ {one:'One', two:'Two', three:'Three'} }\" selected=\"%{ navigation }\"/>\n           </div>\n        </body>\n      </html>\n    </def>   \n    \nUsing a tag:\n\n    <taglib src=\"taglibfile\" />\n    \n    <page title=\"Welcome\" navigation=\"three\" class=\"welcome\">\n        <p>Some Content</p>\n    </page>\n    \n## Important Notes\n\nDRYML templates need to be valid XML/XHTML, which means:\n\n   - Non-HTML tag content, such as within script/style/etc., must be enclosed in a CDATA tag. \n   \nExample:\n    \n    <script>\n        <![CDATA[\n            $('body').append('<a href=\"/\">Back</a>');\n        ]]>\n    </script>\n    \n   - Attributes must be escaped where appropriate. \n   \nExample:\n    \n    <a href=\"javascript:$('body').append('&lt;a href=\"/\"&gt;Back&lt;/a&lt;');\">Text</a>\n\n\nThis applies only to 'hardcoded' content/values in the DRYML templates and does *not* apply to dynamically generated content.\n\n## License \n\n(Hobo for Rails)\n\nCopyright (c) 2008 Tom Locke\n\n(The MIT License)\n\nCopyright (c) 2011 Pieter Raubenheimer <pieter@wavana.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n","maintainers":[{"name":"jupiter","email":"pieter@wavana.com"}],"directories":{}},"0.3.1":{"name":"dryml","description":"DRYML for Node","version":"0.3.1","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.6.0"},"dependencies":{"node-xml":"https://github.com/downloads/jupiter/node-dryml/node-xml-1.0.1.tgz","underscore":">= 1.1.0","JS-Entities":">= 0.1.0"},"devDependencies":{"vows":">= 0.5.6","express":">= 1.0.7","expresso":">= 0.7.0"},"scripts":{"test":"echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"_npmUser":{"name":"jupiter","email":"pieter@wavana.com"},"_id":"dryml@0.3.1","optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0-2","_nodeVersion":"v0.6.8","_defaultsLoaded":true,"dist":{"shasum":"80efb92fd355e2fa52fc0cadac468c1c6c586f05","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.3.1.tgz","integrity":"sha512-fduZnQUR8/hwqex4zCmJCIxUghQqJhlc8R4r39c1Vx1PacUMz/UcdMwfK5m9UbJ2XiLWlqOS/qfUjf6gLZMBHg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDxZcmXA1+rqSpHjvpZEyqQ6pF7XopzzJ0wPvoNc9QjOgIhAMQfJcSkulr2okrWd1UDy/xkyMQl/UOZb7fwmo5RPnAm"}]},"readme":"# DRYML - a template engine ![Project status](http://stillmaintained.com/jupiter/node-dryml.png)\n\nA template engine for Node and Express that is compatible with EJS <https://github.com/visionmedia/ejs> yet has the power and view refactoring savvy of DRYML. \n\nDRYML as a template language was originally developed by Tom Locke for the Rails template engine as part of the web app builder, Hobo. See <http://hobocentral.net/manual/chapters/3_dryml.html> and <http://cookbook.hobocentral.net/manual/dryml-guide>.  \n\n## Installation\n\n    $ npm install dryml\n    \nRun tests:\n\n    $ npm test dryml\n\n## Usage Example\n\nFrom String:\n\n    require('dryml');\n\n    dryml.render(str, options, function(err, buffer){\n      console.log(buffer.str);\n    });\n    \nFor Express:\n\n    app.get('/', function(req, res){\n    \tdryml.renderView('index', options, res);\n    });\n    \nIt is currently asynchronous, so does not work as standard Express view plugin.\n    \n## Options\n\n  - `locals`          Local variables object\n  - `scope`           Function execution context\n  - `debug`           Output sources and useful string\n  - `trimWhitespace`  Removes all whitespace between tags\n  - `cache`           true/false whether to use cached tags/taglibs, default: true, default can be set on dryml object\n  \n## DRYML Syntax\n\n### Basic Layout (Pre-refactor)\n\nDefining a tag (like a inline partial, to be reused):\n\n    <def tag=\"page\" attrs=\"title\">\n      <html>\n        <head>\n          <title><%= title %></title>\n          <script type=\"text/javascript\">\n              // Etc.\n          </script>\n        </head>\n        <body merge-attrs=\"*\">\n          <div class=\"wrapper\">\n            <tagbody/>\n          </div>\n        </body>\n      </html>\n    </def>\n    \nNote: Tags can be defined with/without prefixes, e.g.  `<myns:def tag=\"img\">` is called by using `<myns:img>` is called, and `<def tag=\"image\">` is called by using `<image>` (standard HTML tag names not allowed)\n    \nUsing a tag:\n    \n    <page title=\"Welcome\" class=\"welcome\">\n      <h1>Welcome</h1>\n      <div class=\"content\">\n        <p>Some Content</p>\n      </div>\n      <div class=\"navigation\">\n        <ul>\n          <li><a href=\"/one\">One</a></li>\n          <li><a href=\"/two\">Two</a></li>\n          <li class=\"selected\"><a href=\"/three\">Three</li>\n        </ul>\n      </div>\n    </page>\n    \nOutput:\n\n    <html>\n      <head>\n        <title>Welcome</title>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>            \n      </head>\n      <body class=\"welcome\">\n        <div class=\"wrapper\">\n          <h1>Welcome</h1>\n          <div class=\"content\">\n            <p>Some Content</p>\n          </div>\n          <div class=\"navigation\">\n            <ul>\n              <li><a href=\"/one\">One</a></li>\n              <li><a href=\"/two\">Two</a></li>\n              <li class=\"selected\"><a href=\"/three\">Three</li>\n            </ul>\n          </div>\n        </div>\n      </body>\n    </html>    \n    \n### After Refactor (Important)\n\nDefining multiple tags (in separate taglib file):\n\n    <def tag=\"navigation\" attrs=\"options,selected\">\n      <ul>\n        <% for (var key in options) { %>\n            <li class=\"%{ (key == selected) ? 'selected' : '' }\"><a href=\"#{ '/' + key }\"><%= options[key] %></a></li>\n        <% } %>\n        <tagbody/>\n      </ul>\n    </def>\n\n    <def tag=\"page\" attrs=\"title,navigation\">\n      <html>\n        <head>\n          <title><%= title %></title>\n        </head>\n        <body merge-attrs=\"*\">\n           <h1><%= title %></h1>\n           <div class=\"content\">\n            <tagbody />\n           </div>\n           <div class=\"navigation\">\n            <navigation options=\"#{ {one:'One', two:'Two', three:'Three'} }\" selected=\"%{ navigation }\"/>\n           </div>\n        </body>\n      </html>\n    </def>   \n    \nUsing a tag:\n\n    <taglib src=\"taglibfile\" />\n    \n    <page title=\"Welcome\" navigation=\"three\" class=\"welcome\">\n        <p>Some Content</p>\n    </page>\n    \n## Important Notes\n\nDRYML templates need to be valid XML/XHTML, which means:\n\n   - Non-HTML tag content, such as within script/style/etc., must be enclosed in a CDATA tag. \n   \nExample:\n    \n    <script>\n        <![CDATA[\n            $('body').append('<a href=\"/\">Back</a>');\n        ]]>\n    </script>\n    \n   - Attributes must be escaped where appropriate. \n   \nExample:\n    \n    <a href=\"javascript:$('body').append('&lt;a href=\"/\"&gt;Back&lt;/a&lt;');\">Text</a>\n\n\nThis applies only to 'hardcoded' content/values in the DRYML templates and does *not* apply to dynamically generated content.\n\n## License \n\n(Hobo for Rails)\n\nCopyright (c) 2008 Tom Locke\n\n(The MIT License)\n\nCopyright (c) 2011 Pieter Raubenheimer <pieter@wavana.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n","maintainers":[{"name":"jupiter","email":"pieter@wavana.com"}],"directories":{}},"0.3.2":{"name":"dryml","description":"DRYML for Node","version":"0.3.2","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.6.0"},"dependencies":{"node-xml":"https://github.com/downloads/jupiter/node-dryml/node-xml-1.0.1.tgz","underscore":">= 1.1.0","JS-Entities":">= 0.1.0"},"devDependencies":{"vows":">= 0.5.6","express":">= 1.0.7","expresso":">= 0.7.0"},"scripts":{"test":"echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"_npmUser":{"name":"jupiter","email":"pieter@wavana.com"},"_id":"dryml@0.3.2","optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0-2","_nodeVersion":"v0.6.8","_defaultsLoaded":true,"dist":{"shasum":"141b96b51be353f6330c8bc38c0896ad39f41eca","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.3.2.tgz","integrity":"sha512-G11s5maEalWP8lDXqCayuLLEfVIznAXoaYeUZN54ucY9lV7FmLYcan4bBGC5b5jNvxubIZ8CszfdnlDJxAMcsw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGNIlK3CM79bdWJI5BO8Mu+c28VQsg2JigzN0y/YezgEAiBijMXPFb6clYdoL3PWs78MOtlh6wMPcp13PcmtBfkrRw=="}]},"readme":"# DRYML - a template engine ![Project status](https://secure.travis-ci.org/jupiter/node-dryml.png?branch=master)\n\nA template engine for Node and Express that is compatible with EJS <https://github.com/visionmedia/ejs> yet has the power and view refactoring savvy of DRYML. \n\nDRYML as a template language was originally developed by Tom Locke for the Rails template engine as part of the web app builder, Hobo. See <http://hobocentral.net/manual/chapters/3_dryml.html> and <http://cookbook.hobocentral.net/manual/dryml-guide>.  \n\n## Installation\n\n    $ npm install dryml\n    \nRun tests:\n\n    $ npm test dryml\n\n## Usage Example\n\nFrom String:\n\n    require('dryml');\n\n    dryml.render(str, options, function(err, buffer){\n      console.log(buffer.str);\n    });\n    \nFor Express:\n\n    app.get('/', function(req, res){\n    \tdryml.renderView('index', options, res);\n    });\n    \nIt is currently asynchronous, so does not work as standard Express view plugin.\n    \n## Options\n\n  - `locals`          Local variables object\n  - `scope`           Function execution context\n  - `debug`           Output sources and useful string\n  - `trimWhitespace`  Removes all whitespace between tags\n  - `cache`           true/false whether to use cached tags/taglibs, default: true, default can be set on dryml object\n  \n## DRYML Syntax\n\n### Basic Layout (Pre-refactor)\n\nDefining a tag (like a inline partial, to be reused):\n\n    <def tag=\"page\" attrs=\"title\">\n      <html>\n        <head>\n          <title><%= title %></title>\n          <script type=\"text/javascript\">\n              // Etc.\n          </script>\n        </head>\n        <body merge-attrs=\"*\">\n          <div class=\"wrapper\">\n            <tagbody/>\n          </div>\n        </body>\n      </html>\n    </def>\n    \nNote: Tags can be defined with/without prefixes, e.g.  `<myns:def tag=\"img\">` is called by using `<myns:img>` is called, and `<def tag=\"image\">` is called by using `<image>` (standard HTML tag names not allowed)\n    \nUsing a tag:\n    \n    <page title=\"Welcome\" class=\"welcome\">\n      <h1>Welcome</h1>\n      <div class=\"content\">\n        <p>Some Content</p>\n      </div>\n      <div class=\"navigation\">\n        <ul>\n          <li><a href=\"/one\">One</a></li>\n          <li><a href=\"/two\">Two</a></li>\n          <li class=\"selected\"><a href=\"/three\">Three</li>\n        </ul>\n      </div>\n    </page>\n    \nOutput:\n\n    <html>\n      <head>\n        <title>Welcome</title>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>            \n      </head>\n      <body class=\"welcome\">\n        <div class=\"wrapper\">\n          <h1>Welcome</h1>\n          <div class=\"content\">\n            <p>Some Content</p>\n          </div>\n          <div class=\"navigation\">\n            <ul>\n              <li><a href=\"/one\">One</a></li>\n              <li><a href=\"/two\">Two</a></li>\n              <li class=\"selected\"><a href=\"/three\">Three</li>\n            </ul>\n          </div>\n        </div>\n      </body>\n    </html>    \n    \n### After Refactor (Important)\n\nDefining multiple tags (in separate taglib file):\n\n    <def tag=\"navigation\" attrs=\"options,selected\">\n      <ul>\n        <% for (var key in options) { %>\n            <li class=\"%{ (key == selected) ? 'selected' : '' }\"><a href=\"#{ '/' + key }\"><%= options[key] %></a></li>\n        <% } %>\n        <tagbody/>\n      </ul>\n    </def>\n\n    <def tag=\"page\" attrs=\"title,navigation\">\n      <html>\n        <head>\n          <title><%= title %></title>\n        </head>\n        <body merge-attrs=\"*\">\n           <h1><%= title %></h1>\n           <div class=\"content\">\n            <tagbody />\n           </div>\n           <div class=\"navigation\">\n            <navigation options=\"#{ {one:'One', two:'Two', three:'Three'} }\" selected=\"%{ navigation }\"/>\n           </div>\n        </body>\n      </html>\n    </def>   \n    \nUsing a tag:\n\n    <taglib src=\"taglibfile\" />\n    \n    <page title=\"Welcome\" navigation=\"three\" class=\"welcome\">\n        <p>Some Content</p>\n    </page>\n    \n## Important Notes\n\nDRYML templates need to be valid XML/XHTML, which means:\n\n   - Non-HTML tag content, such as within script/style/etc., must be enclosed in a CDATA tag. \n   \nExample:\n    \n    <script>\n        <![CDATA[\n            $('body').append('<a href=\"/\">Back</a>');\n        ]]>\n    </script>\n    \n   - Attributes must be escaped where appropriate. \n   \nExample:\n    \n    <a href=\"javascript:$('body').append('&lt;a href=\"/\"&gt;Back&lt;/a&lt;');\">Text</a>\n\n\nThis applies only to 'hardcoded' content/values in the DRYML templates and does *not* apply to dynamically generated content.\n\n## License \n\n(Hobo for Rails)\n\nCopyright (c) 2008 Tom Locke\n\n(The MIT License)\n\nCopyright (c) 2011 Pieter Raubenheimer <pieter@wavana.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n","maintainers":[{"name":"jupiter","email":"pieter@wavana.com"}],"directories":{}},"0.3.3":{"name":"dryml","description":"DRYML for Node","version":"0.3.3","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.6.0"},"dependencies":{"node-xml":"https://github.com/downloads/jupiter/node-dryml/node-xml-1.0.1.tgz","underscore":">= 1.1.0","JS-Entities":">= 0.1.0"},"devDependencies":{"vows":">= 0.5.6","express":">= 1.0.7","expresso":">= 0.7.0"},"scripts":{"test":"echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"_npmUser":{"name":"jupiter","email":"pieter@wavana.com"},"_id":"dryml@0.3.3","optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0-2","_nodeVersion":"v0.6.8","_defaultsLoaded":true,"dist":{"shasum":"55bfc73ecada5d9b9051c5a573dc5043c1f83b3e","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.3.3.tgz","integrity":"sha512-/ZGU7APQj4SZNC0HdpIfBtZ5P1Tnu0zaH0WbknXFr1GD8r9HYAeLs8x6RK7xpvOFbY5tKbyuj5PypNUZeW8ffA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICvklWumnAyGaafT8em2CEVY+QTFXl3i3vGQemwFlJLpAiEA4zXBmi7lJVd0XUjjQQMZHTuBTku2SB7izHcjZoKShF8="}]},"readme":"# DRYML - a template engine ![Project status](https://secure.travis-ci.org/jupiter/node-dryml.png?branch=master)\n\nA template engine for Node and Express that is compatible with EJS <https://github.com/visionmedia/ejs> yet has the power and view refactoring savvy of DRYML. \n\nDRYML as a template language was originally developed by Tom Locke for the Rails template engine as part of the web app builder, Hobo. See <http://hobocentral.net/manual/chapters/3_dryml.html> and <http://cookbook.hobocentral.net/manual/dryml-guide>.  \n\n## Installation\n\n    $ npm install dryml\n    \nRun tests:\n\n    $ npm test dryml\n\n## Usage Example\n\nFrom String:\n\n    require('dryml');\n\n    dryml.render(str, options, function(err, buffer){\n      console.log(buffer.str);\n    });\n    \nFor Express:\n\n    app.get('/', function(req, res){\n    \tdryml.renderView('index', options, res);\n    });\n    \nIt is currently asynchronous, so does not work as standard Express view plugin.\n    \n## Options\n\n  - `locals`          Local variables object\n  - `scope`           Function execution context\n  - `debug`           Output sources and useful string\n  - `trimWhitespace`  Removes all whitespace between tags\n  - `cache`           true/false whether to use cached tags/taglibs, default: true, default can be set on dryml object\n  \n## DRYML Syntax\n\n### Basic Layout (Pre-refactor)\n\nDefining a tag (like a inline partial, to be reused):\n\n    <def tag=\"page\" attrs=\"title\">\n      <html>\n        <head>\n          <title><%= title %></title>\n          <script type=\"text/javascript\">\n              // Etc.\n          </script>\n        </head>\n        <body merge-attrs=\"*\">\n          <div class=\"wrapper\">\n            <tagbody/>\n          </div>\n        </body>\n      </html>\n    </def>\n    \nNote: Tags can be defined with/without prefixes, e.g.  `<myns:def tag=\"img\">` is called by using `<myns:img>` is called, and `<def tag=\"image\">` is called by using `<image>` (standard HTML tag names not allowed)\n    \nUsing a tag:\n    \n    <page title=\"Welcome\" class=\"welcome\">\n      <h1>Welcome</h1>\n      <div class=\"content\">\n        <p>Some Content</p>\n      </div>\n      <div class=\"navigation\">\n        <ul>\n          <li><a href=\"/one\">One</a></li>\n          <li><a href=\"/two\">Two</a></li>\n          <li class=\"selected\"><a href=\"/three\">Three</li>\n        </ul>\n      </div>\n    </page>\n    \nOutput:\n\n    <html>\n      <head>\n        <title>Welcome</title>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>            \n      </head>\n      <body class=\"welcome\">\n        <div class=\"wrapper\">\n          <h1>Welcome</h1>\n          <div class=\"content\">\n            <p>Some Content</p>\n          </div>\n          <div class=\"navigation\">\n            <ul>\n              <li><a href=\"/one\">One</a></li>\n              <li><a href=\"/two\">Two</a></li>\n              <li class=\"selected\"><a href=\"/three\">Three</li>\n            </ul>\n          </div>\n        </div>\n      </body>\n    </html>    \n    \n### After Refactor (Important)\n\nDefining multiple tags (in separate taglib file):\n\n    <def tag=\"navigation\" attrs=\"options,selected\">\n      <ul>\n        <% for (var key in options) { %>\n            <li class=\"%{ (key == selected) ? 'selected' : '' }\"><a href=\"#{ '/' + key }\"><%= options[key] %></a></li>\n        <% } %>\n        <tagbody/>\n      </ul>\n    </def>\n\n    <def tag=\"page\" attrs=\"title,navigation\">\n      <html>\n        <head>\n          <title><%= title %></title>\n        </head>\n        <body merge-attrs=\"*\">\n           <h1><%= title %></h1>\n           <div class=\"content\">\n            <tagbody />\n           </div>\n           <div class=\"navigation\">\n            <navigation options=\"#{ {one:'One', two:'Two', three:'Three'} }\" selected=\"%{ navigation }\"/>\n           </div>\n        </body>\n      </html>\n    </def>   \n    \nUsing a tag:\n\n    <taglib src=\"taglibfile\" />\n    \n    <page title=\"Welcome\" navigation=\"three\" class=\"welcome\">\n        <p>Some Content</p>\n    </page>\n    \n## Important Notes\n\nDRYML templates need to be valid XML/XHTML, which means:\n\n   - Non-HTML tag content, such as within script/style/etc., must be enclosed in a CDATA tag. \n   \nExample:\n    \n    <script>\n        <![CDATA[\n            $('body').append('<a href=\"/\">Back</a>');\n        ]]>\n    </script>\n    \n   - Attributes must be escaped where appropriate. \n   \nExample:\n    \n    <a href=\"javascript:$('body').append('&lt;a href=\"/\"&gt;Back&lt;/a&lt;');\">Text</a>\n\n\nThis applies only to 'hardcoded' content/values in the DRYML templates and does *not* apply to dynamically generated content.\n\n## License \n\n(Hobo for Rails)\n\nCopyright (c) 2008 Tom Locke\n\n(The MIT License)\n\nCopyright (c) 2011 Pieter Raubenheimer <pieter@wavana.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n","maintainers":[{"name":"jupiter","email":"pieter@wavana.com"}],"directories":{}},"0.4.0":{"name":"dryml","description":"DRYML for Node","version":"0.4.0","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.6.0"},"dependencies":{"node-xml":"https://github.com/downloads/jupiter/node-dryml/node-xml-1.0.1.tgz","underscore":">= 1.1.0","JS-Entities":">= 0.1.0"},"devDependencies":{"vows":">= 0.5.6","express":">= 1.0.7","expresso":">= 0.7.0"},"scripts":{"test":"echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"_npmUser":{"name":"jupiter","email":"pieter@wavana.com"},"_id":"dryml@0.4.0","optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0-2","_nodeVersion":"v0.6.8","_defaultsLoaded":true,"dist":{"shasum":"f394f3b7ed7906e2f7f0f54b799a984e9f102f4b","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.4.0.tgz","integrity":"sha512-Vt0mBL7/GanwcWhDDy8tvoSTAOI/MJginN/RqXqSvpa40schei9t8VBKYCtUcKLGySTlu7p2nWr5eEyWueUhLA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCWvTvqR6poaKCho2l+WiqSPB3N24r7q6rY95NJk1GwqgIhAMIret3wu2CZv6631b8auWBbX/i5A0tdd5LlHRMwq+ef"}]},"readme":"# DRYML - a template engine ![Project status](https://secure.travis-ci.org/jupiter/node-dryml.png?branch=master)\n\nA template engine for Node and Express that is compatible with EJS <https://github.com/visionmedia/ejs> yet has the power and view refactoring savvy of DRYML. \n\nDRYML as a template language was originally developed by Tom Locke for the Rails template engine as part of the web app builder, Hobo. See <http://hobocentral.net/manual/chapters/3_dryml.html> and <http://cookbook.hobocentral.net/manual/dryml-guide>.  \n\n## Installation\n\n    $ npm install dryml\n    \nRun tests:\n\n    $ npm test dryml\n\n## Usage Example\n\nFrom String:\n\n    require('dryml');\n\n    dryml.render(str, options, function(err, buffer){\n      console.log(buffer.str);\n    });\n    \nFor Express:\n\n    app.get('/', function(req, res){\n    \tdryml.renderView('index', options, res);\n    });\n    \nIt is currently asynchronous, so does not work as standard Express view plugin.\n    \n## Options\n\n  - `locals`          Local variables object\n  - `scope`           Function execution context\n  - `debug`           Output sources and useful string\n  - `trimWhitespace`  Removes all whitespace between tags\n  - `cache`           true/false whether to use cached tags/taglibs, default: true, default can be set on dryml object\n  \n## Tag definition\n\n### Basic Layout (Pre-refactor)\n\nDefining a tag (like a inline partial, to be reused):\n\n    <def tag=\"page\" attrs=\"title\">\n      <html>\n        <head>\n          <title><%= title %></title>\n          <script type=\"text/javascript\">\n              // Etc.\n          </script>\n        </head>\n        <body merge-attrs=\"*\">\n          <div class=\"wrapper\">\n            <tagbody/>\n          </div>\n        </body>\n      </html>\n    </def>\n    \nNote: Tags can be defined with/without prefixes, e.g.  `<myns:def tag=\"img\">` is called by using `<myns:img>` is called, and `<def tag=\"image\">` is called by using `<image>` (standard HTML tag names not allowed)\n    \nUsing a tag:\n    \n    <page title=\"Welcome\" class=\"welcome\">\n      <h1>Welcome</h1>\n      <div class=\"content\">\n        <p>Some Content</p>\n      </div>\n      <div class=\"navigation\">\n        <ul>\n          <li><a href=\"/one\">One</a></li>\n          <li><a href=\"/two\">Two</a></li>\n          <li class=\"selected\"><a href=\"/three\">Three</li>\n        </ul>\n      </div>\n    </page>\n    \nOutput:\n\n    <html>\n      <head>\n        <title>Welcome</title>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>            \n      </head>\n      <body class=\"welcome\">\n        <div class=\"wrapper\">\n          <h1>Welcome</h1>\n          <div class=\"content\">\n            <p>Some Content</p>\n          </div>\n          <div class=\"navigation\">\n            <ul>\n              <li><a href=\"/one\">One</a></li>\n              <li><a href=\"/two\">Two</a></li>\n              <li class=\"selected\"><a href=\"/three\">Three</li>\n            </ul>\n          </div>\n        </div>\n      </body>\n    </html>    \n    \n### After Refactor (Important)\n\nDefining multiple tags (in separate taglib file):\n\n    <def tag=\"navigation\" attrs=\"options,selected\">\n      <ul>\n        <% for (var key in options) { %>\n            <li class=\"%{ (key == selected) ? 'selected' : '' }\"><a href=\"#{ '/' + key }\"><%= options[key] %></a></li>\n        <% } %>\n        <tagbody/>\n      </ul>\n    </def>\n\n    <def tag=\"page\" attrs=\"title,navigation\">\n      <html>\n        <head>\n          <title><%= title %></title>\n        </head>\n        <body merge-attrs=\"*\">\n           <h1><%= title %></h1>\n           <div class=\"content\">\n            <tagbody />\n           </div>\n           <div class=\"navigation\">\n            <navigation options=\"#{ {one:'One', two:'Two', three:'Three'} }\" selected=\"%{ navigation }\"/>\n           </div>\n        </body>\n      </html>\n    </def>   \n    \nUsing a tag:\n\n    <taglib src=\"taglibfile\" />\n    \n    <page title=\"Welcome\" navigation=\"three\" class=\"welcome\">\n        <p>Some Content</p>\n    </page>\n    \n## Tag Libraries\n\nA file containing tag definitions can be used to selectively include tags for each page.\n\n    <taglib src=\"relative/path\" />\n    \nAn included taglib can also use tags in taglibs it in turn includes.  These tags are per default \nnot included for use outside this taglib.  You can specify for them to be included/exported wherever \nthis taglib is included.\n\n    <taglib src=\"relative/path\" include=\"true\" />\n    \n(To make this the default behaviour, or for backward compatibility, pass an option of `{ includeAllTaglibs: true }` when rendering.)\n\nJust like you cannot (re)define a tag with the same name twice in the same dryml file, you cannot redefine an explicitly included/exported tag.\n    \n## Locals, Attributes\n\n### Locals\n\nLocals passed to render function will be available as local variables in this file, \nand also as an object on the `locals` variable as an object, for if you are not sure \nwhether the variable will be defined in locals passed to the view.\n\n### Attributes\n\nAttributes are treated similarly and will be available both as local variables, and as an\n`attributes` variable.  You can also pass in attributes directly from an object. These\nwould override individual attributes specified on the tag, e.g. if `aAttrs.href == 'about:blank'`\n\n    <a attrs=\"%{ aAttrs }\" href=\"#\">Blank</a>\n    \nresults in:\n  \n    <a href=\"about:blank\">Blank</a>\n    \nThis is useful if you have many attributes to pass to a tag, particularly defined tags.\n\nAttributes can also be passed by enclosing contents in an attr tag within, e.g.\n\n    <a href=\"#\">\n      <attr:title>About this page</attr:title>\n      This Page\n    </a>\n\nThis is also more useful with defined tags, where you may be outputting the contents to a block in layout, e.g.\n\n    <page>\n      <attr:footer>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      <attr:footer>\n      <p>Body text</p>\n    </page>\n\nresulting in:\n\n    <html>\n      <body>\n        <p>Body text</p>\n        <hr/>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      </body>\n    </html>\n    \n## Important Notes\n\nDRYML templates need to be valid XML/XHTML, which means:\n\n   - Non-HTML tag content, such as within script/style/etc., must be enclosed in a CDATA tag. \n   \nExample:\n    \n    <script>\n        <![CDATA[\n            $('body').append('<a href=\"/\">Back</a>');\n        ]]>\n    </script>\n    \n   - Attributes must be escaped where appropriate. \n   \nExample:\n    \n    <a href=\"javascript:$('body').append('&lt;a href=\"/\"&gt;Back&lt;/a&lt;');\">Text</a>\n\n\nThis applies only to 'hardcoded' content/values in the DRYML templates and does *not* apply to dynamically generated content.\n\n## License \n\n(Hobo for Rails)\n\nCopyright (c) 2008 Tom Locke\n\n(The MIT License)\n\nCopyright (c) 2011 Pieter Raubenheimer <pieter@wavana.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n","maintainers":[{"name":"jupiter","email":"pieter@wavana.com"}],"directories":{}},"0.4.1":{"name":"dryml","description":"DRYML for Node","version":"0.4.1","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.6.0"},"dependencies":{"node-xml":"https://github.com/downloads/jupiter/node-dryml/node-xml-1.0.1.tgz","underscore":">= 1.1.0","JS-Entities":">= 0.1.0"},"devDependencies":{"vows":">= 0.5.6","express":">= 1.0.7","expresso":">= 0.7.0"},"scripts":{"test":"echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"_npmUser":{"name":"jupiter","email":"pieter@wavana.com"},"_id":"dryml@0.4.1","optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0-2","_nodeVersion":"v0.6.8","_defaultsLoaded":true,"dist":{"shasum":"a27ce36709f4c4599cf91e69edde7b14e3495627","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.4.1.tgz","integrity":"sha512-cLL5QSPQA3KqGXSazp//d8SIkbV3EZ4KJ99F2fpfRBcVrw0o0EK/X4q6/XKXuYyz6KeXEBfeKHcmZpinyzfvlQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDfIciZAe6+7H9Z6/5ZX12Aw49ara2sIwODqUeNb46BcgIgQfm9/JAPqDAUku+4JoZZYuphk6e1Jtyaj4lZ2yaQF84="}]},"readme":"# DRYML - a template engine ![Project status](https://secure.travis-ci.org/jupiter/node-dryml.png?branch=master)\n\nA template engine for Node and Express that is compatible with EJS <https://github.com/visionmedia/ejs> yet has the power and view refactoring savvy of DRYML. \n\nDRYML as a template language was originally developed by Tom Locke for the Rails template engine as part of the web app builder, Hobo. See <http://hobocentral.net/manual/chapters/3_dryml.html> and <http://cookbook.hobocentral.net/manual/dryml-guide>.  \n\n## Installation\n\n    $ npm install dryml\n    \nRun tests:\n\n    $ npm test dryml\n\n## Usage Example\n\nFrom String:\n\n    require('dryml');\n\n    dryml.render(str, options, function(err, buffer){\n      console.log(buffer.str);\n    });\n    \nFor Express:\n\n    app.get('/', function(req, res){\n    \tdryml.renderView('index', options, res);\n    });\n    \nIt is currently asynchronous, so does not work as standard Express view plugin.\n    \n## Options\n\n  - `locals`          Local variables object\n  - `scope`           Function execution context\n  - `debug`           Output sources and useful string\n  - `trimWhitespace`  Removes all whitespace between tags\n  - `cache`           true/false whether to use cached tags/taglibs, default: true, default can be set on dryml object\n  \n## Tag definition\n\n### Basic Layout (Pre-refactor)\n\nDefining a tag (like a inline partial, to be reused):\n\n    <def tag=\"page\" attrs=\"title\">\n      <html>\n        <head>\n          <title><%= title %></title>\n          <script type=\"text/javascript\">\n              // Etc.\n          </script>\n        </head>\n        <body merge-attrs=\"*\">\n          <div class=\"wrapper\">\n            <tagbody/>\n          </div>\n        </body>\n      </html>\n    </def>\n    \nNote: Tags can be defined with/without prefixes, e.g.  `<myns:def tag=\"img\">` is called by using `<myns:img>` is called, and `<def tag=\"image\">` is called by using `<image>` (standard HTML tag names not allowed)\n    \nUsing a tag:\n    \n    <page title=\"Welcome\" class=\"welcome\">\n      <h1>Welcome</h1>\n      <div class=\"content\">\n        <p>Some Content</p>\n      </div>\n      <div class=\"navigation\">\n        <ul>\n          <li><a href=\"/one\">One</a></li>\n          <li><a href=\"/two\">Two</a></li>\n          <li class=\"selected\"><a href=\"/three\">Three</li>\n        </ul>\n      </div>\n    </page>\n    \nOutput:\n\n    <html>\n      <head>\n        <title>Welcome</title>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>            \n      </head>\n      <body class=\"welcome\">\n        <div class=\"wrapper\">\n          <h1>Welcome</h1>\n          <div class=\"content\">\n            <p>Some Content</p>\n          </div>\n          <div class=\"navigation\">\n            <ul>\n              <li><a href=\"/one\">One</a></li>\n              <li><a href=\"/two\">Two</a></li>\n              <li class=\"selected\"><a href=\"/three\">Three</li>\n            </ul>\n          </div>\n        </div>\n      </body>\n    </html>    \n    \n### After Refactor (Important)\n\nDefining multiple tags (in separate taglib file):\n\n    <def tag=\"navigation\" attrs=\"options,selected\">\n      <ul>\n        <% for (var key in options) { %>\n            <li class=\"%{ (key == selected) ? 'selected' : '' }\"><a href=\"#{ '/' + key }\"><%= options[key] %></a></li>\n        <% } %>\n        <tagbody/>\n      </ul>\n    </def>\n\n    <def tag=\"page\" attrs=\"title,navigation\">\n      <html>\n        <head>\n          <title><%= title %></title>\n        </head>\n        <body merge-attrs=\"*\">\n           <h1><%= title %></h1>\n           <div class=\"content\">\n            <tagbody />\n           </div>\n           <div class=\"navigation\">\n            <navigation options=\"#{ {one:'One', two:'Two', three:'Three'} }\" selected=\"%{ navigation }\"/>\n           </div>\n        </body>\n      </html>\n    </def>   \n    \nUsing a tag:\n\n    <taglib src=\"taglibfile\" />\n    \n    <page title=\"Welcome\" navigation=\"three\" class=\"welcome\">\n        <p>Some Content</p>\n    </page>\n    \n## Tag Libraries\n\nA file containing tag definitions can be used to selectively include tags for each page.\n\n    <taglib src=\"relative/path\" />\n    \nAn included taglib can also use tags in taglibs it in turn includes.  These tags are per default \nnot included for use outside this taglib.  You can specify for them to be included/exported wherever \nthis taglib is included.\n\n    <taglib src=\"relative/path\" include=\"true\" />\n    \n(To make this the default behaviour, or for backward compatibility, pass an option of `{ includeAllTaglibs: true }` when rendering.)\n\nJust like you cannot (re)define a tag with the same name twice in the same dryml file, you cannot redefine an explicitly included/exported tag.\n    \n## Locals, Attributes\n\n### Locals\n\nLocals passed to render function will be available as local variables in this file, \nand also as an object on the `locals` variable as an object, for if you are not sure \nwhether the variable will be defined in locals passed to the view.\n\n### Attributes\n\nAttributes are treated similarly and will be available both as local variables, and as an\n`attributes` variable.  You can also pass in attributes directly from an object. These\nwould override individual attributes specified on the tag, e.g. if `aAttrs.href == 'about:blank'`\n\n    <a attrs=\"%{ aAttrs }\" href=\"#\">Blank</a>\n    \nresults in:\n  \n    <a href=\"about:blank\">Blank</a>\n    \nThis is useful if you have many attributes to pass to a tag, particularly defined tags.\n\nAttributes can also be passed by enclosing contents in an attr tag within, e.g.\n\n    <a href=\"#\">\n      <attr:title>About this page</attr:title>\n      This Page\n    </a>\n\nThis is also more useful with defined tags, where you may be outputting the contents to a block in layout, e.g.\n\n    <page>\n      <attr:footer>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      <attr:footer>\n      <p>Body text</p>\n    </page>\n\nresulting in:\n\n    <html>\n      <body>\n        <p>Body text</p>\n        <hr/>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      </body>\n    </html>\n    \n## Important Notes\n\nDRYML templates need to be valid XML/XHTML, which means:\n\n   - Non-HTML tag content, such as within script/style/etc., must be enclosed in a CDATA tag. \n   \nExample:\n    \n    <script>\n        <![CDATA[\n            $('body').append('<a href=\"/\">Back</a>');\n        ]]>\n    </script>\n    \n   - Attributes must be escaped where appropriate. \n   \nExample:\n    \n    <a href=\"javascript:$('body').append('&lt;a href=\"/\"&gt;Back&lt;/a&lt;');\">Text</a>\n\n\nThis applies only to 'hardcoded' content/values in the DRYML templates and does *not* apply to dynamically generated content.\n\n## License \n\n(Hobo for Rails)\n\nCopyright (c) 2008 Tom Locke\n\n(The MIT License)\n\nCopyright (c) 2011 Pieter Raubenheimer <pieter@wavana.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n","maintainers":[{"name":"jupiter","email":"pieter@wavana.com"}],"directories":{}},"0.4.2":{"name":"dryml","description":"DRYML for Node","version":"0.4.2","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.6.0"},"dependencies":{"strutil":">= 0.1.0","node-xml":"https://github.com/downloads/jupiter/node-dryml/node-xml-1.0.1.tgz","underscore":">= 1.1.0","JS-Entities":">= 0.1.0"},"devDependencies":{"vows":">= 0.5.6"},"scripts":{"test":"echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"_npmUser":{"name":"jupiter","email":"pieter@wavana.com"},"_id":"dryml@0.4.2","optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0-2","_nodeVersion":"v0.6.8","_defaultsLoaded":true,"dist":{"shasum":"b700939c74f14126e771a5e1566eec6de2ff9c35","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.4.2.tgz","integrity":"sha512-QGfjcoHsWYchUuldXl5NAcXCwnN6x1Y6iTaMKuN3NO+2THQnkZZ1i0Qxo2vEsc3g/vTntQlulEpSyu3ztIHSlg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCXSLdin5kdk7F2r2fmtBpeJyT8fA6qchXBbT/CeFk/MwIgN/jd7FR1weFyNgg0jS1548v64MYEFeKqj1vhTwTMz1o="}]},"readme":"# DRYML - a template engine ![Project status](https://secure.travis-ci.org/jupiter/node-dryml.png?branch=master)\n\nA template engine for Node and Express that is compatible with EJS <https://github.com/visionmedia/ejs> yet has the power and view refactoring savvy of DRYML. \n\nDRYML as a template language was originally developed by Tom Locke for the Rails template engine as part of the web app builder, Hobo. See <http://hobocentral.net/manual/chapters/3_dryml.html> and <http://cookbook.hobocentral.net/manual/dryml-guide>.  \n\n## Installation\n\n    $ npm install dryml\n    \nRun tests:\n\n    $ npm test dryml\n\n## Usage Example\n\nFrom String:\n\n    require('dryml');\n\n    dryml.render(str, options, function(err, buffer){\n      console.log(buffer.str);\n    });\n    \nFor Express:\n\n    app.get('/', function(req, res){\n    \tdryml.renderView('index', options, res);\n    });\n    \nIt is currently asynchronous, so does not work as standard Express view plugin.\n    \n## Options\n\n  - `locals`          Local variables object\n  - `scope`           Function execution context\n  - `debug`           Output sources and useful string\n  - `trimWhitespace`  Removes all whitespace between tags\n  - `cache`           true/false whether to use cached tags/taglibs, default: true, default can be set on dryml object\n  \n## Tag definition\n\n### Basic Layout (Pre-refactor)\n\nDefining a tag (like a inline partial, to be reused):\n\n    <def tag=\"page\" attrs=\"title\">\n      <html>\n        <head>\n          <title><%= title %></title>\n          <script type=\"text/javascript\">\n              // Etc.\n          </script>\n        </head>\n        <body merge-attrs=\"*\">\n          <div class=\"wrapper\">\n            <tagbody/>\n          </div>\n        </body>\n      </html>\n    </def>\n    \nNote: Tags can be defined with/without prefixes, e.g.  `<myns:def tag=\"img\">` is called by using `<myns:img>` is called, and `<def tag=\"image\">` is called by using `<image>` (standard HTML tag names not allowed)\n    \nUsing a tag:\n    \n    <page title=\"Welcome\" class=\"welcome\">\n      <h1>Welcome</h1>\n      <div class=\"content\">\n        <p>Some Content</p>\n      </div>\n      <div class=\"navigation\">\n        <ul>\n          <li><a href=\"/one\">One</a></li>\n          <li><a href=\"/two\">Two</a></li>\n          <li class=\"selected\"><a href=\"/three\">Three</li>\n        </ul>\n      </div>\n    </page>\n    \nOutput:\n\n    <html>\n      <head>\n        <title>Welcome</title>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>            \n      </head>\n      <body class=\"welcome\">\n        <div class=\"wrapper\">\n          <h1>Welcome</h1>\n          <div class=\"content\">\n            <p>Some Content</p>\n          </div>\n          <div class=\"navigation\">\n            <ul>\n              <li><a href=\"/one\">One</a></li>\n              <li><a href=\"/two\">Two</a></li>\n              <li class=\"selected\"><a href=\"/three\">Three</li>\n            </ul>\n          </div>\n        </div>\n      </body>\n    </html>    \n    \n### After Refactor (Important)\n\nDefining multiple tags (in separate taglib file):\n\n    <def tag=\"navigation\" attrs=\"options,selected\">\n      <ul>\n        <% for (var key in options) { %>\n            <li class=\"%{ (key == selected) ? 'selected' : '' }\"><a href=\"#{ '/' + key }\"><%= options[key] %></a></li>\n        <% } %>\n        <tagbody/>\n      </ul>\n    </def>\n\n    <def tag=\"page\" attrs=\"title,navigation\">\n      <html>\n        <head>\n          <title><%= title %></title>\n        </head>\n        <body merge-attrs=\"*\">\n           <h1><%= title %></h1>\n           <div class=\"content\">\n            <tagbody />\n           </div>\n           <div class=\"navigation\">\n            <navigation options=\"#{ {one:'One', two:'Two', three:'Three'} }\" selected=\"%{ navigation }\"/>\n           </div>\n        </body>\n      </html>\n    </def>   \n    \nUsing a tag:\n\n    <taglib src=\"taglibfile\" />\n    \n    <page title=\"Welcome\" navigation=\"three\" class=\"welcome\">\n        <p>Some Content</p>\n    </page>\n    \n## Tag Libraries\n\nA file containing tag definitions can be used to selectively include tags for each page.\n\n    <taglib src=\"relative/path\" />\n    \nAn included taglib can also use tags in taglibs it in turn includes.  These tags are per default \nnot included for use outside this taglib.  You can specify for them to be included/exported wherever \nthis taglib is included.\n\n    <taglib src=\"relative/path\" include=\"true\" />\n    \n(To make this the default behaviour, or for backward compatibility, pass an option of `{ includeAllTaglibs: true }` when rendering.)\n\nJust like you cannot (re)define a tag with the same name twice in the same dryml file, you cannot redefine an explicitly included/exported tag.\n    \n## Locals, Attributes\n\n### Locals\n\nLocals passed to render function will be available as local variables in this file, \nand also as an object on the `locals` variable as an object, for if you are not sure \nwhether the variable will be defined in locals passed to the view.\n\n### Attributes\n\nAttributes are treated similarly and will be available both as local variables, and as an\n`attributes` variable.  You can also pass in attributes directly from an object. These\nwould override individual attributes specified on the tag, e.g. if `aAttrs.href == 'about:blank'`\n\n    <a attrs=\"%{ aAttrs }\" href=\"#\">Blank</a>\n    \nresults in:\n  \n    <a href=\"about:blank\">Blank</a>\n    \nThis is useful if you have many attributes to pass to a tag, particularly defined tags.\n\nAttributes can also be passed by enclosing contents in an attr tag within, e.g.\n\n    <a href=\"#\">\n      <attr:title>About this page</attr:title>\n      This Page\n    </a>\n\nThis is also more useful with defined tags, where you may be outputting the contents to a block in layout, e.g.\n\n    <page>\n      <attr:footer>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      <attr:footer>\n      <p>Body text</p>\n    </page>\n\nresulting in:\n\n    <html>\n      <body>\n        <p>Body text</p>\n        <hr/>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      </body>\n    </html>\n    \n## Important Notes\n\nDRYML templates need to be valid XML/XHTML, which means:\n\n   - Non-HTML tag content, such as within script/style/etc., must be enclosed in a CDATA tag. \n   \nExample:\n    \n    <script>\n        <![CDATA[\n            $('body').append('<a href=\"/\">Back</a>');\n        ]]>\n    </script>\n    \n   - Attributes must be escaped where appropriate. \n   \nExample:\n    \n    <a href=\"javascript:$('body').append('&lt;a href=\"/\"&gt;Back&lt;/a&lt;');\">Text</a>\n\n\nThis applies only to 'hardcoded' content/values in the DRYML templates and does *not* apply to dynamically generated content.\n\n## License \n\n(Hobo for Rails)\n\nCopyright (c) 2008 Tom Locke\n\n(The MIT License)\n\nCopyright (c) 2011 Pieter Raubenheimer <pieter@wavana.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n","maintainers":[{"name":"jupiter","email":"pieter@wavana.com"}],"directories":{}},"0.4.3":{"name":"dryml","description":"DRYML for Node","version":"0.4.3","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.6.0"},"dependencies":{"strutil":">= 0.1.0","node-xml":"https://github.com/downloads/jupiter/node-dryml/node-xml-1.0.1.tgz","underscore":">= 1.1.0","entities":"0.1.1"},"devDependencies":{"vows":">= 0.5.6"},"scripts":{"test":"echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"_npmUser":{"name":"jupiter","email":"pieter@wavana.com"},"_id":"dryml@0.4.3","optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0-2","_nodeVersion":"v0.6.8","_defaultsLoaded":true,"dist":{"shasum":"a9d2d991f87c043785992b960127321d9823a441","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.4.3.tgz","integrity":"sha512-ufc6tjKhvLsWDl61x3Y+QQpznYL7lDZydFRDSZKfQzteJj/kCoiUndtuRIyQDybYxV6WNlzHBcIlCtEFmW8htA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC485pP5Cd3Y96mCGkeomUPRGEG/8ClJRtVhEGOjC7E5gIhAM6xHlQISwE4cbsSvxdUs2hL5Xsonn+5XiOGsn+ccwYU"}]},"readme":"# DRYML - a template engine ![Project status](https://secure.travis-ci.org/jupiter/node-dryml.png?branch=master)\n\nA template engine for Node and Express that is compatible with EJS <https://github.com/visionmedia/ejs> yet has the power and view refactoring savvy of DRYML. \n\nDRYML as a template language was originally developed by Tom Locke for the Rails template engine as part of the web app builder, Hobo. See <http://hobocentral.net/manual/chapters/3_dryml.html> and <http://cookbook.hobocentral.net/manual/dryml-guide>.  \n\n## Installation\n\n    $ npm install dryml\n    \nRun tests:\n\n    $ npm test dryml\n\n## Usage Example\n\nFrom String:\n\n    require('dryml');\n\n    dryml.render(str, options, function(err, buffer){\n      console.log(buffer.str);\n    });\n    \nFor Express:\n\n    app.get('/', function(req, res){\n    \tdryml.renderView('index', options, res);\n    });\n    \nIt is currently asynchronous, so does not work as standard Express view plugin.\n    \n## Options\n\n  - `locals`          Local variables object\n  - `scope`           Function execution context\n  - `debug`           Output sources and useful string\n  - `trimWhitespace`  Removes all whitespace between tags\n  - `cache`           true/false whether to use cached tags/taglibs, default: true, default can be set on dryml object\n  \n## Tag definition\n\n### Basic Layout (Pre-refactor)\n\nDefining a tag (like a inline partial, to be reused):\n\n    <def tag=\"page\" attrs=\"title\">\n      <html>\n        <head>\n          <title><%= title %></title>\n          <script type=\"text/javascript\">\n              // Etc.\n          </script>\n        </head>\n        <body merge-attrs=\"*\">\n          <div class=\"wrapper\">\n            <tagbody/>\n          </div>\n        </body>\n      </html>\n    </def>\n    \nNote: Tags can be defined with/without prefixes, e.g.  `<myns:def tag=\"img\">` is called by using `<myns:img>` is called, and `<def tag=\"image\">` is called by using `<image>` (standard HTML tag names not allowed)\n    \nUsing a tag:\n    \n    <page title=\"Welcome\" class=\"welcome\">\n      <h1>Welcome</h1>\n      <div class=\"content\">\n        <p>Some Content</p>\n      </div>\n      <div class=\"navigation\">\n        <ul>\n          <li><a href=\"/one\">One</a></li>\n          <li><a href=\"/two\">Two</a></li>\n          <li class=\"selected\"><a href=\"/three\">Three</li>\n        </ul>\n      </div>\n    </page>\n    \nOutput:\n\n    <html>\n      <head>\n        <title>Welcome</title>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>            \n      </head>\n      <body class=\"welcome\">\n        <div class=\"wrapper\">\n          <h1>Welcome</h1>\n          <div class=\"content\">\n            <p>Some Content</p>\n          </div>\n          <div class=\"navigation\">\n            <ul>\n              <li><a href=\"/one\">One</a></li>\n              <li><a href=\"/two\">Two</a></li>\n              <li class=\"selected\"><a href=\"/three\">Three</li>\n            </ul>\n          </div>\n        </div>\n      </body>\n    </html>    \n    \n### After Refactor (Important)\n\nDefining multiple tags (in separate taglib file):\n\n    <def tag=\"navigation\" attrs=\"options,selected\">\n      <ul>\n        <% for (var key in options) { %>\n            <li class=\"%{ (key == selected) ? 'selected' : '' }\"><a href=\"#{ '/' + key }\"><%= options[key] %></a></li>\n        <% } %>\n        <tagbody/>\n      </ul>\n    </def>\n\n    <def tag=\"page\" attrs=\"title,navigation\">\n      <html>\n        <head>\n          <title><%= title %></title>\n        </head>\n        <body merge-attrs=\"*\">\n           <h1><%= title %></h1>\n           <div class=\"content\">\n            <tagbody />\n           </div>\n           <div class=\"navigation\">\n            <navigation options=\"#{ {one:'One', two:'Two', three:'Three'} }\" selected=\"%{ navigation }\"/>\n           </div>\n        </body>\n      </html>\n    </def>   \n    \nUsing a tag:\n\n    <taglib src=\"taglibfile\" />\n    \n    <page title=\"Welcome\" navigation=\"three\" class=\"welcome\">\n        <p>Some Content</p>\n    </page>\n    \n## Tag Libraries\n\nA file containing tag definitions can be used to selectively include tags for each page.\n\n    <taglib src=\"relative/path\" />\n    \nAn included taglib can also use tags in taglibs it in turn includes.  These tags are per default \nnot included for use outside this taglib.  You can specify for them to be included/exported wherever \nthis taglib is included.\n\n    <taglib src=\"relative/path\" include=\"true\" />\n    \n(To make this the default behaviour, or for backward compatibility, pass an option of `{ includeAllTaglibs: true }` when rendering.)\n\nJust like you cannot (re)define a tag with the same name twice in the same dryml file, you cannot redefine an explicitly included/exported tag.\n    \n## Locals, Attributes\n\n### Locals\n\nLocals passed to render function will be available as local variables in this file, \nand also as an object on the `locals` variable as an object, for if you are not sure \nwhether the variable will be defined in locals passed to the view.\n\n### Attributes\n\nAttributes are treated similarly and will be available both as local variables, and as an\n`attributes` variable.  You can also pass in attributes directly from an object. These\nwould override individual attributes specified on the tag, e.g. if `aAttrs.href == 'about:blank'`\n\n    <a attrs=\"%{ aAttrs }\" href=\"#\">Blank</a>\n    \nresults in:\n  \n    <a href=\"about:blank\">Blank</a>\n    \nThis is useful if you have many attributes to pass to a tag, particularly defined tags.\n\nAttributes can also be passed by enclosing contents in an attr tag within, e.g.\n\n    <a href=\"#\">\n      <attr:title>About this page</attr:title>\n      This Page\n    </a>\n\nThis is also more useful with defined tags, where you may be outputting the contents to a block in layout, e.g.\n\n    <page>\n      <attr:footer>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      <attr:footer>\n      <p>Body text</p>\n    </page>\n\nresulting in:\n\n    <html>\n      <body>\n        <p>Body text</p>\n        <hr/>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      </body>\n    </html>\n    \n## Important Notes\n\nDRYML templates need to be valid XML/XHTML, which means:\n\n   - Non-HTML tag content, such as within script/style/etc., must be enclosed in a CDATA tag. \n   \nExample:\n    \n    <script>\n        <![CDATA[\n            $('body').append('<a href=\"/\">Back</a>');\n        ]]>\n    </script>\n    \n   - Attributes must be escaped where appropriate. \n   \nExample:\n    \n    <a href=\"javascript:$('body').append('&lt;a href=\"/\"&gt;Back&lt;/a&lt;');\">Text</a>\n\n\nThis applies only to 'hardcoded' content/values in the DRYML templates and does *not* apply to dynamically generated content.\n\n## License \n\n(Hobo for Rails)\n\nCopyright (c) 2008 Tom Locke\n\n(The MIT License)\n\nCopyright (c) 2011 Pieter Raubenheimer <pieter@wavana.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n","maintainers":[{"name":"jupiter","email":"pieter@wavana.com"}],"directories":{}},"0.4.4":{"name":"dryml","description":"DRYML for Node","version":"0.4.4","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.6.0"},"dependencies":{"strutil":">= 0.1.0","node-xml":"https://github.com/downloads/jupiter/node-dryml/node-xml-1.0.1.tgz","underscore":">= 1.1.0","entities":"0.1.1"},"devDependencies":{"vows":">= 0.5.6"},"scripts":{"test":"echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"_npmUser":{"name":"jupiter","email":"pieter@wavana.com"},"_id":"dryml@0.4.4","optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0-2","_nodeVersion":"v0.6.8","_defaultsLoaded":true,"dist":{"shasum":"9016ab769e2a3e1e1f325b1cd1e2863db02d30db","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.4.4.tgz","integrity":"sha512-p6t2qbfdRA5cBNq4tQQyj9tdmDI7xRWw+x6zq+bXx8MvJzsUbTacbQopNkv3BdK7BjbNFC20+iv31rKxSA98fw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDzugYnc+SPjowH1YH52n9Hghp7TUB27PRJbcamYyOigAIhAKAfJlzKpy2X4cTGCglibScr4rvx8oJsR2MWNsjV1E0E"}]},"readme":"# DRYML - a template engine ![Project status](https://secure.travis-ci.org/jupiter/node-dryml.png?branch=master)\n\nA template engine for Node and Express that is compatible with EJS <https://github.com/visionmedia/ejs> yet has the power and view refactoring savvy of DRYML. \n\nDRYML as a template language was originally developed by Tom Locke for the Rails template engine as part of the web app builder, Hobo. See <http://hobocentral.net/manual/chapters/3_dryml.html> and <http://cookbook.hobocentral.net/manual/dryml-guide>.  \n\n## Installation\n\n    $ npm install dryml\n    \nRun tests:\n\n    $ npm test dryml\n\n## Usage Example\n\nFrom String:\n\n    require('dryml');\n\n    dryml.render(str, options, function(err, buffer){\n      console.log(buffer.str);\n    });\n    \nFor Express:\n\n    app.get('/', function(req, res){\n    \tdryml.renderView('index', options, res);\n    });\n    \nIt is currently asynchronous, so does not work as standard Express view plugin.\n    \n## Options\n\n  - `locals`          Local variables object\n  - `scope`           Function execution context\n  - `debug`           Output sources and useful string\n  - `trimWhitespace`  Removes all whitespace between tags\n  - `cache`           true/false whether to use cached tags/taglibs, default: true, default can be set on dryml object\n  \n## Tag definition\n\n### Basic Layout (Pre-refactor)\n\nDefining a tag (like a inline partial, to be reused):\n\n    <def tag=\"page\" attrs=\"title\">\n      <html>\n        <head>\n          <title><%= title %></title>\n          <script type=\"text/javascript\">\n              // Etc.\n          </script>\n        </head>\n        <body merge-attrs=\"*\">\n          <div class=\"wrapper\">\n            <tagbody/>\n          </div>\n        </body>\n      </html>\n    </def>\n    \nNote: Tags can be defined with/without prefixes, e.g.  `<myns:def tag=\"img\">` is called by using `<myns:img>` is called, and `<def tag=\"image\">` is called by using `<image>` (standard HTML tag names not allowed)\n    \nUsing a tag:\n    \n    <page title=\"Welcome\" class=\"welcome\">\n      <h1>Welcome</h1>\n      <div class=\"content\">\n        <p>Some Content</p>\n      </div>\n      <div class=\"navigation\">\n        <ul>\n          <li><a href=\"/one\">One</a></li>\n          <li><a href=\"/two\">Two</a></li>\n          <li class=\"selected\"><a href=\"/three\">Three</li>\n        </ul>\n      </div>\n    </page>\n    \nOutput:\n\n    <html>\n      <head>\n        <title>Welcome</title>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>            \n      </head>\n      <body class=\"welcome\">\n        <div class=\"wrapper\">\n          <h1>Welcome</h1>\n          <div class=\"content\">\n            <p>Some Content</p>\n          </div>\n          <div class=\"navigation\">\n            <ul>\n              <li><a href=\"/one\">One</a></li>\n              <li><a href=\"/two\">Two</a></li>\n              <li class=\"selected\"><a href=\"/three\">Three</li>\n            </ul>\n          </div>\n        </div>\n      </body>\n    </html>    \n    \n### After Refactor (Important)\n\nDefining multiple tags (in separate taglib file):\n\n    <def tag=\"navigation\" attrs=\"options,selected\">\n      <ul>\n        <% for (var key in options) { %>\n            <li class=\"%{ (key == selected) ? 'selected' : '' }\"><a href=\"#{ '/' + key }\"><%= options[key] %></a></li>\n        <% } %>\n        <tagbody/>\n      </ul>\n    </def>\n\n    <def tag=\"page\" attrs=\"title,navigation\">\n      <html>\n        <head>\n          <title><%= title %></title>\n        </head>\n        <body merge-attrs=\"*\">\n           <h1><%= title %></h1>\n           <div class=\"content\">\n            <tagbody />\n           </div>\n           <div class=\"navigation\">\n            <navigation options=\"#{ {one:'One', two:'Two', three:'Three'} }\" selected=\"%{ navigation }\"/>\n           </div>\n        </body>\n      </html>\n    </def>   \n    \nUsing a tag:\n\n    <taglib src=\"taglibfile\" />\n    \n    <page title=\"Welcome\" navigation=\"three\" class=\"welcome\">\n        <p>Some Content</p>\n    </page>\n    \n## Tag Libraries\n\nA file containing tag definitions can be used to selectively include tags for each page.\n\n    <taglib src=\"relative/path\" />\n    \nAn included taglib can also use tags in taglibs it in turn includes.  These tags are per default \nnot included for use outside this taglib.  You can specify for them to be included/exported wherever \nthis taglib is included.\n\n    <taglib src=\"relative/path\" include=\"true\" />\n    \n(To make this the default behaviour, or for backward compatibility, pass an option of `{ includeAllTaglibs: true }` when rendering.)\n\nJust like you cannot (re)define a tag with the same name twice in the same dryml file, you cannot redefine an explicitly included/exported tag.\n    \n## Locals, Attributes\n\n### Locals\n\nLocals passed to render function will be available as local variables in this file, \nand also as an object on the `locals` variable as an object, for if you are not sure \nwhether the variable will be defined in locals passed to the view.\n\n### Attributes\n\nAttributes are treated similarly and will be available both as local variables, and as an\n`attributes` variable.  You can also pass in attributes directly from an object. These\nwould override individual attributes specified on the tag, e.g. if `aAttrs.href == 'about:blank'`\n\n    <a attrs=\"%{ aAttrs }\" href=\"#\">Blank</a>\n    \nresults in:\n  \n    <a href=\"about:blank\">Blank</a>\n    \nThis is useful if you have many attributes to pass to a tag, particularly defined tags.\n\nAttributes can also be passed by enclosing contents in an attr tag within, e.g.\n\n    <a href=\"#\">\n      <attr:title>About this page</attr:title>\n      This Page\n    </a>\n\nThis is also more useful with defined tags, where you may be outputting the contents to a block in layout, e.g.\n\n    <page>\n      <attr:footer>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      <attr:footer>\n      <p>Body text</p>\n    </page>\n\nresulting in:\n\n    <html>\n      <body>\n        <p>Body text</p>\n        <hr/>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      </body>\n    </html>\n    \n## Important Notes\n\nDRYML templates need to be valid XML/XHTML, which means:\n\n   - Non-HTML tag content, such as within script/style/etc., must be enclosed in a CDATA tag. \n   \nExample:\n    \n    <script>\n        <![CDATA[\n            $('body').append('<a href=\"/\">Back</a>');\n        ]]>\n    </script>\n    \n   - Attributes must be escaped where appropriate. \n   \nExample:\n    \n    <a href=\"javascript:$('body').append('&lt;a href=\"/\"&gt;Back&lt;/a&lt;');\">Text</a>\n\n\nThis applies only to 'hardcoded' content/values in the DRYML templates and does *not* apply to dynamically generated content.\n\n## License \n\n(Hobo for Rails)\n\nCopyright (c) 2008 Tom Locke\n\n(The MIT License)\n\nCopyright (c) 2011 Pieter Raubenheimer <pieter@wavana.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n","maintainers":[{"name":"jupiter","email":"pieter@wavana.com"}],"directories":{}},"0.4.5":{"name":"dryml","description":"DRYML for Node","version":"0.4.5","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.6.0"},"dependencies":{"strutil":">= 0.1.0","node-xml":"https://github.com/downloads/jupiter/node-dryml/node-xml-1.0.1.tgz","underscore":">= 1.1.0","entities":"0.1.1"},"devDependencies":{"vows":">= 0.5.6"},"scripts":{"test":"echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"_npmUser":{"name":"jupiter","email":"pieter@wavana.com"},"_id":"dryml@0.4.5","optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0-2","_nodeVersion":"v0.6.8","_defaultsLoaded":true,"dist":{"shasum":"84107a91d3a1febc0bb7a1a877726c9894c815e0","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.4.5.tgz","integrity":"sha512-Rintodkr8WXAj/BdMh2h3xkC/e+bxQ5aLJ2NbzdxzoBp8Y1IoCpFszXCPbtqYr7EGCL/rFxCpEh0I08gkEyn1g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGfHdHMXxRCNC+StSnEn3UyuLhdYW4rlz7yj99GgyQudAiEA+x0Y/3WShFZRefa6jU6PAdjFYmWq8+R+NaCPbOY/wDY="}]},"readme":"# DRYML - a template engine ![Project status](https://secure.travis-ci.org/jupiter/node-dryml.png?branch=master)\n\nA template engine for Node and Express that is compatible with EJS <https://github.com/visionmedia/ejs> yet has the power and view refactoring savvy of DRYML. \n\nDRYML as a template language was originally developed by Tom Locke for the Rails template engine as part of the web app builder, Hobo. See <http://hobocentral.net/manual/chapters/3_dryml.html> and <http://cookbook.hobocentral.net/manual/dryml-guide>.  \n\n## Installation\n\n    $ npm install dryml\n    \nRun tests:\n\n    $ npm test dryml\n\n## Usage Example\n\nFrom String:\n\n    require('dryml');\n\n    dryml.render(str, options, function(err, buffer){\n      console.log(buffer.str);\n    });\n    \nFor Express:\n\n    app.get('/', function(req, res){\n    \tdryml.renderView('index', options, res);\n    });\n    \nIt is currently asynchronous, so does not work as standard Express view plugin.\n    \n## Options\n\n  - `locals`          Local variables object\n  - `scope`           Function execution context\n  - `debug`           Output sources and useful string\n  - `trimWhitespace`  Removes all whitespace between tags\n  - `cache`           true/false whether to use cached tags/taglibs, default: true, default can be set on dryml object\n  \n## Tag definition\n\n### Basic Layout (Pre-refactor)\n\nDefining a tag (like a inline partial, to be reused):\n\n    <def tag=\"page\" attrs=\"title\">\n      <html>\n        <head>\n          <title><%= title %></title>\n          <script type=\"text/javascript\">\n              // Etc.\n          </script>\n        </head>\n        <body merge-attrs=\"*\">\n          <div class=\"wrapper\">\n            <tagbody/>\n          </div>\n        </body>\n      </html>\n    </def>\n    \nNote: Tags can be defined with/without prefixes, e.g.  `<myns:def tag=\"img\">` is called by using `<myns:img>` is called, and `<def tag=\"image\">` is called by using `<image>` (standard HTML tag names not allowed)\n    \nUsing a tag:\n    \n    <page title=\"Welcome\" class=\"welcome\">\n      <h1>Welcome</h1>\n      <div class=\"content\">\n        <p>Some Content</p>\n      </div>\n      <div class=\"navigation\">\n        <ul>\n          <li><a href=\"/one\">One</a></li>\n          <li><a href=\"/two\">Two</a></li>\n          <li class=\"selected\"><a href=\"/three\">Three</li>\n        </ul>\n      </div>\n    </page>\n    \nOutput:\n\n    <html>\n      <head>\n        <title>Welcome</title>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>            \n      </head>\n      <body class=\"welcome\">\n        <div class=\"wrapper\">\n          <h1>Welcome</h1>\n          <div class=\"content\">\n            <p>Some Content</p>\n          </div>\n          <div class=\"navigation\">\n            <ul>\n              <li><a href=\"/one\">One</a></li>\n              <li><a href=\"/two\">Two</a></li>\n              <li class=\"selected\"><a href=\"/three\">Three</li>\n            </ul>\n          </div>\n        </div>\n      </body>\n    </html>    \n    \n### After Refactor (Important)\n\nDefining multiple tags (in separate taglib file):\n\n    <def tag=\"navigation\" attrs=\"options,selected\">\n      <ul>\n        <% for (var key in options) { %>\n            <li class=\"%{ (key == selected) ? 'selected' : '' }\"><a href=\"#{ '/' + key }\"><%= options[key] %></a></li>\n        <% } %>\n        <tagbody/>\n      </ul>\n    </def>\n\n    <def tag=\"page\" attrs=\"title,navigation\">\n      <html>\n        <head>\n          <title><%= title %></title>\n        </head>\n        <body merge-attrs=\"*\">\n           <h1><%= title %></h1>\n           <div class=\"content\">\n            <tagbody />\n           </div>\n           <div class=\"navigation\">\n            <navigation options=\"#{ {one:'One', two:'Two', three:'Three'} }\" selected=\"%{ navigation }\"/>\n           </div>\n        </body>\n      </html>\n    </def>   \n    \nUsing a tag:\n\n    <taglib src=\"taglibfile\" />\n    \n    <page title=\"Welcome\" navigation=\"three\" class=\"welcome\">\n        <p>Some Content</p>\n    </page>\n    \n## Tag Libraries\n\nA file containing tag definitions can be used to selectively include tags for each page.\n\n    <taglib src=\"relative/path\" />\n    \nAn included taglib can also use tags in taglibs it in turn includes.  These tags are per default \nnot included for use outside this taglib.  You can specify for them to be included/exported wherever \nthis taglib is included.\n\n    <taglib src=\"relative/path\" include=\"true\" />\n    \n(To make this the default behaviour, or for backward compatibility, pass an option of `{ includeAllTaglibs: true }` when rendering.)\n\nJust like you cannot (re)define a tag with the same name twice in the same dryml file, you cannot redefine an explicitly included/exported tag.\n    \n## Locals, Attributes\n\n### Locals\n\nLocals passed to render function will be available as local variables in this file, \nand also as an object on the `locals` variable as an object, for if you are not sure \nwhether the variable will be defined in locals passed to the view.\n\n### Attributes\n\nAttributes are treated similarly and will be available both as local variables, and as an\n`attributes` variable.  You can also pass in attributes directly from an object. These\nwould override individual attributes specified on the tag, e.g. if `aAttrs.href == 'about:blank'`\n\n    <a attrs=\"%{ aAttrs }\" href=\"#\">Blank</a>\n    \nresults in:\n  \n    <a href=\"about:blank\">Blank</a>\n    \nThis is useful if you have many attributes to pass to a tag, particularly defined tags.\n\nAttributes can also be passed by enclosing contents in an attr tag within, e.g.\n\n    <a href=\"#\">\n      <attr:title>About this page</attr:title>\n      This Page\n    </a>\n\nThis is also more useful with defined tags, where you may be outputting the contents to a block in layout, e.g.\n\n    <page>\n      <attr:footer>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      <attr:footer>\n      <p>Body text</p>\n    </page>\n\nresulting in:\n\n    <html>\n      <body>\n        <p>Body text</p>\n        <hr/>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      </body>\n    </html>\n    \n## Important Notes\n\nDRYML templates need to be valid XML/XHTML, which means:\n\n   - Non-HTML tag content, such as within script/style/etc., must be enclosed in a CDATA tag. \n   \nExample:\n    \n    <script>\n        <![CDATA[\n            $('body').append('<a href=\"/\">Back</a>');\n        ]]>\n    </script>\n    \n   - Attributes must be escaped where appropriate. \n   \nExample:\n    \n    <a href=\"javascript:$('body').append('&lt;a href=\"/\"&gt;Back&lt;/a&lt;');\">Text</a>\n\n\nThis applies only to 'hardcoded' content/values in the DRYML templates and does *not* apply to dynamically generated content.\n\n## License \n\n(Hobo for Rails)\n\nCopyright (c) 2008 Tom Locke\n\n(The MIT License)\n\nCopyright (c) 2011 Pieter Raubenheimer <pieter@wavana.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n","maintainers":[{"name":"jupiter","email":"pieter@wavana.com"}],"directories":{}},"0.4.6":{"name":"dryml","description":"DRYML for Node","version":"0.4.6","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.6.0"},"dependencies":{"strutil":">= 0.1.0","node-xml":"https://github.com/downloads/jupiter/node-dryml/node-xml-1.0.1.tgz","underscore":">= 1.1.0","entities":"0.1.1"},"devDependencies":{"vows":">= 0.5.6"},"scripts":{"test":"echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"_npmUser":{"name":"jupiter","email":"pieter@wavana.com"},"_id":"dryml@0.4.6","optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0-2","_nodeVersion":"v0.6.8","_defaultsLoaded":true,"dist":{"shasum":"91437d13487269feb53b40653a863c711bc6c8f5","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.4.6.tgz","integrity":"sha512-Iu4vVph5wJLBSooRbEfYJCYURpUssZQfex/rB9yPgPvTWh5vA1h2CoUku0ecbifSM0lNYhR/7+7p+6KLefGMhQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFl2AxliintGUZFeN6VLbVRH1cmiUXacRRfG13o8EwhbAiAkSUxj/lWCnYMS9g+RDiyulwPa6EqYVFYjzPG+5Oy6kA=="}]},"readme":"# DRYML - a template engine ![Project status](https://secure.travis-ci.org/jupiter/node-dryml.png?branch=master)\n\nA template engine for Node and Express that is compatible with EJS <https://github.com/visionmedia/ejs> yet has the power and view refactoring savvy of DRYML. \n\nDRYML as a template language was originally developed by Tom Locke for the Rails template engine as part of the web app builder, Hobo. See <http://hobocentral.net/manual/chapters/3_dryml.html> and <http://cookbook.hobocentral.net/manual/dryml-guide>.  \n\n## Installation\n\n    $ npm install dryml\n    \nRun tests:\n\n    $ npm test dryml\n\n## Usage Example\n\nFrom String:\n\n    require('dryml');\n\n    dryml.render(str, options, function(err, buffer){\n      console.log(buffer.str);\n    });\n    \nFor Express:\n\n    app.get('/', function(req, res){\n    \tdryml.renderView('index', options, res);\n    });\n    \nIt is currently asynchronous, so does not work as standard Express view plugin.\n    \n## Options\n\n  - `locals`          Local variables object\n  - `scope`           Function execution context\n  - `debug`           Output sources and useful string\n  - `trimWhitespace`  Removes all whitespace between tags\n  - `cache`           true/false whether to use cached tags/taglibs, default: true, default can be set on dryml object\n  \n## Tag definition\n\n### Basic Layout (Pre-refactor)\n\nDefining a tag (like a inline partial, to be reused):\n\n    <def tag=\"page\" attrs=\"title\">\n      <html>\n        <head>\n          <title><%= title %></title>\n          <script type=\"text/javascript\">\n              // Etc.\n          </script>\n        </head>\n        <body merge-attrs=\"*\">\n          <div class=\"wrapper\">\n            <tagbody/>\n          </div>\n        </body>\n      </html>\n    </def>\n    \nNote: Tags can be defined with/without prefixes, e.g.  `<myns:def tag=\"img\">` is called by using `<myns:img>` is called, and `<def tag=\"image\">` is called by using `<image>` (standard HTML tag names not allowed)\n    \nUsing a tag:\n    \n    <page title=\"Welcome\" class=\"welcome\">\n      <h1>Welcome</h1>\n      <div class=\"content\">\n        <p>Some Content</p>\n      </div>\n      <div class=\"navigation\">\n        <ul>\n          <li><a href=\"/one\">One</a></li>\n          <li><a href=\"/two\">Two</a></li>\n          <li class=\"selected\"><a href=\"/three\">Three</li>\n        </ul>\n      </div>\n    </page>\n    \nOutput:\n\n    <html>\n      <head>\n        <title>Welcome</title>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>            \n      </head>\n      <body class=\"welcome\">\n        <div class=\"wrapper\">\n          <h1>Welcome</h1>\n          <div class=\"content\">\n            <p>Some Content</p>\n          </div>\n          <div class=\"navigation\">\n            <ul>\n              <li><a href=\"/one\">One</a></li>\n              <li><a href=\"/two\">Two</a></li>\n              <li class=\"selected\"><a href=\"/three\">Three</li>\n            </ul>\n          </div>\n        </div>\n      </body>\n    </html>    \n    \n### After Refactor (Important)\n\nDefining multiple tags (in separate taglib file):\n\n    <def tag=\"navigation\" attrs=\"options,selected\">\n      <ul>\n        <% for (var key in options) { %>\n            <li class=\"%{ (key == selected) ? 'selected' : '' }\"><a href=\"#{ '/' + key }\"><%= options[key] %></a></li>\n        <% } %>\n        <tagbody/>\n      </ul>\n    </def>\n\n    <def tag=\"page\" attrs=\"title,navigation\">\n      <html>\n        <head>\n          <title><%= title %></title>\n        </head>\n        <body merge-attrs=\"*\">\n           <h1><%= title %></h1>\n           <div class=\"content\">\n            <tagbody />\n           </div>\n           <div class=\"navigation\">\n            <navigation options=\"#{ {one:'One', two:'Two', three:'Three'} }\" selected=\"%{ navigation }\"/>\n           </div>\n        </body>\n      </html>\n    </def>   \n    \nUsing a tag:\n\n    <taglib src=\"taglibfile\" />\n    \n    <page title=\"Welcome\" navigation=\"three\" class=\"welcome\">\n        <p>Some Content</p>\n    </page>\n    \n## Tag Libraries\n\nA file containing tag definitions can be used to selectively include tags for each page.\n\n    <taglib src=\"relative/path\" />\n    \nAn included taglib can also use tags in taglibs it in turn includes.  These tags are per default \nnot included for use outside this taglib.  You can specify for them to be included/exported wherever \nthis taglib is included.\n\n    <taglib src=\"relative/path\" include=\"true\" />\n    \n(To make this the default behaviour, or for backward compatibility, pass an option of `{ includeAllTaglibs: true }` when rendering.)\n\nJust like you cannot (re)define a tag with the same name twice in the same dryml file, you cannot redefine an explicitly included/exported tag.\n    \n## Locals, Attributes\n\n### Locals\n\nLocals passed to render function will be available as local variables in this file, \nand also as an object on the `locals` variable as an object, for if you are not sure \nwhether the variable will be defined in locals passed to the view.\n\n### Attributes\n\nAttributes are treated similarly and will be available both as local variables, and as an\n`attributes` variable.  You can also pass in attributes directly from an object. These\nwould override individual attributes specified on the tag, e.g. if `aAttrs.href == 'about:blank'`\n\n    <a attrs=\"%{ aAttrs }\" href=\"#\">Blank</a>\n    \nresults in:\n  \n    <a href=\"about:blank\">Blank</a>\n    \nThis is useful if you have many attributes to pass to a tag, particularly defined tags.\n\nAttributes can also be passed by enclosing contents in an attr tag within, e.g.\n\n    <a href=\"#\">\n      <attr:title>About this page</attr:title>\n      This Page\n    </a>\n\nThis is also more useful with defined tags, where you may be outputting the contents to a block in layout, e.g.\n\n    <page>\n      <attr:footer>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      <attr:footer>\n      <p>Body text</p>\n    </page>\n\nresulting in:\n\n    <html>\n      <body>\n        <p>Body text</p>\n        <hr/>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      </body>\n    </html>\n    \n## Important Notes\n\nDRYML templates need to be valid XML/XHTML, which means:\n\n   - Non-HTML tag content, such as within script/style/etc., must be enclosed in a CDATA tag. \n   \nExample:\n    \n    <script>\n        <![CDATA[\n            $('body').append('<a href=\"/\">Back</a>');\n        ]]>\n    </script>\n    \n   - Attributes must be escaped where appropriate. \n   \nExample:\n    \n    <a href=\"javascript:$('body').append('&lt;a href=\"/\"&gt;Back&lt;/a&lt;');\">Text</a>\n\n\nThis applies only to 'hardcoded' content/values in the DRYML templates and does *not* apply to dynamically generated content.\n\n## License \n\n(Hobo for Rails)\n\nCopyright (c) 2008 Tom Locke\n\n(The MIT License)\n\nCopyright (c) 2011 Pieter Raubenheimer <pieter@wavana.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n","maintainers":[{"name":"jupiter","email":"pieter@wavana.com"}],"directories":{}},"0.4.7":{"name":"dryml","description":"DRYML for Node","version":"0.4.7","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.6.0"},"dependencies":{"strutil":">= 0.1.0","node-xml":"https://github.com/downloads/jupiter/node-dryml/node-xml-1.0.1.tgz","underscore":">= 1.1.0","entities":"0.1.1"},"devDependencies":{"vows":">= 0.5.6"},"scripts":{"test":"echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"readme":"# DRYML - a template engine ![Project status](https://secure.travis-ci.org/jupiter/node-dryml.png?branch=master)\n\nA template engine for Node and Express that is compatible with EJS <https://github.com/visionmedia/ejs> yet has the power and view refactoring savvy of DRYML. \n\nDRYML as a template language was originally developed by Tom Locke for the Rails template engine as part of the web app builder, Hobo. See <http://hobocentral.net/manual/chapters/3_dryml.html> and <http://cookbook.hobocentral.net/manual/dryml-guide>.  \n\n## Installation\n\n    $ npm install dryml\n    \nRun tests:\n\n    $ npm test dryml\n\n## Usage Example\n\nFrom String:\n\n    require('dryml');\n\n    dryml.render(str, options, function(err, buffer){\n      console.log(buffer.str);\n    });\n    \nFor Express:\n\n    app.get('/', function(req, res){\n    \tdryml.renderView('index', options, res);\n    });\n    \nIt is currently asynchronous, so does not work as standard Express view plugin.\n    \n## Options\n\n  - `locals`          Local variables object\n  - `scope`           Function execution context\n  - `debug`           Output sources and useful string\n  - `trimWhitespace`  Removes all whitespace between tags\n  - `cache`           true/false whether to use cached tags/taglibs, default: true, default can be set on dryml object\n  \n## Tag definition\n\n### Basic Layout (Pre-refactor)\n\nDefining a tag (like a inline partial, to be reused):\n\n    <def tag=\"page\" attrs=\"title\">\n      <html>\n        <head>\n          <title><%= title %></title>\n          <script type=\"text/javascript\">\n              // Etc.\n          </script>\n        </head>\n        <body merge-attrs=\"*\">\n          <div class=\"wrapper\">\n            <tagbody/>\n          </div>\n        </body>\n      </html>\n    </def>\n    \nNote: Tags can be defined with/without prefixes, e.g.  `<myns:def tag=\"img\">` is called by using `<myns:img>` is called, and `<def tag=\"image\">` is called by using `<image>` (standard HTML tag names not allowed)\n    \nUsing a tag:\n    \n    <page title=\"Welcome\" class=\"welcome\">\n      <h1>Welcome</h1>\n      <div class=\"content\">\n        <p>Some Content</p>\n      </div>\n      <div class=\"navigation\">\n        <ul>\n          <li><a href=\"/one\">One</a></li>\n          <li><a href=\"/two\">Two</a></li>\n          <li class=\"selected\"><a href=\"/three\">Three</li>\n        </ul>\n      </div>\n    </page>\n    \nOutput:\n\n    <html>\n      <head>\n        <title>Welcome</title>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>            \n      </head>\n      <body class=\"welcome\">\n        <div class=\"wrapper\">\n          <h1>Welcome</h1>\n          <div class=\"content\">\n            <p>Some Content</p>\n          </div>\n          <div class=\"navigation\">\n            <ul>\n              <li><a href=\"/one\">One</a></li>\n              <li><a href=\"/two\">Two</a></li>\n              <li class=\"selected\"><a href=\"/three\">Three</li>\n            </ul>\n          </div>\n        </div>\n      </body>\n    </html>    \n    \n### After Refactor (Important)\n\nDefining multiple tags (in separate taglib file):\n\n    <def tag=\"navigation\" attrs=\"options,selected\">\n      <ul>\n        <% for (var key in options) { %>\n            <li class=\"%{ (key == selected) ? 'selected' : '' }\"><a href=\"#{ '/' + key }\"><%= options[key] %></a></li>\n        <% } %>\n        <tagbody/>\n      </ul>\n    </def>\n\n    <def tag=\"page\" attrs=\"title,navigation\">\n      <html>\n        <head>\n          <title><%= title %></title>\n        </head>\n        <body merge-attrs=\"*\">\n           <h1><%= title %></h1>\n           <div class=\"content\">\n            <tagbody />\n           </div>\n           <div class=\"navigation\">\n            <navigation options=\"#{ {one:'One', two:'Two', three:'Three'} }\" selected=\"%{ navigation }\"/>\n           </div>\n        </body>\n      </html>\n    </def>   \n    \nUsing a tag:\n\n    <taglib src=\"taglibfile\" />\n    \n    <page title=\"Welcome\" navigation=\"three\" class=\"welcome\">\n        <p>Some Content</p>\n    </page>\n    \n## Tag Libraries\n\nA file containing tag definitions can be used to selectively include tags for each page.\n\n    <taglib src=\"relative/path\" />\n    \nAn included taglib can also use tags in taglibs it in turn includes.  These tags are per default \nnot included for use outside this taglib.  You can specify for them to be included/exported wherever \nthis taglib is included.\n\n    <taglib src=\"relative/path\" include=\"true\" />\n    \n(To make this the default behaviour, or for backward compatibility, pass an option of `{ includeAllTaglibs: true }` when rendering.)\n\nJust like you cannot (re)define a tag with the same name twice in the same dryml file, you cannot redefine an explicitly included/exported tag.\n    \n## Locals, Attributes\n\n### Locals\n\nLocals passed to render function will be available as local variables in this file, \nand also as an object on the `locals` variable as an object, for if you are not sure \nwhether the variable will be defined in locals passed to the view.\n\n### Attributes\n\nAttributes are treated similarly and will be available both as local variables, and as an\n`attributes` variable.  You can also pass in attributes directly from an object. These\nwould override individual attributes specified on the tag, e.g. if `aAttrs.href == 'about:blank'`\n\n    <a attrs=\"%{ aAttrs }\" href=\"#\">Blank</a>\n    \nresults in:\n  \n    <a href=\"about:blank\">Blank</a>\n    \nThis is useful if you have many attributes to pass to a tag, particularly defined tags.\n\nAttributes can also be passed by enclosing contents in an attr tag within, e.g.\n\n    <a href=\"#\">\n      <attr:title>About this page</attr:title>\n      This Page\n    </a>\n\nThis is also more useful with defined tags, where you may be outputting the contents to a block in layout, e.g.\n\n    <page>\n      <attr:footer>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      <attr:footer>\n      <p>Body text</p>\n    </page>\n\nresulting in:\n\n    <html>\n      <body>\n        <p>Body text</p>\n        <hr/>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      </body>\n    </html>\n    \n## Important Notes\n\nDRYML templates need to be valid XML/XHTML, which means:\n\n   - Non-HTML tag content, such as within script/style/etc., must be enclosed in a CDATA tag. \n   \nExample:\n    \n    <script>\n        <![CDATA[\n            $('body').append('<a href=\"/\">Back</a>');\n        ]]>\n    </script>\n    \n   - Attributes must be escaped where appropriate. \n   \nExample:\n    \n    <a href=\"javascript:$('body').append('&lt;a href=\"/\"&gt;Back&lt;/a&lt;');\">Text</a>\n\n\nThis applies only to 'hardcoded' content/values in the DRYML templates and does *not* apply to dynamically generated content.\n\n## License \n\n(Hobo for Rails)\n\nCopyright (c) 2008 Tom Locke\n\n(The MIT License)\n\nCopyright (c) 2011 Pieter Raubenheimer <pieter@wavana.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n","_id":"dryml@0.4.7","dist":{"shasum":"47431121199e58d6174eb15fd81fb6e6682dd5f4","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.4.7.tgz","integrity":"sha512-XyxxDkL2hUMg2gY4hqAh7/RaBzt0ZoiyMVpRyJaLWU3FUG9vxQNICcN5H70iGFjLoBt/68JyqaLB8ehWLIrUZw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFah32Yk971yX/tFDPjKZ8/7FbQdbntYDEmtVDIENvnmAiEAjDroMXTPsViie1uz6k+m0ovcAvCM2aa7rY23iVEB0ho="}]},"_npmVersion":"1.1.59","_npmUser":{"name":"jupiter","email":"pieter@wavana.com"},"maintainers":[{"name":"jupiter","email":"pieter@wavana.com"}],"directories":{}},"0.4.8":{"name":"dryml","description":"DRYML for Node","version":"0.4.8","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.6.0"},"dependencies":{"strutil":">= 0.1.0","node-xml":"https://github.com/downloads/jupiter/node-dryml/node-xml-1.0.1.tgz","underscore":">= 1.1.0","entities":"0.1.1"},"devDependencies":{"vows":">= 0.5.6"},"scripts":{"test":"echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"readme":"# DRYML - a template engine ![Project status](https://secure.travis-ci.org/jupiter/node-dryml.png?branch=master)\n\nA template engine for Node and Express that is compatible with EJS <https://github.com/visionmedia/ejs> yet has the power and view refactoring savvy of DRYML. \n\nDRYML as a template language was originally developed by Tom Locke for the Rails template engine as part of the web app builder, Hobo. See <http://hobocentral.net/manual/chapters/3_dryml.html> and <http://cookbook.hobocentral.net/manual/dryml-guide>.  \n\n## Installation\n\n    $ npm install dryml\n    \nRun tests:\n\n    $ npm test dryml\n\n## Usage Example\n\nFrom String:\n\n    require('dryml');\n\n    dryml.render(str, options, function(err, buffer){\n      console.log(buffer.str);\n    });\n    \nFor Express:\n\n    app.get('/', function(req, res){\n    \tdryml.renderView('index', options, res);\n    });\n    \nIt is currently asynchronous, so does not work as standard Express view plugin.\n    \n## Options\n\n  - `locals`          Local variables object\n  - `scope`           Function execution context\n  - `debug`           Output sources and useful string\n  - `trimWhitespace`  Removes all whitespace between tags\n  - `cache`           true/false whether to use cached tags/taglibs, default: true, default can be set on dryml object\n  \n## Tag definition\n\n### Basic Layout (Pre-refactor)\n\nDefining a tag (like a inline partial, to be reused):\n\n    <def tag=\"page\" attrs=\"title\">\n      <html>\n        <head>\n          <title><%= title %></title>\n          <script type=\"text/javascript\">\n              // Etc.\n          </script>\n        </head>\n        <body merge-attrs=\"*\">\n          <div class=\"wrapper\">\n            <tagbody/>\n          </div>\n        </body>\n      </html>\n    </def>\n    \nNote: Tags can be defined with/without prefixes, e.g.  `<myns:def tag=\"img\">` is called by using `<myns:img>` is called, and `<def tag=\"image\">` is called by using `<image>` (standard HTML tag names not allowed)\n    \nUsing a tag:\n    \n    <page title=\"Welcome\" class=\"welcome\">\n      <h1>Welcome</h1>\n      <div class=\"content\">\n        <p>Some Content</p>\n      </div>\n      <div class=\"navigation\">\n        <ul>\n          <li><a href=\"/one\">One</a></li>\n          <li><a href=\"/two\">Two</a></li>\n          <li class=\"selected\"><a href=\"/three\">Three</li>\n        </ul>\n      </div>\n    </page>\n    \nOutput:\n\n    <html>\n      <head>\n        <title>Welcome</title>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>            \n      </head>\n      <body class=\"welcome\">\n        <div class=\"wrapper\">\n          <h1>Welcome</h1>\n          <div class=\"content\">\n            <p>Some Content</p>\n          </div>\n          <div class=\"navigation\">\n            <ul>\n              <li><a href=\"/one\">One</a></li>\n              <li><a href=\"/two\">Two</a></li>\n              <li class=\"selected\"><a href=\"/three\">Three</li>\n            </ul>\n          </div>\n        </div>\n      </body>\n    </html>    \n    \n### After Refactor (Important)\n\nDefining multiple tags (in separate taglib file):\n\n    <def tag=\"navigation\" attrs=\"options,selected\">\n      <ul>\n        <% for (var key in options) { %>\n            <li class=\"%{ (key == selected) ? 'selected' : '' }\"><a href=\"#{ '/' + key }\"><%= options[key] %></a></li>\n        <% } %>\n        <tagbody/>\n      </ul>\n    </def>\n\n    <def tag=\"page\" attrs=\"title,navigation\">\n      <html>\n        <head>\n          <title><%= title %></title>\n        </head>\n        <body merge-attrs=\"*\">\n           <h1><%= title %></h1>\n           <div class=\"content\">\n            <tagbody />\n           </div>\n           <div class=\"navigation\">\n            <navigation options=\"#{ {one:'One', two:'Two', three:'Three'} }\" selected=\"%{ navigation }\"/>\n           </div>\n        </body>\n      </html>\n    </def>   \n    \nUsing a tag:\n\n    <taglib src=\"taglibfile\" />\n    \n    <page title=\"Welcome\" navigation=\"three\" class=\"welcome\">\n        <p>Some Content</p>\n    </page>\n    \n## Tag Libraries\n\nA file containing tag definitions can be used to selectively include tags for each page.\n\n    <taglib src=\"relative/path\" />\n    \nAn included taglib can also use tags in taglibs it in turn includes.  These tags are per default \nnot included for use outside this taglib.  You can specify for them to be included/exported wherever \nthis taglib is included.\n\n    <taglib src=\"relative/path\" include=\"true\" />\n    \n(To make this the default behaviour, or for backward compatibility, pass an option of `{ includeAllTaglibs: true }` when rendering.)\n\nJust like you cannot (re)define a tag with the same name twice in the same dryml file, you cannot redefine an explicitly included/exported tag.\n    \n## Locals, Attributes\n\n### Locals\n\nLocals passed to render function will be available as local variables in this file, \nand also as an object on the `locals` variable as an object, for if you are not sure \nwhether the variable will be defined in locals passed to the view.\n\n### Attributes\n\nAttributes are treated similarly and will be available both as local variables, and as an\n`attributes` variable.  You can also pass in attributes directly from an object. These\nwould override individual attributes specified on the tag, e.g. if `aAttrs.href == 'about:blank'`\n\n    <a attrs=\"%{ aAttrs }\" href=\"#\">Blank</a>\n    \nresults in:\n  \n    <a href=\"about:blank\">Blank</a>\n    \nThis is useful if you have many attributes to pass to a tag, particularly defined tags.\n\nAttributes can also be passed by enclosing contents in an attr tag within, e.g.\n\n    <a href=\"#\">\n      <attr:title>About this page</attr:title>\n      This Page\n    </a>\n\nThis is also more useful with defined tags, where you may be outputting the contents to a block in layout, e.g.\n\n    <page>\n      <attr:footer>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      <attr:footer>\n      <p>Body text</p>\n    </page>\n\nresulting in:\n\n    <html>\n      <body>\n        <p>Body text</p>\n        <hr/>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      </body>\n    </html>\n    \n## Important Notes\n\nDRYML templates need to be valid XML/XHTML, which means:\n\n   - Non-HTML tag content, such as within script/style/etc., must be enclosed in a CDATA tag. \n   \nExample:\n    \n    <script>\n        <![CDATA[\n            $('body').append('<a href=\"/\">Back</a>');\n        ]]>\n    </script>\n    \n   - Attributes must be escaped where appropriate. \n   \nExample:\n    \n    <a href=\"javascript:$('body').append('&lt;a href=\"/\"&gt;Back&lt;/a&lt;');\">Text</a>\n\n\nThis applies only to 'hardcoded' content/values in the DRYML templates and does *not* apply to dynamically generated content.\n\n## License \n\n(Hobo for Rails)\n\nCopyright (c) 2008 Tom Locke\n\n(The MIT License)\n\nCopyright (c) 2011 Pieter Raubenheimer <pieter@wavana.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n","_id":"dryml@0.4.8","dist":{"shasum":"82afc4fda6dc6936950cdff72d1782cfe56c83cb","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.4.8.tgz","integrity":"sha512-pWstLQ67Z69vxQsrTxORpygYLq2bCNLnSZkhrJXHgfI6C3QGOZshQuLFmCa5OVt9HzWSRIAVYFUqUC9sBwM8uA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkUuAiJr61kjIunyg8ST71aiIOcHFp1ECEA1PhTgE7YgIhAPIG6D3+Dlv1BASpCcX0Y/+hBRUmToqH+PieqD/wpqMQ"}]},"_npmVersion":"1.1.59","_npmUser":{"name":"jupiter","email":"pieter@wavana.com"},"maintainers":[{"name":"jupiter","email":"pieter@wavana.com"}],"directories":{}},"0.4.9":{"name":"dryml","description":"DRYML for Node","version":"0.4.9","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.6.0"},"dependencies":{"strutil":">= 0.1.0","node-xml":"https://github.com/downloads/jupiter/node-dryml/node-xml-1.0.1.tgz","underscore":">= 1.1.0","entities":"0.1.1"},"devDependencies":{"vows":">= 0.5.6"},"scripts":{"test":"echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"readme":"# DRYML - a template engine ![Project status](https://secure.travis-ci.org/jupiter/node-dryml.png?branch=master)\n\nA template engine for Node and Express that is compatible with EJS <https://github.com/visionmedia/ejs> yet has the power and view refactoring savvy of DRYML. \n\nDRYML as a template language was originally developed by Tom Locke for the Rails template engine as part of the web app builder, Hobo. See <http://hobocentral.net/manual/chapters/3_dryml.html> and <http://cookbook.hobocentral.net/manual/dryml-guide>.  \n\n## Installation\n\n    $ npm install dryml\n    \nRun tests:\n\n    $ npm test dryml\n\n## Usage Example\n\nFrom String:\n\n    require('dryml');\n\n    dryml.render(str, options, function(err, buffer){\n      console.log(buffer.str);\n    });\n    \nFor Express:\n\n    app.get('/', function(req, res){\n    \tdryml.renderView('index', options, res);\n    });\n    \nIt is currently asynchronous, so does not work as standard Express view plugin.\n    \n## Options\n\n  - `locals`          Local variables object\n  - `scope`           Function execution context\n  - `debug`           Output sources and useful string\n  - `trimWhitespace`  Removes all whitespace between tags\n  - `cache`           true/false whether to use cached tags/taglibs, default: true, default can be set on dryml object\n  \n## Tag definition\n\n### Basic Layout (Pre-refactor)\n\nDefining a tag (like a inline partial, to be reused):\n\n    <def tag=\"page\" attrs=\"title\">\n      <html>\n        <head>\n          <title><%= title %></title>\n          <script type=\"text/javascript\">\n              // Etc.\n          </script>\n        </head>\n        <body merge-attrs=\"*\">\n          <div class=\"wrapper\">\n            <tagbody/>\n          </div>\n        </body>\n      </html>\n    </def>\n    \nNote: Tags can be defined with/without prefixes, e.g.  `<myns:def tag=\"img\">` is called by using `<myns:img>` is called, and `<def tag=\"image\">` is called by using `<image>` (standard HTML tag names not allowed)\n    \nUsing a tag:\n    \n    <page title=\"Welcome\" class=\"welcome\">\n      <h1>Welcome</h1>\n      <div class=\"content\">\n        <p>Some Content</p>\n      </div>\n      <div class=\"navigation\">\n        <ul>\n          <li><a href=\"/one\">One</a></li>\n          <li><a href=\"/two\">Two</a></li>\n          <li class=\"selected\"><a href=\"/three\">Three</li>\n        </ul>\n      </div>\n    </page>\n    \nOutput:\n\n    <html>\n      <head>\n        <title>Welcome</title>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>            \n      </head>\n      <body class=\"welcome\">\n        <div class=\"wrapper\">\n          <h1>Welcome</h1>\n          <div class=\"content\">\n            <p>Some Content</p>\n          </div>\n          <div class=\"navigation\">\n            <ul>\n              <li><a href=\"/one\">One</a></li>\n              <li><a href=\"/two\">Two</a></li>\n              <li class=\"selected\"><a href=\"/three\">Three</li>\n            </ul>\n          </div>\n        </div>\n      </body>\n    </html>    \n    \n### After Refactor (Important)\n\nDefining multiple tags (in separate taglib file):\n\n    <def tag=\"navigation\" attrs=\"options,selected\">\n      <ul>\n        <% for (var key in options) { %>\n            <li class=\"%{ (key == selected) ? 'selected' : '' }\"><a href=\"#{ '/' + key }\"><%= options[key] %></a></li>\n        <% } %>\n        <tagbody/>\n      </ul>\n    </def>\n\n    <def tag=\"page\" attrs=\"title,navigation\">\n      <html>\n        <head>\n          <title><%= title %></title>\n        </head>\n        <body merge-attrs=\"*\">\n           <h1><%= title %></h1>\n           <div class=\"content\">\n            <tagbody />\n           </div>\n           <div class=\"navigation\">\n            <navigation options=\"#{ {one:'One', two:'Two', three:'Three'} }\" selected=\"%{ navigation }\"/>\n           </div>\n        </body>\n      </html>\n    </def>   \n    \nUsing a tag:\n\n    <taglib src=\"taglibfile\" />\n    \n    <page title=\"Welcome\" navigation=\"three\" class=\"welcome\">\n        <p>Some Content</p>\n    </page>\n    \n## Tag Libraries\n\nA file containing tag definitions can be used to selectively include tags for each page.\n\n    <taglib src=\"relative/path\" />\n    \nAn included taglib can also use tags in taglibs it in turn includes.  These tags are per default \nnot included for use outside this taglib.  You can specify for them to be included/exported wherever \nthis taglib is included.\n\n    <taglib src=\"relative/path\" include=\"true\" />\n    \n(To make this the default behaviour, or for backward compatibility, pass an option of `{ includeAllTaglibs: true }` when rendering.)\n\nJust like you cannot (re)define a tag with the same name twice in the same dryml file, you cannot redefine an explicitly included/exported tag.\n    \n## Locals, Attributes\n\n### Locals\n\nLocals passed to render function will be available as local variables in this file, \nand also as an object on the `locals` variable as an object, for if you are not sure \nwhether the variable will be defined in locals passed to the view.\n\n### Attributes\n\nAttributes are treated similarly and will be available both as local variables, and as an\n`attributes` variable.  You can also pass in attributes directly from an object. These\nwould override individual attributes specified on the tag, e.g. if `aAttrs.href == 'about:blank'`\n\n    <a attrs=\"%{ aAttrs }\" href=\"#\">Blank</a>\n    \nresults in:\n  \n    <a href=\"about:blank\">Blank</a>\n    \nThis is useful if you have many attributes to pass to a tag, particularly defined tags.\n\nAttributes can also be passed by enclosing contents in an attr tag within, e.g.\n\n    <a href=\"#\">\n      <attr:title>About this page</attr:title>\n      This Page\n    </a>\n\nThis is also more useful with defined tags, where you may be outputting the contents to a block in layout, e.g.\n\n    <page>\n      <attr:footer>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      <attr:footer>\n      <p>Body text</p>\n    </page>\n\nresulting in:\n\n    <html>\n      <body>\n        <p>Body text</p>\n        <hr/>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      </body>\n    </html>\n    \n## Important Notes\n\nDRYML templates need to be valid XML/XHTML, which means:\n\n   - Non-HTML tag content, such as within script/style/etc., must be enclosed in a CDATA tag. \n   \nExample:\n    \n    <script>\n        <![CDATA[\n            $('body').append('<a href=\"/\">Back</a>');\n        ]]>\n    </script>\n    \n   - Attributes must be escaped where appropriate. \n   \nExample:\n    \n    <a href=\"javascript:$('body').append('&lt;a href=\"/\"&gt;Back&lt;/a&lt;');\">Text</a>\n\n\nThis applies only to 'hardcoded' content/values in the DRYML templates and does *not* apply to dynamically generated content.\n\n## License \n\n(Hobo for Rails)\n\nCopyright (c) 2008 Tom Locke\n\n(The MIT License)\n\nCopyright (c) 2011 Pieter Raubenheimer <pieter@wavana.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n","_id":"dryml@0.4.9","dist":{"shasum":"3ec45523c10e1389c9090a4a35b6c90d873a42d7","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.4.9.tgz","integrity":"sha512-esLKCAdZgtEjka3gfK7miu934ZLPjMuLBUl0po//fIyPfpNal7RBTZl5nNQUhANDXyh2fhXPCFzf3QUY6NuS8w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDhixcOwlY/xADMKoUkgd4Wfr6dIl/y4fDmkcK4rKOTTQIhAOm7HS1SAw/ySHehBCqpFjsdeq/SD9quqm/02/jWGqdZ"}]},"_npmVersion":"1.1.59","_npmUser":{"name":"jupiter","email":"pieter@wavana.com"},"maintainers":[{"name":"jupiter","email":"pieter@wavana.com"}],"directories":{}},"0.4.10":{"name":"dryml","description":"DRYML for Node","version":"0.4.10","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.6.0"},"dependencies":{"node-xml":"https://github.com/downloads/jupiter/node-dryml/node-xml-1.0.1.tgz","underscore":">= 1.1.0","entities":"0.1.1"},"devDependencies":{"vows":">= 0.5.6"},"scripts":{"test":"echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"readme":"# DRYML - a template engine ![Project status](https://secure.travis-ci.org/jupiter/node-dryml.png?branch=master)\n\nA template engine for Node and Express that is compatible with EJS <https://github.com/visionmedia/ejs> yet has the power and view refactoring savvy of DRYML. \n\nDRYML as a template language was originally developed by Tom Locke for the Rails template engine as part of the web app builder, Hobo. See <http://hobocentral.net/manual/chapters/3_dryml.html> and <http://cookbook.hobocentral.net/manual/dryml-guide>.  \n\n## Installation\n\n    $ npm install dryml\n    \nRun tests:\n\n    $ npm test dryml\n\n## Usage Example\n\nFrom String:\n\n    require('dryml');\n\n    dryml.render(str, options, function(err, buffer){\n      console.log(buffer.str);\n    });\n    \nFor Express:\n\n    app.get('/', function(req, res){\n    \tdryml.renderView('index', options, res);\n    });\n    \nIt is currently asynchronous, so does not work as standard Express view plugin.\n    \n## Options\n\n  - `locals`          Local variables object\n  - `scope`           Function execution context\n  - `debug`           Output sources and useful string\n  - `trimWhitespace`  Removes all whitespace between tags\n  - `cache`           true/false whether to use cached tags/taglibs, default: true, default can be set on dryml object\n  \n## Tag definition\n\n### Basic Layout (Pre-refactor)\n\nDefining a tag (like a inline partial, to be reused):\n\n    <def tag=\"page\" attrs=\"title\">\n      <html>\n        <head>\n          <title><%= title %></title>\n          <script type=\"text/javascript\">\n              // Etc.\n          </script>\n        </head>\n        <body merge-attrs=\"*\">\n          <div class=\"wrapper\">\n            <tagbody/>\n          </div>\n        </body>\n      </html>\n    </def>\n    \nNote: Tags can be defined with/without prefixes, e.g.  `<myns:def tag=\"img\">` is called by using `<myns:img>` is called, and `<def tag=\"image\">` is called by using `<image>` (standard HTML tag names not allowed)\n    \nUsing a tag:\n    \n    <page title=\"Welcome\" class=\"welcome\">\n      <h1>Welcome</h1>\n      <div class=\"content\">\n        <p>Some Content</p>\n      </div>\n      <div class=\"navigation\">\n        <ul>\n          <li><a href=\"/one\">One</a></li>\n          <li><a href=\"/two\">Two</a></li>\n          <li class=\"selected\"><a href=\"/three\">Three</li>\n        </ul>\n      </div>\n    </page>\n    \nOutput:\n\n    <html>\n      <head>\n        <title>Welcome</title>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>            \n      </head>\n      <body class=\"welcome\">\n        <div class=\"wrapper\">\n          <h1>Welcome</h1>\n          <div class=\"content\">\n            <p>Some Content</p>\n          </div>\n          <div class=\"navigation\">\n            <ul>\n              <li><a href=\"/one\">One</a></li>\n              <li><a href=\"/two\">Two</a></li>\n              <li class=\"selected\"><a href=\"/three\">Three</li>\n            </ul>\n          </div>\n        </div>\n      </body>\n    </html>    \n    \n### After Refactor (Important)\n\nDefining multiple tags (in separate taglib file):\n\n    <def tag=\"navigation\" attrs=\"options,selected\">\n      <ul>\n        <% for (var key in options) { %>\n            <li class=\"%{ (key == selected) ? 'selected' : '' }\"><a href=\"#{ '/' + key }\"><%= options[key] %></a></li>\n        <% } %>\n        <tagbody/>\n      </ul>\n    </def>\n\n    <def tag=\"page\" attrs=\"title,navigation\">\n      <html>\n        <head>\n          <title><%= title %></title>\n        </head>\n        <body merge-attrs=\"*\">\n           <h1><%= title %></h1>\n           <div class=\"content\">\n            <tagbody />\n           </div>\n           <div class=\"navigation\">\n            <navigation options=\"#{ {one:'One', two:'Two', three:'Three'} }\" selected=\"%{ navigation }\"/>\n           </div>\n        </body>\n      </html>\n    </def>   \n    \nUsing a tag:\n\n    <taglib src=\"taglibfile\" />\n    \n    <page title=\"Welcome\" navigation=\"three\" class=\"welcome\">\n        <p>Some Content</p>\n    </page>\n    \n## Tag Libraries\n\nA file containing tag definitions can be used to selectively include tags for each page.\n\n    <taglib src=\"relative/path\" />\n    \nAn included taglib can also use tags in taglibs it in turn includes.  These tags are per default \nnot included for use outside this taglib.  You can specify for them to be included/exported wherever \nthis taglib is included.\n\n    <taglib src=\"relative/path\" include=\"true\" />\n    \n(To make this the default behaviour, or for backward compatibility, pass an option of `{ includeAllTaglibs: true }` when rendering.)\n\nJust like you cannot (re)define a tag with the same name twice in the same dryml file, you cannot redefine an explicitly included/exported tag.\n    \n## Locals, Attributes\n\n### Locals\n\nLocals passed to render function will be available as local variables in this file, \nand also as an object on the `locals` variable as an object, for if you are not sure \nwhether the variable will be defined in locals passed to the view.\n\n### Attributes\n\nAttributes are treated similarly and will be available both as local variables, and as an\n`attributes` variable.  You can also pass in attributes directly from an object. These\nwould override individual attributes specified on the tag, e.g. if `aAttrs.href == 'about:blank'`\n\n    <a attrs=\"%{ aAttrs }\" href=\"#\">Blank</a>\n    \nresults in:\n  \n    <a href=\"about:blank\">Blank</a>\n    \nThis is useful if you have many attributes to pass to a tag, particularly defined tags.\n\nAttributes can also be passed by enclosing contents in an attr tag within, e.g.\n\n    <a href=\"#\">\n      <attr:title>About this page</attr:title>\n      This Page\n    </a>\n\nThis is also more useful with defined tags, where you may be outputting the contents to a block in layout, e.g.\n\n    <page>\n      <attr:footer>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      <attr:footer>\n      <p>Body text</p>\n    </page>\n\nresulting in:\n\n    <html>\n      <body>\n        <p>Body text</p>\n        <hr/>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      </body>\n    </html>\n    \n## Important Notes\n\nDRYML templates need to be valid XML/XHTML, which means:\n\n   - Non-HTML tag content, such as within script/style/etc., must be enclosed in a CDATA tag. \n   \nExample:\n    \n    <script>\n        <![CDATA[\n            $('body').append('<a href=\"/\">Back</a>');\n        ]]>\n    </script>\n    \n   - Attributes must be escaped where appropriate. \n   \nExample:\n    \n    <a href=\"javascript:$('body').append('&lt;a href=\"/\"&gt;Back&lt;/a&lt;');\">Text</a>\n\n\nThis applies only to 'hardcoded' content/values in the DRYML templates and does *not* apply to dynamically generated content.\n\n## License \n\n(Hobo for Rails)\n\nCopyright (c) 2008 Tom Locke\n\n(The MIT License)\n\nCopyright (c) 2011 Pieter Raubenheimer <pieter@wavana.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n","_id":"dryml@0.4.10","dist":{"shasum":"e5cc15100dadee9a4b1ee91d15e2f407453c0f66","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.4.10.tgz","integrity":"sha512-8lzLWaU6s07F+2sMGO5gTYaM912OSKwSGWfD7DjSORqsyeZIH+ET7TtP3pQuoNdYRvyJRBimvhi/HxaqkFwpXw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDFt8ZIKiK+Cth1KgJhbcH7303u/rVVgYzC0K1ZTuTf+AIhANtOy5MqyU5pBCaXQdo4xaJTS7pciFZLoNF6UHNY8W8b"}]},"_npmVersion":"1.1.59","_npmUser":{"name":"jupiter","email":"pieter@wavana.com"},"maintainers":[{"name":"jupiter","email":"pieter@wavana.com"}],"directories":{}},"0.4.11":{"name":"dryml","description":"DRYML for Node","version":"0.4.11","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.6.0"},"dependencies":{"node-xml":"https://github.com/downloads/jupiter/node-dryml/node-xml-1.0.1.tgz","underscore":">= 1.1.0","entities":"0.1.1"},"devDependencies":{"vows":">= 0.5.6"},"scripts":{"test":"echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"readme":"# DRYML - a template engine ![Project status](https://secure.travis-ci.org/jupiter/node-dryml.png?branch=master)\n\nA template engine for Node and Express that is compatible with EJS <https://github.com/visionmedia/ejs> yet has the power and view refactoring savvy of DRYML. \n\nDRYML as a template language was originally developed by Tom Locke for the Rails template engine as part of the web app builder, Hobo. See <http://hobocentral.net/manual/chapters/3_dryml.html> and <http://cookbook.hobocentral.net/manual/dryml-guide>.  \n\n## Installation\n\n    $ npm install dryml\n    \nRun tests:\n\n    $ npm test dryml\n\n## Usage Example\n\nFrom String:\n\n    require('dryml');\n\n    dryml.render(str, options, function(err, buffer){\n      console.log(buffer.str);\n    });\n    \nFor Express:\n\n    app.get('/', function(req, res){\n    \tdryml.renderView('index', options, res);\n    });\n    \nIt is currently asynchronous, so does not work as standard Express view plugin.\n    \n## Options\n\n  - `locals`          Local variables object\n  - `scope`           Function execution context\n  - `debug`           Output sources and useful string\n  - `trimWhitespace`  Removes all whitespace between tags\n  - `cache`           true/false whether to use cached tags/taglibs, default: true, default can be set on dryml object\n  \n## Tag definition\n\n### Basic Layout (Pre-refactor)\n\nDefining a tag (like a inline partial, to be reused):\n\n    <def tag=\"page\" attrs=\"title\">\n      <html>\n        <head>\n          <title><%= title %></title>\n          <script type=\"text/javascript\">\n              // Etc.\n          </script>\n        </head>\n        <body merge-attrs=\"*\">\n          <div class=\"wrapper\">\n            <tagbody/>\n          </div>\n        </body>\n      </html>\n    </def>\n    \nNote: Tags can be defined with/without prefixes, e.g.  `<myns:def tag=\"img\">` is called by using `<myns:img>` is called, and `<def tag=\"image\">` is called by using `<image>` (standard HTML tag names not allowed)\n    \nUsing a tag:\n    \n    <page title=\"Welcome\" class=\"welcome\">\n      <h1>Welcome</h1>\n      <div class=\"content\">\n        <p>Some Content</p>\n      </div>\n      <div class=\"navigation\">\n        <ul>\n          <li><a href=\"/one\">One</a></li>\n          <li><a href=\"/two\">Two</a></li>\n          <li class=\"selected\"><a href=\"/three\">Three</li>\n        </ul>\n      </div>\n    </page>\n    \nOutput:\n\n    <html>\n      <head>\n        <title>Welcome</title>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>            \n      </head>\n      <body class=\"welcome\">\n        <div class=\"wrapper\">\n          <h1>Welcome</h1>\n          <div class=\"content\">\n            <p>Some Content</p>\n          </div>\n          <div class=\"navigation\">\n            <ul>\n              <li><a href=\"/one\">One</a></li>\n              <li><a href=\"/two\">Two</a></li>\n              <li class=\"selected\"><a href=\"/three\">Three</li>\n            </ul>\n          </div>\n        </div>\n      </body>\n    </html>    \n    \n### After Refactor (Important)\n\nDefining multiple tags (in separate taglib file):\n\n    <def tag=\"navigation\" attrs=\"options,selected\">\n      <ul>\n        <% for (var key in options) { %>\n            <li class=\"%{ (key == selected) ? 'selected' : '' }\"><a href=\"#{ '/' + key }\"><%= options[key] %></a></li>\n        <% } %>\n        <tagbody/>\n      </ul>\n    </def>\n\n    <def tag=\"page\" attrs=\"title,navigation\">\n      <html>\n        <head>\n          <title><%= title %></title>\n        </head>\n        <body merge-attrs=\"*\">\n           <h1><%= title %></h1>\n           <div class=\"content\">\n            <tagbody />\n           </div>\n           <div class=\"navigation\">\n            <navigation options=\"#{ {one:'One', two:'Two', three:'Three'} }\" selected=\"%{ navigation }\"/>\n           </div>\n        </body>\n      </html>\n    </def>   \n    \nUsing a tag:\n\n    <taglib src=\"taglibfile\" />\n    \n    <page title=\"Welcome\" navigation=\"three\" class=\"welcome\">\n        <p>Some Content</p>\n    </page>\n    \n## Tag Libraries\n\nA file containing tag definitions can be used to selectively include tags for each page.\n\n    <taglib src=\"relative/path\" />\n    \nAn included taglib can also use tags in taglibs it in turn includes.  These tags are per default \nnot included for use outside this taglib.  You can specify for them to be included/exported wherever \nthis taglib is included.\n\n    <taglib src=\"relative/path\" include=\"true\" />\n    \n(To make this the default behaviour, or for backward compatibility, pass an option of `{ includeAllTaglibs: true }` when rendering.)\n\nJust like you cannot (re)define a tag with the same name twice in the same dryml file, you cannot redefine an explicitly included/exported tag.\n    \n## Locals, Attributes\n\n### Locals\n\nLocals passed to render function will be available as local variables in this file, \nand also as an object on the `locals` variable as an object, for if you are not sure \nwhether the variable will be defined in locals passed to the view.\n\n### Attributes\n\nAttributes are treated similarly and will be available both as local variables, and as an\n`attributes` variable.  You can also pass in attributes directly from an object. These\nwould override individual attributes specified on the tag, e.g. if `aAttrs.href == 'about:blank'`\n\n    <a attrs=\"%{ aAttrs }\" href=\"#\">Blank</a>\n    \nresults in:\n  \n    <a href=\"about:blank\">Blank</a>\n    \nThis is useful if you have many attributes to pass to a tag, particularly defined tags.\n\nAttributes can also be passed by enclosing contents in an attr tag within, e.g.\n\n    <a href=\"#\">\n      <attr:title>About this page</attr:title>\n      This Page\n    </a>\n\nThis is also more useful with defined tags, where you may be outputting the contents to a block in layout, e.g.\n\n    <page>\n      <attr:footer>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      <attr:footer>\n      <p>Body text</p>\n    </page>\n\nresulting in:\n\n    <html>\n      <body>\n        <p>Body text</p>\n        <hr/>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      </body>\n    </html>\n    \n## Important Notes\n\nDRYML templates need to be valid XML/XHTML, which means:\n\n   - Non-HTML tag content, such as within script/style/etc., must be enclosed in a CDATA tag. \n   \nExample:\n    \n    <script>\n        <![CDATA[\n            $('body').append('<a href=\"/\">Back</a>');\n        ]]>\n    </script>\n    \n   - Attributes must be escaped where appropriate. \n   \nExample:\n    \n    <a href=\"javascript:$('body').append('&lt;a href=\"/\"&gt;Back&lt;/a&lt;');\">Text</a>\n\n\nThis applies only to 'hardcoded' content/values in the DRYML templates and does *not* apply to dynamically generated content.\n\n## License \n\n(Hobo for Rails)\n\nCopyright (c) 2008 Tom Locke\n\n(The MIT License)\n\nCopyright (c) 2011 Pieter Raubenheimer <pieter@wavana.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n","_id":"dryml@0.4.11","dist":{"shasum":"2e681c82f971898d85a491e77ce7a0f6e60ddb7a","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.4.11.tgz","integrity":"sha512-Numj2AudV6r5leXR/722JQTN3CS09YgIQ4BWfbkUpfqvxvikqVFtUZhTp+yJ+tiPhjKEwc06q+dcYtLdB7ltog==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCmogKLPWuK37LULpSAjX4PkFFfK9EIm5rfigDN9WhwkAIhAPfEeHqtLk0qK+4kuLNp69tx11ibV5Q+t5bqOWNmF7pT"}]},"_npmVersion":"1.1.59","_npmUser":{"name":"jupiter","email":"pieter@wavana.com"},"maintainers":[{"name":"jupiter","email":"pieter@wavana.com"}],"directories":{}},"0.4.12":{"name":"dryml","description":"DRYML for Node","version":"0.4.12","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.6.0"},"dependencies":{"node-xml":"https://github.com/downloads/jupiter/node-dryml/node-xml-1.0.1.tgz","underscore":">= 1.1.0","entities":"0.1.1"},"devDependencies":{"vows":">= 0.5.6"},"scripts":{"test":"echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"readme":"# DRYML - a template engine ![Project status](https://secure.travis-ci.org/jupiter/node-dryml.png?branch=master)\n\nA template engine for Node and Express that is compatible with EJS <https://github.com/visionmedia/ejs> yet has the power and view refactoring savvy of DRYML. \n\nDRYML as a template language was originally developed by Tom Locke for the Rails template engine as part of the web app builder, Hobo. See <http://hobocentral.net/manual/chapters/3_dryml.html> and <http://cookbook.hobocentral.net/manual/dryml-guide>.  \n\n## Installation\n\n    $ npm install dryml\n    \nRun tests:\n\n    $ npm test dryml\n\n## Usage Example\n\nFrom String:\n\n    require('dryml');\n\n    dryml.render(str, options, function(err, buffer){\n      console.log(buffer.str);\n    });\n    \nFor Express:\n\n    app.get('/', function(req, res){\n    \tdryml.renderView('index', options, res);\n    });\n    \nIt is currently asynchronous, so does not work as standard Express view plugin.\n    \n## Options\n\n  - `locals`          Local variables object\n  - `scope`           Function execution context\n  - `debug`           Output sources and useful string\n  - `trimWhitespace`  Removes all whitespace between tags\n  - `cache`           true/false whether to use cached tags/taglibs, default: true, default can be set on dryml object\n  \n## Tag definition\n\n### Basic Layout (Pre-refactor)\n\nDefining a tag (like a inline partial, to be reused):\n\n    <def tag=\"page\" attrs=\"title\">\n      <html>\n        <head>\n          <title><%= title %></title>\n          <script type=\"text/javascript\">\n              // Etc.\n          </script>\n        </head>\n        <body merge-attrs=\"*\">\n          <div class=\"wrapper\">\n            <tagbody/>\n          </div>\n        </body>\n      </html>\n    </def>\n    \nNote: Tags can be defined with/without prefixes, e.g.  `<myns:def tag=\"img\">` is called by using `<myns:img>` is called, and `<def tag=\"image\">` is called by using `<image>` (standard HTML tag names not allowed)\n    \nUsing a tag:\n    \n    <page title=\"Welcome\" class=\"welcome\">\n      <h1>Welcome</h1>\n      <div class=\"content\">\n        <p>Some Content</p>\n      </div>\n      <div class=\"navigation\">\n        <ul>\n          <li><a href=\"/one\">One</a></li>\n          <li><a href=\"/two\">Two</a></li>\n          <li class=\"selected\"><a href=\"/three\">Three</li>\n        </ul>\n      </div>\n    </page>\n    \nOutput:\n\n    <html>\n      <head>\n        <title>Welcome</title>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>            \n      </head>\n      <body class=\"welcome\">\n        <div class=\"wrapper\">\n          <h1>Welcome</h1>\n          <div class=\"content\">\n            <p>Some Content</p>\n          </div>\n          <div class=\"navigation\">\n            <ul>\n              <li><a href=\"/one\">One</a></li>\n              <li><a href=\"/two\">Two</a></li>\n              <li class=\"selected\"><a href=\"/three\">Three</li>\n            </ul>\n          </div>\n        </div>\n      </body>\n    </html>    \n    \n### After Refactor (Important)\n\nDefining multiple tags (in separate taglib file):\n\n    <def tag=\"navigation\" attrs=\"options,selected\">\n      <ul>\n        <% for (var key in options) { %>\n            <li class=\"%{ (key == selected) ? 'selected' : '' }\"><a href=\"#{ '/' + key }\"><%= options[key] %></a></li>\n        <% } %>\n        <tagbody/>\n      </ul>\n    </def>\n\n    <def tag=\"page\" attrs=\"title,navigation\">\n      <html>\n        <head>\n          <title><%= title %></title>\n        </head>\n        <body merge-attrs=\"*\">\n           <h1><%= title %></h1>\n           <div class=\"content\">\n            <tagbody />\n           </div>\n           <div class=\"navigation\">\n            <navigation options=\"#{ {one:'One', two:'Two', three:'Three'} }\" selected=\"%{ navigation }\"/>\n           </div>\n        </body>\n      </html>\n    </def>   \n    \nUsing a tag:\n\n    <taglib src=\"taglibfile\" />\n    \n    <page title=\"Welcome\" navigation=\"three\" class=\"welcome\">\n        <p>Some Content</p>\n    </page>\n    \n## Tag Libraries\n\nA file containing tag definitions can be used to selectively include tags for each page.\n\n    <taglib src=\"relative/path\" />\n    \nAn included taglib can also use tags in taglibs it in turn includes.  These tags are per default \nnot included for use outside this taglib.  You can specify for them to be included/exported wherever \nthis taglib is included.\n\n    <taglib src=\"relative/path\" include=\"true\" />\n    \n(To make this the default behaviour, or for backward compatibility, pass an option of `{ includeAllTaglibs: true }` when rendering.)\n\nJust like you cannot (re)define a tag with the same name twice in the same dryml file, you cannot redefine an explicitly included/exported tag.\n    \n## Locals, Attributes\n\n### Locals\n\nLocals passed to render function will be available as local variables in this file, \nand also as an object on the `locals` variable as an object, for if you are not sure \nwhether the variable will be defined in locals passed to the view.\n\n### Attributes\n\nAttributes are treated similarly and will be available both as local variables, and as an\n`attributes` variable.  You can also pass in attributes directly from an object. These\nwould override individual attributes specified on the tag, e.g. if `aAttrs.href == 'about:blank'`\n\n    <a attrs=\"%{ aAttrs }\" href=\"#\">Blank</a>\n    \nresults in:\n  \n    <a href=\"about:blank\">Blank</a>\n    \nThis is useful if you have many attributes to pass to a tag, particularly defined tags.\n\nAttributes can also be passed by enclosing contents in an attr tag within, e.g.\n\n    <a href=\"#\">\n      <attr:title>About this page</attr:title>\n      This Page\n    </a>\n\nThis is also more useful with defined tags, where you may be outputting the contents to a block in layout, e.g.\n\n    <page>\n      <attr:footer>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      <attr:footer>\n      <p>Body text</p>\n    </page>\n\nresulting in:\n\n    <html>\n      <body>\n        <p>Body text</p>\n        <hr/>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      </body>\n    </html>\n    \n## Important Notes\n\nDRYML templates need to be valid XML/XHTML, which means:\n\n   - Non-HTML tag content, such as within script/style/etc., must be enclosed in a CDATA tag. \n   \nExample:\n    \n    <script>\n        <![CDATA[\n            $('body').append('<a href=\"/\">Back</a>');\n        ]]>\n    </script>\n    \n   - Attributes must be escaped where appropriate. \n   \nExample:\n    \n    <a href=\"javascript:$('body').append('&lt;a href=\"/\"&gt;Back&lt;/a&lt;');\">Text</a>\n\n\nThis applies only to 'hardcoded' content/values in the DRYML templates and does *not* apply to dynamically generated content.\n\n## License \n\n(Hobo for Rails)\n\nCopyright (c) 2008 Tom Locke\n\n(The MIT License)\n\nCopyright (c) 2011 Pieter Raubenheimer <pieter@wavana.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n","_id":"dryml@0.4.12","dist":{"shasum":"42bc997501d6edff1b92724c20da332922b54620","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.4.12.tgz","integrity":"sha512-jv+W0MgfFj1diEeAkGQlU7V/V0GWigpabk1RxmYitfNR2DSQ4xvEU6rQKDGBGvxrnqC3Ft+TSDPw44DTWUTHVw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCb/SnUiDOtwPhAfRjYOfmGHqMZ59U6OlDr6XSr0B6PIQIgMJ7yNJdHVVsfj7syGyuavdmHGIWR4Fbv0VxKtEUii1s="}]},"_npmVersion":"1.1.59","_npmUser":{"name":"jupiter","email":"pieter@wavana.com"},"maintainers":[{"name":"jupiter","email":"pieter@wavana.com"}],"directories":{}},"0.4.13":{"name":"dryml","description":"DRYML for Node","version":"0.4.13","author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"keywords":["template","engine","dryml","xml","html","ejs","express"],"main":"./lib/dryml.js","engines":{"node":">= 0.6.0"},"dependencies":{"node-xml":"https://github.com/downloads/jupiter/node-dryml/node-xml-1.0.1.tgz","underscore":">= 1.1.0","entities":"0.1.1"},"devDependencies":{"vows":">= 0.5.6"},"scripts":{"test":"echo \"Vows:\n\" && vows test/*.vows*"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"readme":"# DRYML - a template engine ![Project status](https://secure.travis-ci.org/jupiter/node-dryml.png?branch=master)\n\nA template engine for Node and Express that is compatible with EJS <https://github.com/visionmedia/ejs> yet has the power and view refactoring savvy of DRYML. \n\nDRYML as a template language was originally developed by Tom Locke for the Rails template engine as part of the web app builder, Hobo. See <http://hobocentral.net/manual/chapters/3_dryml.html> and <http://cookbook.hobocentral.net/manual/dryml-guide>.  \n\n## Installation\n\n    $ npm install dryml\n    \nRun tests:\n\n    $ npm test dryml\n\n## Usage Example\n\nFrom String:\n\n    require('dryml');\n\n    dryml.render(str, options, function(err, buffer){\n      console.log(buffer.str);\n    });\n    \nFor Express:\n\n    app.get('/', function(req, res){\n    \tdryml.renderView('index', options, res);\n    });\n    \nIt is currently asynchronous, so does not work as standard Express view plugin.\n    \n## Options\n\n  - `locals`          Local variables object\n  - `scope`           Function execution context\n  - `debug`           Output sources and useful string\n  - `trimWhitespace`  Removes all whitespace between tags\n  - `cache`           true/false whether to use cached tags/taglibs, default: true, default can be set on dryml object\n  \n## Tag definition\n\n### Basic Layout (Pre-refactor)\n\nDefining a tag (like a inline partial, to be reused):\n\n    <def tag=\"page\" attrs=\"title\">\n      <html>\n        <head>\n          <title><%= title %></title>\n          <script type=\"text/javascript\">\n              // Etc.\n          </script>\n        </head>\n        <body merge-attrs=\"*\">\n          <div class=\"wrapper\">\n            <tagbody/>\n          </div>\n        </body>\n      </html>\n    </def>\n    \nNote: Tags can be defined with/without prefixes, e.g.  `<myns:def tag=\"img\">` is called by using `<myns:img>` is called, and `<def tag=\"image\">` is called by using `<image>` (standard HTML tag names not allowed)\n    \nUsing a tag:\n    \n    <page title=\"Welcome\" class=\"welcome\">\n      <h1>Welcome</h1>\n      <div class=\"content\">\n        <p>Some Content</p>\n      </div>\n      <div class=\"navigation\">\n        <ul>\n          <li><a href=\"/one\">One</a></li>\n          <li><a href=\"/two\">Two</a></li>\n          <li class=\"selected\"><a href=\"/three\">Three</li>\n        </ul>\n      </div>\n    </page>\n    \nOutput:\n\n    <html>\n      <head>\n        <title>Welcome</title>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>            \n      </head>\n      <body class=\"welcome\">\n        <div class=\"wrapper\">\n          <h1>Welcome</h1>\n          <div class=\"content\">\n            <p>Some Content</p>\n          </div>\n          <div class=\"navigation\">\n            <ul>\n              <li><a href=\"/one\">One</a></li>\n              <li><a href=\"/two\">Two</a></li>\n              <li class=\"selected\"><a href=\"/three\">Three</li>\n            </ul>\n          </div>\n        </div>\n      </body>\n    </html>    \n    \n### After Refactor (Important)\n\nDefining multiple tags (in separate taglib file):\n\n    <def tag=\"navigation\" attrs=\"options,selected\">\n      <ul>\n        <% for (var key in options) { %>\n            <li class=\"%{ (key == selected) ? 'selected' : '' }\"><a href=\"#{ '/' + key }\"><%= options[key] %></a></li>\n        <% } %>\n        <tagbody/>\n      </ul>\n    </def>\n\n    <def tag=\"page\" attrs=\"title,navigation\">\n      <html>\n        <head>\n          <title><%= title %></title>\n        </head>\n        <body merge-attrs=\"*\">\n           <h1><%= title %></h1>\n           <div class=\"content\">\n            <tagbody />\n           </div>\n           <div class=\"navigation\">\n            <navigation options=\"#{ {one:'One', two:'Two', three:'Three'} }\" selected=\"%{ navigation }\"/>\n           </div>\n        </body>\n      </html>\n    </def>   \n    \nUsing a tag:\n\n    <taglib src=\"taglibfile\" />\n    \n    <page title=\"Welcome\" navigation=\"three\" class=\"welcome\">\n        <p>Some Content</p>\n    </page>\n    \n## Tag Libraries\n\nA file containing tag definitions can be used to selectively include tags for each page.\n\n    <taglib src=\"relative/path\" />\n    \nAn included taglib can also use tags in taglibs it in turn includes.  These tags are per default \nnot included for use outside this taglib.  You can specify for them to be included/exported wherever \nthis taglib is included.\n\n    <taglib src=\"relative/path\" include=\"true\" />\n    \n(To make this the default behaviour, or for backward compatibility, pass an option of `{ includeAllTaglibs: true }` when rendering.)\n\nJust like you cannot (re)define a tag with the same name twice in the same dryml file, you cannot redefine an explicitly included/exported tag.\n    \n## Locals, Attributes\n\n### Locals\n\nLocals passed to render function will be available as local variables in this file, \nand also as an object on the `locals` variable as an object, for if you are not sure \nwhether the variable will be defined in locals passed to the view.\n\n### Attributes\n\nAttributes are treated similarly and will be available both as local variables, and as an\n`attributes` variable.  You can also pass in attributes directly from an object. These\nwould override individual attributes specified on the tag, e.g. if `aAttrs.href == 'about:blank'`\n\n    <a attrs=\"%{ aAttrs }\" href=\"#\">Blank</a>\n    \nresults in:\n  \n    <a href=\"about:blank\">Blank</a>\n    \nThis is useful if you have many attributes to pass to a tag, particularly defined tags.\n\nAttributes can also be passed by enclosing contents in an attr tag within, e.g.\n\n    <a href=\"#\">\n      <attr:title>About this page</attr:title>\n      This Page\n    </a>\n\nThis is also more useful with defined tags, where you may be outputting the contents to a block in layout, e.g.\n\n    <page>\n      <attr:footer>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      <attr:footer>\n      <p>Body text</p>\n    </page>\n\nresulting in:\n\n    <html>\n      <body>\n        <p>Body text</p>\n        <hr/>\n        <script type=\"text/javascript\">\n            // Etc.\n        </script>\n      </body>\n    </html>\n    \n## Important Notes\n\nDRYML templates need to be valid XML/XHTML, which means:\n\n   - Non-HTML tag content, such as within script/style/etc., must be enclosed in a CDATA tag. \n   \nExample:\n    \n    <script>\n        <![CDATA[\n            $('body').append('<a href=\"/\">Back</a>');\n        ]]>\n    </script>\n    \n   - Attributes must be escaped where appropriate. \n   \nExample:\n    \n    <a href=\"javascript:$('body').append('&lt;a href=\"/\"&gt;Back&lt;/a&lt;');\">Text</a>\n\n\nThis applies only to 'hardcoded' content/values in the DRYML templates and does *not* apply to dynamically generated content.\n\n## License \n\n(Hobo for Rails)\n\nCopyright (c) 2008 Tom Locke\n\n(The MIT License)\n\nCopyright (c) 2011 Pieter Raubenheimer <pieter@wavana.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n","_id":"dryml@0.4.13","dist":{"shasum":"6218f19659a4d87c59077333592191d221ba0576","tarball":"https://registry.npmjs.org/dryml/-/dryml-0.4.13.tgz","integrity":"sha512-zD32TA8c9ziRB9yoNNYzlpVHLJCptEfsHUoSuGt1qjwUkgLv6Nqg5w/j0WL8AeHZQqbhr0KdwW4YmV/LHjdcEA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDmZKyaZ032jrqOUJQFR/wxcNtlHl5ex8c4ZZd0fgy+EAIhAO3GneydS1Kbh4amIgtRV3TRVPESXuD0wcfHPdK4iZ5Y"}]},"_npmVersion":"1.1.59","_npmUser":{"name":"jupiter","email":"pieter@wavana.com"},"maintainers":[{"name":"jupiter","email":"pieter@wavana.com"}]}},"maintainers":[{"name":"jupiter","email":"pieter@wavana.com"}],"time":{"modified":"2022-06-16T00:44:37.271Z","created":"2011-02-15T12:59:16.142Z","0.1.2":"2011-02-15T12:59:17.936Z","0.1.3":"2011-02-15T19:29:34.627Z","0.1.4":"2011-02-17T11:29:00.558Z","0.1.5":"2011-02-23T10:14:03.433Z","0.1.6":"2011-02-25T17:38:45.500Z","0.1.7":"2011-03-02T13:17:08.110Z","0.1.8":"2011-03-09T19:50:38.926Z","0.1.9":"2011-03-11T17:44:01.811Z","0.1.10":"2011-03-11T17:57:44.113Z","0.1.11":"2011-03-11T19:15:43.596Z","0.1.12":"2011-03-21T14:45:58.083Z","0.1.15":"2011-08-16T10:23:33.407Z","0.2.0":"2011-09-23T13:51:16.037Z","0.2.1":"2011-09-29T12:01:19.247Z","0.2.2":"2011-10-25T15:17:28.643Z","0.2.3":"2011-11-24T16:27:11.099Z","0.3.0":"2012-01-21T22:25:17.878Z","0.3.1":"2012-02-28T21:14:05.476Z","0.3.2":"2012-03-05T20:28:22.378Z","0.3.3":"2012-05-17T21:03:08.346Z","0.4.0":"2012-05-18T12:13:42.161Z","0.4.1":"2012-05-18T14:38:44.468Z","0.4.2":"2012-05-20T10:29:32.499Z","0.4.3":"2012-05-21T21:25:24.260Z","0.4.4":"2012-05-22T12:30:15.528Z","0.4.5":"2012-06-15T14:13:09.282Z","0.4.6":"2012-07-26T18:22:53.419Z","0.4.7":"2012-10-10T14:53:46.784Z","0.4.8":"2012-10-16T16:20:18.567Z","0.4.9":"2012-10-24T17:58:17.823Z","0.4.10":"2012-10-31T22:44:49.868Z","0.4.11":"2012-11-14T13:28:02.437Z","0.4.12":"2012-11-15T19:38:22.243Z","0.4.13":"2013-07-31T14:25:13.477Z"},"author":{"name":"Pieter Raubenheimer","email":"pieter@wavana.com"},"repository":{"type":"git","url":"git://github.com/jupiter/node-dryml.git"},"users":{"fgribreau":true}}