diff options
| author | Michael Williamson <mike@zwobble.org> | 2013-04-01 22:21:56 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2013-04-01 22:21:56 +0100 |
| commit | 720f997476ab2d0ac3cef17b890b423133ae5e7d (patch) | |
| tree | b0af74d498a82a6161af1aa0ca3fd39f32c19a8a /lib/document-to-html.js | |
| parent | a70e8e05948c593fdc253b6d0a256d7aa656d988 (diff) | |
Generate images using data URIs
Diffstat (limited to 'lib/document-to-html.js')
| -rw-r--r-- | lib/document-to-html.js | 50 |
1 files changed, 38 insertions, 12 deletions
diff --git a/lib/document-to-html.js b/lib/document-to-html.js index 1224878..b9efe0d 100644 --- a/lib/document-to-html.js +++ b/lib/document-to-html.js @@ -15,24 +15,28 @@ function DocumentConverter(options) { function convertToHtml(document) { var html = new HtmlGenerator(); - elementToHtml(document, html); - html.closeAll(); - - return q.when({ - html: html.asString() - }); + return elementToHtml(document, html) + .then(function() { + html.closeAll(); + + return { + html: html.asString() + }; + }); } function convertElements(elements, html) { - elements.forEach(function(element) { - elementToHtml(element, html); + return forEachPromise(elements, function(element) { + return elementToHtml(element, html); }); } function elementToHtml(element, html) { var handler = elementConverters[element.type]; if (handler) { - handler(element, html); + return q.when(handler(element, html)); + } else { + return q.when(); } } @@ -66,7 +70,7 @@ function DocumentConverter(options) { var elementConverters = { "document": function(document, html) { - convertElements(document.children, html); + return convertElements(document.children, html); }, "paragraph": convertParagraph, "run": convertRun, @@ -75,11 +79,33 @@ function DocumentConverter(options) { }, "hyperlink": function(element, html) { html.push(styles.element("a", {href: element.href})); - convertElements(element.children, html); - html.pop(); + return convertElements(element.children, html).then(function() { + html.pop(); + }); + }, + "image": function(element, html) { + return element.read().then(function(imageBuffer) { + var src = "data:image/png;base64," + imageBuffer.toString("base64"); + html.selfClosing(styles.element("img", {"src": src})) + }); } }; return { convertToHtml: convertToHtml } } + +function forEachPromise(array, func) { + var index = -1; + return next(); + + function next() { + index++; + if (index < array.length) { + return q.when(func(array[index])) + .then(next); + } else { + return q.when(); + } + } +} |
