diff options
| author | Michael Williamson <mike@zwobble.org> | 2025-05-28 19:53:26 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2025-05-28 19:53:26 +0100 |
| commit | 5896154e69430a67a758864576c5eda8796f152a (patch) | |
| tree | 111472a1940ad0dd6e43b4347624ad7bfc535a10 | |
| parent | a193c98872cc8dcd800dd10af17a6fddd4897e4f (diff) | |
Ignore AlternateContent elements when there is no Fallback element
| -rw-r--r-- | NEWS | 4 | ||||
| -rw-r--r-- | lib/docx/body-reader.js | 2 | ||||
| -rw-r--r-- | test/docx/body-reader.tests.js | 36 |
3 files changed, 29 insertions, 13 deletions
@@ -1,3 +1,7 @@ +# 1.9.1 + +* Ignore AlternateContent elements when there is no Fallback element. + # 1.9.0 * Update lop to 0.4.2, which removes the use of the util module when there are diff --git a/lib/docx/body-reader.js b/lib/docx/body-reader.js index e78c2c4..93144c3 100644 --- a/lib/docx/body-reader.js +++ b/lib/docx/body-reader.js @@ -381,7 +381,7 @@ function BodyReader(options) { }, "mc:AlternateContent": function(element) { - return readChildElements(element.first("mc:Fallback")); + return readChildElements(element.firstOrEmpty("mc:Fallback")); }, "w:sdt": function(element) { diff --git a/test/docx/body-reader.tests.js b/test/docx/body-reader.tests.js index 96f4922..8f36998 100644 --- a/test/docx/body-reader.tests.js +++ b/test/docx/body-reader.tests.js @@ -1630,18 +1630,30 @@ test("text boxes have content appended after containing paragraph", function() { assert.deepEqual(result.value[1].styleId, "textbox-content"); }); -test("mc:Fallback is used when mc:AlternateContent is read", function() { - var styles = new Styles({"first": {name: "First"}, "second": {name: "Second"}}, {}); - var textbox = new XmlElement("mc:AlternateContent", {}, [ - new XmlElement("mc:Choice", {"Requires": "wps"}, [ - paragraphWithStyleId("first") - ]), - new XmlElement("mc:Fallback", {}, [ - paragraphWithStyleId("second") - ]) - ]); - var result = readXmlElement(textbox, {styles: styles}); - assert.deepEqual(result.value[0].styleId, "second"); +test("mc:AlternateContent", { + "when mc:Fallback is present then mc:Fallback is read": function() { + var styles = new Styles({"first": {name: "First"}, "second": {name: "Second"}}, {}); + var textbox = new XmlElement("mc:AlternateContent", {}, [ + new XmlElement("mc:Choice", {"Requires": "wps"}, [ + paragraphWithStyleId("first") + ]), + new XmlElement("mc:Fallback", {}, [ + paragraphWithStyleId("second") + ]) + ]); + var result = readXmlElement(textbox, {styles: styles}); + assert.deepEqual(result.value[0].styleId, "second"); + }, + + "when mc:Fallback is not present then element is ignored": function() { + var textbox = new XmlElement("mc:AlternateContent", {}, [ + new XmlElement("mc:Choice", {"Requires": "wps"}, [ + paragraphWithStyleId("first") + ]) + ]); + var result = readXmlElement(textbox); + assert.deepEqual(result.value, []); + } }); test("w:sdtContent is used when w:sdt is read", function() { |
