added support for hyperlinks
This commit is contained in:
13
src/file/paragraph/links/hyperlink-attributes.ts
Normal file
13
src/file/paragraph/links/hyperlink-attributes.ts
Normal file
@ -0,0 +1,13 @@
|
||||
import { XmlAttributeComponent } from "file/xml-components";
|
||||
|
||||
export interface IHyperlinkAttributesProperties {
|
||||
id?: string;
|
||||
history: number;
|
||||
}
|
||||
|
||||
export class HyperlinkAttributes extends XmlAttributeComponent<IHyperlinkAttributesProperties> {
|
||||
protected xmlKeys = {
|
||||
id: "r:id",
|
||||
history: "w:history",
|
||||
};
|
||||
}
|
37
src/file/paragraph/links/hyperlink.spec.ts
Normal file
37
src/file/paragraph/links/hyperlink.spec.ts
Normal file
@ -0,0 +1,37 @@
|
||||
import { assert, expect } from "chai";
|
||||
|
||||
import { Formatter } from "../../../export/formatter";
|
||||
import { Utility } from "../../../tests/utility";
|
||||
import { Hyperlink } from "./";
|
||||
|
||||
describe("Hyperlink", () => {
|
||||
let hyperlink: Hyperlink;
|
||||
|
||||
describe("#constructor()", () => {
|
||||
it("should create a hyperlink with correct root key", () => {
|
||||
hyperlink = new Hyperlink("https://example.com", 0);
|
||||
const newJson = Utility.jsonify(hyperlink);
|
||||
assert.equal(newJson.rootKey, "w:hyperlink");
|
||||
});
|
||||
|
||||
it("should create a hyperlink with right attributes", () => {
|
||||
hyperlink = new Hyperlink("https://example.com", 0);
|
||||
const newJson = Utility.jsonify(hyperlink);
|
||||
const attributes = {
|
||||
id: "rId1",
|
||||
history: 1,
|
||||
};
|
||||
assert.equal(JSON.stringify(newJson.root[0].root), JSON.stringify(attributes));
|
||||
});
|
||||
|
||||
it("should create a hyperlink with a run component", () => {
|
||||
hyperlink = new Hyperlink("https://example.com", 0);
|
||||
const tree = new Formatter().format(hyperlink);
|
||||
expect(tree["w:hyperlink"][1]).to.deep.equal({
|
||||
"w:r": [
|
||||
{ "w:rPr": [{ "w:rStyle": [{ _attr: { "w:val": "Hyperlink"} }] }] },
|
||||
{ "w:t": [{_attr: {"xml:space": "preserve"}}, "https://example.com"]},
|
||||
]});
|
||||
});
|
||||
});
|
||||
});
|
20
src/file/paragraph/links/hyperlink.ts
Normal file
20
src/file/paragraph/links/hyperlink.ts
Normal file
@ -0,0 +1,20 @@
|
||||
// http://officeopenxml.com/WPhyperlink.php
|
||||
import { XmlComponent } from "file/xml-components";
|
||||
import { TextRun } from "../run";
|
||||
import { HyperlinkAttributes } from "./hyperlink-attributes";
|
||||
|
||||
export class Hyperlink extends XmlComponent {
|
||||
public linkId: number;
|
||||
|
||||
constructor(text: string, relationshipsCount: number) {
|
||||
super("w:hyperlink");
|
||||
|
||||
this.linkId = relationshipsCount + 1;
|
||||
this.root.push(new HyperlinkAttributes({
|
||||
id: `rId${this.linkId}`,
|
||||
history: 1,
|
||||
}));
|
||||
this.root.push(new TextRun(text).style("Hyperlink"));
|
||||
return this;
|
||||
}
|
||||
}
|
1
src/file/paragraph/links/index.ts
Normal file
1
src/file/paragraph/links/index.ts
Normal file
@ -0,0 +1 @@
|
||||
export * from "./hyperlink";
|
Reference in New Issue
Block a user