diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-04-02 17:56:07 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-04-02 17:56:07 +0100 |
| commit | 3433c9bfcc62c095d96af81df9a742e98b582715 (patch) | |
| tree | e497febb6cd2859294d074be319a6890d9b3a835 | |
| parent | b0c2003c41431443412b451a679a4f1493feacc6 (diff) | |
Change document transforms to create copies of elements
| -rw-r--r-- | README.md | 23 | ||||
| -rw-r--r-- | lib/transforms.js | 14 | ||||
| -rw-r--r-- | tests/mammoth.tests.js | 4 |
3 files changed, 26 insertions, 15 deletions
@@ -461,16 +461,25 @@ You can use the `transformDocument` argument to modify the document appropriatel ```javascript function transformElement(element) { if (element.children) { - element.children.forEach(transformElement); + var children = _.map(element.children, transformElement); + element = extend(element, {children: children}); } + if (element.type === "paragraph") { - if (element.alignment === "center" && !element.styleId) { - element.styleId = "Heading2"; - } + element = transformParagraph(element); } + return element; } +function transformParagraph(element) { + if (element.alignment === "center" && !element.styleId) { + return extend(element, {styleId: "Heading2"}); + } else { + return element; + } +} + var options = { transformDocument: transformElement }; @@ -481,12 +490,12 @@ The return value of `transformDocument` is used during HTML generation. The above can be written more succinctly using the helper `mammoth.transforms.paragraph`: ```javascript - function transformParagraph(element) { if (element.alignment === "center" && !element.styleId) { - element.styleId = "Heading2"; + return extend(element, {styleId: "Heading2"}); + } else { + return element; } - return element; } var options = { diff --git a/lib/transforms.js b/lib/transforms.js index 988b456..5078387 100644 --- a/lib/transforms.js +++ b/lib/transforms.js @@ -1,15 +1,17 @@ +var _ = require("underscore"); + exports.paragraph = function(transform) { function transformElement(element) { if (element.children) { - for (var i = 0; i < element.children.length; i++) { - element.children[i] = transformElement(element.children[i]); - } + var children = _.map(element.children, transformElement); + element = _.extend(element, {children: children}); } + if (element.type === "paragraph") { - return transform(element); - } else { - return element; + element = transform(element); } + + return element; } return transformElement; }; diff --git a/tests/mammoth.tests.js b/tests/mammoth.tests.js index 801bb02..ad71539 100644 --- a/tests/mammoth.tests.js +++ b/tests/mammoth.tests.js @@ -1,6 +1,7 @@ var assert = require("assert"); var path = require("path"); var fs = require("fs"); +var _ = require("underscore"); var mammoth = require("../"); var promises = require("../lib/promises"); @@ -156,8 +157,7 @@ describe('mammoth', function() { }); var options = { transformDocument: mammoth.transforms.paragraph(function(paragraph) { - paragraph.styleId = "Heading1"; - return paragraph; + return _.extend(paragraph, {styleId: "Heading1"}); }) }; return mammoth.convertToHtml({file: docxFile}, options).then(function(result) { |
