diff options
| author | Michael Williamson <mike@zwobble.org> | 2013-03-29 21:36:57 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2013-03-29 21:36:57 +0000 |
| commit | 53e7181e009efcdcad182d485972bfbfda982fc0 (patch) | |
| tree | 53a6793cc67a33c7fe9794eb5b1b6bbe863bfeca /lib/html-generator.js | |
| parent | d3a8fc6cf15038553f0d67e79c03afb64e826644 (diff) | |
Allow HTML elements to be reused in HTML generation
Diffstat (limited to 'lib/html-generator.js')
| -rw-r--r-- | lib/html-generator.js | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/lib/html-generator.js b/lib/html-generator.js index 247ca09..5f2befa 100644 --- a/lib/html-generator.js +++ b/lib/html-generator.js @@ -1,5 +1,7 @@ var util = require("util"); +var _ = require("underscore"); + exports.HtmlGenerator = HtmlGenerator; @@ -17,10 +19,20 @@ function HtmlGenerator() { } function style(style) { - popAll(); - style.forEach(function(tagName) { - push(tagName); + var firstFreshPartIndex = findIndex(style, function(part) { + return part.fresh; }); + + var partIndex = 0; + while (partIndex < firstFreshPartIndex && style[partIndex].tagName === stack[partIndex]) { + partIndex++; + } + while (stack.length > partIndex) { + pop(); + } + for (; partIndex < style.length; partIndex++) { + push(style[partIndex].tagName); + } } function push(element) { @@ -54,3 +66,12 @@ function escapeHtml(value) { .replace(/</g, '<') .replace(/>/g, '>'); } + +function findIndex(array, predicate) { + for (var i = 0; i < array.length; i++) { + if (predicate(array[i])) { + return i; + } + } + return -1; +} |
