added support for hyperlinks

This commit is contained in:
Ivan Lopez
2018-05-06 22:20:56 -05:00
parent 8108eca2fa
commit ac40e13e33
4 changed files with 71 additions and 0 deletions

View 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",
};
}

View 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"]},
]});
});
});
});

View 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;
}
}

View File

@ -0,0 +1 @@
export * from "./hyperlink";