docxmlater 11.0.10 → 12.0.1
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 -13
- package/dist/core/Document.d.ts +28 -2
- package/dist/core/Document.d.ts.map +1 -1
- package/dist/core/Document.js +725 -170
- package/dist/core/Document.js.map +1 -1
- package/dist/core/DocumentGenerator.d.ts +1 -0
- package/dist/core/DocumentGenerator.d.ts.map +1 -1
- package/dist/core/DocumentGenerator.js +77 -25
- package/dist/core/DocumentGenerator.js.map +1 -1
- package/dist/core/DocumentParser.d.ts +7 -3
- package/dist/core/DocumentParser.d.ts.map +1 -1
- package/dist/core/DocumentParser.js +427 -81
- package/dist/core/DocumentParser.js.map +1 -1
- package/dist/core/RelationshipManager.d.ts.map +1 -1
- package/dist/core/RelationshipManager.js +2 -2
- package/dist/core/RelationshipManager.js.map +1 -1
- package/dist/elements/Comment.d.ts +15 -1
- package/dist/elements/Comment.d.ts.map +1 -1
- package/dist/elements/Comment.js +67 -12
- package/dist/elements/Comment.js.map +1 -1
- package/dist/elements/CommentManager.d.ts +4 -0
- package/dist/elements/CommentManager.d.ts.map +1 -1
- package/dist/elements/CommentManager.js +74 -16
- package/dist/elements/CommentManager.js.map +1 -1
- package/dist/elements/EndnoteManager.d.ts.map +1 -1
- package/dist/elements/EndnoteManager.js.map +1 -1
- package/dist/elements/Field.d.ts +10 -1
- package/dist/elements/Field.d.ts.map +1 -1
- package/dist/elements/Field.js +76 -34
- package/dist/elements/Field.js.map +1 -1
- package/dist/elements/FieldHelpers.d.ts +1 -0
- package/dist/elements/FieldHelpers.d.ts.map +1 -1
- package/dist/elements/FieldHelpers.js +8 -4
- package/dist/elements/FieldHelpers.js.map +1 -1
- package/dist/elements/Footer.d.ts +3 -1
- package/dist/elements/Footer.d.ts.map +1 -1
- package/dist/elements/Footer.js +39 -53
- package/dist/elements/Footer.js.map +1 -1
- package/dist/elements/FootnoteManager.d.ts.map +1 -1
- package/dist/elements/FootnoteManager.js.map +1 -1
- package/dist/elements/Header.d.ts +3 -1
- package/dist/elements/Header.d.ts.map +1 -1
- package/dist/elements/Header.js +39 -53
- package/dist/elements/Header.js.map +1 -1
- package/dist/elements/HeaderFooterManager.d.ts +4 -2
- package/dist/elements/HeaderFooterManager.d.ts.map +1 -1
- package/dist/elements/HeaderFooterManager.js +36 -6
- package/dist/elements/HeaderFooterManager.js.map +1 -1
- package/dist/elements/Hyperlink.d.ts +6 -1
- package/dist/elements/Hyperlink.d.ts.map +1 -1
- package/dist/elements/Hyperlink.js +69 -44
- package/dist/elements/Hyperlink.js.map +1 -1
- package/dist/elements/Image.d.ts.map +1 -1
- package/dist/elements/Image.js +33 -6
- package/dist/elements/Image.js.map +1 -1
- package/dist/elements/ImageManager.d.ts +1 -0
- package/dist/elements/ImageManager.d.ts.map +1 -1
- package/dist/elements/ImageManager.js +11 -0
- package/dist/elements/ImageManager.js.map +1 -1
- package/dist/elements/Paragraph.d.ts +3 -0
- package/dist/elements/Paragraph.d.ts.map +1 -1
- package/dist/elements/Paragraph.js +91 -26
- package/dist/elements/Paragraph.js.map +1 -1
- package/dist/elements/Revision.d.ts +4 -0
- package/dist/elements/Revision.d.ts.map +1 -1
- package/dist/elements/Revision.js +369 -29
- package/dist/elements/Revision.js.map +1 -1
- package/dist/elements/Run.d.ts +1 -0
- package/dist/elements/Run.d.ts.map +1 -1
- package/dist/elements/Run.js +24 -4
- package/dist/elements/Run.js.map +1 -1
- package/dist/elements/Section.d.ts.map +1 -1
- package/dist/elements/Section.js +17 -7
- package/dist/elements/Section.js.map +1 -1
- package/dist/elements/Shape.d.ts.map +1 -1
- package/dist/elements/Shape.js +50 -42
- package/dist/elements/Shape.js.map +1 -1
- package/dist/elements/StructuredDocumentTag.d.ts +9 -1
- package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
- package/dist/elements/StructuredDocumentTag.js +46 -6
- package/dist/elements/StructuredDocumentTag.js.map +1 -1
- package/dist/elements/Table.d.ts +2 -0
- package/dist/elements/Table.d.ts.map +1 -1
- package/dist/elements/Table.js +90 -42
- package/dist/elements/Table.js.map +1 -1
- package/dist/elements/TableCell.d.ts +1 -0
- package/dist/elements/TableCell.d.ts.map +1 -1
- package/dist/elements/TableCell.js +32 -13
- package/dist/elements/TableCell.js.map +1 -1
- package/dist/elements/TableOfContents.d.ts.map +1 -1
- package/dist/elements/TableOfContents.js +5 -7
- package/dist/elements/TableOfContents.js.map +1 -1
- package/dist/elements/TableRow.d.ts +1 -0
- package/dist/elements/TableRow.d.ts.map +1 -1
- package/dist/elements/TableRow.js +16 -1
- package/dist/elements/TableRow.js.map +1 -1
- package/dist/elements/TextBox.d.ts.map +1 -1
- package/dist/elements/TextBox.js +55 -42
- package/dist/elements/TextBox.js.map +1 -1
- package/dist/esm/core/Document.js +726 -171
- package/dist/esm/core/Document.js.map +1 -1
- package/dist/esm/core/DocumentGenerator.js +77 -25
- package/dist/esm/core/DocumentGenerator.js.map +1 -1
- package/dist/esm/core/DocumentParser.js +427 -81
- package/dist/esm/core/DocumentParser.js.map +1 -1
- package/dist/esm/core/RelationshipManager.js +2 -2
- package/dist/esm/core/RelationshipManager.js.map +1 -1
- package/dist/esm/elements/Comment.js +67 -12
- package/dist/esm/elements/Comment.js.map +1 -1
- package/dist/esm/elements/CommentManager.js +74 -16
- package/dist/esm/elements/CommentManager.js.map +1 -1
- package/dist/esm/elements/EndnoteManager.js.map +1 -1
- package/dist/esm/elements/Field.js +77 -35
- package/dist/esm/elements/Field.js.map +1 -1
- package/dist/esm/elements/FieldHelpers.js +7 -4
- package/dist/esm/elements/FieldHelpers.js.map +1 -1
- package/dist/esm/elements/Footer.js +39 -53
- package/dist/esm/elements/Footer.js.map +1 -1
- package/dist/esm/elements/FootnoteManager.js.map +1 -1
- package/dist/esm/elements/Header.js +39 -53
- package/dist/esm/elements/Header.js.map +1 -1
- package/dist/esm/elements/HeaderFooterManager.js +36 -6
- package/dist/esm/elements/HeaderFooterManager.js.map +1 -1
- package/dist/esm/elements/Hyperlink.js +69 -44
- package/dist/esm/elements/Hyperlink.js.map +1 -1
- package/dist/esm/elements/Image.js +33 -6
- package/dist/esm/elements/Image.js.map +1 -1
- package/dist/esm/elements/ImageManager.js +11 -0
- package/dist/esm/elements/ImageManager.js.map +1 -1
- package/dist/esm/elements/Paragraph.js +91 -26
- package/dist/esm/elements/Paragraph.js.map +1 -1
- package/dist/esm/elements/Revision.js +369 -29
- package/dist/esm/elements/Revision.js.map +1 -1
- package/dist/esm/elements/Run.js +24 -4
- package/dist/esm/elements/Run.js.map +1 -1
- package/dist/esm/elements/Section.js +17 -7
- package/dist/esm/elements/Section.js.map +1 -1
- package/dist/esm/elements/Shape.js +50 -42
- package/dist/esm/elements/Shape.js.map +1 -1
- package/dist/esm/elements/StructuredDocumentTag.js +46 -6
- package/dist/esm/elements/StructuredDocumentTag.js.map +1 -1
- package/dist/esm/elements/Table.js +90 -42
- package/dist/esm/elements/Table.js.map +1 -1
- package/dist/esm/elements/TableCell.js +32 -13
- package/dist/esm/elements/TableCell.js.map +1 -1
- package/dist/esm/elements/TableOfContents.js +5 -7
- package/dist/esm/elements/TableOfContents.js.map +1 -1
- package/dist/esm/elements/TableRow.js +16 -1
- package/dist/esm/elements/TableRow.js.map +1 -1
- package/dist/esm/elements/TextBox.js +55 -42
- package/dist/esm/elements/TextBox.js.map +1 -1
- package/dist/esm/formatting/AbstractNumbering.js +1 -1
- package/dist/esm/formatting/AbstractNumbering.js.map +1 -1
- package/dist/esm/formatting/NumberingLevel.js +8 -6
- package/dist/esm/formatting/NumberingLevel.js.map +1 -1
- package/dist/esm/formatting/NumberingManager.js +16 -1
- package/dist/esm/formatting/NumberingManager.js.map +1 -1
- package/dist/esm/formatting/Style.js +14 -0
- package/dist/esm/formatting/Style.js.map +1 -1
- package/dist/esm/formatting/StylesManager.js +14 -2
- package/dist/esm/formatting/StylesManager.js.map +1 -1
- package/dist/esm/helpers/CleanupHelper.js +103 -26
- package/dist/esm/helpers/CleanupHelper.js.map +1 -1
- package/dist/esm/images/ImageOptimizer.js +52 -4
- package/dist/esm/images/ImageOptimizer.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal.js +1 -1
- package/dist/esm/internal.js.map +1 -1
- package/dist/esm/processors/CompatibilityUpgrader.js +7 -1
- package/dist/esm/processors/CompatibilityUpgrader.js.map +1 -1
- package/dist/esm/processors/InMemoryRevisionAcceptor.js +134 -13
- package/dist/esm/processors/InMemoryRevisionAcceptor.js.map +1 -1
- package/dist/esm/processors/RevisionWalker.js +58 -8
- package/dist/esm/processors/RevisionWalker.js.map +1 -1
- package/dist/esm/processors/SelectiveRevisionAcceptor.js +116 -17
- package/dist/esm/processors/SelectiveRevisionAcceptor.js.map +1 -1
- package/dist/esm/processors/cnfStyleDecoder.js +7 -7
- package/dist/esm/processors/cnfStyleDecoder.js.map +1 -1
- package/dist/esm/processors/stripTrackedChanges.js +16 -5
- package/dist/esm/processors/stripTrackedChanges.js.map +1 -1
- package/dist/esm/utils/deepClone.js +24 -11
- package/dist/esm/utils/deepClone.js.map +1 -1
- package/dist/esm/utils/units.js +1 -1
- package/dist/esm/utils/units.js.map +1 -1
- package/dist/esm/utils/validation.js +11 -23
- package/dist/esm/utils/validation.js.map +1 -1
- package/dist/esm/utils/xmlSanitization.js +131 -7
- package/dist/esm/utils/xmlSanitization.js.map +1 -1
- package/dist/esm/validation/RevisionAutoFixer.js +69 -55
- package/dist/esm/validation/RevisionAutoFixer.js.map +1 -1
- package/dist/esm/validation/RevisionValidator.js +24 -20
- package/dist/esm/validation/RevisionValidator.js.map +1 -1
- package/dist/esm/xml/XMLBuilder.js +52 -20
- package/dist/esm/xml/XMLBuilder.js.map +1 -1
- package/dist/esm/xml/XMLParser.js +55 -13
- package/dist/esm/xml/XMLParser.js.map +1 -1
- package/dist/esm/zip/ZipHandler.js +37 -13
- package/dist/esm/zip/ZipHandler.js.map +1 -1
- package/dist/esm/zip/ZipReader.js +53 -6
- package/dist/esm/zip/ZipReader.js.map +1 -1
- package/dist/esm/zip/errors.js +7 -0
- package/dist/esm/zip/errors.js.map +1 -1
- package/dist/esm/zip/types.js +4 -0
- package/dist/esm/zip/types.js.map +1 -1
- package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
- package/dist/formatting/AbstractNumbering.js +1 -1
- package/dist/formatting/AbstractNumbering.js.map +1 -1
- package/dist/formatting/NumberingLevel.d.ts +1 -1
- package/dist/formatting/NumberingLevel.d.ts.map +1 -1
- package/dist/formatting/NumberingLevel.js +8 -6
- package/dist/formatting/NumberingLevel.js.map +1 -1
- package/dist/formatting/NumberingManager.d.ts.map +1 -1
- package/dist/formatting/NumberingManager.js +16 -1
- package/dist/formatting/NumberingManager.js.map +1 -1
- package/dist/formatting/Style.d.ts.map +1 -1
- package/dist/formatting/Style.js +14 -0
- package/dist/formatting/Style.js.map +1 -1
- package/dist/formatting/StylesManager.d.ts +2 -0
- package/dist/formatting/StylesManager.d.ts.map +1 -1
- package/dist/formatting/StylesManager.js +14 -2
- package/dist/formatting/StylesManager.js.map +1 -1
- package/dist/helpers/CleanupHelper.d.ts.map +1 -1
- package/dist/helpers/CleanupHelper.js +103 -26
- package/dist/helpers/CleanupHelper.js.map +1 -1
- package/dist/images/ImageOptimizer.d.ts.map +1 -1
- package/dist/images/ImageOptimizer.js +52 -4
- package/dist/images/ImageOptimizer.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +2 -1
- package/dist/internal.js.map +1 -1
- package/dist/processors/CompatibilityUpgrader.d.ts.map +1 -1
- package/dist/processors/CompatibilityUpgrader.js +7 -1
- package/dist/processors/CompatibilityUpgrader.js.map +1 -1
- package/dist/processors/InMemoryRevisionAcceptor.d.ts +1 -0
- package/dist/processors/InMemoryRevisionAcceptor.d.ts.map +1 -1
- package/dist/processors/InMemoryRevisionAcceptor.js +135 -13
- package/dist/processors/InMemoryRevisionAcceptor.js.map +1 -1
- package/dist/processors/RevisionWalker.d.ts +2 -0
- package/dist/processors/RevisionWalker.d.ts.map +1 -1
- package/dist/processors/RevisionWalker.js +58 -8
- package/dist/processors/RevisionWalker.js.map +1 -1
- package/dist/processors/SelectiveRevisionAcceptor.d.ts.map +1 -1
- package/dist/processors/SelectiveRevisionAcceptor.js +116 -17
- package/dist/processors/SelectiveRevisionAcceptor.js.map +1 -1
- package/dist/processors/cnfStyleDecoder.d.ts.map +1 -1
- package/dist/processors/cnfStyleDecoder.js +7 -7
- package/dist/processors/cnfStyleDecoder.js.map +1 -1
- package/dist/processors/stripTrackedChanges.d.ts.map +1 -1
- package/dist/processors/stripTrackedChanges.js +16 -5
- package/dist/processors/stripTrackedChanges.js.map +1 -1
- package/dist/utils/deepClone.d.ts.map +1 -1
- package/dist/utils/deepClone.js +24 -11
- package/dist/utils/deepClone.js.map +1 -1
- package/dist/utils/units.d.ts.map +1 -1
- package/dist/utils/units.js +1 -1
- package/dist/utils/units.js.map +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +11 -23
- package/dist/utils/validation.js.map +1 -1
- package/dist/utils/xmlSanitization.d.ts +2 -0
- package/dist/utils/xmlSanitization.d.ts.map +1 -1
- package/dist/utils/xmlSanitization.js +133 -7
- package/dist/utils/xmlSanitization.js.map +1 -1
- package/dist/validation/RevisionAutoFixer.d.ts +6 -2
- package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
- package/dist/validation/RevisionAutoFixer.js +68 -54
- package/dist/validation/RevisionAutoFixer.js.map +1 -1
- package/dist/validation/RevisionValidator.d.ts +2 -0
- package/dist/validation/RevisionValidator.d.ts.map +1 -1
- package/dist/validation/RevisionValidator.js +26 -21
- package/dist/validation/RevisionValidator.js.map +1 -1
- package/dist/xml/XMLBuilder.d.ts +1 -0
- package/dist/xml/XMLBuilder.d.ts.map +1 -1
- package/dist/xml/XMLBuilder.js +52 -20
- package/dist/xml/XMLBuilder.js.map +1 -1
- package/dist/xml/XMLParser.d.ts +1 -0
- package/dist/xml/XMLParser.d.ts.map +1 -1
- package/dist/xml/XMLParser.js +55 -13
- package/dist/xml/XMLParser.js.map +1 -1
- package/dist/zip/ZipHandler.d.ts.map +1 -1
- package/dist/zip/ZipHandler.js +37 -13
- package/dist/zip/ZipHandler.js.map +1 -1
- package/dist/zip/ZipReader.d.ts.map +1 -1
- package/dist/zip/ZipReader.js +52 -5
- package/dist/zip/ZipReader.js.map +1 -1
- package/dist/zip/errors.d.ts +3 -0
- package/dist/zip/errors.d.ts.map +1 -1
- package/dist/zip/errors.js +9 -1
- package/dist/zip/errors.js.map +1 -1
- package/dist/zip/types.d.ts +4 -0
- package/dist/zip/types.d.ts.map +1 -1
- package/dist/zip/types.js +4 -0
- package/dist/zip/types.js.map +1 -1
- package/package.json +2 -2
- package/src/core/Document.ts +1159 -240
- package/src/core/DocumentGenerator.ts +106 -26
- package/src/core/DocumentParser.ts +681 -114
- package/src/core/RelationshipManager.ts +446 -442
- package/src/elements/Comment.ts +123 -18
- package/src/elements/CommentManager.ts +121 -22
- package/src/elements/EndnoteManager.ts +4 -1
- package/src/elements/Field.ts +134 -43
- package/src/elements/FieldHelpers.ts +20 -4
- package/src/elements/Footer.ts +62 -67
- package/src/elements/FootnoteManager.ts +4 -1
- package/src/elements/Header.ts +62 -67
- package/src/elements/HeaderFooterManager.ts +56 -8
- package/src/elements/Hyperlink.ts +150 -55
- package/src/elements/Image.ts +51 -7
- package/src/elements/ImageManager.ts +24 -0
- package/src/elements/Paragraph.ts +161 -40
- package/src/elements/Revision.ts +446 -47
- package/src/elements/Run.ts +44 -6
- package/src/elements/Section.ts +25 -9
- package/src/elements/Shape.ts +52 -44
- package/src/elements/StructuredDocumentTag.ts +83 -8
- package/src/elements/Table.ts +151 -50
- package/src/elements/TableCell.ts +57 -17
- package/src/elements/TableOfContents.ts +10 -9
- package/src/elements/TableRow.ts +35 -3
- package/src/elements/TextBox.ts +58 -43
- package/src/formatting/AbstractNumbering.ts +4 -2
- package/src/formatting/NumberingLevel.ts +50 -12
- package/src/formatting/NumberingManager.ts +32 -3
- package/src/formatting/Style.ts +14 -0
- package/src/formatting/StylesManager.ts +29 -2
- package/src/helpers/CleanupHelper.ts +122 -30
- package/src/images/ImageOptimizer.ts +64 -5
- package/src/index.ts +7 -0
- package/src/internal.ts +1 -0
- package/src/processors/CompatibilityUpgrader.ts +15 -2
- package/src/processors/InMemoryRevisionAcceptor.ts +276 -17
- package/src/processors/RevisionWalker.ts +83 -7
- package/src/processors/SelectiveRevisionAcceptor.ts +164 -28
- package/src/processors/cnfStyleDecoder.ts +18 -12
- package/src/processors/stripTrackedChanges.ts +47 -10
- package/src/utils/deepClone.ts +48 -14
- package/src/utils/units.ts +3 -1
- package/src/utils/validation.ts +30 -32
- package/src/utils/xmlSanitization.ts +218 -22
- package/src/validation/RevisionAutoFixer.ts +109 -65
- package/src/validation/RevisionValidator.ts +48 -23
- package/src/xml/XMLBuilder.ts +82 -22
- package/src/xml/XMLParser.ts +87 -20
- package/src/zip/ZipHandler.ts +61 -21
- package/src/zip/ZipReader.ts +135 -13
- package/src/zip/errors.ts +15 -0
- package/src/zip/types.ts +44 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeaderFooterManager.js","sourceRoot":"","sources":["../../../src/elements/HeaderFooterManager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * HeaderFooterManager - Manages headers and footers in a document\n *\n * Tracks all headers and footers, assigns unique IDs, generates filenames,\n * and manages relationships.\n */\n\nimport { Header } from './Header.js';\nimport { Footer } from './Footer.js';\n\n/**\n * Header entry with metadata\n */\ninterface HeaderEntry {\n header: Header;\n filename: string;\n relationshipId: string;\n number: number;\n}\n\n/**\n * Footer entry with metadata\n */\ninterface FooterEntry {\n footer: Footer;\n filename: string;\n relationshipId: string;\n number: number;\n}\n\n/**\n * Manages all headers and footers in a document\n */\nexport class HeaderFooterManager {\n private headers: Map<Header, HeaderEntry>;\n private footers: Map<Footer, FooterEntry>;\n private nextHeaderNumber: number;\n private nextFooterNumber: number;\n\n /**\n * Creates a new header/footer manager\n */\n constructor() {\n this.headers = new Map();\n this.footers = new Map();\n this.nextHeaderNumber = 1;\n this.nextFooterNumber = 1;\n }\n\n /**\n * Registers a header with the manager\n * @param header The header to register\n * @param relationshipId The relationship ID for this header\n * @returns The filename assigned to this header\n */\n registerHeader(header: Header, relationshipId: string): string {\n // Check if already registered\n const existing = this.headers.get(header);\n if (existing) {\n return existing.filename;\n }\n\n // Generate filename\n const number = this.nextHeaderNumber++;\n const filename = header.getFilename(number);\n\n // Set header ID\n header.setHeaderId(relationshipId);\n\n // Store entry\n const entry: HeaderEntry = {\n header,\n filename,\n relationshipId,\n number,\n };\n\n this.headers.set(header, entry);\n\n return filename;\n }\n\n /**\n * Registers a footer with the manager\n * @param footer The footer to register\n * @param relationshipId The relationship ID for this footer\n * @returns The filename assigned to this footer\n */\n registerFooter(footer: Footer, relationshipId: string): string {\n // Check if already registered\n const existing = this.footers.get(footer);\n if (existing) {\n return existing.filename;\n }\n\n // Generate filename\n const number = this.nextFooterNumber++;\n const filename = footer.getFilename(number);\n\n // Set footer ID\n footer.setFooterId(relationshipId);\n\n // Store entry\n const entry: FooterEntry = {\n footer,\n filename,\n relationshipId,\n number,\n };\n\n this.footers.set(footer, entry);\n\n return filename;\n }\n\n /**\n * Gets the filename for a header\n * @param header The header\n * @returns The filename, or undefined if not registered\n */\n getHeaderFilename(header: Header): string | undefined {\n return this.headers.get(header)?.filename;\n }\n\n /**\n * Gets the filename for a footer\n * @param footer The footer\n * @returns The filename, or undefined if not registered\n */\n getFooterFilename(footer: Footer): string | undefined {\n return this.footers.get(footer)?.filename;\n }\n\n /**\n * Gets the relationship ID for a header\n * @param header The header\n * @returns The relationship ID, or undefined if not registered\n */\n getHeaderRelationshipId(header: Header): string | undefined {\n return this.headers.get(header)?.relationshipId;\n }\n\n /**\n * Gets the relationship ID for a footer\n * @param footer The footer\n * @returns The relationship ID, or undefined if not registered\n */\n getFooterRelationshipId(footer: Footer): string | undefined {\n return this.footers.get(footer)?.relationshipId;\n }\n\n /**\n * Gets all registered headers\n * @returns Array of header entries\n */\n getAllHeaders(): HeaderEntry[] {\n return Array.from(this.headers.values());\n }\n\n /**\n * Gets all registered footers\n * @returns Array of footer entries\n */\n getAllFooters(): FooterEntry[] {\n return Array.from(this.footers.values());\n }\n\n /**\n * Gets the number of headers\n * @returns Number of registered headers\n */\n getHeaderCount(): number {\n return this.headers.size;\n }\n\n /**\n * Gets the number of footers\n * @returns Number of registered footers\n */\n getFooterCount(): number {\n return this.footers.size;\n }\n\n /**\n * Checks if a header is registered\n * @param header The header\n * @returns True if registered\n */\n hasHeader(header: Header): boolean {\n return this.headers.has(header);\n }\n\n /**\n * Checks if a footer is registered\n * @param footer The footer\n * @returns True if registered\n */\n hasFooter(footer: Footer): boolean {\n return this.footers.has(footer);\n }\n\n /**\n * Clears all headers and footers\n */\n clear(): this {\n this.headers.clear();\n this.footers.clear();\n this.nextHeaderNumber = 1;\n this.nextFooterNumber = 1;\n return this;\n }\n\n /**\n * Creates a new header/footer manager\n */\n static create(): HeaderFooterManager {\n return new HeaderFooterManager();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"HeaderFooterManager.js","sourceRoot":"","sources":["../../../src/elements/HeaderFooterManager.ts"],"names":[],"mappings":"AAiCA,MAAM,OAAO,mBAAmB;IACtB,OAAO,CAA2B;IAClC,OAAO,CAA2B;IAClC,gBAAgB,CAAS;IACzB,gBAAgB,CAAS;IAKjC;QACE,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;IAC5B,CAAC;IAUD,cAAc,CAAC,MAAc,EAAE,cAAsB,EAAE,gBAAyB;QAE9E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC,QAAQ,CAAC;QAC3B,CAAC;QAED,IAAI,MAAc,CAAC;QACnB,IAAI,QAAgB,CAAC;QACrB,IAAI,gBAAgB,EAAE,CAAC;YACrB,QAAQ,GAAG,gBAAgB,CAAC;YAC5B,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1D,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC;YAE/D,IAAI,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACpC,IAAI,CAAC,gBAAgB,GAAG,MAAM,GAAG,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACjC,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QAGD,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAGnC,MAAM,KAAK,GAAgB;YACzB,MAAM;YACN,QAAQ;YACR,cAAc;YACd,MAAM;SACP,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAEhC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAUD,cAAc,CAAC,MAAc,EAAE,cAAsB,EAAE,gBAAyB;QAE9E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC,QAAQ,CAAC;QAC3B,CAAC;QAED,IAAI,MAAc,CAAC;QACnB,IAAI,QAAgB,CAAC;QACrB,IAAI,gBAAgB,EAAE,CAAC;YACrB,QAAQ,GAAG,gBAAgB,CAAC;YAC5B,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1D,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC;YAE/D,IAAI,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACpC,IAAI,CAAC,gBAAgB,GAAG,MAAM,GAAG,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACjC,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QAGD,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAGnC,MAAM,KAAK,GAAgB;YACzB,MAAM;YACN,QAAQ;YACR,cAAc;YACd,MAAM;SACP,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAEhC,OAAO,QAAQ,CAAC;IAClB,CAAC;IASD,kBAAkB,CAAC,MAAc;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACzF,CAAC;IASD,kBAAkB,CAAC,MAAc;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACzF,CAAC;IAOD,iBAAiB,CAAC,MAAc;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;IAC5C,CAAC;IAOD,iBAAiB,CAAC,MAAc;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;IAC5C,CAAC;IAOD,uBAAuB,CAAC,MAAc;QACpC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;IAClD,CAAC;IAOD,uBAAuB,CAAC,MAAc;QACpC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;IAClD,CAAC;IAMD,aAAa;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAMD,aAAa;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAMD,cAAc;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAMD,cAAc;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAOD,SAAS,CAAC,MAAc;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAOD,SAAS,CAAC,MAAc;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAKD,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,mBAAmB,EAAE,CAAC;IACnC,CAAC;CACF","sourcesContent":["/**\n * HeaderFooterManager - Manages headers and footers in a document\n *\n * Tracks all headers and footers, assigns unique IDs, generates filenames,\n * and manages relationships.\n */\n\nimport { Header } from './Header.js';\nimport { Footer } from './Footer.js';\n\n/**\n * Header entry with metadata\n */\ninterface HeaderEntry {\n header: Header;\n filename: string;\n relationshipId: string;\n number: number;\n}\n\n/**\n * Footer entry with metadata\n */\ninterface FooterEntry {\n footer: Footer;\n filename: string;\n relationshipId: string;\n number: number;\n}\n\n/**\n * Manages all headers and footers in a document\n */\nexport class HeaderFooterManager {\n private headers: Map<Header, HeaderEntry>;\n private footers: Map<Footer, FooterEntry>;\n private nextHeaderNumber: number;\n private nextFooterNumber: number;\n\n /**\n * Creates a new header/footer manager\n */\n constructor() {\n this.headers = new Map();\n this.footers = new Map();\n this.nextHeaderNumber = 1;\n this.nextFooterNumber = 1;\n }\n\n /**\n * Registers a header with the manager\n * @param header The header to register\n * @param relationshipId The relationship ID for this header\n * @param originalFilename Part name from the relationship target for loaded\n * headers — kept as-is so saved content lands where the relationship points\n * @returns The filename assigned to this header\n */\n registerHeader(header: Header, relationshipId: string, originalFilename?: string): string {\n // Check if already registered\n const existing = this.headers.get(header);\n if (existing) {\n return existing.filename;\n }\n\n let number: number;\n let filename: string;\n if (originalFilename) {\n filename = originalFilename;\n const digits = /(\\d+)\\.xml$/i.exec(originalFilename)?.[1];\n number = digits ? parseInt(digits, 10) : this.nextHeaderNumber;\n // Keep the counter ahead of parsed part names so generated names never collide\n if (number >= this.nextHeaderNumber) {\n this.nextHeaderNumber = number + 1;\n }\n } else {\n number = this.nextHeaderNumber++;\n filename = header.getFilename(number);\n }\n\n // Set header ID\n header.setHeaderId(relationshipId);\n\n // Store entry\n const entry: HeaderEntry = {\n header,\n filename,\n relationshipId,\n number,\n };\n\n this.headers.set(header, entry);\n\n return filename;\n }\n\n /**\n * Registers a footer with the manager\n * @param footer The footer to register\n * @param relationshipId The relationship ID for this footer\n * @param originalFilename Part name from the relationship target for loaded\n * footers — kept as-is so saved content lands where the relationship points\n * @returns The filename assigned to this footer\n */\n registerFooter(footer: Footer, relationshipId: string, originalFilename?: string): string {\n // Check if already registered\n const existing = this.footers.get(footer);\n if (existing) {\n return existing.filename;\n }\n\n let number: number;\n let filename: string;\n if (originalFilename) {\n filename = originalFilename;\n const digits = /(\\d+)\\.xml$/i.exec(originalFilename)?.[1];\n number = digits ? parseInt(digits, 10) : this.nextFooterNumber;\n // Keep the counter ahead of parsed part names so generated names never collide\n if (number >= this.nextFooterNumber) {\n this.nextFooterNumber = number + 1;\n }\n } else {\n number = this.nextFooterNumber++;\n filename = footer.getFilename(number);\n }\n\n // Set footer ID\n footer.setFooterId(relationshipId);\n\n // Store entry\n const entry: FooterEntry = {\n footer,\n filename,\n relationshipId,\n number,\n };\n\n this.footers.set(footer, entry);\n\n return filename;\n }\n\n /**\n * Returns the part filename this header has, or would receive when\n * registered. Does not consume a sequence number — callers can create the\n * relationship targeting the same part name registerHeader() will assign.\n * @param header The header\n * @returns The current or upcoming filename\n */\n peekHeaderFilename(header: Header): string {\n return this.headers.get(header)?.filename ?? header.getFilename(this.nextHeaderNumber);\n }\n\n /**\n * Returns the part filename this footer has, or would receive when\n * registered. Does not consume a sequence number — callers can create the\n * relationship targeting the same part name registerFooter() will assign.\n * @param footer The footer\n * @returns The current or upcoming filename\n */\n peekFooterFilename(footer: Footer): string {\n return this.footers.get(footer)?.filename ?? footer.getFilename(this.nextFooterNumber);\n }\n\n /**\n * Gets the filename for a header\n * @param header The header\n * @returns The filename, or undefined if not registered\n */\n getHeaderFilename(header: Header): string | undefined {\n return this.headers.get(header)?.filename;\n }\n\n /**\n * Gets the filename for a footer\n * @param footer The footer\n * @returns The filename, or undefined if not registered\n */\n getFooterFilename(footer: Footer): string | undefined {\n return this.footers.get(footer)?.filename;\n }\n\n /**\n * Gets the relationship ID for a header\n * @param header The header\n * @returns The relationship ID, or undefined if not registered\n */\n getHeaderRelationshipId(header: Header): string | undefined {\n return this.headers.get(header)?.relationshipId;\n }\n\n /**\n * Gets the relationship ID for a footer\n * @param footer The footer\n * @returns The relationship ID, or undefined if not registered\n */\n getFooterRelationshipId(footer: Footer): string | undefined {\n return this.footers.get(footer)?.relationshipId;\n }\n\n /**\n * Gets all registered headers\n * @returns Array of header entries\n */\n getAllHeaders(): HeaderEntry[] {\n return Array.from(this.headers.values());\n }\n\n /**\n * Gets all registered footers\n * @returns Array of footer entries\n */\n getAllFooters(): FooterEntry[] {\n return Array.from(this.footers.values());\n }\n\n /**\n * Gets the number of headers\n * @returns Number of registered headers\n */\n getHeaderCount(): number {\n return this.headers.size;\n }\n\n /**\n * Gets the number of footers\n * @returns Number of registered footers\n */\n getFooterCount(): number {\n return this.footers.size;\n }\n\n /**\n * Checks if a header is registered\n * @param header The header\n * @returns True if registered\n */\n hasHeader(header: Header): boolean {\n return this.headers.has(header);\n }\n\n /**\n * Checks if a footer is registered\n * @param footer The footer\n * @returns True if registered\n */\n hasFooter(footer: Footer): boolean {\n return this.footers.has(footer);\n }\n\n /**\n * Clears all headers and footers\n */\n clear(): this {\n this.headers.clear();\n this.footers.clear();\n this.nextHeaderNumber = 1;\n this.nextFooterNumber = 1;\n return this;\n }\n\n /**\n * Creates a new header/footer manager\n */\n static create(): HeaderFooterManager {\n return new HeaderFooterManager();\n }\n}\n"]}
|
|
@@ -6,7 +6,7 @@ export class Hyperlink {
|
|
|
6
6
|
url;
|
|
7
7
|
anchor;
|
|
8
8
|
text;
|
|
9
|
-
|
|
9
|
+
runs;
|
|
10
10
|
tooltip;
|
|
11
11
|
relationshipId;
|
|
12
12
|
formatting;
|
|
@@ -34,7 +34,7 @@ export class Hyperlink {
|
|
|
34
34
|
if (this._isEmpty) {
|
|
35
35
|
this.text = '';
|
|
36
36
|
this.formatting = {};
|
|
37
|
-
this.
|
|
37
|
+
this.runs = [new Run('', {})];
|
|
38
38
|
return;
|
|
39
39
|
}
|
|
40
40
|
this.text = properties.text || this.url || 'Link';
|
|
@@ -46,14 +46,16 @@ export class Hyperlink {
|
|
|
46
46
|
if (validation.cleanedText) {
|
|
47
47
|
this.text = validation.cleanedText;
|
|
48
48
|
}
|
|
49
|
-
this.formatting =
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
49
|
+
this.formatting = properties.preserveFormatting
|
|
50
|
+
? { ...properties.formatting }
|
|
51
|
+
: {
|
|
52
|
+
font: 'Verdana',
|
|
53
|
+
size: 12,
|
|
54
|
+
color: '0000FF',
|
|
55
|
+
underline: 'single',
|
|
56
|
+
...properties.formatting,
|
|
57
|
+
};
|
|
58
|
+
this.runs = [new Run(this.text, this.formatting)];
|
|
57
59
|
}
|
|
58
60
|
_setTrackingContext(context) {
|
|
59
61
|
this.trackingContext = context;
|
|
@@ -88,7 +90,7 @@ export class Hyperlink {
|
|
|
88
90
|
return;
|
|
89
91
|
const revisionId = this.trackingContext.getRevisionManager().consumeNextId();
|
|
90
92
|
const author = this.trackingContext.getAuthor();
|
|
91
|
-
this.
|
|
93
|
+
this.runs[0].setPropertyChangeRevision({
|
|
92
94
|
id: revisionId,
|
|
93
95
|
author,
|
|
94
96
|
date: new Date(),
|
|
@@ -132,7 +134,12 @@ export class Hyperlink {
|
|
|
132
134
|
return this;
|
|
133
135
|
}
|
|
134
136
|
getText() {
|
|
135
|
-
return this.run.getText();
|
|
137
|
+
return this.runs.map((run) => run.getText()).join('');
|
|
138
|
+
}
|
|
139
|
+
replaceRunText(text) {
|
|
140
|
+
const first = this.runs[0];
|
|
141
|
+
first.setText(text);
|
|
142
|
+
this.runs = [first];
|
|
136
143
|
}
|
|
137
144
|
setText(text) {
|
|
138
145
|
const validation = validateRunText(text, {
|
|
@@ -140,8 +147,9 @@ export class Hyperlink {
|
|
|
140
147
|
autoClean: this.formatting.cleanXmlFromText !== false,
|
|
141
148
|
warnToConsole: true,
|
|
142
149
|
});
|
|
143
|
-
const cleanedText = validation.cleanedText
|
|
150
|
+
const cleanedText = validation.cleanedText ?? text;
|
|
144
151
|
const previousValue = this.text;
|
|
152
|
+
this._isEmpty = false;
|
|
145
153
|
if (previousValue === cleanedText) {
|
|
146
154
|
return this;
|
|
147
155
|
}
|
|
@@ -149,7 +157,7 @@ export class Hyperlink {
|
|
|
149
157
|
const author = this.trackingContext.getAuthor();
|
|
150
158
|
const oldHyperlink = this.clone();
|
|
151
159
|
this.text = cleanedText;
|
|
152
|
-
this.
|
|
160
|
+
this.replaceRunText(cleanedText);
|
|
153
161
|
const deletion = Revision.createDeletion(author, [oldHyperlink]);
|
|
154
162
|
const insertion = Revision.createInsertion(author, [this]);
|
|
155
163
|
this._parentParagraph.replaceContent(this, [deletion, insertion]);
|
|
@@ -158,14 +166,25 @@ export class Hyperlink {
|
|
|
158
166
|
return this;
|
|
159
167
|
}
|
|
160
168
|
this.text = cleanedText;
|
|
161
|
-
this.
|
|
169
|
+
this.replaceRunText(cleanedText);
|
|
162
170
|
return this;
|
|
163
171
|
}
|
|
164
172
|
setRun(run) {
|
|
165
|
-
this.
|
|
173
|
+
this.runs = [run];
|
|
166
174
|
this.text = run.getText();
|
|
167
175
|
return this;
|
|
168
176
|
}
|
|
177
|
+
setRuns(runs) {
|
|
178
|
+
if (runs.length === 0) {
|
|
179
|
+
return this;
|
|
180
|
+
}
|
|
181
|
+
this.runs = [...runs];
|
|
182
|
+
this.text = this.getText();
|
|
183
|
+
return this;
|
|
184
|
+
}
|
|
185
|
+
getRuns() {
|
|
186
|
+
return [...this.runs];
|
|
187
|
+
}
|
|
169
188
|
getTooltip() {
|
|
170
189
|
return this.tooltip;
|
|
171
190
|
}
|
|
@@ -197,7 +216,7 @@ export class Hyperlink {
|
|
|
197
216
|
}
|
|
198
217
|
setUrl(url) {
|
|
199
218
|
if (!url && !this.anchor) {
|
|
200
|
-
throw new Error(`Cannot set URL to undefined: Hyperlink "${this.
|
|
219
|
+
throw new Error(`Cannot set URL to undefined: Hyperlink "${this.getText()}" has no anchor. ` +
|
|
201
220
|
`Clearing the URL would create an invalid hyperlink per ECMA-376 §17.16.22. ` +
|
|
202
221
|
`Either provide a new URL or delete the hyperlink entirely.`);
|
|
203
222
|
}
|
|
@@ -210,9 +229,9 @@ export class Hyperlink {
|
|
|
210
229
|
const oldHyperlink = this.clone();
|
|
211
230
|
this.url = url;
|
|
212
231
|
this.relationshipId = undefined;
|
|
213
|
-
if (this.
|
|
232
|
+
if (this.getText() === oldUrl) {
|
|
214
233
|
this.text = url || this.anchor || 'Link';
|
|
215
|
-
this.
|
|
234
|
+
this.replaceRunText(this.text);
|
|
216
235
|
}
|
|
217
236
|
const deletion = Revision.createDeletion(author, [oldHyperlink]);
|
|
218
237
|
const insertion = Revision.createInsertion(author, [this]);
|
|
@@ -222,15 +241,15 @@ export class Hyperlink {
|
|
|
222
241
|
}
|
|
223
242
|
this.url = url;
|
|
224
243
|
this.relationshipId = undefined;
|
|
225
|
-
if (this.
|
|
244
|
+
if (this.getText() === oldUrl) {
|
|
226
245
|
this.text = url || this.anchor || 'Link';
|
|
227
|
-
this.
|
|
246
|
+
this.replaceRunText(this.text);
|
|
228
247
|
}
|
|
229
248
|
return this;
|
|
230
249
|
}
|
|
231
250
|
setAnchor(anchor) {
|
|
232
251
|
if (!anchor && !this.url) {
|
|
233
|
-
throw new Error(`Cannot set anchor to undefined: Hyperlink "${this.
|
|
252
|
+
throw new Error(`Cannot set anchor to undefined: Hyperlink "${this.getText()}" has no URL. ` +
|
|
234
253
|
`Clearing the anchor would create an invalid hyperlink per ECMA-376 §17.16.22. ` +
|
|
235
254
|
`Either provide a new anchor or delete the hyperlink entirely.`);
|
|
236
255
|
}
|
|
@@ -248,9 +267,9 @@ export class Hyperlink {
|
|
|
248
267
|
this.url = undefined;
|
|
249
268
|
this.relationshipId = undefined;
|
|
250
269
|
}
|
|
251
|
-
if (this.
|
|
270
|
+
if (this.getText() === oldAnchor) {
|
|
252
271
|
this.text = anchor || this.url || 'Link';
|
|
253
|
-
this.
|
|
272
|
+
this.replaceRunText(this.text);
|
|
254
273
|
}
|
|
255
274
|
const deletion = Revision.createDeletion(author, [oldHyperlink]);
|
|
256
275
|
const insertion = Revision.createInsertion(author, [this]);
|
|
@@ -265,14 +284,14 @@ export class Hyperlink {
|
|
|
265
284
|
this.url = undefined;
|
|
266
285
|
this.relationshipId = undefined;
|
|
267
286
|
}
|
|
268
|
-
if (this.
|
|
287
|
+
if (this.getText() === oldAnchor) {
|
|
269
288
|
this.text = anchor || this.url || 'Link';
|
|
270
|
-
this.
|
|
289
|
+
this.replaceRunText(this.text);
|
|
271
290
|
}
|
|
272
291
|
return this;
|
|
273
292
|
}
|
|
274
293
|
getRun() {
|
|
275
|
-
return this.
|
|
294
|
+
return this.runs[0];
|
|
276
295
|
}
|
|
277
296
|
setFormatting(formatting, options) {
|
|
278
297
|
const previousFormatting = { ...this.formatting };
|
|
@@ -282,14 +301,16 @@ export class Hyperlink {
|
|
|
282
301
|
else {
|
|
283
302
|
this.formatting = { ...this.formatting, ...formatting };
|
|
284
303
|
}
|
|
285
|
-
|
|
286
|
-
this.
|
|
287
|
-
this.text = currentText;
|
|
304
|
+
this.runs = this.runs.map((run) => Run.createFromContent(run.getContent(), options?.replace ? { ...formatting } : { ...run.getFormatting(), ...formatting }));
|
|
305
|
+
this.text = this.getText();
|
|
288
306
|
if (this.trackingContext?.isEnabled()) {
|
|
289
307
|
this._applyFormattingRPrChange(previousFormatting);
|
|
290
308
|
}
|
|
291
309
|
return this;
|
|
292
310
|
}
|
|
311
|
+
patchRunFormatting(patch) {
|
|
312
|
+
this.runs = this.runs.map((run) => Run.createFromContent(run.getContent(), { ...run.getFormatting(), ...patch }));
|
|
313
|
+
}
|
|
293
314
|
getFormatting() {
|
|
294
315
|
return this;
|
|
295
316
|
}
|
|
@@ -317,7 +338,7 @@ export class Hyperlink {
|
|
|
317
338
|
setColor(color) {
|
|
318
339
|
const previousFormatting = { ...this.formatting };
|
|
319
340
|
this.formatting.color = color;
|
|
320
|
-
this.
|
|
341
|
+
this.patchRunFormatting({ color });
|
|
321
342
|
if (this.trackingContext?.isEnabled() && previousFormatting.color !== color) {
|
|
322
343
|
this._applyFormattingRPrChange(previousFormatting);
|
|
323
344
|
}
|
|
@@ -326,7 +347,7 @@ export class Hyperlink {
|
|
|
326
347
|
setUnderline(underline) {
|
|
327
348
|
const previousFormatting = { ...this.formatting };
|
|
328
349
|
this.formatting.underline = underline;
|
|
329
|
-
this.
|
|
350
|
+
this.patchRunFormatting({ underline });
|
|
330
351
|
if (this.trackingContext?.isEnabled() && previousFormatting.underline !== underline) {
|
|
331
352
|
this._applyFormattingRPrChange(previousFormatting);
|
|
332
353
|
}
|
|
@@ -335,7 +356,7 @@ export class Hyperlink {
|
|
|
335
356
|
setBold(bold = true) {
|
|
336
357
|
const previousFormatting = { ...this.formatting };
|
|
337
358
|
this.formatting.bold = bold;
|
|
338
|
-
this.
|
|
359
|
+
this.patchRunFormatting({ bold });
|
|
339
360
|
if (this.trackingContext?.isEnabled() && previousFormatting.bold !== bold) {
|
|
340
361
|
this._applyFormattingRPrChange(previousFormatting);
|
|
341
362
|
}
|
|
@@ -344,7 +365,7 @@ export class Hyperlink {
|
|
|
344
365
|
setItalic(italic = true) {
|
|
345
366
|
const previousFormatting = { ...this.formatting };
|
|
346
367
|
this.formatting.italic = italic;
|
|
347
|
-
this.
|
|
368
|
+
this.patchRunFormatting({ italic });
|
|
348
369
|
if (this.trackingContext?.isEnabled() && previousFormatting.italic !== italic) {
|
|
349
370
|
this._applyFormattingRPrChange(previousFormatting);
|
|
350
371
|
}
|
|
@@ -353,7 +374,7 @@ export class Hyperlink {
|
|
|
353
374
|
setFont(font) {
|
|
354
375
|
const previousFormatting = { ...this.formatting };
|
|
355
376
|
this.formatting.font = font;
|
|
356
|
-
this.
|
|
377
|
+
this.patchRunFormatting({ font });
|
|
357
378
|
if (this.trackingContext?.isEnabled() && previousFormatting.font !== font) {
|
|
358
379
|
this._applyFormattingRPrChange(previousFormatting);
|
|
359
380
|
}
|
|
@@ -362,7 +383,7 @@ export class Hyperlink {
|
|
|
362
383
|
setSize(size) {
|
|
363
384
|
const previousFormatting = { ...this.formatting };
|
|
364
385
|
this.formatting.size = size;
|
|
365
|
-
this.
|
|
386
|
+
this.patchRunFormatting({ size });
|
|
366
387
|
if (this.trackingContext?.isEnabled() && previousFormatting.size !== size) {
|
|
367
388
|
this._applyFormattingRPrChange(previousFormatting);
|
|
368
389
|
}
|
|
@@ -420,8 +441,9 @@ export class Hyperlink {
|
|
|
420
441
|
fixedUrl = fixedUrl.replace(/\/$/, '');
|
|
421
442
|
fixed.push('Removed trailing slash');
|
|
422
443
|
}
|
|
444
|
+
const beforeUpgrade = fixedUrl;
|
|
423
445
|
fixedUrl = fixedUrl.replace(/^http:\/\//i, 'https://');
|
|
424
|
-
if (fixedUrl !==
|
|
446
|
+
if (fixedUrl !== beforeUpgrade) {
|
|
425
447
|
fixed.push('Upgraded HTTP to HTTPS');
|
|
426
448
|
}
|
|
427
449
|
if (fixedUrl !== this.url) {
|
|
@@ -502,17 +524,21 @@ export class Hyperlink {
|
|
|
502
524
|
tooltip: this.tooltip,
|
|
503
525
|
relationshipId: this.relationshipId,
|
|
504
526
|
formatting: { ...this.formatting },
|
|
527
|
+
preserveFormatting: true,
|
|
505
528
|
tgtFrame: this.tgtFrame,
|
|
506
529
|
history: this.history,
|
|
507
530
|
docLocation: this.docLocation,
|
|
531
|
+
isEmpty: this._isEmpty,
|
|
508
532
|
});
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
const existingRPrChange =
|
|
533
|
+
cloned.runs = this.runs.map((run) => {
|
|
534
|
+
const copy = run.clone();
|
|
535
|
+
const existingRPrChange = run.getPropertyChangeRevision();
|
|
512
536
|
if (existingRPrChange) {
|
|
513
|
-
|
|
537
|
+
copy.setPropertyChangeRevision({ ...existingRPrChange });
|
|
514
538
|
}
|
|
515
|
-
|
|
539
|
+
return copy;
|
|
540
|
+
});
|
|
541
|
+
cloned.text = cloned.getText();
|
|
516
542
|
return cloned;
|
|
517
543
|
}
|
|
518
544
|
toXML() {
|
|
@@ -552,11 +578,10 @@ export class Hyperlink {
|
|
|
552
578
|
children: [],
|
|
553
579
|
};
|
|
554
580
|
}
|
|
555
|
-
const runXml = this.run.toXML();
|
|
556
581
|
return {
|
|
557
582
|
name: 'w:hyperlink',
|
|
558
583
|
attributes,
|
|
559
|
-
children:
|
|
584
|
+
children: this.runs.map((run) => run.toXML()),
|
|
560
585
|
};
|
|
561
586
|
}
|
|
562
587
|
static createExternal(url, text, formatting) {
|