docxmlater 10.1.3 → 10.1.5
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 +759 -754
- package/dist/constants/legacyCompatFlags.js +1 -1
- package/dist/constants/legacyCompatFlags.js.map +1 -1
- package/dist/constants/limits.js.map +1 -1
- package/dist/core/Document.d.ts +50 -50
- package/dist/core/Document.d.ts.map +1 -1
- package/dist/core/Document.js +483 -471
- package/dist/core/Document.js.map +1 -1
- package/dist/core/DocumentContent.d.ts +9 -9
- package/dist/core/DocumentContent.d.ts.map +1 -1
- package/dist/core/DocumentContent.js +1 -1
- package/dist/core/DocumentContent.js.map +1 -1
- package/dist/core/DocumentGenerator.d.ts +11 -11
- package/dist/core/DocumentGenerator.d.ts.map +1 -1
- package/dist/core/DocumentGenerator.js +251 -251
- package/dist/core/DocumentGenerator.js.map +1 -1
- package/dist/core/DocumentIdManager.js.map +1 -1
- package/dist/core/DocumentParser.d.ts +15 -15
- package/dist/core/DocumentParser.d.ts.map +1 -1
- package/dist/core/DocumentParser.js +2123 -2155
- package/dist/core/DocumentParser.js.map +1 -1
- package/dist/core/DocumentValidator.d.ts.map +1 -1
- package/dist/core/DocumentValidator.js +2 -5
- package/dist/core/DocumentValidator.js.map +1 -1
- package/dist/core/Relationship.js.map +1 -1
- package/dist/core/RelationshipManager.d.ts.map +1 -1
- package/dist/core/RelationshipManager.js +3 -3
- package/dist/core/RelationshipManager.js.map +1 -1
- package/dist/elements/AlternateContent.js.map +1 -1
- package/dist/elements/Bookmark.d.ts.map +1 -1
- package/dist/elements/Bookmark.js +3 -1
- package/dist/elements/Bookmark.js.map +1 -1
- package/dist/elements/BookmarkManager.d.ts.map +1 -1
- package/dist/elements/BookmarkManager.js.map +1 -1
- package/dist/elements/Comment.d.ts.map +1 -1
- package/dist/elements/Comment.js +9 -6
- package/dist/elements/Comment.js.map +1 -1
- package/dist/elements/CommentManager.d.ts.map +1 -1
- package/dist/elements/CommentManager.js +18 -17
- package/dist/elements/CommentManager.js.map +1 -1
- package/dist/elements/CommonTypes.d.ts +21 -21
- package/dist/elements/CommonTypes.d.ts.map +1 -1
- package/dist/elements/CommonTypes.js +56 -56
- package/dist/elements/CommonTypes.js.map +1 -1
- package/dist/elements/CustomXml.js.map +1 -1
- package/dist/elements/Endnote.d.ts.map +1 -1
- package/dist/elements/Endnote.js +6 -6
- package/dist/elements/Endnote.js.map +1 -1
- package/dist/elements/EndnoteManager.d.ts.map +1 -1
- package/dist/elements/EndnoteManager.js +6 -7
- package/dist/elements/EndnoteManager.js.map +1 -1
- package/dist/elements/Field.d.ts.map +1 -1
- package/dist/elements/Field.js +82 -25
- package/dist/elements/Field.js.map +1 -1
- package/dist/elements/FieldHelpers.d.ts.map +1 -1
- package/dist/elements/FieldHelpers.js.map +1 -1
- package/dist/elements/FontManager.d.ts.map +1 -1
- package/dist/elements/FontManager.js +1 -1
- package/dist/elements/FontManager.js.map +1 -1
- package/dist/elements/Footer.js +2 -2
- package/dist/elements/Footer.js.map +1 -1
- package/dist/elements/Footnote.d.ts.map +1 -1
- package/dist/elements/Footnote.js +6 -6
- package/dist/elements/Footnote.js.map +1 -1
- package/dist/elements/FootnoteManager.d.ts.map +1 -1
- package/dist/elements/FootnoteManager.js +6 -7
- package/dist/elements/FootnoteManager.js.map +1 -1
- package/dist/elements/Header.js +2 -2
- package/dist/elements/Header.js.map +1 -1
- package/dist/elements/HeaderFooterManager.js.map +1 -1
- package/dist/elements/Hyperlink.d.ts +5 -3
- package/dist/elements/Hyperlink.d.ts.map +1 -1
- package/dist/elements/Hyperlink.js +134 -76
- package/dist/elements/Hyperlink.js.map +1 -1
- package/dist/elements/Image.d.ts.map +1 -1
- package/dist/elements/Image.js +238 -106
- package/dist/elements/Image.js.map +1 -1
- package/dist/elements/ImageManager.d.ts.map +1 -1
- package/dist/elements/ImageManager.js +1 -1
- package/dist/elements/ImageManager.js.map +1 -1
- package/dist/elements/ImageRun.js +1 -1
- package/dist/elements/ImageRun.js.map +1 -1
- package/dist/elements/MathElement.js.map +1 -1
- package/dist/elements/Paragraph.d.ts +24 -24
- package/dist/elements/Paragraph.d.ts.map +1 -1
- package/dist/elements/Paragraph.js +181 -188
- package/dist/elements/Paragraph.js.map +1 -1
- package/dist/elements/PreservedElement.js.map +1 -1
- package/dist/elements/PropertyChangeTypes.d.ts.map +1 -1
- package/dist/elements/PropertyChangeTypes.js +6 -6
- package/dist/elements/PropertyChangeTypes.js.map +1 -1
- package/dist/elements/RangeMarker.d.ts.map +1 -1
- package/dist/elements/RangeMarker.js.map +1 -1
- package/dist/elements/Revision.d.ts.map +1 -1
- package/dist/elements/Revision.js +4 -5
- package/dist/elements/Revision.js.map +1 -1
- package/dist/elements/RevisionContent.js.map +1 -1
- package/dist/elements/RevisionManager.d.ts.map +1 -1
- package/dist/elements/RevisionManager.js +40 -48
- package/dist/elements/RevisionManager.js.map +1 -1
- package/dist/elements/Run.d.ts +16 -16
- package/dist/elements/Run.d.ts.map +1 -1
- package/dist/elements/Run.js +256 -238
- package/dist/elements/Run.js.map +1 -1
- package/dist/elements/Section.d.ts.map +1 -1
- package/dist/elements/Section.js +36 -11
- package/dist/elements/Section.js.map +1 -1
- package/dist/elements/Shape.d.ts.map +1 -1
- package/dist/elements/Shape.js.map +1 -1
- package/dist/elements/StructuredDocumentTag.d.ts +6 -6
- package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
- package/dist/elements/StructuredDocumentTag.js +99 -104
- package/dist/elements/StructuredDocumentTag.js.map +1 -1
- package/dist/elements/Table.d.ts +11 -11
- package/dist/elements/Table.d.ts.map +1 -1
- package/dist/elements/Table.js +102 -107
- package/dist/elements/Table.js.map +1 -1
- package/dist/elements/TableCell.d.ts +10 -10
- package/dist/elements/TableCell.d.ts.map +1 -1
- package/dist/elements/TableCell.js +105 -106
- package/dist/elements/TableCell.js.map +1 -1
- package/dist/elements/TableGridChange.d.ts.map +1 -1
- package/dist/elements/TableGridChange.js.map +1 -1
- package/dist/elements/TableOfContents.d.ts.map +1 -1
- package/dist/elements/TableOfContents.js +4 -4
- package/dist/elements/TableOfContents.js.map +1 -1
- package/dist/elements/TableOfContentsElement.js.map +1 -1
- package/dist/elements/TableRow.d.ts.map +1 -1
- package/dist/elements/TableRow.js +13 -6
- package/dist/elements/TableRow.js.map +1 -1
- package/dist/elements/TextBox.d.ts.map +1 -1
- package/dist/elements/TextBox.js +3 -5
- package/dist/elements/TextBox.js.map +1 -1
- package/dist/formatting/AbstractNumbering.d.ts +4 -4
- package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
- package/dist/formatting/AbstractNumbering.js +54 -49
- package/dist/formatting/AbstractNumbering.js.map +1 -1
- package/dist/formatting/NumberingInstance.d.ts.map +1 -1
- package/dist/formatting/NumberingInstance.js +1 -3
- package/dist/formatting/NumberingInstance.js.map +1 -1
- package/dist/formatting/NumberingLevel.d.ts +5 -5
- package/dist/formatting/NumberingLevel.d.ts.map +1 -1
- package/dist/formatting/NumberingLevel.js +119 -125
- package/dist/formatting/NumberingLevel.js.map +1 -1
- package/dist/formatting/NumberingManager.d.ts.map +1 -1
- package/dist/formatting/NumberingManager.js +9 -9
- package/dist/formatting/NumberingManager.js.map +1 -1
- package/dist/formatting/Style.d.ts +11 -11
- package/dist/formatting/Style.d.ts.map +1 -1
- package/dist/formatting/Style.js +219 -247
- package/dist/formatting/Style.js.map +1 -1
- package/dist/formatting/StylesManager.d.ts +2 -2
- package/dist/formatting/StylesManager.d.ts.map +1 -1
- package/dist/formatting/StylesManager.js +96 -102
- package/dist/formatting/StylesManager.js.map +1 -1
- package/dist/helpers/CleanupHelper.d.ts +1 -1
- package/dist/helpers/CleanupHelper.d.ts.map +1 -1
- package/dist/helpers/CleanupHelper.js +6 -6
- package/dist/helpers/CleanupHelper.js.map +1 -1
- package/dist/images/ImageOptimizer.js +7 -7
- package/dist/images/ImageOptimizer.js.map +1 -1
- package/dist/index.d.ts +9 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/managers/DrawingManager.js.map +1 -1
- package/dist/tracking/DocumentTrackingContext.d.ts.map +1 -1
- package/dist/tracking/DocumentTrackingContext.js +23 -7
- package/dist/tracking/DocumentTrackingContext.js.map +1 -1
- package/dist/tracking/TrackingContext.d.ts.map +1 -1
- package/dist/tracking/TrackingContext.js.map +1 -1
- package/dist/types/compatibility-types.js.map +1 -1
- package/dist/types/formatting.js.map +1 -1
- package/dist/types/list-types.d.ts +6 -6
- package/dist/types/list-types.js.map +1 -1
- package/dist/types/settings-types.js.map +1 -1
- package/dist/types/styleConfig.d.ts +2 -2
- package/dist/types/styleConfig.js.map +1 -1
- package/dist/utils/ChangelogGenerator.d.ts.map +1 -1
- package/dist/utils/ChangelogGenerator.js +97 -101
- package/dist/utils/ChangelogGenerator.js.map +1 -1
- package/dist/utils/CompatibilityUpgrader.d.ts.map +1 -1
- package/dist/utils/CompatibilityUpgrader.js +1 -1
- package/dist/utils/CompatibilityUpgrader.js.map +1 -1
- package/dist/utils/InMemoryRevisionAcceptor.d.ts.map +1 -1
- package/dist/utils/InMemoryRevisionAcceptor.js +1 -6
- package/dist/utils/InMemoryRevisionAcceptor.js.map +1 -1
- package/dist/utils/MoveOperationHelper.d.ts.map +1 -1
- package/dist/utils/MoveOperationHelper.js +1 -1
- package/dist/utils/MoveOperationHelper.js.map +1 -1
- package/dist/utils/RevisionAwareProcessor.d.ts.map +1 -1
- package/dist/utils/RevisionAwareProcessor.js +2 -4
- package/dist/utils/RevisionAwareProcessor.js.map +1 -1
- package/dist/utils/RevisionWalker.d.ts.map +1 -1
- package/dist/utils/RevisionWalker.js +4 -12
- package/dist/utils/RevisionWalker.js.map +1 -1
- package/dist/utils/SelectiveRevisionAcceptor.d.ts.map +1 -1
- package/dist/utils/SelectiveRevisionAcceptor.js +2 -6
- package/dist/utils/SelectiveRevisionAcceptor.js.map +1 -1
- package/dist/utils/ShadingResolver.d.ts.map +1 -1
- package/dist/utils/ShadingResolver.js +1 -1
- package/dist/utils/ShadingResolver.js.map +1 -1
- package/dist/utils/acceptRevisions.d.ts.map +1 -1
- package/dist/utils/acceptRevisions.js +23 -12
- package/dist/utils/acceptRevisions.js.map +1 -1
- package/dist/utils/cnfStyleDecoder.d.ts +1 -1
- package/dist/utils/cnfStyleDecoder.d.ts.map +1 -1
- package/dist/utils/cnfStyleDecoder.js +40 -40
- package/dist/utils/cnfStyleDecoder.js.map +1 -1
- package/dist/utils/corruptionDetection.d.ts.map +1 -1
- package/dist/utils/corruptionDetection.js.map +1 -1
- package/dist/utils/dateFormatting.js.map +1 -1
- package/dist/utils/deepClone.js +1 -1
- package/dist/utils/deepClone.js.map +1 -1
- package/dist/utils/diagnostics.d.ts.map +1 -1
- package/dist/utils/diagnostics.js +1 -1
- package/dist/utils/diagnostics.js.map +1 -1
- package/dist/utils/errorHandling.js.map +1 -1
- package/dist/utils/formatting.d.ts.map +1 -1
- package/dist/utils/formatting.js +10 -2
- package/dist/utils/formatting.js.map +1 -1
- package/dist/utils/list-detection.d.ts +2 -2
- package/dist/utils/list-detection.d.ts.map +1 -1
- package/dist/utils/list-detection.js +21 -23
- package/dist/utils/list-detection.js.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +12 -7
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/parsingHelpers.js.map +1 -1
- package/dist/utils/stripTrackedChanges.d.ts.map +1 -1
- package/dist/utils/stripTrackedChanges.js +3 -3
- package/dist/utils/stripTrackedChanges.js.map +1 -1
- package/dist/utils/textDiff.d.ts +1 -1
- package/dist/utils/textDiff.js +8 -8
- package/dist/utils/textDiff.js.map +1 -1
- package/dist/utils/units.js.map +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +24 -7
- package/dist/utils/validation.js.map +1 -1
- package/dist/utils/xmlSanitization.d.ts.map +1 -1
- package/dist/utils/xmlSanitization.js +3 -3
- package/dist/utils/xmlSanitization.js.map +1 -1
- package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
- package/dist/validation/RevisionAutoFixer.js +5 -5
- package/dist/validation/RevisionAutoFixer.js.map +1 -1
- package/dist/validation/RevisionValidator.d.ts.map +1 -1
- package/dist/validation/RevisionValidator.js +7 -9
- package/dist/validation/RevisionValidator.js.map +1 -1
- package/dist/validation/ValidationRules.js +3 -3
- package/dist/validation/ValidationRules.js.map +1 -1
- package/dist/validation/index.js.map +1 -1
- package/dist/xml/XMLBuilder.d.ts +1 -1
- package/dist/xml/XMLBuilder.d.ts.map +1 -1
- package/dist/xml/XMLBuilder.js +98 -100
- package/dist/xml/XMLBuilder.js.map +1 -1
- package/dist/xml/XMLParser.d.ts.map +1 -1
- package/dist/xml/XMLParser.js +61 -66
- package/dist/xml/XMLParser.js.map +1 -1
- package/dist/zip/ZipHandler.d.ts.map +1 -1
- package/dist/zip/ZipHandler.js.map +1 -1
- package/dist/zip/ZipReader.d.ts.map +1 -1
- package/dist/zip/ZipReader.js +1 -3
- package/dist/zip/ZipReader.js.map +1 -1
- package/dist/zip/ZipWriter.d.ts +1 -1
- package/dist/zip/ZipWriter.d.ts.map +1 -1
- package/dist/zip/ZipWriter.js +28 -36
- package/dist/zip/ZipWriter.js.map +1 -1
- package/dist/zip/types.js +1 -1
- package/dist/zip/types.js.map +1 -1
- package/package.json +92 -92
- package/src/__tests__/helper-methods.test.ts +512 -512
- package/src/constants/legacyCompatFlags.ts +138 -138
- package/src/constants/limits.ts +50 -50
- package/src/core/Document.ts +985 -1145
- package/src/core/DocumentContent.ts +461 -467
- package/src/core/DocumentGenerator.ts +1133 -1104
- package/src/core/DocumentIdManager.ts +158 -158
- package/src/core/DocumentParser.ts +2347 -2716
- package/src/core/DocumentValidator.ts +363 -372
- package/src/core/Relationship.ts +367 -367
- package/src/core/RelationshipManager.ts +429 -428
- package/src/elements/AlternateContent.ts +42 -42
- package/src/elements/Bookmark.ts +212 -210
- package/src/elements/BookmarkManager.ts +247 -250
- package/src/elements/Comment.ts +356 -359
- package/src/elements/CommentManager.ts +499 -502
- package/src/elements/CommonTypes.ts +524 -549
- package/src/elements/CustomXml.ts +36 -36
- package/src/elements/Endnote.ts +221 -217
- package/src/elements/EndnoteManager.ts +246 -249
- package/src/elements/Field.ts +1292 -1233
- package/src/elements/FieldHelpers.ts +329 -333
- package/src/elements/FontManager.ts +336 -339
- package/src/elements/Footer.ts +269 -269
- package/src/elements/Footnote.ts +221 -217
- package/src/elements/FootnoteManager.ts +246 -249
- package/src/elements/Header.ts +269 -269
- package/src/elements/HeaderFooterManager.ts +219 -219
- package/src/elements/Hyperlink.ts +1288 -1193
- package/src/elements/Image.ts +1982 -1756
- package/src/elements/ImageManager.ts +437 -432
- package/src/elements/ImageRun.ts +59 -59
- package/src/elements/MathElement.ts +65 -65
- package/src/elements/Paragraph.ts +4347 -4287
- package/src/elements/PreservedElement.ts +53 -53
- package/src/elements/PropertyChangeTypes.ts +458 -442
- package/src/elements/RangeMarker.ts +382 -400
- package/src/elements/Revision.ts +1198 -1217
- package/src/elements/RevisionContent.ts +73 -73
- package/src/elements/RevisionManager.ts +1070 -1070
- package/src/elements/Run.ts +3103 -3073
- package/src/elements/Section.ts +1521 -1421
- package/src/elements/Shape.ts +884 -873
- package/src/elements/StructuredDocumentTag.ts +1176 -1207
- package/src/elements/Table.ts +2468 -2524
- package/src/elements/TableCell.ts +1617 -1621
- package/src/elements/TableGridChange.ts +149 -151
- package/src/elements/TableOfContents.ts +701 -691
- package/src/elements/TableOfContentsElement.ts +89 -89
- package/src/elements/TableRow.ts +960 -929
- package/src/elements/TextBox.ts +766 -768
- package/src/formatting/AbstractNumbering.ts +580 -579
- package/src/formatting/NumberingInstance.ts +295 -299
- package/src/formatting/NumberingLevel.ts +981 -1040
- package/src/formatting/NumberingManager.ts +833 -827
- package/src/formatting/Style.ts +1785 -1879
- package/src/formatting/StylesManager.ts +1090 -1130
- package/src/helpers/CleanupHelper.ts +524 -524
- package/src/images/ImageOptimizer.ts +274 -274
- package/src/index.ts +559 -554
- package/src/managers/DrawingManager.ts +319 -319
- package/src/tracking/DocumentTrackingContext.ts +687 -674
- package/src/tracking/TrackingContext.ts +175 -173
- package/src/types/compatibility-types.ts +49 -49
- package/src/types/formatting.ts +210 -210
- package/src/types/list-types.ts +14 -14
- package/src/types/settings-types.ts +59 -59
- package/src/types/styleConfig.ts +189 -189
- package/src/utils/ChangelogGenerator.ts +1583 -1581
- package/src/utils/CompatibilityUpgrader.ts +235 -237
- package/src/utils/InMemoryRevisionAcceptor.ts +691 -696
- package/src/utils/MoveOperationHelper.ts +233 -238
- package/src/utils/RevisionAwareProcessor.ts +518 -526
- package/src/utils/RevisionWalker.ts +427 -457
- package/src/utils/SelectiveRevisionAcceptor.ts +662 -683
- package/src/utils/ShadingResolver.ts +105 -107
- package/src/utils/acceptRevisions.ts +723 -714
- package/src/utils/cnfStyleDecoder.ts +212 -217
- package/src/utils/corruptionDetection.ts +346 -345
- package/src/utils/dateFormatting.ts +20 -20
- package/src/utils/deepClone.ts +77 -78
- package/src/utils/diagnostics.ts +125 -129
- package/src/utils/errorHandling.ts +80 -80
- package/src/utils/formatting.ts +220 -213
- package/src/utils/list-detection.ts +32 -42
- package/src/utils/logger.ts +412 -404
- package/src/utils/parsingHelpers.ts +190 -190
- package/src/utils/stripTrackedChanges.ts +356 -353
- package/src/utils/textDiff.ts +100 -100
- package/src/utils/units.ts +421 -421
- package/src/utils/validation.ts +553 -542
- package/src/utils/xmlSanitization.ts +179 -182
- package/src/validation/RevisionAutoFixer.ts +541 -542
- package/src/validation/RevisionValidator.ts +470 -460
- package/src/validation/ValidationRules.ts +338 -338
- package/src/validation/index.ts +30 -30
- package/src/xml/XMLBuilder.ts +857 -871
- package/src/xml/XMLParser.ts +877 -919
- package/src/zip/ZipHandler.ts +629 -637
- package/src/zip/ZipReader.ts +295 -299
- package/src/zip/ZipWriter.ts +374 -390
- package/src/zip/types.ts +116 -116
|
@@ -19,6 +19,7 @@ class Hyperlink {
|
|
|
19
19
|
docLocation;
|
|
20
20
|
trackingContext;
|
|
21
21
|
_parentParagraph;
|
|
22
|
+
_preTrackingFormatting;
|
|
22
23
|
constructor(properties) {
|
|
23
24
|
this.url = properties.url;
|
|
24
25
|
this.anchor = properties.anchor;
|
|
@@ -34,14 +35,14 @@ class Hyperlink {
|
|
|
34
35
|
`Use Hyperlink.createExternal() or Hyperlink.createInternal() to avoid ambiguity.`);
|
|
35
36
|
}
|
|
36
37
|
if (this._isEmpty) {
|
|
37
|
-
this.text =
|
|
38
|
+
this.text = '';
|
|
38
39
|
this.formatting = {};
|
|
39
|
-
this.run = new Run_1.Run(
|
|
40
|
+
this.run = new Run_1.Run('', {});
|
|
40
41
|
return;
|
|
41
42
|
}
|
|
42
|
-
this.text = properties.text || this.url ||
|
|
43
|
+
this.text = properties.text || this.url || 'Link';
|
|
43
44
|
const validation = (0, validation_1.validateRunText)(this.text, {
|
|
44
|
-
context:
|
|
45
|
+
context: 'Hyperlink text',
|
|
45
46
|
autoClean: properties.formatting?.cleanXmlFromText !== false,
|
|
46
47
|
warnToConsole: true,
|
|
47
48
|
});
|
|
@@ -49,10 +50,10 @@ class Hyperlink {
|
|
|
49
50
|
this.text = validation.cleanedText;
|
|
50
51
|
}
|
|
51
52
|
this.formatting = {
|
|
52
|
-
font:
|
|
53
|
+
font: 'Verdana',
|
|
53
54
|
size: 12,
|
|
54
|
-
color:
|
|
55
|
-
underline:
|
|
55
|
+
color: '0000FF',
|
|
56
|
+
underline: 'single',
|
|
56
57
|
...properties.formatting,
|
|
57
58
|
};
|
|
58
59
|
this.run = new Run_1.Run(this.text, this.formatting);
|
|
@@ -66,6 +67,37 @@ class Hyperlink {
|
|
|
66
67
|
_getParentParagraph() {
|
|
67
68
|
return this._parentParagraph;
|
|
68
69
|
}
|
|
70
|
+
_applyFormattingRPrChange(previousFormatting) {
|
|
71
|
+
if (!this._preTrackingFormatting) {
|
|
72
|
+
this._preTrackingFormatting = { ...previousFormatting };
|
|
73
|
+
}
|
|
74
|
+
const baseline = this._preTrackingFormatting;
|
|
75
|
+
const current = this.formatting;
|
|
76
|
+
const previousProperties = {};
|
|
77
|
+
let hasChanges = false;
|
|
78
|
+
for (const key of Object.keys(baseline)) {
|
|
79
|
+
if (baseline[key] !== current[key]) {
|
|
80
|
+
previousProperties[key] = baseline[key];
|
|
81
|
+
hasChanges = true;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
for (const key of Object.keys(current)) {
|
|
85
|
+
if (!(key in baseline) && current[key] !== undefined) {
|
|
86
|
+
previousProperties[key] = undefined;
|
|
87
|
+
hasChanges = true;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (!hasChanges)
|
|
91
|
+
return;
|
|
92
|
+
const revisionId = this.trackingContext.getRevisionManager().consumeNextId();
|
|
93
|
+
const author = this.trackingContext.getAuthor();
|
|
94
|
+
this.run.setPropertyChangeRevision({
|
|
95
|
+
id: revisionId,
|
|
96
|
+
author,
|
|
97
|
+
date: new Date(),
|
|
98
|
+
previousProperties,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
69
101
|
getUrl() {
|
|
70
102
|
return this.url;
|
|
71
103
|
}
|
|
@@ -107,17 +139,29 @@ class Hyperlink {
|
|
|
107
139
|
}
|
|
108
140
|
setText(text) {
|
|
109
141
|
const validation = (0, validation_1.validateRunText)(text, {
|
|
110
|
-
context:
|
|
142
|
+
context: 'Hyperlink.setText',
|
|
111
143
|
autoClean: this.formatting.cleanXmlFromText !== false,
|
|
112
144
|
warnToConsole: true,
|
|
113
145
|
});
|
|
114
146
|
const cleanedText = validation.cleanedText || text;
|
|
115
147
|
const previousValue = this.text;
|
|
148
|
+
if (previousValue === cleanedText) {
|
|
149
|
+
return this;
|
|
150
|
+
}
|
|
151
|
+
if (this.trackingContext?.isEnabled() && this._parentParagraph) {
|
|
152
|
+
const author = this.trackingContext.getAuthor();
|
|
153
|
+
const oldHyperlink = this.clone();
|
|
154
|
+
this.text = cleanedText;
|
|
155
|
+
this.run.setText(cleanedText);
|
|
156
|
+
const deletion = Revision_1.Revision.createDeletion(author, [oldHyperlink]);
|
|
157
|
+
const insertion = Revision_1.Revision.createInsertion(author, [this]);
|
|
158
|
+
this._parentParagraph.replaceContent(this, [deletion, insertion]);
|
|
159
|
+
this._parentParagraph = undefined;
|
|
160
|
+
this._preTrackingFormatting = undefined;
|
|
161
|
+
return this;
|
|
162
|
+
}
|
|
116
163
|
this.text = cleanedText;
|
|
117
164
|
this.run.setText(cleanedText);
|
|
118
|
-
if (this.trackingContext?.isEnabled() && previousValue !== cleanedText) {
|
|
119
|
-
this.trackingContext.trackHyperlinkChange(this, 'text', previousValue, cleanedText);
|
|
120
|
-
}
|
|
121
165
|
return this;
|
|
122
166
|
}
|
|
123
167
|
setRun(run) {
|
|
@@ -130,10 +174,21 @@ class Hyperlink {
|
|
|
130
174
|
}
|
|
131
175
|
setTooltip(tooltip) {
|
|
132
176
|
const previousValue = this.tooltip;
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
177
|
+
if (previousValue === tooltip) {
|
|
178
|
+
return this;
|
|
179
|
+
}
|
|
180
|
+
if (this.trackingContext?.isEnabled() && this._parentParagraph) {
|
|
181
|
+
const author = this.trackingContext.getAuthor();
|
|
182
|
+
const oldHyperlink = this.clone();
|
|
183
|
+
this.tooltip = tooltip;
|
|
184
|
+
const deletion = Revision_1.Revision.createDeletion(author, [oldHyperlink]);
|
|
185
|
+
const insertion = Revision_1.Revision.createInsertion(author, [this]);
|
|
186
|
+
this._parentParagraph.replaceContent(this, [deletion, insertion]);
|
|
187
|
+
this._parentParagraph = undefined;
|
|
188
|
+
this._preTrackingFormatting = undefined;
|
|
189
|
+
return this;
|
|
136
190
|
}
|
|
191
|
+
this.tooltip = tooltip;
|
|
137
192
|
return this;
|
|
138
193
|
}
|
|
139
194
|
getRelationshipId() {
|
|
@@ -159,7 +214,7 @@ class Hyperlink {
|
|
|
159
214
|
this.url = url;
|
|
160
215
|
this.relationshipId = undefined;
|
|
161
216
|
if (this.run.getText() === oldUrl) {
|
|
162
|
-
this.text = url || this.anchor ||
|
|
217
|
+
this.text = url || this.anchor || 'Link';
|
|
163
218
|
this.run.setText(this.text);
|
|
164
219
|
}
|
|
165
220
|
const deletion = Revision_1.Revision.createDeletion(author, [oldHyperlink]);
|
|
@@ -171,7 +226,7 @@ class Hyperlink {
|
|
|
171
226
|
this.url = url;
|
|
172
227
|
this.relationshipId = undefined;
|
|
173
228
|
if (this.run.getText() === oldUrl) {
|
|
174
|
-
this.text = url || this.anchor ||
|
|
229
|
+
this.text = url || this.anchor || 'Link';
|
|
175
230
|
this.run.setText(this.text);
|
|
176
231
|
}
|
|
177
232
|
return this;
|
|
@@ -197,7 +252,7 @@ class Hyperlink {
|
|
|
197
252
|
this.relationshipId = undefined;
|
|
198
253
|
}
|
|
199
254
|
if (this.run.getText() === oldAnchor) {
|
|
200
|
-
this.text = anchor || this.url ||
|
|
255
|
+
this.text = anchor || this.url || 'Link';
|
|
201
256
|
this.run.setText(this.text);
|
|
202
257
|
}
|
|
203
258
|
const deletion = Revision_1.Revision.createDeletion(author, [oldHyperlink]);
|
|
@@ -214,7 +269,7 @@ class Hyperlink {
|
|
|
214
269
|
this.relationshipId = undefined;
|
|
215
270
|
}
|
|
216
271
|
if (this.run.getText() === oldAnchor) {
|
|
217
|
-
this.text = anchor || this.url ||
|
|
272
|
+
this.text = anchor || this.url || 'Link';
|
|
218
273
|
this.run.setText(this.text);
|
|
219
274
|
}
|
|
220
275
|
return this;
|
|
@@ -223,7 +278,7 @@ class Hyperlink {
|
|
|
223
278
|
return this.run;
|
|
224
279
|
}
|
|
225
280
|
setFormatting(formatting, options) {
|
|
226
|
-
const
|
|
281
|
+
const previousFormatting = { ...this.formatting };
|
|
227
282
|
if (options?.replace) {
|
|
228
283
|
this.formatting = { ...formatting };
|
|
229
284
|
}
|
|
@@ -234,7 +289,7 @@ class Hyperlink {
|
|
|
234
289
|
this.run = new Run_1.Run(currentText, this.formatting);
|
|
235
290
|
this.text = currentText;
|
|
236
291
|
if (this.trackingContext?.isEnabled()) {
|
|
237
|
-
this.
|
|
292
|
+
this._applyFormattingRPrChange(previousFormatting);
|
|
238
293
|
}
|
|
239
294
|
return this;
|
|
240
295
|
}
|
|
@@ -263,56 +318,56 @@ class Hyperlink {
|
|
|
263
318
|
return this.formatting.size;
|
|
264
319
|
}
|
|
265
320
|
setColor(color) {
|
|
266
|
-
const
|
|
321
|
+
const previousFormatting = { ...this.formatting };
|
|
267
322
|
this.formatting.color = color;
|
|
268
323
|
this.run = new Run_1.Run(this.text, this.formatting);
|
|
269
|
-
if (this.trackingContext?.isEnabled() &&
|
|
270
|
-
this.
|
|
324
|
+
if (this.trackingContext?.isEnabled() && previousFormatting.color !== color) {
|
|
325
|
+
this._applyFormattingRPrChange(previousFormatting);
|
|
271
326
|
}
|
|
272
327
|
return this;
|
|
273
328
|
}
|
|
274
329
|
setUnderline(underline) {
|
|
275
|
-
const
|
|
330
|
+
const previousFormatting = { ...this.formatting };
|
|
276
331
|
this.formatting.underline = underline;
|
|
277
332
|
this.run = new Run_1.Run(this.text, this.formatting);
|
|
278
|
-
if (this.trackingContext?.isEnabled() &&
|
|
279
|
-
this.
|
|
333
|
+
if (this.trackingContext?.isEnabled() && previousFormatting.underline !== underline) {
|
|
334
|
+
this._applyFormattingRPrChange(previousFormatting);
|
|
280
335
|
}
|
|
281
336
|
return this;
|
|
282
337
|
}
|
|
283
338
|
setBold(bold = true) {
|
|
284
|
-
const
|
|
339
|
+
const previousFormatting = { ...this.formatting };
|
|
285
340
|
this.formatting.bold = bold;
|
|
286
341
|
this.run = new Run_1.Run(this.text, this.formatting);
|
|
287
|
-
if (this.trackingContext?.isEnabled() &&
|
|
288
|
-
this.
|
|
342
|
+
if (this.trackingContext?.isEnabled() && previousFormatting.bold !== bold) {
|
|
343
|
+
this._applyFormattingRPrChange(previousFormatting);
|
|
289
344
|
}
|
|
290
345
|
return this;
|
|
291
346
|
}
|
|
292
347
|
setItalic(italic = true) {
|
|
293
|
-
const
|
|
348
|
+
const previousFormatting = { ...this.formatting };
|
|
294
349
|
this.formatting.italic = italic;
|
|
295
350
|
this.run = new Run_1.Run(this.text, this.formatting);
|
|
296
|
-
if (this.trackingContext?.isEnabled() &&
|
|
297
|
-
this.
|
|
351
|
+
if (this.trackingContext?.isEnabled() && previousFormatting.italic !== italic) {
|
|
352
|
+
this._applyFormattingRPrChange(previousFormatting);
|
|
298
353
|
}
|
|
299
354
|
return this;
|
|
300
355
|
}
|
|
301
356
|
setFont(font) {
|
|
302
|
-
const
|
|
357
|
+
const previousFormatting = { ...this.formatting };
|
|
303
358
|
this.formatting.font = font;
|
|
304
359
|
this.run = new Run_1.Run(this.text, this.formatting);
|
|
305
|
-
if (this.trackingContext?.isEnabled() &&
|
|
306
|
-
this.
|
|
360
|
+
if (this.trackingContext?.isEnabled() && previousFormatting.font !== font) {
|
|
361
|
+
this._applyFormattingRPrChange(previousFormatting);
|
|
307
362
|
}
|
|
308
363
|
return this;
|
|
309
364
|
}
|
|
310
365
|
setSize(size) {
|
|
311
|
-
const
|
|
366
|
+
const previousFormatting = { ...this.formatting };
|
|
312
367
|
this.formatting.size = size;
|
|
313
368
|
this.run = new Run_1.Run(this.text, this.formatting);
|
|
314
|
-
if (this.trackingContext?.isEnabled() &&
|
|
315
|
-
this.
|
|
369
|
+
if (this.trackingContext?.isEnabled() && previousFormatting.size !== size) {
|
|
370
|
+
this._applyFormattingRPrChange(previousFormatting);
|
|
316
371
|
}
|
|
317
372
|
return this;
|
|
318
373
|
}
|
|
@@ -337,77 +392,76 @@ class Hyperlink {
|
|
|
337
392
|
};
|
|
338
393
|
}
|
|
339
394
|
if (!this.url) {
|
|
340
|
-
issues.push(
|
|
395
|
+
issues.push('No URL or anchor specified');
|
|
341
396
|
return { valid: false, issues, fixed, originalUrl };
|
|
342
397
|
}
|
|
343
398
|
if (fixCommonIssues && fixedUrl) {
|
|
344
|
-
if (
|
|
345
|
-
fixedUrl =
|
|
346
|
-
fixed.push(
|
|
399
|
+
if (!/^[a-z]+:\/\//i.exec(fixedUrl)) {
|
|
400
|
+
fixedUrl = 'https://' + fixedUrl;
|
|
401
|
+
fixed.push('Added missing protocol (https://)');
|
|
347
402
|
}
|
|
348
403
|
const protocolMatch = /^([a-z]+:\/\/)/i.exec(fixedUrl);
|
|
349
404
|
if (protocolMatch?.[1]) {
|
|
350
405
|
const protocol = protocolMatch[1];
|
|
351
406
|
const rest = fixedUrl.substring(protocol.length);
|
|
352
|
-
const fixedRest = rest.replace(/\/\//g,
|
|
407
|
+
const fixedRest = rest.replace(/\/\//g, '/');
|
|
353
408
|
if (rest !== fixedRest) {
|
|
354
409
|
fixedUrl = protocol + fixedRest;
|
|
355
|
-
fixed.push(
|
|
410
|
+
fixed.push('Fixed double slashes');
|
|
356
411
|
}
|
|
357
412
|
}
|
|
358
|
-
if (fixedUrl.includes(
|
|
359
|
-
fixedUrl = fixedUrl.replace(/ /g,
|
|
360
|
-
fixed.push(
|
|
413
|
+
if (fixedUrl.includes(' ')) {
|
|
414
|
+
fixedUrl = fixedUrl.replace(/ /g, '%20');
|
|
415
|
+
fixed.push('Encoded spaces as %20');
|
|
361
416
|
}
|
|
362
417
|
if (/^https?:\/\/[^/]+\/.+\/$/.exec(fixedUrl)) {
|
|
363
|
-
fixedUrl = fixedUrl.replace(/\/$/,
|
|
364
|
-
fixed.push(
|
|
418
|
+
fixedUrl = fixedUrl.replace(/\/$/, '');
|
|
419
|
+
fixed.push('Removed trailing slash');
|
|
365
420
|
}
|
|
366
|
-
fixedUrl = fixedUrl.replace(/^http:\/\//i,
|
|
367
|
-
if (fixedUrl !== this.url && fixedUrl.startsWith(
|
|
368
|
-
fixed.push(
|
|
421
|
+
fixedUrl = fixedUrl.replace(/^http:\/\//i, 'https://');
|
|
422
|
+
if (fixedUrl !== this.url && fixedUrl.startsWith('https://')) {
|
|
423
|
+
fixed.push('Upgraded HTTP to HTTPS');
|
|
369
424
|
}
|
|
370
425
|
if (fixedUrl !== this.url) {
|
|
371
426
|
this.setUrl(fixedUrl);
|
|
372
427
|
}
|
|
373
428
|
}
|
|
374
429
|
if (checkAccessibility && fixedUrl?.match(/^https?:\/\//i)) {
|
|
375
|
-
if (typeof fetch ===
|
|
376
|
-
issues.push(
|
|
430
|
+
if (typeof fetch === 'undefined') {
|
|
431
|
+
issues.push('Network validation unavailable: fetch API not supported in this environment');
|
|
377
432
|
}
|
|
378
433
|
else {
|
|
379
434
|
try {
|
|
380
435
|
const controller = new AbortController();
|
|
381
436
|
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
382
437
|
const response = await fetch(fixedUrl, {
|
|
383
|
-
method:
|
|
438
|
+
method: 'HEAD',
|
|
384
439
|
signal: controller.signal,
|
|
385
|
-
redirect:
|
|
440
|
+
redirect: 'follow',
|
|
386
441
|
});
|
|
387
442
|
clearTimeout(timeoutId);
|
|
388
443
|
if (!response.ok) {
|
|
389
|
-
issues.push(`HTTP ${response.status}: ${response.statusText ||
|
|
444
|
+
issues.push(`HTTP ${response.status}: ${response.statusText || 'Error'}`);
|
|
390
445
|
}
|
|
391
446
|
}
|
|
392
447
|
catch (error) {
|
|
393
448
|
const isErrorWithName = (err) => {
|
|
394
|
-
return typeof err ===
|
|
449
|
+
return typeof err === 'object' && err !== null && 'name' in err;
|
|
395
450
|
};
|
|
396
451
|
const isErrorWithMessage = (err) => {
|
|
397
|
-
return typeof err ===
|
|
452
|
+
return typeof err === 'object' && err !== null && 'message' in err;
|
|
398
453
|
};
|
|
399
|
-
if (isErrorWithName(error) && error.name ===
|
|
454
|
+
if (isErrorWithName(error) && error.name === 'AbortError') {
|
|
400
455
|
issues.push(`Timeout after ${timeout}ms`);
|
|
401
456
|
}
|
|
402
|
-
else if (isErrorWithMessage(error) &&
|
|
403
|
-
error.message?.includes("fetch")) {
|
|
457
|
+
else if (isErrorWithMessage(error) && error.message?.includes('fetch')) {
|
|
404
458
|
issues.push(`Unreachable: ${error.message}`);
|
|
405
459
|
}
|
|
406
460
|
else if (isErrorWithMessage(error)) {
|
|
407
461
|
issues.push(`Network error: ${error.message}`);
|
|
408
462
|
}
|
|
409
463
|
else {
|
|
410
|
-
issues.push(
|
|
464
|
+
issues.push('Network error: Unknown error');
|
|
411
465
|
}
|
|
412
466
|
}
|
|
413
467
|
}
|
|
@@ -422,9 +476,9 @@ class Hyperlink {
|
|
|
422
476
|
}
|
|
423
477
|
resetToStandardFormatting() {
|
|
424
478
|
const standardFormatting = {
|
|
425
|
-
font:
|
|
426
|
-
color:
|
|
427
|
-
underline:
|
|
479
|
+
font: 'Verdana',
|
|
480
|
+
color: '0000FF',
|
|
481
|
+
underline: 'single',
|
|
428
482
|
bold: false,
|
|
429
483
|
italic: false,
|
|
430
484
|
strike: false,
|
|
@@ -452,13 +506,17 @@ class Hyperlink {
|
|
|
452
506
|
});
|
|
453
507
|
if (this.run) {
|
|
454
508
|
cloned.run = new Run_1.Run(this.run.getText(), { ...this.run.getFormatting() });
|
|
509
|
+
const existingRPrChange = this.run.getPropertyChangeRevision();
|
|
510
|
+
if (existingRPrChange) {
|
|
511
|
+
cloned.run.setPropertyChangeRevision({ ...existingRPrChange });
|
|
512
|
+
}
|
|
455
513
|
}
|
|
456
514
|
return cloned;
|
|
457
515
|
}
|
|
458
516
|
toXML() {
|
|
459
517
|
if (!this.url && !this.anchor && !this.relationshipId) {
|
|
460
|
-
throw new Error(
|
|
461
|
-
|
|
518
|
+
throw new Error('CRITICAL: Hyperlink must have either a URL (external link), anchor (internal link), or relationshipId. ' +
|
|
519
|
+
'Cannot generate valid XML for hyperlink without destination.');
|
|
462
520
|
}
|
|
463
521
|
if (this.url && !this.relationshipId) {
|
|
464
522
|
throw new Error(`CRITICAL: External hyperlink to "${this.url}" is missing relationship ID. ` +
|
|
@@ -468,33 +526,33 @@ class Hyperlink {
|
|
|
468
526
|
}
|
|
469
527
|
const attributes = {};
|
|
470
528
|
if (this.relationshipId) {
|
|
471
|
-
attributes[
|
|
529
|
+
attributes['r:id'] = this.relationshipId;
|
|
472
530
|
}
|
|
473
531
|
if (this.anchor) {
|
|
474
|
-
attributes[
|
|
532
|
+
attributes['w:anchor'] = this.anchor;
|
|
475
533
|
}
|
|
476
534
|
if (this.tooltip) {
|
|
477
|
-
attributes[
|
|
535
|
+
attributes['w:tooltip'] = this.tooltip;
|
|
478
536
|
}
|
|
479
537
|
if (this.tgtFrame) {
|
|
480
|
-
attributes[
|
|
538
|
+
attributes['w:tgtFrame'] = this.tgtFrame;
|
|
481
539
|
}
|
|
482
540
|
if (this.history) {
|
|
483
|
-
attributes[
|
|
541
|
+
attributes['w:history'] = this.history;
|
|
484
542
|
}
|
|
485
543
|
if (this.docLocation) {
|
|
486
|
-
attributes[
|
|
544
|
+
attributes['w:docLocation'] = this.docLocation;
|
|
487
545
|
}
|
|
488
546
|
if (this._isEmpty) {
|
|
489
547
|
return {
|
|
490
|
-
name:
|
|
548
|
+
name: 'w:hyperlink',
|
|
491
549
|
attributes,
|
|
492
550
|
children: [],
|
|
493
551
|
};
|
|
494
552
|
}
|
|
495
553
|
const runXml = this.run.toXML();
|
|
496
554
|
return {
|
|
497
|
-
name:
|
|
555
|
+
name: 'w:hyperlink',
|
|
498
556
|
attributes,
|
|
499
557
|
children: [runXml],
|
|
500
558
|
};
|