summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-11-30 11:36:24 +0000
committerMichael Williamson <mike@zwobble.org>2024-11-30 11:36:24 +0000
commit500e1c20fe77c7ebd561e9f7d8c2b494ebdfced2 (patch)
tree2260a797c680605217093d5a5247c778a7269924
parent0a86099a0d60c8bfe404cf66b5e5f1fb1549bb1d (diff)
Parse checked value of complex field checkbox
-rw-r--r--lib/docx/body-reader.js8
-rw-r--r--test/docx/body-reader.tests.js42
2 files changed, 46 insertions, 4 deletions
diff --git a/lib/docx/body-reader.js b/lib/docx/body-reader.js
index 2726b76..5a27d2d 100644
--- a/lib/docx/body-reader.js
+++ b/lib/docx/body-reader.js
@@ -206,10 +206,10 @@ function BodyReader(options) {
var checkboxElement = fldChar
.firstOrEmpty("w:ffData")
.firstOrEmpty("w:checkBox");
- var defaultValue = readBooleanElement(
- checkboxElement.first("w:default")
- );
- var checked = defaultValue;
+ var checkedElement = checkboxElement.first("w:checked");
+ var checked = checkedElement == null
+ ? readBooleanElement(checkboxElement.first("w:default"))
+ : readBooleanElement(checkedElement);
return {type: "checkbox", checked: checked};
}
diff --git a/test/docx/body-reader.tests.js b/test/docx/body-reader.tests.js
index 49c81b9..70b0057 100644
--- a/test/docx/body-reader.tests.js
+++ b/test/docx/body-reader.tests.js
@@ -588,6 +588,48 @@ test("checkboxes", {
)
})
));
+ },
+
+ "complex field checkbox with w:default=1 and w:checked=0 is unchecked": function() {
+ var paragraphXml = complexFieldCheckboxParagraph([
+ xml.element("w:checkBox", {}, [
+ xml.element("w:default", {"w:val": "1"}),
+ xml.element("w:checked", {"w:val": "0"})
+ ])
+ ]);
+
+ var paragraph = readXmlElementValue(paragraphXml);
+
+ assertThat(paragraph.children, contains(
+ isEmptyRun,
+ isEmptyRun,
+ isRun({
+ children: contains(
+ isCheckbox({checked: equalTo(false)})
+ )
+ })
+ ));
+ },
+
+ "complex field checkbox with w:default=0 and w:checked=1 is checked": function() {
+ var paragraphXml = complexFieldCheckboxParagraph([
+ xml.element("w:checkBox", {}, [
+ xml.element("w:default", {"w:val": "0"}),
+ xml.element("w:checked", {"w:val": "1"})
+ ])
+ ]);
+
+ var paragraph = readXmlElementValue(paragraphXml);
+
+ assertThat(paragraph.children, contains(
+ isEmptyRun,
+ isEmptyRun,
+ isRun({
+ children: contains(
+ isCheckbox({checked: equalTo(true)})
+ )
+ })
+ ));
}
});