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
package/src/elements/Footer.ts
CHANGED
|
@@ -1,269 +1,269 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Footer - Represents a document footer
|
|
3
|
-
*
|
|
4
|
-
* Footers appear at the bottom of pages and can contain text, tables, images, and fields.
|
|
5
|
-
* Different footers can be defined for first page, odd pages, and even pages.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { XMLElement } from '../xml/XMLBuilder';
|
|
9
|
-
import { Paragraph } from './Paragraph';
|
|
10
|
-
import { Table } from './Table';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Footer type
|
|
14
|
-
*/
|
|
15
|
-
export type FooterType = 'default' | 'first' | 'even';
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Footer content element
|
|
19
|
-
*/
|
|
20
|
-
type FooterElement = Paragraph | Table;
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Footer properties
|
|
24
|
-
*/
|
|
25
|
-
export interface FooterProperties {
|
|
26
|
-
/** Footer type (default, first page, or even page) */
|
|
27
|
-
type?: FooterType;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Represents a document footer
|
|
32
|
-
*/
|
|
33
|
-
export class Footer {
|
|
34
|
-
private elements: FooterElement[] = [];
|
|
35
|
-
private type: FooterType;
|
|
36
|
-
private footerId?: string;
|
|
37
|
-
private rawXML?: string; // Store original XML for preservation
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Creates a new footer
|
|
41
|
-
* @param properties Footer properties
|
|
42
|
-
*/
|
|
43
|
-
constructor(properties: FooterProperties = {}) {
|
|
44
|
-
this.type = properties.type || 'default';
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Sets the raw XML content (used when loading existing footers)
|
|
49
|
-
* @param xml Raw XML content
|
|
50
|
-
*/
|
|
51
|
-
setRawXML(xml: string): this {
|
|
52
|
-
this.rawXML = xml;
|
|
53
|
-
return this;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Gets the raw XML content if available
|
|
58
|
-
*/
|
|
59
|
-
getRawXML(): string | undefined {
|
|
60
|
-
return this.rawXML;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Gets the footer type
|
|
65
|
-
*/
|
|
66
|
-
getType(): FooterType {
|
|
67
|
-
return this.type;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Sets the footer ID (used for relationships)
|
|
72
|
-
* @param id Footer ID
|
|
73
|
-
*/
|
|
74
|
-
setFooterId(id: string): this {
|
|
75
|
-
this.footerId = id;
|
|
76
|
-
return this;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Gets the footer ID
|
|
81
|
-
*/
|
|
82
|
-
getFooterId(): string | undefined {
|
|
83
|
-
return this.footerId;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Adds a paragraph to the footer
|
|
88
|
-
* @param paragraph Paragraph to add
|
|
89
|
-
*/
|
|
90
|
-
addParagraph(paragraph: Paragraph): this {
|
|
91
|
-
this.elements.push(paragraph);
|
|
92
|
-
return this;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Creates and adds a new paragraph
|
|
97
|
-
* @param text Optional text content
|
|
98
|
-
*/
|
|
99
|
-
createParagraph(text?: string): Paragraph {
|
|
100
|
-
const para = new Paragraph();
|
|
101
|
-
if (text) {
|
|
102
|
-
para.addText(text);
|
|
103
|
-
}
|
|
104
|
-
this.elements.push(para);
|
|
105
|
-
return para;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Adds a table to the footer
|
|
110
|
-
* @param table Table to add
|
|
111
|
-
*/
|
|
112
|
-
addTable(table: Table): this {
|
|
113
|
-
this.elements.push(table);
|
|
114
|
-
return this;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Creates and adds a new table
|
|
119
|
-
* @param rows Number of rows
|
|
120
|
-
* @param columns Number of columns
|
|
121
|
-
*/
|
|
122
|
-
createTable(rows: number, columns: number): Table {
|
|
123
|
-
const table = new Table(rows, columns);
|
|
124
|
-
this.elements.push(table);
|
|
125
|
-
return table;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Gets all elements in the footer
|
|
130
|
-
*/
|
|
131
|
-
getElements(): FooterElement[] {
|
|
132
|
-
return [...this.elements];
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Gets the number of elements
|
|
137
|
-
*/
|
|
138
|
-
getElementCount(): number {
|
|
139
|
-
return this.elements.length;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* Clears all elements and resets raw XML so toXML() regenerates an empty footer
|
|
144
|
-
*/
|
|
145
|
-
clear(): this {
|
|
146
|
-
this.elements = [];
|
|
147
|
-
this.rawXML = undefined;
|
|
148
|
-
return this;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* Generates the complete footer XML file content
|
|
153
|
-
* This creates a complete footer document (footer1.xml, etc.)
|
|
154
|
-
*/
|
|
155
|
-
toXML(): string {
|
|
156
|
-
// If we have raw XML preserved from loading, use it
|
|
157
|
-
if (this.rawXML) {
|
|
158
|
-
return this.rawXML;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
// Otherwise generate from elements
|
|
162
|
-
const elementXmls = this.elements.map(el => el.toXML());
|
|
163
|
-
|
|
164
|
-
let xml = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n';
|
|
165
|
-
xml += '<w:ftr xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" ';
|
|
166
|
-
xml += 'xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">\n';
|
|
167
|
-
|
|
168
|
-
// Add elements
|
|
169
|
-
for (const element of elementXmls) {
|
|
170
|
-
xml += this.renderElement(element, 1);
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
// If no elements, add an empty paragraph
|
|
174
|
-
if (this.elements.length === 0) {
|
|
175
|
-
xml += ' <w:p/>\n';
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
xml += '</w:ftr>';
|
|
179
|
-
|
|
180
|
-
return xml;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
/**
|
|
184
|
-
* Renders an XML element to string with indentation
|
|
185
|
-
*/
|
|
186
|
-
private renderElement(element: XMLElement, indent: number): string {
|
|
187
|
-
const spaces = ' '.repeat(indent);
|
|
188
|
-
let xml = '';
|
|
189
|
-
|
|
190
|
-
if (element.selfClosing) {
|
|
191
|
-
xml += `${spaces}<${element.name}`;
|
|
192
|
-
if (element.attributes) {
|
|
193
|
-
for (const [key, value] of Object.entries(element.attributes)) {
|
|
194
|
-
xml += ` ${key}="${value}"`;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
xml += '/>\n';
|
|
198
|
-
} else {
|
|
199
|
-
xml += `${spaces}<${element.name}`;
|
|
200
|
-
if (element.attributes) {
|
|
201
|
-
for (const [key, value] of Object.entries(element.attributes)) {
|
|
202
|
-
xml += ` ${key}="${value}"`;
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
xml += '>';
|
|
206
|
-
|
|
207
|
-
if (element.children && element.children.length > 0) {
|
|
208
|
-
const hasOnlyText = element.children.every(c => typeof c === 'string');
|
|
209
|
-
|
|
210
|
-
if (hasOnlyText) {
|
|
211
|
-
// Inline text content
|
|
212
|
-
xml += element.children.join('');
|
|
213
|
-
} else {
|
|
214
|
-
// Block-level children
|
|
215
|
-
xml += '\n';
|
|
216
|
-
for (const child of element.children) {
|
|
217
|
-
if (typeof child === 'string') {
|
|
218
|
-
xml += spaces + ' ' + child + '\n';
|
|
219
|
-
} else {
|
|
220
|
-
xml += this.renderElement(child, indent + 1);
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
xml += spaces;
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
xml += `</${element.name}>\n`;
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
return xml;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
/**
|
|
234
|
-
* Gets the filename for this footer
|
|
235
|
-
* @param number Footer number (1, 2, 3, etc.)
|
|
236
|
-
*/
|
|
237
|
-
getFilename(number: number): string {
|
|
238
|
-
return `footer${number}.xml`;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
/**
|
|
242
|
-
* Creates a default footer
|
|
243
|
-
*/
|
|
244
|
-
static createDefault(): Footer {
|
|
245
|
-
return new Footer({ type: 'default' });
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
/**
|
|
249
|
-
* Creates a first page footer
|
|
250
|
-
*/
|
|
251
|
-
static createFirst(): Footer {
|
|
252
|
-
return new Footer({ type: 'first' });
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
/**
|
|
256
|
-
* Creates an even page footer
|
|
257
|
-
*/
|
|
258
|
-
static createEven(): Footer {
|
|
259
|
-
return new Footer({ type: 'even' });
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
/**
|
|
263
|
-
* Creates a footer with properties
|
|
264
|
-
* @param properties Footer properties
|
|
265
|
-
*/
|
|
266
|
-
static create(properties?: FooterProperties): Footer {
|
|
267
|
-
return new Footer(properties);
|
|
268
|
-
}
|
|
269
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Footer - Represents a document footer
|
|
3
|
+
*
|
|
4
|
+
* Footers appear at the bottom of pages and can contain text, tables, images, and fields.
|
|
5
|
+
* Different footers can be defined for first page, odd pages, and even pages.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { XMLElement } from '../xml/XMLBuilder';
|
|
9
|
+
import { Paragraph } from './Paragraph';
|
|
10
|
+
import { Table } from './Table';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Footer type
|
|
14
|
+
*/
|
|
15
|
+
export type FooterType = 'default' | 'first' | 'even';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Footer content element
|
|
19
|
+
*/
|
|
20
|
+
type FooterElement = Paragraph | Table;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Footer properties
|
|
24
|
+
*/
|
|
25
|
+
export interface FooterProperties {
|
|
26
|
+
/** Footer type (default, first page, or even page) */
|
|
27
|
+
type?: FooterType;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Represents a document footer
|
|
32
|
+
*/
|
|
33
|
+
export class Footer {
|
|
34
|
+
private elements: FooterElement[] = [];
|
|
35
|
+
private type: FooterType;
|
|
36
|
+
private footerId?: string;
|
|
37
|
+
private rawXML?: string; // Store original XML for preservation
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Creates a new footer
|
|
41
|
+
* @param properties Footer properties
|
|
42
|
+
*/
|
|
43
|
+
constructor(properties: FooterProperties = {}) {
|
|
44
|
+
this.type = properties.type || 'default';
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Sets the raw XML content (used when loading existing footers)
|
|
49
|
+
* @param xml Raw XML content
|
|
50
|
+
*/
|
|
51
|
+
setRawXML(xml: string): this {
|
|
52
|
+
this.rawXML = xml;
|
|
53
|
+
return this;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Gets the raw XML content if available
|
|
58
|
+
*/
|
|
59
|
+
getRawXML(): string | undefined {
|
|
60
|
+
return this.rawXML;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Gets the footer type
|
|
65
|
+
*/
|
|
66
|
+
getType(): FooterType {
|
|
67
|
+
return this.type;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Sets the footer ID (used for relationships)
|
|
72
|
+
* @param id Footer ID
|
|
73
|
+
*/
|
|
74
|
+
setFooterId(id: string): this {
|
|
75
|
+
this.footerId = id;
|
|
76
|
+
return this;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Gets the footer ID
|
|
81
|
+
*/
|
|
82
|
+
getFooterId(): string | undefined {
|
|
83
|
+
return this.footerId;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Adds a paragraph to the footer
|
|
88
|
+
* @param paragraph Paragraph to add
|
|
89
|
+
*/
|
|
90
|
+
addParagraph(paragraph: Paragraph): this {
|
|
91
|
+
this.elements.push(paragraph);
|
|
92
|
+
return this;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Creates and adds a new paragraph
|
|
97
|
+
* @param text Optional text content
|
|
98
|
+
*/
|
|
99
|
+
createParagraph(text?: string): Paragraph {
|
|
100
|
+
const para = new Paragraph();
|
|
101
|
+
if (text) {
|
|
102
|
+
para.addText(text);
|
|
103
|
+
}
|
|
104
|
+
this.elements.push(para);
|
|
105
|
+
return para;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Adds a table to the footer
|
|
110
|
+
* @param table Table to add
|
|
111
|
+
*/
|
|
112
|
+
addTable(table: Table): this {
|
|
113
|
+
this.elements.push(table);
|
|
114
|
+
return this;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Creates and adds a new table
|
|
119
|
+
* @param rows Number of rows
|
|
120
|
+
* @param columns Number of columns
|
|
121
|
+
*/
|
|
122
|
+
createTable(rows: number, columns: number): Table {
|
|
123
|
+
const table = new Table(rows, columns);
|
|
124
|
+
this.elements.push(table);
|
|
125
|
+
return table;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Gets all elements in the footer
|
|
130
|
+
*/
|
|
131
|
+
getElements(): FooterElement[] {
|
|
132
|
+
return [...this.elements];
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Gets the number of elements
|
|
137
|
+
*/
|
|
138
|
+
getElementCount(): number {
|
|
139
|
+
return this.elements.length;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Clears all elements and resets raw XML so toXML() regenerates an empty footer
|
|
144
|
+
*/
|
|
145
|
+
clear(): this {
|
|
146
|
+
this.elements = [];
|
|
147
|
+
this.rawXML = undefined;
|
|
148
|
+
return this;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Generates the complete footer XML file content
|
|
153
|
+
* This creates a complete footer document (footer1.xml, etc.)
|
|
154
|
+
*/
|
|
155
|
+
toXML(): string {
|
|
156
|
+
// If we have raw XML preserved from loading, use it
|
|
157
|
+
if (this.rawXML) {
|
|
158
|
+
return this.rawXML;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Otherwise generate from elements
|
|
162
|
+
const elementXmls = this.elements.map((el) => el.toXML());
|
|
163
|
+
|
|
164
|
+
let xml = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n';
|
|
165
|
+
xml += '<w:ftr xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" ';
|
|
166
|
+
xml += 'xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">\n';
|
|
167
|
+
|
|
168
|
+
// Add elements
|
|
169
|
+
for (const element of elementXmls) {
|
|
170
|
+
xml += this.renderElement(element, 1);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// If no elements, add an empty paragraph
|
|
174
|
+
if (this.elements.length === 0) {
|
|
175
|
+
xml += ' <w:p/>\n';
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
xml += '</w:ftr>';
|
|
179
|
+
|
|
180
|
+
return xml;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Renders an XML element to string with indentation
|
|
185
|
+
*/
|
|
186
|
+
private renderElement(element: XMLElement, indent: number): string {
|
|
187
|
+
const spaces = ' '.repeat(indent);
|
|
188
|
+
let xml = '';
|
|
189
|
+
|
|
190
|
+
if (element.selfClosing) {
|
|
191
|
+
xml += `${spaces}<${element.name}`;
|
|
192
|
+
if (element.attributes) {
|
|
193
|
+
for (const [key, value] of Object.entries(element.attributes)) {
|
|
194
|
+
xml += ` ${key}="${value}"`;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
xml += '/>\n';
|
|
198
|
+
} else {
|
|
199
|
+
xml += `${spaces}<${element.name}`;
|
|
200
|
+
if (element.attributes) {
|
|
201
|
+
for (const [key, value] of Object.entries(element.attributes)) {
|
|
202
|
+
xml += ` ${key}="${value}"`;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
xml += '>';
|
|
206
|
+
|
|
207
|
+
if (element.children && element.children.length > 0) {
|
|
208
|
+
const hasOnlyText = element.children.every((c) => typeof c === 'string');
|
|
209
|
+
|
|
210
|
+
if (hasOnlyText) {
|
|
211
|
+
// Inline text content
|
|
212
|
+
xml += element.children.join('');
|
|
213
|
+
} else {
|
|
214
|
+
// Block-level children
|
|
215
|
+
xml += '\n';
|
|
216
|
+
for (const child of element.children) {
|
|
217
|
+
if (typeof child === 'string') {
|
|
218
|
+
xml += spaces + ' ' + child + '\n';
|
|
219
|
+
} else {
|
|
220
|
+
xml += this.renderElement(child, indent + 1);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
xml += spaces;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
xml += `</${element.name}>\n`;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
return xml;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Gets the filename for this footer
|
|
235
|
+
* @param number Footer number (1, 2, 3, etc.)
|
|
236
|
+
*/
|
|
237
|
+
getFilename(number: number): string {
|
|
238
|
+
return `footer${number}.xml`;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Creates a default footer
|
|
243
|
+
*/
|
|
244
|
+
static createDefault(): Footer {
|
|
245
|
+
return new Footer({ type: 'default' });
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Creates a first page footer
|
|
250
|
+
*/
|
|
251
|
+
static createFirst(): Footer {
|
|
252
|
+
return new Footer({ type: 'first' });
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Creates an even page footer
|
|
257
|
+
*/
|
|
258
|
+
static createEven(): Footer {
|
|
259
|
+
return new Footer({ type: 'even' });
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Creates a footer with properties
|
|
264
|
+
* @param properties Footer properties
|
|
265
|
+
*/
|
|
266
|
+
static create(properties?: FooterProperties): Footer {
|
|
267
|
+
return new Footer(properties);
|
|
268
|
+
}
|
|
269
|
+
}
|