Internal DSL for generating HTML
htmldiv'#main'htmlh1null 'Hello, world!'htmlimgsrc: 'foo.jpg';
Using Underscore.js or similar:
return htmllirel: itemidhtmldiv'.title' itemtitlehtmlbutton'.destroy' 'delete';return htmlul'.todo-list' _maplist todoItem;todoListid: 1 title: 'item one'id: 2 title: 'item two'id: 3 title: 'item three';
item onedeleteitem twodeleteitem threedelete
- It's a more convenient and safer alternative to string contatenation
- For small bits of HTML you might not want to switch contexts from code to a template
- Easier to debug than a templating engine
- You get full tool-chain support:
- editor support: syntax highlighting, code tools etc etc
- code analyzers: jslint, jshint
- testing/coverage tools
- Consider using where you might currently use string concatenation
- Avoid using for large HTML documents or in places where speed is critical
- Good for small snippets used for client-side page updates
- Bad for generating huge amounts of HTML on the server
I like to alias the 'pithy' library as 'html':
var html = require'pithy';
You can then just use html.
tagname as a function to create the
appropriate element. Please note, you actually get a html.SafeString
isString() tests. If you have a workaround please send a pull-request.
There is also a html.escape() function for escaping HTML (returns a html.SafeString). It will not escape a value that is already a html.SafeString object.