diff options
| author | Michael Williamson <mike@zwobble.org> | 2014-04-10 14:22:21 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2014-04-10 14:22:21 +0100 |
| commit | dee75b1261646edb99ae01a231036fd9c468fe83 (patch) | |
| tree | f340ce912a525fc5408da7da8c9997c863f8e501 /lib | |
| parent | 7e49d52fb9501a1bdd85d6c9d35d09d50aabb569 (diff) | |
Add basic indentation of HTML
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/html-writer.js | 72 |
1 files changed, 71 insertions, 1 deletions
diff --git a/lib/html-writer.js b/lib/html-writer.js index d329438..233e5dd 100644 --- a/lib/html-writer.js +++ b/lib/html-writer.js @@ -3,7 +3,77 @@ var _ = require("underscore"); exports.writer = writer; -function writer() { +function writer(options) { + options = options || {}; + if (options.prettyPrint) { + return prettyWriter(); + } else { + return simpleWriter(); + } +} + + +var indentedElements = { + div: true, + p: true, + ul: true +}; + + +function prettyWriter() { + var indentationLevel = 0; + var stack = []; + + var writer = simpleWriter(); + + function open(tagName, attributes) { + indent(); + stack.push(tagName); + writer.open(tagName, attributes); + if (indentedElements[tagName]) { + indentationLevel++; + } + } + + function close(tagName) { + if (indentedElements[tagName]) { + indentationLevel--; + } + indent(); + stack.pop(); + writer.close(tagName); + } + + function text(value) { + indent(); + writer.text(value); + } + + function insideIndentedElement() { + return stack.length > 0 && indentedElements[stack[stack.length - 1]]; + } + + function indent() { + if (insideIndentedElement()) { + writer.append("\n"); + for (var i = 0; i < indentationLevel; i++) { + writer.append(" "); + } + } + } + + return { + asString: writer.asString, + open: open, + close: close, + text: text, + selfClosing: writer.selfClosing, + append: writer.append + }; +} + + +function simpleWriter() { var fragments = []; function open(tagName, attributes) { |
