docxmlater 7.9.9 → 8.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +51 -3
- package/dist/core/Document.d.ts +55 -1
- package/dist/core/Document.d.ts.map +1 -1
- package/dist/core/Document.js +199 -0
- package/dist/core/Document.js.map +1 -1
- package/dist/core/DocumentParser.d.ts +3 -0
- package/dist/core/DocumentParser.d.ts.map +1 -1
- package/dist/core/DocumentParser.js +380 -72
- package/dist/core/DocumentParser.js.map +1 -1
- package/dist/elements/Comment.d.ts +5 -0
- package/dist/elements/Comment.d.ts.map +1 -1
- package/dist/elements/Comment.js +16 -0
- package/dist/elements/Comment.js.map +1 -1
- package/dist/elements/CommentManager.d.ts +6 -0
- package/dist/elements/CommentManager.d.ts.map +1 -1
- package/dist/elements/CommentManager.js +41 -0
- package/dist/elements/CommentManager.js.map +1 -1
- package/dist/elements/Paragraph.d.ts.map +1 -1
- package/dist/elements/Paragraph.js +4 -1
- package/dist/elements/Paragraph.js.map +1 -1
- package/dist/elements/PropertyChangeTypes.d.ts +37 -0
- package/dist/elements/PropertyChangeTypes.d.ts.map +1 -1
- package/dist/elements/PropertyChangeTypes.js.map +1 -1
- package/dist/elements/Revision.d.ts +1 -1
- package/dist/elements/Revision.d.ts.map +1 -1
- package/dist/elements/Revision.js +11 -0
- package/dist/elements/Revision.js.map +1 -1
- package/dist/elements/Section.d.ts +11 -0
- package/dist/elements/Section.d.ts.map +1 -1
- package/dist/elements/Section.js +32 -0
- package/dist/elements/Section.js.map +1 -1
- package/dist/elements/StructuredDocumentTag.js +8 -8
- package/dist/elements/StructuredDocumentTag.js.map +1 -1
- package/dist/elements/Table.d.ts +5 -0
- package/dist/elements/Table.d.ts.map +1 -1
- package/dist/elements/Table.js +28 -0
- package/dist/elements/Table.js.map +1 -1
- package/dist/elements/TableCell.d.ts +5 -0
- package/dist/elements/TableCell.d.ts.map +1 -1
- package/dist/elements/TableCell.js +42 -0
- package/dist/elements/TableCell.js.map +1 -1
- package/dist/formatting/Style.d.ts +1 -0
- package/dist/formatting/Style.d.ts.map +1 -1
- package/dist/formatting/Style.js +10 -0
- package/dist/formatting/Style.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -2
- package/dist/index.js.map +1 -1
- package/dist/utils/parsingHelpers.d.ts +6 -0
- package/dist/utils/parsingHelpers.d.ts.map +1 -0
- package/dist/utils/parsingHelpers.js +63 -0
- package/dist/utils/parsingHelpers.js.map +1 -0
- package/dist/utils/xmlSanitization.d.ts +23 -0
- package/dist/utils/xmlSanitization.d.ts.map +1 -0
- package/dist/utils/xmlSanitization.js +60 -0
- package/dist/utils/xmlSanitization.js.map +1 -0
- package/dist/xml/XMLBuilder.d.ts.map +1 -1
- package/dist/xml/XMLBuilder.js +7 -4
- package/dist/xml/XMLBuilder.js.map +1 -1
- package/package.json +4 -3
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { BookmarkManager } from "../elements/BookmarkManager";
|
|
2
|
+
import { Comment } from "../elements/Comment";
|
|
2
3
|
import { ImageManager } from "../elements/ImageManager";
|
|
3
4
|
import { Paragraph } from "../elements/Paragraph";
|
|
4
5
|
import { Section } from "../elements/Section";
|
|
@@ -46,6 +47,8 @@ export declare class DocumentParser {
|
|
|
46
47
|
private parseParagraphWithOrder;
|
|
47
48
|
private parseOrderedParagraphChildren;
|
|
48
49
|
private parseRevisionFromXml;
|
|
50
|
+
parseCommentsXml(commentsXml: string): Comment[];
|
|
51
|
+
private parseCommentFromXml;
|
|
49
52
|
private parseBookmarkStart;
|
|
50
53
|
private parseBookmarkEnd;
|
|
51
54
|
private parseParagraphFromObject;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocumentParser.d.ts","sourceRoot":"","sources":["../../src/core/DocumentParser.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"DocumentParser.d.ts","sourceRoot":"","sources":["../../src/core/DocumentParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,6 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.DocumentParser = void 0;
|
|
37
37
|
const Bookmark_1 = require("../elements/Bookmark");
|
|
38
|
+
const Comment_1 = require("../elements/Comment");
|
|
38
39
|
const Field_1 = require("../elements/Field");
|
|
39
40
|
const FieldHelpers_1 = require("../elements/FieldHelpers");
|
|
40
41
|
const Footer_1 = require("../elements/Footer");
|
|
@@ -56,6 +57,7 @@ const NumberingInstance_1 = require("../formatting/NumberingInstance");
|
|
|
56
57
|
const Style_1 = require("../formatting/Style");
|
|
57
58
|
const diagnostics_1 = require("../utils/diagnostics");
|
|
58
59
|
const logger_1 = require("../utils/logger");
|
|
60
|
+
const parsingHelpers_1 = require("../utils/parsingHelpers");
|
|
59
61
|
function getLogger() {
|
|
60
62
|
return (0, logger_1.createScopedLogger)((0, logger_1.getGlobalLogger)(), 'DocumentParser');
|
|
61
63
|
}
|
|
@@ -460,10 +462,6 @@ class DocumentParser {
|
|
|
460
462
|
return null;
|
|
461
463
|
}
|
|
462
464
|
const pPr = pElement["w:pPr"];
|
|
463
|
-
if (paraXml.includes('Bullet 3') || paraXml.includes('Bullet 4') || paraXml.includes('Bullet 5')) {
|
|
464
|
-
console.log(`[DEBUG parseParagraphWithOrder] RAW XML: ${paraXml.substring(0, 400)}...`);
|
|
465
|
-
console.log(`[DEBUG parseParagraphWithOrder] pPr.w:numPr: ${JSON.stringify(pPr?.["w:numPr"])?.substring(0, 200)}`);
|
|
466
|
-
}
|
|
467
465
|
this.parseParagraphPropertiesFromObject(pPr, paragraph);
|
|
468
466
|
const paraId = pElement["w14:paraId"];
|
|
469
467
|
if (paraId) {
|
|
@@ -827,6 +825,7 @@ class DocumentParser {
|
|
|
827
825
|
}
|
|
828
826
|
}
|
|
829
827
|
if (content.length === 0) {
|
|
828
|
+
logger_1.defaultLogger.debug("[DocumentParser] Empty revision content skipped", { tagName, id: idAttr, author });
|
|
830
829
|
return null;
|
|
831
830
|
}
|
|
832
831
|
const revision = new Revision_1.Revision({
|
|
@@ -846,6 +845,59 @@ class DocumentParser {
|
|
|
846
845
|
return null;
|
|
847
846
|
}
|
|
848
847
|
}
|
|
848
|
+
parseCommentsXml(commentsXml) {
|
|
849
|
+
const comments = [];
|
|
850
|
+
const commentXmls = XMLParser_1.XMLParser.extractElements(commentsXml, "w:comment");
|
|
851
|
+
for (const commentXml of commentXmls) {
|
|
852
|
+
const comment = this.parseCommentFromXml(commentXml);
|
|
853
|
+
if (comment) {
|
|
854
|
+
comments.push(comment);
|
|
855
|
+
}
|
|
856
|
+
}
|
|
857
|
+
return comments;
|
|
858
|
+
}
|
|
859
|
+
parseCommentFromXml(commentXml) {
|
|
860
|
+
try {
|
|
861
|
+
const idAttr = XMLParser_1.XMLParser.extractAttribute(commentXml, "w:id");
|
|
862
|
+
const author = XMLParser_1.XMLParser.extractAttribute(commentXml, "w:author") || "Unknown";
|
|
863
|
+
const dateAttr = XMLParser_1.XMLParser.extractAttribute(commentXml, "w:date");
|
|
864
|
+
const initials = XMLParser_1.XMLParser.extractAttribute(commentXml, "w:initials");
|
|
865
|
+
const parentIdAttr = XMLParser_1.XMLParser.extractAttribute(commentXml, "w:parentId");
|
|
866
|
+
const doneAttr = XMLParser_1.XMLParser.extractAttribute(commentXml, "w:done");
|
|
867
|
+
if (!idAttr) {
|
|
868
|
+
return null;
|
|
869
|
+
}
|
|
870
|
+
const id = parseInt(idAttr, 10);
|
|
871
|
+
const date = dateAttr ? new Date(dateAttr) : new Date();
|
|
872
|
+
const parentId = parentIdAttr ? parseInt(parentIdAttr, 10) : undefined;
|
|
873
|
+
const done = doneAttr === "1" || doneAttr === "true";
|
|
874
|
+
const runs = [];
|
|
875
|
+
const runXmls = XMLParser_1.XMLParser.extractElements(commentXml, "w:r");
|
|
876
|
+
for (const runXml of runXmls) {
|
|
877
|
+
const runObj = XMLParser_1.XMLParser.parseToObject(runXml, { trimValues: false });
|
|
878
|
+
const run = this.parseRunFromObject(runObj["w:r"]);
|
|
879
|
+
if (run) {
|
|
880
|
+
runs.push(run);
|
|
881
|
+
}
|
|
882
|
+
}
|
|
883
|
+
const comment = new Comment_1.Comment({
|
|
884
|
+
id,
|
|
885
|
+
author,
|
|
886
|
+
initials: initials || undefined,
|
|
887
|
+
date,
|
|
888
|
+
content: runs.length > 0 ? runs : "",
|
|
889
|
+
parentId,
|
|
890
|
+
done,
|
|
891
|
+
});
|
|
892
|
+
return comment;
|
|
893
|
+
}
|
|
894
|
+
catch (error) {
|
|
895
|
+
logger_1.defaultLogger.warn("[DocumentParser] Failed to parse comment:", error instanceof Error
|
|
896
|
+
? { message: error.message }
|
|
897
|
+
: { error: String(error) });
|
|
898
|
+
return null;
|
|
899
|
+
}
|
|
900
|
+
}
|
|
849
901
|
parseBookmarkStart(bookmarkXml) {
|
|
850
902
|
try {
|
|
851
903
|
const idAttr = XMLParser_1.XMLParser.extractAttribute(bookmarkXml, "w:id");
|
|
@@ -1045,21 +1097,21 @@ class DocumentParser {
|
|
|
1045
1097
|
}
|
|
1046
1098
|
if (pPrObj["w:ind"]) {
|
|
1047
1099
|
const ind = pPrObj["w:ind"];
|
|
1048
|
-
if (ind["@_w:left"]
|
|
1049
|
-
paragraph.setLeftIndent(
|
|
1050
|
-
if (ind["@_w:right"]
|
|
1051
|
-
paragraph.setRightIndent(
|
|
1052
|
-
if (ind["@_w:firstLine"]
|
|
1053
|
-
paragraph.setFirstLineIndent(
|
|
1100
|
+
if ((0, parsingHelpers_1.isExplicitlySet)(ind["@_w:left"]))
|
|
1101
|
+
paragraph.setLeftIndent((0, parsingHelpers_1.safeParseInt)(ind["@_w:left"]));
|
|
1102
|
+
if ((0, parsingHelpers_1.isExplicitlySet)(ind["@_w:right"]))
|
|
1103
|
+
paragraph.setRightIndent((0, parsingHelpers_1.safeParseInt)(ind["@_w:right"]));
|
|
1104
|
+
if ((0, parsingHelpers_1.isExplicitlySet)(ind["@_w:firstLine"]))
|
|
1105
|
+
paragraph.setFirstLineIndent((0, parsingHelpers_1.safeParseInt)(ind["@_w:firstLine"]));
|
|
1054
1106
|
}
|
|
1055
1107
|
if (pPrObj["w:spacing"]) {
|
|
1056
1108
|
const spacing = pPrObj["w:spacing"];
|
|
1057
|
-
if (spacing["@_w:before"])
|
|
1058
|
-
paragraph.setSpaceBefore(
|
|
1059
|
-
if (spacing["@_w:after"])
|
|
1060
|
-
paragraph.setSpaceAfter(
|
|
1061
|
-
if (spacing["@_w:line"]) {
|
|
1062
|
-
paragraph.setLineSpacing(
|
|
1109
|
+
if ((0, parsingHelpers_1.isExplicitlySet)(spacing["@_w:before"]))
|
|
1110
|
+
paragraph.setSpaceBefore((0, parsingHelpers_1.safeParseInt)(spacing["@_w:before"]));
|
|
1111
|
+
if ((0, parsingHelpers_1.isExplicitlySet)(spacing["@_w:after"]))
|
|
1112
|
+
paragraph.setSpaceAfter((0, parsingHelpers_1.safeParseInt)(spacing["@_w:after"]));
|
|
1113
|
+
if ((0, parsingHelpers_1.isExplicitlySet)(spacing["@_w:line"])) {
|
|
1114
|
+
paragraph.setLineSpacing((0, parsingHelpers_1.safeParseInt)(spacing["@_w:line"]), spacing["@_w:lineRule"]);
|
|
1063
1115
|
}
|
|
1064
1116
|
}
|
|
1065
1117
|
if (pPrObj["w:pageBreakBefore"])
|
|
@@ -1207,16 +1259,16 @@ class DocumentParser {
|
|
|
1207
1259
|
if (pPrObj["w:framePr"]) {
|
|
1208
1260
|
const framePr = pPrObj["w:framePr"];
|
|
1209
1261
|
const frameProps = {};
|
|
1210
|
-
if (framePr["@_w:w"])
|
|
1211
|
-
frameProps.w =
|
|
1212
|
-
if (framePr["@_w:h"])
|
|
1213
|
-
frameProps.h =
|
|
1262
|
+
if ((0, parsingHelpers_1.isExplicitlySet)(framePr["@_w:w"]))
|
|
1263
|
+
frameProps.w = (0, parsingHelpers_1.safeParseInt)(framePr["@_w:w"]);
|
|
1264
|
+
if ((0, parsingHelpers_1.isExplicitlySet)(framePr["@_w:h"]))
|
|
1265
|
+
frameProps.h = (0, parsingHelpers_1.safeParseInt)(framePr["@_w:h"]);
|
|
1214
1266
|
if (framePr["@_w:hRule"])
|
|
1215
1267
|
frameProps.hRule = framePr["@_w:hRule"];
|
|
1216
|
-
if (framePr["@_w:x"])
|
|
1217
|
-
frameProps.x =
|
|
1218
|
-
if (framePr["@_w:y"])
|
|
1219
|
-
frameProps.y =
|
|
1268
|
+
if ((0, parsingHelpers_1.isExplicitlySet)(framePr["@_w:x"]))
|
|
1269
|
+
frameProps.x = (0, parsingHelpers_1.safeParseInt)(framePr["@_w:x"]);
|
|
1270
|
+
if ((0, parsingHelpers_1.isExplicitlySet)(framePr["@_w:y"]))
|
|
1271
|
+
frameProps.y = (0, parsingHelpers_1.safeParseInt)(framePr["@_w:y"]);
|
|
1220
1272
|
if (framePr["@_w:xAlign"])
|
|
1221
1273
|
frameProps.xAlign = framePr["@_w:xAlign"];
|
|
1222
1274
|
if (framePr["@_w:yAlign"])
|
|
@@ -1225,23 +1277,19 @@ class DocumentParser {
|
|
|
1225
1277
|
frameProps.hAnchor = framePr["@_w:hAnchor"];
|
|
1226
1278
|
if (framePr["@_w:vAnchor"])
|
|
1227
1279
|
frameProps.vAnchor = framePr["@_w:vAnchor"];
|
|
1228
|
-
if (framePr["@_w:hSpace"])
|
|
1229
|
-
frameProps.hSpace =
|
|
1230
|
-
if (framePr["@_w:vSpace"])
|
|
1231
|
-
frameProps.vSpace =
|
|
1280
|
+
if ((0, parsingHelpers_1.isExplicitlySet)(framePr["@_w:hSpace"]))
|
|
1281
|
+
frameProps.hSpace = (0, parsingHelpers_1.safeParseInt)(framePr["@_w:hSpace"]);
|
|
1282
|
+
if ((0, parsingHelpers_1.isExplicitlySet)(framePr["@_w:vSpace"]))
|
|
1283
|
+
frameProps.vSpace = (0, parsingHelpers_1.safeParseInt)(framePr["@_w:vSpace"]);
|
|
1232
1284
|
if (framePr["@_w:wrap"])
|
|
1233
1285
|
frameProps.wrap = framePr["@_w:wrap"];
|
|
1234
1286
|
if (framePr["@_w:dropCap"])
|
|
1235
1287
|
frameProps.dropCap = framePr["@_w:dropCap"];
|
|
1236
|
-
if (framePr["@_w:lines"])
|
|
1237
|
-
frameProps.lines =
|
|
1238
|
-
if (framePr["@_w:anchorLock"]
|
|
1239
|
-
const
|
|
1240
|
-
frameProps.anchorLock =
|
|
1241
|
-
anchorLockVal === "1" ||
|
|
1242
|
-
anchorLockVal === "true" ||
|
|
1243
|
-
anchorLockVal === true ||
|
|
1244
|
-
anchorLockVal === 1;
|
|
1288
|
+
if ((0, parsingHelpers_1.isExplicitlySet)(framePr["@_w:lines"]))
|
|
1289
|
+
frameProps.lines = (0, parsingHelpers_1.safeParseInt)(framePr["@_w:lines"]);
|
|
1290
|
+
if ((0, parsingHelpers_1.isExplicitlySet)(framePr["@_w:anchorLock"])) {
|
|
1291
|
+
const val = framePr["@_w:anchorLock"];
|
|
1292
|
+
frameProps.anchorLock = val === "1" || val === 1 || val === "true" || val === true || val === "on";
|
|
1245
1293
|
}
|
|
1246
1294
|
if (Object.keys(frameProps).length > 0) {
|
|
1247
1295
|
paragraph.setFrameProperties(frameProps);
|
|
@@ -1333,6 +1381,97 @@ class DocumentParser {
|
|
|
1333
1381
|
if (prevPPr["w:pageBreakBefore"]) {
|
|
1334
1382
|
previousProperties.pageBreakBefore = prevPPr["w:pageBreakBefore"]["@_w:val"] !== "0";
|
|
1335
1383
|
}
|
|
1384
|
+
if (prevPPr["w:widowControl"]) {
|
|
1385
|
+
previousProperties.widowControl = prevPPr["w:widowControl"]["@_w:val"] !== "0";
|
|
1386
|
+
}
|
|
1387
|
+
if (prevPPr["w:suppressAutoHyphens"]) {
|
|
1388
|
+
previousProperties.suppressAutoHyphens = prevPPr["w:suppressAutoHyphens"]["@_w:val"] !== "0";
|
|
1389
|
+
}
|
|
1390
|
+
if (prevPPr["w:contextualSpacing"]) {
|
|
1391
|
+
previousProperties.contextualSpacing = prevPPr["w:contextualSpacing"]["@_w:val"] !== "0";
|
|
1392
|
+
}
|
|
1393
|
+
if (prevPPr["w:mirrorIndents"]) {
|
|
1394
|
+
previousProperties.mirrorIndents = prevPPr["w:mirrorIndents"]["@_w:val"] !== "0";
|
|
1395
|
+
}
|
|
1396
|
+
if (prevPPr["w:outlineLvl"]?.["@_w:val"] !== undefined) {
|
|
1397
|
+
previousProperties.outlineLevel = parseInt(prevPPr["w:outlineLvl"]["@_w:val"], 10);
|
|
1398
|
+
}
|
|
1399
|
+
if (prevPPr["w:bidi"]) {
|
|
1400
|
+
previousProperties.bidi = prevPPr["w:bidi"]["@_w:val"] !== "0";
|
|
1401
|
+
}
|
|
1402
|
+
if (prevPPr["w:suppressLineNumbers"]) {
|
|
1403
|
+
previousProperties.suppressLineNumbers = prevPPr["w:suppressLineNumbers"]["@_w:val"] !== "0";
|
|
1404
|
+
}
|
|
1405
|
+
if (prevPPr["w:adjustRightInd"]) {
|
|
1406
|
+
previousProperties.adjustRightInd = prevPPr["w:adjustRightInd"]["@_w:val"] !== "0";
|
|
1407
|
+
}
|
|
1408
|
+
if (prevPPr["w:snapToGrid"]) {
|
|
1409
|
+
previousProperties.snapToGrid = prevPPr["w:snapToGrid"]["@_w:val"] !== "0";
|
|
1410
|
+
}
|
|
1411
|
+
if (prevPPr["w:wordWrap"]) {
|
|
1412
|
+
previousProperties.wordWrap = prevPPr["w:wordWrap"]["@_w:val"] !== "0";
|
|
1413
|
+
}
|
|
1414
|
+
if (prevPPr["w:autoSpaceDE"]) {
|
|
1415
|
+
previousProperties.autoSpaceDE = prevPPr["w:autoSpaceDE"]["@_w:val"] !== "0";
|
|
1416
|
+
}
|
|
1417
|
+
if (prevPPr["w:autoSpaceDN"]) {
|
|
1418
|
+
previousProperties.autoSpaceDN = prevPPr["w:autoSpaceDN"]["@_w:val"] !== "0";
|
|
1419
|
+
}
|
|
1420
|
+
if (prevPPr["w:textDirection"]?.["@_w:val"]) {
|
|
1421
|
+
previousProperties.textDirection = String(prevPPr["w:textDirection"]["@_w:val"]);
|
|
1422
|
+
}
|
|
1423
|
+
if (prevPPr["w:pBdr"]) {
|
|
1424
|
+
const pBdr = prevPPr["w:pBdr"];
|
|
1425
|
+
previousProperties.borders = {};
|
|
1426
|
+
const parseBorder = (borderObj) => {
|
|
1427
|
+
if (!borderObj)
|
|
1428
|
+
return undefined;
|
|
1429
|
+
return {
|
|
1430
|
+
val: borderObj["@_w:val"],
|
|
1431
|
+
sz: borderObj["@_w:sz"] !== undefined ? parseInt(borderObj["@_w:sz"], 10) : undefined,
|
|
1432
|
+
space: borderObj["@_w:space"] !== undefined ? parseInt(borderObj["@_w:space"], 10) : undefined,
|
|
1433
|
+
color: borderObj["@_w:color"],
|
|
1434
|
+
themeColor: borderObj["@_w:themeColor"],
|
|
1435
|
+
};
|
|
1436
|
+
};
|
|
1437
|
+
if (pBdr["w:top"])
|
|
1438
|
+
previousProperties.borders.top = parseBorder(pBdr["w:top"]);
|
|
1439
|
+
if (pBdr["w:bottom"])
|
|
1440
|
+
previousProperties.borders.bottom = parseBorder(pBdr["w:bottom"]);
|
|
1441
|
+
if (pBdr["w:left"])
|
|
1442
|
+
previousProperties.borders.left = parseBorder(pBdr["w:left"]);
|
|
1443
|
+
if (pBdr["w:right"])
|
|
1444
|
+
previousProperties.borders.right = parseBorder(pBdr["w:right"]);
|
|
1445
|
+
if (pBdr["w:between"])
|
|
1446
|
+
previousProperties.borders.between = parseBorder(pBdr["w:between"]);
|
|
1447
|
+
if (pBdr["w:bar"])
|
|
1448
|
+
previousProperties.borders.bar = parseBorder(pBdr["w:bar"]);
|
|
1449
|
+
if (Object.keys(previousProperties.borders).length === 0) {
|
|
1450
|
+
delete previousProperties.borders;
|
|
1451
|
+
}
|
|
1452
|
+
}
|
|
1453
|
+
if (prevPPr["w:shd"]) {
|
|
1454
|
+
const shd = prevPPr["w:shd"];
|
|
1455
|
+
previousProperties.shading = {
|
|
1456
|
+
fill: shd["@_w:fill"],
|
|
1457
|
+
color: shd["@_w:color"],
|
|
1458
|
+
val: shd["@_w:val"],
|
|
1459
|
+
themeFill: shd["@_w:themeFill"],
|
|
1460
|
+
themeColor: shd["@_w:themeColor"],
|
|
1461
|
+
};
|
|
1462
|
+
}
|
|
1463
|
+
if (prevPPr["w:tabs"]) {
|
|
1464
|
+
const tabsObj = prevPPr["w:tabs"];
|
|
1465
|
+
const tabArray = tabsObj["w:tab"];
|
|
1466
|
+
if (tabArray) {
|
|
1467
|
+
const tabs = Array.isArray(tabArray) ? tabArray : [tabArray];
|
|
1468
|
+
previousProperties.tabs = tabs.map((tab) => ({
|
|
1469
|
+
val: tab["@_w:val"],
|
|
1470
|
+
pos: tab["@_w:pos"] !== undefined ? parseInt(tab["@_w:pos"], 10) : undefined,
|
|
1471
|
+
leader: tab["@_w:leader"],
|
|
1472
|
+
}));
|
|
1473
|
+
}
|
|
1474
|
+
}
|
|
1336
1475
|
if (Object.keys(previousProperties).length > 0) {
|
|
1337
1476
|
change.previousProperties = previousProperties;
|
|
1338
1477
|
}
|
|
@@ -1877,6 +2016,10 @@ class DocumentParser {
|
|
|
1877
2016
|
switch (elementType) {
|
|
1878
2017
|
case "w:t": {
|
|
1879
2018
|
const textElements = toArray(runObj["w:t"]);
|
|
2019
|
+
if (elementIndex >= textElements.length) {
|
|
2020
|
+
logger_1.defaultLogger.debug("[DocumentParser] Invalid _orderedChildren index for w:t", { index: elementIndex, arrayLength: textElements.length });
|
|
2021
|
+
break;
|
|
2022
|
+
}
|
|
1880
2023
|
const te = textElements[elementIndex];
|
|
1881
2024
|
if (te !== undefined && te !== null) {
|
|
1882
2025
|
const text = extractTextValue(te);
|
|
@@ -1888,6 +2031,10 @@ class DocumentParser {
|
|
|
1888
2031
|
}
|
|
1889
2032
|
case "w:instrText": {
|
|
1890
2033
|
const instrElements = toArray(runObj["w:instrText"]);
|
|
2034
|
+
if (elementIndex >= instrElements.length) {
|
|
2035
|
+
logger_1.defaultLogger.debug("[DocumentParser] Invalid _orderedChildren index for w:instrText", { index: elementIndex, arrayLength: instrElements.length });
|
|
2036
|
+
break;
|
|
2037
|
+
}
|
|
1891
2038
|
const instr = instrElements[elementIndex];
|
|
1892
2039
|
if (instr !== undefined && instr !== null) {
|
|
1893
2040
|
const text = extractTextValue(instr);
|
|
@@ -1897,6 +2044,10 @@ class DocumentParser {
|
|
|
1897
2044
|
}
|
|
1898
2045
|
case "w:fldChar": {
|
|
1899
2046
|
const fldChars = toArray(runObj["w:fldChar"]);
|
|
2047
|
+
if (elementIndex >= fldChars.length) {
|
|
2048
|
+
logger_1.defaultLogger.debug("[DocumentParser] Invalid _orderedChildren index for w:fldChar", { index: elementIndex, arrayLength: fldChars.length });
|
|
2049
|
+
break;
|
|
2050
|
+
}
|
|
1900
2051
|
const fldChar = fldChars[elementIndex];
|
|
1901
2052
|
if (fldChar && typeof fldChar === "object") {
|
|
1902
2053
|
const charType = (fldChar["@_w:fldCharType"] ||
|
|
@@ -1937,6 +2088,7 @@ class DocumentParser {
|
|
|
1937
2088
|
}
|
|
1938
2089
|
}
|
|
1939
2090
|
else {
|
|
2091
|
+
console.warn('[DocumentParser] _orderedChildren missing - using fallback element ordering which may affect tab/break positions');
|
|
1940
2092
|
const textElement = runObj["w:t"];
|
|
1941
2093
|
if (textElement !== undefined && textElement !== null) {
|
|
1942
2094
|
const textElements = toArray(textElement);
|
|
@@ -2203,7 +2355,6 @@ class DocumentParser {
|
|
|
2203
2355
|
}
|
|
2204
2356
|
getStandardHyperlinkFormatting() {
|
|
2205
2357
|
return {
|
|
2206
|
-
font: "Verdana",
|
|
2207
2358
|
color: "0000FF",
|
|
2208
2359
|
underline: "single",
|
|
2209
2360
|
};
|
|
@@ -2295,29 +2446,21 @@ class DocumentParser {
|
|
|
2295
2446
|
run.setVanish(true);
|
|
2296
2447
|
if (rPrObj["w:specVanish"])
|
|
2297
2448
|
run.setSpecVanish(true);
|
|
2298
|
-
|
|
2299
|
-
if (!prop)
|
|
2300
|
-
return false;
|
|
2301
|
-
const val = prop["@_w:val"];
|
|
2302
|
-
if (val === undefined)
|
|
2303
|
-
return true;
|
|
2304
|
-
return val === "1" || val === 1 || val === "true" || val === true;
|
|
2305
|
-
};
|
|
2306
|
-
if (checkBooleanProp(rPrObj["w:rtl"]))
|
|
2449
|
+
if ((0, parsingHelpers_1.parseOoxmlBoolean)(rPrObj["w:rtl"]))
|
|
2307
2450
|
run.setRTL(true);
|
|
2308
|
-
if (
|
|
2451
|
+
if ((0, parsingHelpers_1.parseOoxmlBoolean)(rPrObj["w:b"]))
|
|
2309
2452
|
run.setBold(true);
|
|
2310
|
-
if (
|
|
2453
|
+
if ((0, parsingHelpers_1.parseOoxmlBoolean)(rPrObj["w:bCs"]))
|
|
2311
2454
|
run.setComplexScriptBold(true);
|
|
2312
|
-
if (
|
|
2455
|
+
if ((0, parsingHelpers_1.parseOoxmlBoolean)(rPrObj["w:i"]))
|
|
2313
2456
|
run.setItalic(true);
|
|
2314
|
-
if (
|
|
2457
|
+
if ((0, parsingHelpers_1.parseOoxmlBoolean)(rPrObj["w:iCs"]))
|
|
2315
2458
|
run.setComplexScriptItalic(true);
|
|
2316
|
-
if (
|
|
2459
|
+
if ((0, parsingHelpers_1.parseOoxmlBoolean)(rPrObj["w:strike"]))
|
|
2317
2460
|
run.setStrike(true);
|
|
2318
|
-
if (
|
|
2461
|
+
if ((0, parsingHelpers_1.parseOoxmlBoolean)(rPrObj["w:smallCaps"]))
|
|
2319
2462
|
run.setSmallCaps(true);
|
|
2320
|
-
if (
|
|
2463
|
+
if ((0, parsingHelpers_1.parseOoxmlBoolean)(rPrObj["w:caps"]))
|
|
2321
2464
|
run.setAllCaps(true);
|
|
2322
2465
|
if (rPrObj["w:u"]) {
|
|
2323
2466
|
const uVal = rPrObj["w:u"]["@_w:val"];
|
|
@@ -2397,6 +2540,179 @@ class DocumentParser {
|
|
|
2397
2540
|
if (rPrObj["w:highlight"]) {
|
|
2398
2541
|
run.setHighlight(rPrObj["w:highlight"]["@_w:val"]);
|
|
2399
2542
|
}
|
|
2543
|
+
if (rPrObj["w:rPrChange"]) {
|
|
2544
|
+
const changeObj = rPrObj["w:rPrChange"];
|
|
2545
|
+
const propChange = {
|
|
2546
|
+
id: changeObj["@_w:id"] !== undefined ? parseInt(String(changeObj["@_w:id"]), 10) : 0,
|
|
2547
|
+
author: changeObj["@_w:author"] ? String(changeObj["@_w:author"]) : "",
|
|
2548
|
+
date: changeObj["@_w:date"] ? new Date(String(changeObj["@_w:date"])) : new Date(),
|
|
2549
|
+
previousProperties: {},
|
|
2550
|
+
};
|
|
2551
|
+
if (changeObj["w:rPr"]) {
|
|
2552
|
+
const prevRPr = changeObj["w:rPr"];
|
|
2553
|
+
const prevProps = {};
|
|
2554
|
+
if (prevRPr["w:b"]) {
|
|
2555
|
+
prevProps.bold = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:b"]);
|
|
2556
|
+
}
|
|
2557
|
+
if (prevRPr["w:i"]) {
|
|
2558
|
+
prevProps.italic = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:i"]);
|
|
2559
|
+
}
|
|
2560
|
+
if (prevRPr["w:u"]) {
|
|
2561
|
+
const uVal = prevRPr["w:u"]["@_w:val"];
|
|
2562
|
+
prevProps.underline = uVal || true;
|
|
2563
|
+
}
|
|
2564
|
+
if (prevRPr["w:strike"]) {
|
|
2565
|
+
prevProps.strike = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:strike"]);
|
|
2566
|
+
}
|
|
2567
|
+
if (prevRPr["w:rFonts"]) {
|
|
2568
|
+
prevProps.font = prevRPr["w:rFonts"]["@_w:ascii"];
|
|
2569
|
+
}
|
|
2570
|
+
if (prevRPr["w:sz"]) {
|
|
2571
|
+
prevProps.size = (0, parsingHelpers_1.safeParseInt)(prevRPr["w:sz"]["@_w:val"]) / 2;
|
|
2572
|
+
}
|
|
2573
|
+
if (prevRPr["w:color"]) {
|
|
2574
|
+
const colorVal = prevRPr["w:color"]["@_w:val"];
|
|
2575
|
+
if (colorVal && colorVal !== "auto") {
|
|
2576
|
+
prevProps.color = colorVal;
|
|
2577
|
+
}
|
|
2578
|
+
}
|
|
2579
|
+
if (prevRPr["w:highlight"]) {
|
|
2580
|
+
prevProps.highlight = prevRPr["w:highlight"]["@_w:val"];
|
|
2581
|
+
}
|
|
2582
|
+
if (prevRPr["w:vertAlign"]) {
|
|
2583
|
+
const val = prevRPr["w:vertAlign"]["@_w:val"];
|
|
2584
|
+
if (val === "subscript")
|
|
2585
|
+
prevProps.subscript = true;
|
|
2586
|
+
if (val === "superscript")
|
|
2587
|
+
prevProps.superscript = true;
|
|
2588
|
+
}
|
|
2589
|
+
if (prevRPr["w:smallCaps"]) {
|
|
2590
|
+
prevProps.smallCaps = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:smallCaps"]);
|
|
2591
|
+
}
|
|
2592
|
+
if (prevRPr["w:caps"]) {
|
|
2593
|
+
prevProps.allCaps = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:caps"]);
|
|
2594
|
+
}
|
|
2595
|
+
if (prevRPr["w:dstrike"]) {
|
|
2596
|
+
prevProps.dstrike = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:dstrike"]);
|
|
2597
|
+
}
|
|
2598
|
+
if (prevRPr["w:outline"]) {
|
|
2599
|
+
prevProps.outline = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:outline"]);
|
|
2600
|
+
}
|
|
2601
|
+
if (prevRPr["w:shadow"]) {
|
|
2602
|
+
prevProps.shadow = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:shadow"]);
|
|
2603
|
+
}
|
|
2604
|
+
if (prevRPr["w:emboss"]) {
|
|
2605
|
+
prevProps.emboss = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:emboss"]);
|
|
2606
|
+
}
|
|
2607
|
+
if (prevRPr["w:imprint"]) {
|
|
2608
|
+
prevProps.imprint = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:imprint"]);
|
|
2609
|
+
}
|
|
2610
|
+
if (prevRPr["w:vanish"]) {
|
|
2611
|
+
prevProps.vanish = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:vanish"]);
|
|
2612
|
+
}
|
|
2613
|
+
if (prevRPr["w:specVanish"]) {
|
|
2614
|
+
prevProps.specVanish = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:specVanish"]);
|
|
2615
|
+
}
|
|
2616
|
+
if (prevRPr["w:rtl"]) {
|
|
2617
|
+
prevProps.rtl = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:rtl"]);
|
|
2618
|
+
}
|
|
2619
|
+
if (prevRPr["w:noProof"]) {
|
|
2620
|
+
prevProps.noProof = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:noProof"]);
|
|
2621
|
+
}
|
|
2622
|
+
if (prevRPr["w:snapToGrid"]) {
|
|
2623
|
+
prevProps.snapToGrid = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:snapToGrid"]);
|
|
2624
|
+
}
|
|
2625
|
+
if (prevRPr["w:bCs"]) {
|
|
2626
|
+
prevProps.complexScriptBold = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:bCs"]);
|
|
2627
|
+
}
|
|
2628
|
+
if (prevRPr["w:iCs"]) {
|
|
2629
|
+
prevProps.complexScriptItalic = (0, parsingHelpers_1.parseOoxmlBoolean)(prevRPr["w:iCs"]);
|
|
2630
|
+
}
|
|
2631
|
+
if (prevRPr["w:spacing"]) {
|
|
2632
|
+
const spacingVal = prevRPr["w:spacing"]["@_w:val"];
|
|
2633
|
+
if (spacingVal !== undefined) {
|
|
2634
|
+
prevProps.characterSpacing = (0, parsingHelpers_1.safeParseInt)(spacingVal);
|
|
2635
|
+
}
|
|
2636
|
+
}
|
|
2637
|
+
if (prevRPr["w:w"]) {
|
|
2638
|
+
const scaleVal = prevRPr["w:w"]["@_w:val"];
|
|
2639
|
+
if (scaleVal !== undefined) {
|
|
2640
|
+
prevProps.scaling = (0, parsingHelpers_1.safeParseInt)(scaleVal);
|
|
2641
|
+
}
|
|
2642
|
+
}
|
|
2643
|
+
if (prevRPr["w:position"]) {
|
|
2644
|
+
const posVal = prevRPr["w:position"]["@_w:val"];
|
|
2645
|
+
if (posVal !== undefined) {
|
|
2646
|
+
prevProps.position = (0, parsingHelpers_1.safeParseInt)(posVal);
|
|
2647
|
+
}
|
|
2648
|
+
}
|
|
2649
|
+
if (prevRPr["w:kern"]) {
|
|
2650
|
+
const kernVal = prevRPr["w:kern"]["@_w:val"];
|
|
2651
|
+
if (kernVal !== undefined) {
|
|
2652
|
+
prevProps.kerning = (0, parsingHelpers_1.safeParseInt)(kernVal);
|
|
2653
|
+
}
|
|
2654
|
+
}
|
|
2655
|
+
if (prevRPr["w:lang"]) {
|
|
2656
|
+
const langVal = prevRPr["w:lang"]["@_w:val"];
|
|
2657
|
+
if (langVal) {
|
|
2658
|
+
prevProps.language = String(langVal);
|
|
2659
|
+
}
|
|
2660
|
+
}
|
|
2661
|
+
if (prevRPr["w:rStyle"]) {
|
|
2662
|
+
const styleVal = prevRPr["w:rStyle"]["@_w:val"];
|
|
2663
|
+
if (styleVal) {
|
|
2664
|
+
prevProps.characterStyle = String(styleVal);
|
|
2665
|
+
}
|
|
2666
|
+
}
|
|
2667
|
+
if (prevRPr["w:effect"]) {
|
|
2668
|
+
const effectVal = prevRPr["w:effect"]["@_w:val"];
|
|
2669
|
+
if (effectVal) {
|
|
2670
|
+
prevProps.effect = effectVal;
|
|
2671
|
+
}
|
|
2672
|
+
}
|
|
2673
|
+
if (prevRPr["w:fitText"]) {
|
|
2674
|
+
const fitVal = prevRPr["w:fitText"]["@_w:val"];
|
|
2675
|
+
if (fitVal !== undefined) {
|
|
2676
|
+
prevProps.fitText = (0, parsingHelpers_1.safeParseInt)(fitVal);
|
|
2677
|
+
}
|
|
2678
|
+
}
|
|
2679
|
+
if (prevRPr["w:em"]) {
|
|
2680
|
+
const emVal = prevRPr["w:em"]["@_w:val"];
|
|
2681
|
+
if (emVal) {
|
|
2682
|
+
prevProps.emphasis = emVal;
|
|
2683
|
+
}
|
|
2684
|
+
}
|
|
2685
|
+
if (prevRPr["w:bdr"]) {
|
|
2686
|
+
const bdrObj = prevRPr["w:bdr"];
|
|
2687
|
+
prevProps.border = {
|
|
2688
|
+
style: bdrObj["@_w:val"],
|
|
2689
|
+
size: bdrObj["@_w:sz"] !== undefined ? (0, parsingHelpers_1.safeParseInt)(bdrObj["@_w:sz"]) : undefined,
|
|
2690
|
+
space: bdrObj["@_w:space"] !== undefined ? (0, parsingHelpers_1.safeParseInt)(bdrObj["@_w:space"]) : undefined,
|
|
2691
|
+
color: bdrObj["@_w:color"],
|
|
2692
|
+
};
|
|
2693
|
+
}
|
|
2694
|
+
if (prevRPr["w:shd"]) {
|
|
2695
|
+
const shdObj = prevRPr["w:shd"];
|
|
2696
|
+
prevProps.shading = {
|
|
2697
|
+
fill: shdObj["@_w:fill"],
|
|
2698
|
+
color: shdObj["@_w:color"],
|
|
2699
|
+
val: shdObj["@_w:val"],
|
|
2700
|
+
};
|
|
2701
|
+
}
|
|
2702
|
+
if (prevRPr["w:eastAsianLayout"]) {
|
|
2703
|
+
const eaObj = prevRPr["w:eastAsianLayout"];
|
|
2704
|
+
prevProps.eastAsianLayout = {
|
|
2705
|
+
id: eaObj["@_w:id"] !== undefined ? (0, parsingHelpers_1.safeParseInt)(eaObj["@_w:id"]) : undefined,
|
|
2706
|
+
combine: eaObj["@_w:combine"] ? (0, parsingHelpers_1.parseOoxmlBoolean)({ "@_w:val": eaObj["@_w:combine"] }) : undefined,
|
|
2707
|
+
combineBrackets: eaObj["@_w:combineBrackets"],
|
|
2708
|
+
vert: eaObj["@_w:vert"] ? (0, parsingHelpers_1.parseOoxmlBoolean)({ "@_w:val": eaObj["@_w:vert"] }) : undefined,
|
|
2709
|
+
vertCompress: eaObj["@_w:vertCompress"] ? (0, parsingHelpers_1.parseOoxmlBoolean)({ "@_w:val": eaObj["@_w:vertCompress"] }) : undefined,
|
|
2710
|
+
};
|
|
2711
|
+
}
|
|
2712
|
+
propChange.previousProperties = prevProps;
|
|
2713
|
+
}
|
|
2714
|
+
run.setPropertyChangeRevision(propChange);
|
|
2715
|
+
}
|
|
2400
2716
|
}
|
|
2401
2717
|
async parseDrawingFromObject(drawingObj, zipHandler, relationshipManager, imageManager) {
|
|
2402
2718
|
try {
|
|
@@ -2656,7 +2972,7 @@ class DocumentParser {
|
|
|
2656
2972
|
const gridColArray = Array.isArray(gridCols) ? gridCols : [gridCols];
|
|
2657
2973
|
const widths = gridColArray.map((col) => {
|
|
2658
2974
|
const w = col["@_w:w"];
|
|
2659
|
-
return w ?
|
|
2975
|
+
return (0, parsingHelpers_1.isExplicitlySet)(w) ? (0, parsingHelpers_1.safeParseInt)(w, 2880) : 2880;
|
|
2660
2976
|
});
|
|
2661
2977
|
if (widths.length > 0) {
|
|
2662
2978
|
table.setTableGrid(widths);
|
|
@@ -2666,10 +2982,6 @@ class DocumentParser {
|
|
|
2666
2982
|
const rowChildren = Array.isArray(rows) ? rows : rows ? [rows] : [];
|
|
2667
2983
|
let rowXmls = [];
|
|
2668
2984
|
if (rawTableXml) {
|
|
2669
|
-
if (rawTableXml.includes('Bullet 3') && rawTableXml.includes('pPrChange')) {
|
|
2670
|
-
const pPrChangeIdx = rawTableXml.indexOf('pPrChange');
|
|
2671
|
-
console.log(`[DEBUG parseTableFromObject] rawTableXml around pPrChange:`, rawTableXml.substring(pPrChangeIdx - 100, pPrChangeIdx + 200));
|
|
2672
|
-
}
|
|
2673
2985
|
rowXmls = XMLParser_1.XMLParser.extractElements(rawTableXml, "w:tr");
|
|
2674
2986
|
}
|
|
2675
2987
|
const rowPositions = [];
|
|
@@ -2814,10 +3126,6 @@ class DocumentParser {
|
|
|
2814
3126
|
const cellChildren = Array.isArray(cells) ? cells : cells ? [cells] : [];
|
|
2815
3127
|
let cellXmls = [];
|
|
2816
3128
|
if (rawRowXml) {
|
|
2817
|
-
if (rawRowXml.includes('Bullet 3') && rawRowXml.includes('pPrChange')) {
|
|
2818
|
-
const pPrChangeIdx = rawRowXml.indexOf('pPrChange');
|
|
2819
|
-
console.log(`[DEBUG parseTableRowFromObject] rawRowXml around pPrChange:`, rawRowXml.substring(pPrChangeIdx - 100, pPrChangeIdx + 200));
|
|
2820
|
-
}
|
|
2821
3129
|
cellXmls = XMLParser_1.XMLParser.extractElements(rawRowXml, "w:tc");
|
|
2822
3130
|
}
|
|
2823
3131
|
for (let i = 0; i < cellChildren.length; i++) {
|
|
@@ -3269,22 +3577,22 @@ class DocumentParser {
|
|
|
3269
3577
|
properties.controlType = "datePicker";
|
|
3270
3578
|
const dateElement = sdtPr["w:date"];
|
|
3271
3579
|
properties.datePicker = {
|
|
3272
|
-
dateFormat: dateElement?.["w:dateFormat"]?.["@_w:val"],
|
|
3273
|
-
fullDate: dateElement?.["w:fullDate"]?.["@_w:val"]
|
|
3274
|
-
? new Date(dateElement["w:fullDate"]["@_w:val"])
|
|
3580
|
+
dateFormat: dateElement?.["@_w:dateFormat"] || dateElement?.["w:dateFormat"]?.["@_w:val"],
|
|
3581
|
+
fullDate: (dateElement?.["@_w:fullDate"] || dateElement?.["w:fullDate"]?.["@_w:val"])
|
|
3582
|
+
? new Date(dateElement["@_w:fullDate"] || dateElement["w:fullDate"]["@_w:val"])
|
|
3275
3583
|
: undefined,
|
|
3276
|
-
lid: dateElement?.["w:lid"]?.["@_w:val"],
|
|
3277
|
-
calendar: dateElement?.["w:calendar"]?.["@_w:val"],
|
|
3584
|
+
lid: dateElement?.["@_w:lid"] || dateElement?.["w:lid"]?.["@_w:val"],
|
|
3585
|
+
calendar: dateElement?.["@_w:calendar"] || dateElement?.["w:calendar"]?.["@_w:val"],
|
|
3278
3586
|
};
|
|
3279
3587
|
}
|
|
3280
3588
|
else if (sdtPr["w14:checkbox"]) {
|
|
3281
3589
|
properties.controlType = "checkbox";
|
|
3282
3590
|
const checkboxElement = sdtPr["w14:checkbox"];
|
|
3591
|
+
const checkedVal = checkboxElement?.["w14:checked"]?.["@_w14:val"];
|
|
3283
3592
|
properties.checkbox = {
|
|
3284
|
-
checked:
|
|
3285
|
-
|
|
3286
|
-
|
|
3287
|
-
uncheckedState: checkboxElement?.["w14:uncheckedState"]?.["@_w14:val"],
|
|
3593
|
+
checked: checkedVal === 1 || checkedVal === "1" || checkedVal === true || checkedVal === "true",
|
|
3594
|
+
checkedState: String(checkboxElement?.["w14:checkedState"]?.["@_w14:val"] ?? ""),
|
|
3595
|
+
uncheckedState: String(checkboxElement?.["w14:uncheckedState"]?.["@_w14:val"] ?? ""),
|
|
3288
3596
|
};
|
|
3289
3597
|
}
|
|
3290
3598
|
else if (sdtPr["w:picture"]) {
|