summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2025-05-28 19:53:26 +0100
committerMichael Williamson <mike@zwobble.org>2025-05-28 19:53:26 +0100
commit5896154e69430a67a758864576c5eda8796f152a (patch)
tree111472a1940ad0dd6e43b4347624ad7bfc535a10
parenta193c98872cc8dcd800dd10af17a6fddd4897e4f (diff)
Ignore AlternateContent elements when there is no Fallback element
-rw-r--r--NEWS4
-rw-r--r--lib/docx/body-reader.js2
-rw-r--r--test/docx/body-reader.tests.js36
3 files changed, 29 insertions, 13 deletions
diff --git a/NEWS b/NEWS
index 336cc9b..298321b 100644
--- a/NEWS
+++ b/NEWS
@@ -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() {