docxmlater 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +484 -561
- package/dist/core/Document.d.ts +60 -0
- package/dist/core/Document.d.ts.map +1 -1
- package/dist/core/Document.js +526 -4
- package/dist/core/Document.js.map +1 -1
- package/dist/core/DocumentGenerator.d.ts.map +1 -1
- package/dist/core/DocumentGenerator.js +6 -3
- package/dist/core/DocumentGenerator.js.map +1 -1
- package/dist/core/Relationship.d.ts +5 -0
- package/dist/core/Relationship.d.ts.map +1 -1
- package/dist/core/Relationship.js +27 -1
- package/dist/core/Relationship.js.map +1 -1
- package/dist/core/RelationshipManager.d.ts +6 -0
- package/dist/core/RelationshipManager.d.ts.map +1 -1
- package/dist/core/RelationshipManager.js +45 -0
- package/dist/core/RelationshipManager.js.map +1 -1
- package/dist/elements/Endnote.d.ts +34 -0
- package/dist/elements/Endnote.d.ts.map +1 -0
- package/dist/elements/Endnote.js +96 -0
- package/dist/elements/Endnote.js.map +1 -0
- package/dist/elements/EndnoteManager.d.ts +26 -0
- package/dist/elements/EndnoteManager.d.ts.map +1 -0
- package/dist/elements/EndnoteManager.js +108 -0
- package/dist/elements/EndnoteManager.js.map +1 -0
- package/dist/elements/Footnote.d.ts +34 -0
- package/dist/elements/Footnote.d.ts.map +1 -0
- package/dist/elements/Footnote.js +96 -0
- package/dist/elements/Footnote.js.map +1 -0
- package/dist/elements/FootnoteManager.d.ts +26 -0
- package/dist/elements/FootnoteManager.d.ts.map +1 -0
- package/dist/elements/FootnoteManager.js +108 -0
- package/dist/elements/FootnoteManager.js.map +1 -0
- package/dist/elements/Hyperlink.d.ts +1 -0
- package/dist/elements/Hyperlink.d.ts.map +1 -1
- package/dist/elements/Hyperlink.js +53 -1
- package/dist/elements/Hyperlink.js.map +1 -1
- package/dist/elements/Image.d.ts +4 -0
- package/dist/elements/Image.d.ts.map +1 -1
- package/dist/elements/Image.js +21 -0
- package/dist/elements/Image.js.map +1 -1
- package/dist/elements/Paragraph.d.ts +39 -0
- package/dist/elements/Paragraph.d.ts.map +1 -1
- package/dist/elements/Paragraph.js +81 -25
- package/dist/elements/Paragraph.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 +36 -24
- package/dist/elements/Run.js.map +1 -1
- package/dist/elements/Table.d.ts +6 -0
- package/dist/elements/Table.d.ts.map +1 -1
- package/dist/elements/Table.js +67 -1
- package/dist/elements/Table.js.map +1 -1
- package/dist/formatting/Style.d.ts +1 -0
- package/dist/formatting/Style.d.ts.map +1 -1
- package/dist/formatting/Style.js +65 -0
- package/dist/formatting/Style.js.map +1 -1
- package/dist/formatting/StylesManager.d.ts +8 -0
- package/dist/formatting/StylesManager.d.ts.map +1 -1
- package/dist/formatting/StylesManager.js +89 -0
- package/dist/formatting/StylesManager.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/types/formatting.d.ts +47 -0
- package/dist/types/formatting.d.ts.map +1 -0
- package/dist/types/formatting.js +3 -0
- package/dist/types/formatting.js.map +1 -0
- package/dist/utils/validation.d.ts +14 -0
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +88 -3
- package/dist/utils/validation.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EndnoteManager = void 0;
|
|
4
|
+
const Endnote_1 = require("./Endnote");
|
|
5
|
+
const XMLBuilder_1 = require("../xml/XMLBuilder");
|
|
6
|
+
class EndnoteManager {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.endnotes = new Map();
|
|
9
|
+
this.nextId = 1;
|
|
10
|
+
this.addSpecialEndnotes();
|
|
11
|
+
}
|
|
12
|
+
addSpecialEndnotes() {
|
|
13
|
+
const separator = Endnote_1.Endnote.createSeparator(-1);
|
|
14
|
+
this.endnotes.set(-1, separator);
|
|
15
|
+
const continuationSep = Endnote_1.Endnote.createContinuationSeparator(0);
|
|
16
|
+
this.endnotes.set(0, continuationSep);
|
|
17
|
+
}
|
|
18
|
+
static create() {
|
|
19
|
+
return new EndnoteManager();
|
|
20
|
+
}
|
|
21
|
+
register(endnote) {
|
|
22
|
+
const id = endnote.getId();
|
|
23
|
+
if (id > 0 && this.endnotes.has(id)) {
|
|
24
|
+
throw new Error(`Endnote with ID ${id} already exists`);
|
|
25
|
+
}
|
|
26
|
+
this.endnotes.set(id, endnote);
|
|
27
|
+
if (id >= this.nextId) {
|
|
28
|
+
this.nextId = id + 1;
|
|
29
|
+
}
|
|
30
|
+
return endnote;
|
|
31
|
+
}
|
|
32
|
+
createEndnote(text) {
|
|
33
|
+
const endnote = Endnote_1.Endnote.fromText(this.nextId++, text);
|
|
34
|
+
this.endnotes.set(endnote.getId(), endnote);
|
|
35
|
+
return endnote;
|
|
36
|
+
}
|
|
37
|
+
getEndnote(id) {
|
|
38
|
+
return this.endnotes.get(id);
|
|
39
|
+
}
|
|
40
|
+
getAllEndnotes() {
|
|
41
|
+
return Array.from(this.endnotes.values())
|
|
42
|
+
.filter(e => e.getId() > 0)
|
|
43
|
+
.sort((a, b) => a.getId() - b.getId());
|
|
44
|
+
}
|
|
45
|
+
getAllEndnotesWithSpecial() {
|
|
46
|
+
return Array.from(this.endnotes.values())
|
|
47
|
+
.sort((a, b) => a.getId() - b.getId());
|
|
48
|
+
}
|
|
49
|
+
hasEndnote(id) {
|
|
50
|
+
return this.endnotes.has(id);
|
|
51
|
+
}
|
|
52
|
+
removeEndnote(id) {
|
|
53
|
+
if (id <= 0) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
return this.endnotes.delete(id);
|
|
57
|
+
}
|
|
58
|
+
getNextId() {
|
|
59
|
+
return this.nextId;
|
|
60
|
+
}
|
|
61
|
+
getCount() {
|
|
62
|
+
return this.getAllEndnotes().length;
|
|
63
|
+
}
|
|
64
|
+
isEmpty() {
|
|
65
|
+
return this.getCount() === 0;
|
|
66
|
+
}
|
|
67
|
+
clear() {
|
|
68
|
+
const specialEndnotes = new Map();
|
|
69
|
+
for (const [id, endnote] of this.endnotes) {
|
|
70
|
+
if (id <= 0) {
|
|
71
|
+
specialEndnotes.set(id, endnote);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
this.endnotes = specialEndnotes;
|
|
75
|
+
this.nextId = 1;
|
|
76
|
+
}
|
|
77
|
+
getStats() {
|
|
78
|
+
return {
|
|
79
|
+
total: this.getCount(),
|
|
80
|
+
nextId: this.nextId,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
generateEndnotesXml() {
|
|
84
|
+
const endnotes = this.getAllEndnotesWithSpecial();
|
|
85
|
+
const endnotesElement = {
|
|
86
|
+
name: 'w:endnotes',
|
|
87
|
+
attributes: {
|
|
88
|
+
'xmlns:w': 'http://schemas.openxmlformats.org/wordprocessingml/2006/main',
|
|
89
|
+
'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'
|
|
90
|
+
},
|
|
91
|
+
children: endnotes.map(e => e.toXML())
|
|
92
|
+
};
|
|
93
|
+
const builder = new XMLBuilder_1.XMLBuilder();
|
|
94
|
+
builder.element(endnotesElement.name, endnotesElement.attributes, endnotesElement.children);
|
|
95
|
+
return builder.build(true);
|
|
96
|
+
}
|
|
97
|
+
static validate(xml) {
|
|
98
|
+
if (!xml || !xml.includes('<w:endnotes')) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
if (!xml.includes('xmlns:w=')) {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
exports.EndnoteManager = EndnoteManager;
|
|
108
|
+
//# sourceMappingURL=EndnoteManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EndnoteManager.js","sourceRoot":"","sources":["../../src/elements/EndnoteManager.ts"],"names":[],"mappings":";;;AAOA,uCAAoC;AACpC,kDAA2D;AAK3D,MAAa,cAAc;IAQzB;QAPQ,aAAQ,GAAyB,IAAI,GAAG,EAAE,CAAC;QAC3C,WAAM,GAAW,CAAC,CAAC;QAQzB,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAMO,kBAAkB;QAExB,MAAM,SAAS,GAAG,iBAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAGjC,MAAM,eAAe,GAAG,iBAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;IACxC,CAAC;IAKD,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,cAAc,EAAE,CAAC;IAC9B,CAAC;IAOD,QAAQ,CAAC,OAAgB;QACvB,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;QAG3B,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAG/B,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC;QACvB,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAOD,aAAa,CAAC,IAAY;QACxB,MAAM,OAAO,GAAG,iBAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,OAAO,CAAC;IACjB,CAAC;IAOD,UAAU,CAAC,EAAU;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAKD,cAAc;QACZ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;aACtC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;aAC1B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3C,CAAC;IAKD,yBAAyB;QACvB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;aACtC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3C,CAAC;IAMD,UAAU,CAAC,EAAU;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAOD,aAAa,CAAC,EAAU;QAEtB,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAKD,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAKD,QAAQ;QACN,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC;IACtC,CAAC;IAKD,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IAKD,KAAK;QACH,MAAM,eAAe,GAAG,IAAI,GAAG,EAAmB,CAAC;QAGnD,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1C,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBACZ,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAClB,CAAC;IAKD,QAAQ;QAIN,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE;YACtB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;IACJ,CAAC;IAKD,mBAAmB;QACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAGlD,MAAM,eAAe,GAAe;YAClC,IAAI,EAAE,YAAY;YAClB,UAAU,EAAE;gBACV,SAAS,EAAE,8DAA8D;gBACzE,SAAS,EAAE,qEAAqE;aACjF;YACD,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;SACvC,CAAC;QAGF,MAAM,OAAO,GAAG,IAAI,uBAAU,EAAE,CAAC;QACjC,OAAO,CAAC,OAAO,CACb,eAAe,CAAC,IAAI,EACpB,eAAe,CAAC,UAAU,EAC1B,eAAe,CAAC,QAAQ,CACzB,CAAC;QACF,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAOD,MAAM,CAAC,QAAQ,CAAC,GAAW;QAEzB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACzC,OAAO,KAAK,CAAC;QACf,CAAC;QAGD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAlND,wCAkNC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Paragraph } from './Paragraph';
|
|
2
|
+
import { XMLElement } from '../xml/XMLBuilder';
|
|
3
|
+
export declare enum FootnoteType {
|
|
4
|
+
Normal = "normal",
|
|
5
|
+
Separator = "separator",
|
|
6
|
+
ContinuationSeparator = "continuationSeparator",
|
|
7
|
+
ContinuationNotice = "continuationNotice"
|
|
8
|
+
}
|
|
9
|
+
export interface FootnoteProperties {
|
|
10
|
+
id: number;
|
|
11
|
+
type?: FootnoteType;
|
|
12
|
+
customMark?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare class Footnote {
|
|
15
|
+
private id;
|
|
16
|
+
private type;
|
|
17
|
+
private customMark?;
|
|
18
|
+
private paragraphs;
|
|
19
|
+
constructor(properties: FootnoteProperties);
|
|
20
|
+
getId(): number;
|
|
21
|
+
getType(): FootnoteType;
|
|
22
|
+
getCustomMark(): string | undefined;
|
|
23
|
+
setCustomMark(mark: string): this;
|
|
24
|
+
addParagraph(paragraph: Paragraph): this;
|
|
25
|
+
createParagraph(text?: string): Paragraph;
|
|
26
|
+
getParagraphs(): Paragraph[];
|
|
27
|
+
getText(): string;
|
|
28
|
+
toXML(): XMLElement;
|
|
29
|
+
static fromText(id: number, text: string): Footnote;
|
|
30
|
+
static createSeparator(id: number): Footnote;
|
|
31
|
+
static createContinuationSeparator(id: number): Footnote;
|
|
32
|
+
static createContinuationNotice(id: number, text?: string): Footnote;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=Footnote.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Footnote.d.ts","sourceRoot":"","sources":["../../src/elements/Footnote.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAc,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAK3D,oBAAY,YAAY;IAEtB,MAAM,WAAW;IAEjB,SAAS,cAAc;IAEvB,qBAAqB,0BAA0B;IAE/C,kBAAkB,uBAAuB;CAC1C;AAKD,MAAM,WAAW,kBAAkB;IAEjC,EAAE,EAAE,MAAM,CAAC;IAEX,IAAI,CAAC,EAAE,YAAY,CAAC;IAEpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAKD,qBAAa,QAAQ;IACnB,OAAO,CAAC,EAAE,CAAS;IACnB,OAAO,CAAC,IAAI,CAAe;IAC3B,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAmB;gBAMzB,UAAU,EAAE,kBAAkB;IAS1C,KAAK,IAAI,MAAM;IAOf,OAAO,IAAI,YAAY;IAOvB,aAAa,IAAI,MAAM,GAAG,SAAS;IAQnC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IASjC,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAUxC,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS;IAYzC,aAAa,IAAI,SAAS,EAAE;IAO5B,OAAO,IAAI,MAAM;IAOjB,KAAK,IAAI,UAAU;IA8BnB,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ;IAWnD,MAAM,CAAC,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ;IAgB5C,MAAM,CAAC,2BAA2B,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ;IAaxD,MAAM,CAAC,wBAAwB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,GAAE,MAAuB,GAAG,QAAQ;CAQrF"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Footnote = exports.FootnoteType = void 0;
|
|
4
|
+
const Paragraph_1 = require("./Paragraph");
|
|
5
|
+
const XMLBuilder_1 = require("../xml/XMLBuilder");
|
|
6
|
+
var FootnoteType;
|
|
7
|
+
(function (FootnoteType) {
|
|
8
|
+
FootnoteType["Normal"] = "normal";
|
|
9
|
+
FootnoteType["Separator"] = "separator";
|
|
10
|
+
FootnoteType["ContinuationSeparator"] = "continuationSeparator";
|
|
11
|
+
FootnoteType["ContinuationNotice"] = "continuationNotice";
|
|
12
|
+
})(FootnoteType || (exports.FootnoteType = FootnoteType = {}));
|
|
13
|
+
class Footnote {
|
|
14
|
+
constructor(properties) {
|
|
15
|
+
this.paragraphs = [];
|
|
16
|
+
this.id = properties.id;
|
|
17
|
+
this.type = properties.type || FootnoteType.Normal;
|
|
18
|
+
this.customMark = properties.customMark;
|
|
19
|
+
}
|
|
20
|
+
getId() {
|
|
21
|
+
return this.id;
|
|
22
|
+
}
|
|
23
|
+
getType() {
|
|
24
|
+
return this.type;
|
|
25
|
+
}
|
|
26
|
+
getCustomMark() {
|
|
27
|
+
return this.customMark;
|
|
28
|
+
}
|
|
29
|
+
setCustomMark(mark) {
|
|
30
|
+
this.customMark = mark;
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
addParagraph(paragraph) {
|
|
34
|
+
this.paragraphs.push(paragraph);
|
|
35
|
+
return this;
|
|
36
|
+
}
|
|
37
|
+
createParagraph(text) {
|
|
38
|
+
const para = new Paragraph_1.Paragraph();
|
|
39
|
+
if (text) {
|
|
40
|
+
para.addText(text);
|
|
41
|
+
}
|
|
42
|
+
this.paragraphs.push(para);
|
|
43
|
+
return para;
|
|
44
|
+
}
|
|
45
|
+
getParagraphs() {
|
|
46
|
+
return [...this.paragraphs];
|
|
47
|
+
}
|
|
48
|
+
getText() {
|
|
49
|
+
return this.paragraphs.map(p => p.getText()).join('\n');
|
|
50
|
+
}
|
|
51
|
+
toXML() {
|
|
52
|
+
const attrs = {
|
|
53
|
+
'w:id': this.id.toString(),
|
|
54
|
+
};
|
|
55
|
+
if (this.type !== FootnoteType.Normal) {
|
|
56
|
+
attrs['w:type'] = this.type;
|
|
57
|
+
}
|
|
58
|
+
const children = [];
|
|
59
|
+
for (const para of this.paragraphs) {
|
|
60
|
+
children.push(para.toXML());
|
|
61
|
+
}
|
|
62
|
+
if (children.length === 0) {
|
|
63
|
+
children.push(XMLBuilder_1.XMLBuilder.w('p'));
|
|
64
|
+
}
|
|
65
|
+
return XMLBuilder_1.XMLBuilder.w('footnote', attrs, children);
|
|
66
|
+
}
|
|
67
|
+
static fromText(id, text) {
|
|
68
|
+
const footnote = new Footnote({ id });
|
|
69
|
+
footnote.createParagraph(text);
|
|
70
|
+
return footnote;
|
|
71
|
+
}
|
|
72
|
+
static createSeparator(id) {
|
|
73
|
+
const footnote = new Footnote({
|
|
74
|
+
id,
|
|
75
|
+
type: FootnoteType.Separator
|
|
76
|
+
});
|
|
77
|
+
footnote.createParagraph();
|
|
78
|
+
return footnote;
|
|
79
|
+
}
|
|
80
|
+
static createContinuationSeparator(id) {
|
|
81
|
+
return new Footnote({
|
|
82
|
+
id,
|
|
83
|
+
type: FootnoteType.ContinuationSeparator
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
static createContinuationNotice(id, text = 'Continued...') {
|
|
87
|
+
const footnote = new Footnote({
|
|
88
|
+
id,
|
|
89
|
+
type: FootnoteType.ContinuationNotice
|
|
90
|
+
});
|
|
91
|
+
footnote.createParagraph(text);
|
|
92
|
+
return footnote;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
exports.Footnote = Footnote;
|
|
96
|
+
//# sourceMappingURL=Footnote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Footnote.js","sourceRoot":"","sources":["../../src/elements/Footnote.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Footnote } from './Footnote';
|
|
2
|
+
export declare class FootnoteManager {
|
|
3
|
+
private footnotes;
|
|
4
|
+
private nextId;
|
|
5
|
+
private constructor();
|
|
6
|
+
private addSpecialFootnotes;
|
|
7
|
+
static create(): FootnoteManager;
|
|
8
|
+
register(footnote: Footnote): Footnote;
|
|
9
|
+
createFootnote(text: string): Footnote;
|
|
10
|
+
getFootnote(id: number): Footnote | undefined;
|
|
11
|
+
getAllFootnotes(): Footnote[];
|
|
12
|
+
getAllFootnotesWithSpecial(): Footnote[];
|
|
13
|
+
hasFootnote(id: number): boolean;
|
|
14
|
+
removeFootnote(id: number): boolean;
|
|
15
|
+
getNextId(): number;
|
|
16
|
+
getCount(): number;
|
|
17
|
+
isEmpty(): boolean;
|
|
18
|
+
clear(): void;
|
|
19
|
+
getStats(): {
|
|
20
|
+
total: number;
|
|
21
|
+
nextId: number;
|
|
22
|
+
};
|
|
23
|
+
generateFootnotesXml(): string;
|
|
24
|
+
static validate(xml: string): boolean;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=FootnoteManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FootnoteManager.d.ts","sourceRoot":"","sources":["../../src/elements/FootnoteManager.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAMtC,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,MAAM,CAAa;IAM3B,OAAO;IASP,OAAO,CAAC,mBAAmB;IAa3B,MAAM,CAAC,MAAM,IAAI,eAAe;IAShC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ;IAuBtC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;IAWtC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAO7C,eAAe,IAAI,QAAQ,EAAE;IAS7B,0BAA0B,IAAI,QAAQ,EAAE;IASxC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAShC,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAWnC,SAAS,IAAI,MAAM;IAOnB,QAAQ,IAAI,MAAM;IAOlB,OAAO,IAAI,OAAO;IAOlB,KAAK,IAAI,IAAI;IAiBb,QAAQ,IAAI;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB;IAUD,oBAAoB,IAAI,MAAM;IA4B9B,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;CAatC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FootnoteManager = void 0;
|
|
4
|
+
const Footnote_1 = require("./Footnote");
|
|
5
|
+
const XMLBuilder_1 = require("../xml/XMLBuilder");
|
|
6
|
+
class FootnoteManager {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.footnotes = new Map();
|
|
9
|
+
this.nextId = 1;
|
|
10
|
+
this.addSpecialFootnotes();
|
|
11
|
+
}
|
|
12
|
+
addSpecialFootnotes() {
|
|
13
|
+
const separator = Footnote_1.Footnote.createSeparator(-1);
|
|
14
|
+
this.footnotes.set(-1, separator);
|
|
15
|
+
const continuationSep = Footnote_1.Footnote.createContinuationSeparator(0);
|
|
16
|
+
this.footnotes.set(0, continuationSep);
|
|
17
|
+
}
|
|
18
|
+
static create() {
|
|
19
|
+
return new FootnoteManager();
|
|
20
|
+
}
|
|
21
|
+
register(footnote) {
|
|
22
|
+
const id = footnote.getId();
|
|
23
|
+
if (id > 0 && this.footnotes.has(id)) {
|
|
24
|
+
throw new Error(`Footnote with ID ${id} already exists`);
|
|
25
|
+
}
|
|
26
|
+
this.footnotes.set(id, footnote);
|
|
27
|
+
if (id >= this.nextId) {
|
|
28
|
+
this.nextId = id + 1;
|
|
29
|
+
}
|
|
30
|
+
return footnote;
|
|
31
|
+
}
|
|
32
|
+
createFootnote(text) {
|
|
33
|
+
const footnote = Footnote_1.Footnote.fromText(this.nextId++, text);
|
|
34
|
+
this.footnotes.set(footnote.getId(), footnote);
|
|
35
|
+
return footnote;
|
|
36
|
+
}
|
|
37
|
+
getFootnote(id) {
|
|
38
|
+
return this.footnotes.get(id);
|
|
39
|
+
}
|
|
40
|
+
getAllFootnotes() {
|
|
41
|
+
return Array.from(this.footnotes.values())
|
|
42
|
+
.filter(f => f.getId() > 0)
|
|
43
|
+
.sort((a, b) => a.getId() - b.getId());
|
|
44
|
+
}
|
|
45
|
+
getAllFootnotesWithSpecial() {
|
|
46
|
+
return Array.from(this.footnotes.values())
|
|
47
|
+
.sort((a, b) => a.getId() - b.getId());
|
|
48
|
+
}
|
|
49
|
+
hasFootnote(id) {
|
|
50
|
+
return this.footnotes.has(id);
|
|
51
|
+
}
|
|
52
|
+
removeFootnote(id) {
|
|
53
|
+
if (id <= 0) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
return this.footnotes.delete(id);
|
|
57
|
+
}
|
|
58
|
+
getNextId() {
|
|
59
|
+
return this.nextId;
|
|
60
|
+
}
|
|
61
|
+
getCount() {
|
|
62
|
+
return this.getAllFootnotes().length;
|
|
63
|
+
}
|
|
64
|
+
isEmpty() {
|
|
65
|
+
return this.getCount() === 0;
|
|
66
|
+
}
|
|
67
|
+
clear() {
|
|
68
|
+
const specialFootnotes = new Map();
|
|
69
|
+
for (const [id, footnote] of this.footnotes) {
|
|
70
|
+
if (id <= 0) {
|
|
71
|
+
specialFootnotes.set(id, footnote);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
this.footnotes = specialFootnotes;
|
|
75
|
+
this.nextId = 1;
|
|
76
|
+
}
|
|
77
|
+
getStats() {
|
|
78
|
+
return {
|
|
79
|
+
total: this.getCount(),
|
|
80
|
+
nextId: this.nextId,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
generateFootnotesXml() {
|
|
84
|
+
const footnotes = this.getAllFootnotesWithSpecial();
|
|
85
|
+
const footnotesElement = {
|
|
86
|
+
name: 'w:footnotes',
|
|
87
|
+
attributes: {
|
|
88
|
+
'xmlns:w': 'http://schemas.openxmlformats.org/wordprocessingml/2006/main',
|
|
89
|
+
'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'
|
|
90
|
+
},
|
|
91
|
+
children: footnotes.map(f => f.toXML())
|
|
92
|
+
};
|
|
93
|
+
const builder = new XMLBuilder_1.XMLBuilder();
|
|
94
|
+
builder.element(footnotesElement.name, footnotesElement.attributes, footnotesElement.children);
|
|
95
|
+
return builder.build(true);
|
|
96
|
+
}
|
|
97
|
+
static validate(xml) {
|
|
98
|
+
if (!xml || !xml.includes('<w:footnotes')) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
if (!xml.includes('xmlns:w=')) {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
exports.FootnoteManager = FootnoteManager;
|
|
108
|
+
//# sourceMappingURL=FootnoteManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FootnoteManager.js","sourceRoot":"","sources":["../../src/elements/FootnoteManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Hyperlink.d.ts","sourceRoot":"","sources":["../../src/elements/Hyperlink.ts"],"names":[],"mappings":"AAkDA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Hyperlink.d.ts","sourceRoot":"","sources":["../../src/elements/Hyperlink.ts"],"names":[],"mappings":"AAkDA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAM3C,MAAM,WAAW,mBAAmB;IAElC,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,IAAI,EAAE,MAAM,CAAC;IAEb,UAAU,CAAC,EAAE,aAAa,CAAC;IAE3B,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAKD,qBAAa,SAAS;IACpB,OAAO,CAAC,GAAG,CAAC,CAAS;IACrB,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,cAAc,CAAC,CAAS;IAWhC,OAAO,CAAC,MAAM,CAAC,WAAW;gBAwDd,UAAU,EAAE,mBAAmB;IA+C3C,MAAM,IAAI,MAAM,GAAG,SAAS;IAO5B,SAAS,IAAI,MAAM,GAAG,SAAS;IAO/B,OAAO,IAAI,MAAM;IAOjB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAe3B,UAAU,IAAI,MAAM,GAAG,SAAS;IAOhC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQjC,iBAAiB,IAAI,MAAM,GAAG,SAAS;IAOvC,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IA8BnC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAwCrC,MAAM,IAAI,GAAG;IAOb,aAAa,CAAC,UAAU,EAAE,aAAa,GAAG,IAAI;IAS9C,aAAa,IAAI,aAAa;IAO9B,UAAU,IAAI,OAAO;IAOrB,UAAU,IAAI,OAAO;IAcrB,KAAK,IAAI,UAAU;IAwDnB,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,aAAa,GAAG,SAAS;IAUvF,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,aAAa,GAAG,SAAS;IAU1F,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,aAAa,GAAG,SAAS;IAcvF,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,aAAa,GAAG,SAAS;IAYvF,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,mBAAmB,GAAG,SAAS;CAG1D"}
|
|
@@ -2,8 +2,40 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Hyperlink = void 0;
|
|
4
4
|
const Run_1 = require("./Run");
|
|
5
|
+
const validation_1 = require("../utils/validation");
|
|
5
6
|
class Hyperlink {
|
|
7
|
+
static validateUrl(url) {
|
|
8
|
+
if (!url)
|
|
9
|
+
return;
|
|
10
|
+
const DANGEROUS_PROTOCOLS = [
|
|
11
|
+
'javascript:',
|
|
12
|
+
'data:',
|
|
13
|
+
'file:',
|
|
14
|
+
'vbscript:',
|
|
15
|
+
'about:',
|
|
16
|
+
];
|
|
17
|
+
const lowerUrl = url.toLowerCase();
|
|
18
|
+
for (const protocol of DANGEROUS_PROTOCOLS) {
|
|
19
|
+
if (lowerUrl.startsWith(protocol)) {
|
|
20
|
+
throw new Error(`Security: Hyperlink URL "${url}" uses dangerous protocol "${protocol}". ` +
|
|
21
|
+
`Only HTTP(S), MAILTO, and FTP protocols are allowed per ECMA-376 §17.16.22 security guidelines. ` +
|
|
22
|
+
`This prevents XSS attacks and file disclosure vulnerabilities.`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const ALLOWED_PROTOCOLS = /^(https?|mailto|ftp):\/?\/?/i;
|
|
26
|
+
if (!ALLOWED_PROTOCOLS.test(url)) {
|
|
27
|
+
throw new Error(`Invalid hyperlink URL: "${url}". ` +
|
|
28
|
+
`Must start with http://, https://, mailto:, or ftp:// per ECMA-376 §17.16.22. ` +
|
|
29
|
+
`Other protocols are not supported for document security.`);
|
|
30
|
+
}
|
|
31
|
+
if (url.includes('"') || url.includes('<') || url.includes('>')) {
|
|
32
|
+
throw new Error(`Invalid hyperlink URL: "${url}" contains XML special characters (", <, or >). ` +
|
|
33
|
+
`These characters could corrupt the document relationships file. ` +
|
|
34
|
+
`URLs must not contain these characters even if URL-encoded.`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
6
37
|
constructor(properties) {
|
|
38
|
+
Hyperlink.validateUrl(properties.url);
|
|
7
39
|
this.url = properties.url;
|
|
8
40
|
this.anchor = properties.anchor;
|
|
9
41
|
this.tooltip = properties.tooltip;
|
|
@@ -14,6 +46,14 @@ class Hyperlink {
|
|
|
14
46
|
`Use Hyperlink.createExternal() or Hyperlink.createInternal() to avoid ambiguity.`);
|
|
15
47
|
}
|
|
16
48
|
this.text = properties.text || this.url || this.anchor || 'Link';
|
|
49
|
+
const validation = (0, validation_1.validateRunText)(this.text, {
|
|
50
|
+
context: 'Hyperlink text',
|
|
51
|
+
autoClean: properties.formatting?.cleanXmlFromText || false,
|
|
52
|
+
warnToConsole: true,
|
|
53
|
+
});
|
|
54
|
+
if (validation.cleanedText) {
|
|
55
|
+
this.text = validation.cleanedText;
|
|
56
|
+
}
|
|
17
57
|
const formatting = {
|
|
18
58
|
color: '0563C1',
|
|
19
59
|
underline: 'single',
|
|
@@ -31,6 +71,10 @@ class Hyperlink {
|
|
|
31
71
|
return this.text;
|
|
32
72
|
}
|
|
33
73
|
setText(text) {
|
|
74
|
+
(0, validation_1.validateRunText)(text, {
|
|
75
|
+
context: 'Hyperlink.setText',
|
|
76
|
+
warnToConsole: true,
|
|
77
|
+
});
|
|
34
78
|
this.text = text;
|
|
35
79
|
this.run.setText(text);
|
|
36
80
|
return this;
|
|
@@ -50,9 +94,17 @@ class Hyperlink {
|
|
|
50
94
|
return this;
|
|
51
95
|
}
|
|
52
96
|
setUrl(url) {
|
|
97
|
+
Hyperlink.validateUrl(url);
|
|
98
|
+
if (!url && !this.anchor) {
|
|
99
|
+
throw new Error(`Cannot set URL to undefined: Hyperlink "${this.text}" has no anchor. ` +
|
|
100
|
+
`Clearing the URL would create an invalid hyperlink per ECMA-376 §17.16.22. ` +
|
|
101
|
+
`Either provide a new URL or delete the hyperlink entirely.`);
|
|
102
|
+
}
|
|
53
103
|
const oldUrl = this.url;
|
|
104
|
+
if (oldUrl === url) {
|
|
105
|
+
return this;
|
|
106
|
+
}
|
|
54
107
|
this.url = url;
|
|
55
|
-
this.relationshipId = undefined;
|
|
56
108
|
if (this.text === oldUrl) {
|
|
57
109
|
this.text = url || this.anchor || 'Link';
|
|
58
110
|
this.run.setText(this.text);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Hyperlink.js","sourceRoot":"","sources":["../../src/elements/Hyperlink.ts"],"names":[],"mappings":";;;AAmDA,+BAA2C;
|
|
1
|
+
{"version":3,"file":"Hyperlink.js","sourceRoot":"","sources":["../../src/elements/Hyperlink.ts"],"names":[],"mappings":"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"}
|
package/dist/elements/Image.d.ts
CHANGED
|
@@ -41,6 +41,10 @@ export declare class Image {
|
|
|
41
41
|
setRelationshipId(relationshipId: string): this;
|
|
42
42
|
getRelationshipId(): string | undefined;
|
|
43
43
|
setDocPrId(id: number): this;
|
|
44
|
+
setAltText(altText: string): this;
|
|
45
|
+
getAltText(): string;
|
|
46
|
+
rotate(degrees: number): this;
|
|
47
|
+
getRotation(): number;
|
|
44
48
|
toXML(): XMLElement;
|
|
45
49
|
private createInline;
|
|
46
50
|
private createGraphic;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../../src/elements/Image.ts"],"names":[],"mappings":"AAQA,OAAO,EAAc,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAM3D,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;AAK1E,MAAM,WAAW,eAAe;IAE9B,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAExB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAKD,qBAAa,KAAK;IAChB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAa;IAO5B,OAAO;YAuBO,0BAA0B;IAwClC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBvC,WAAW,IAAI,IAAI;IAUnB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,gBAAgB;IAoDxB,OAAO,CAAC,mBAAmB;IAuB3B,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,oBAAoB;IA8E5B,OAAO,CAAC,oBAAoB;IAmItB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAkB1C,YAAY,IAAI,MAAM;IAatB,YAAY,IAAI,MAAM;IAOtB,QAAQ,IAAI,MAAM;IAOlB,SAAS,IAAI,MAAM;IASnB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,mBAAmB,GAAE,OAAc,GAAG,IAAI;IAclE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAE,OAAc,GAAG,IAAI;IAcpE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAU5C,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAQ/C,iBAAiB,IAAI,MAAM,GAAG,SAAS;IAQvC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../../src/elements/Image.ts"],"names":[],"mappings":"AAQA,OAAO,EAAc,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAM3D,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;AAK1E,MAAM,WAAW,eAAe;IAE9B,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAExB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAKD,qBAAa,KAAK;IAChB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAa;IAO5B,OAAO;YAuBO,0BAA0B;IAwClC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBvC,WAAW,IAAI,IAAI;IAUnB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,gBAAgB;IAoDxB,OAAO,CAAC,mBAAmB;IAuB3B,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,oBAAoB;IA8E5B,OAAO,CAAC,oBAAoB;IAmItB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAkB1C,YAAY,IAAI,MAAM;IAatB,YAAY,IAAI,MAAM;IAOtB,QAAQ,IAAI,MAAM;IAOlB,SAAS,IAAI,MAAM;IASnB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,mBAAmB,GAAE,OAAc,GAAG,IAAI;IAclE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAE,OAAc,GAAG,IAAI;IAcpE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAU5C,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAQ/C,iBAAiB,IAAI,MAAM,GAAG,SAAS;IAQvC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAW5B,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IASjC,UAAU,IAAI,MAAM;IAWpB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAqB7B,WAAW,IAAI,MAAM;IAQrB,KAAK,IAAI,UAAU;IAgBnB,OAAO,CAAC,YAAY;IAqEpB,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,aAAa;WAmGR,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;WA6B3E,UAAU,CACrB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,KAAK,CAAC;WAsBJ,MAAM,CAAC,UAAU,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC;CAgBjE"}
|
package/dist/elements/Image.js
CHANGED
|
@@ -322,6 +322,26 @@ class Image {
|
|
|
322
322
|
this.docPrId = id;
|
|
323
323
|
return this;
|
|
324
324
|
}
|
|
325
|
+
setAltText(altText) {
|
|
326
|
+
this.description = altText;
|
|
327
|
+
return this;
|
|
328
|
+
}
|
|
329
|
+
getAltText() {
|
|
330
|
+
return this.description;
|
|
331
|
+
}
|
|
332
|
+
rotate(degrees) {
|
|
333
|
+
const normalizedDegrees = ((degrees % 360) + 360) % 360;
|
|
334
|
+
this.rotation = normalizedDegrees;
|
|
335
|
+
if (normalizedDegrees === 90 || normalizedDegrees === 270) {
|
|
336
|
+
const temp = this.width;
|
|
337
|
+
this.width = this.height;
|
|
338
|
+
this.height = temp;
|
|
339
|
+
}
|
|
340
|
+
return this;
|
|
341
|
+
}
|
|
342
|
+
getRotation() {
|
|
343
|
+
return this.rotation || 0;
|
|
344
|
+
}
|
|
325
345
|
toXML() {
|
|
326
346
|
if (!this.relationshipId) {
|
|
327
347
|
throw new Error('Image must have a relationship ID before generating XML');
|
|
@@ -453,6 +473,7 @@ class Image {
|
|
|
453
473
|
children: [
|
|
454
474
|
{
|
|
455
475
|
name: 'a:xfrm',
|
|
476
|
+
attributes: this.getRotation() > 0 ? { rot: (this.getRotation() * 60000).toString() } : undefined,
|
|
456
477
|
children: [
|
|
457
478
|
{
|
|
458
479
|
name: 'a:off',
|