created a clone method for xml-components

This commit is contained in:
Sergio Mendonça
2018-09-20 15:13:18 -03:00
parent 0684738ec2
commit bf1f702e5a
3 changed files with 26 additions and 2 deletions

View File

@ -328,7 +328,7 @@ export class File {
// console.log("Generating content for paragraph: ", bookmarkId);
// deep clone the original paragraph
const generatedParagraph = Object.assign(Object.create(Object.getPrototypeOf(paragraph)), paragraph);
const generatedParagraph = paragraph.clone() as Paragraph;
generatedParagraph.clearPageBreaks().rightTabStop(9016, "dot");

View File

@ -393,4 +393,23 @@ describe("Paragraph", () => {
});
});
});
describe("#clone", () => {
it("changes in a cloned paragraph must not affect the original paragraph", () => {
paragraph.pageBreakBefore();
const clonedParagraph = paragraph.clone() as file.Paragraph;
clonedParagraph.clearPageBreaks();
const tree = new Formatter().format(paragraph);
expect(tree).to.deep.equal({
"w:p": [{ "w:pPr": [{ "w:pageBreakBefore": [] }] }],
});
const clonedTree = new Formatter().format(clonedParagraph);
expect(clonedTree).to.deep.equal({
"w:p": [{ "w:pPr": [] }],
});
});
});
});

View File

@ -30,7 +30,6 @@ export abstract class XmlComponent extends BaseXmlComponent {
};
}
// TODO: Unused method
public addChildElement(child: XmlComponent | string): XmlComponent {
this.root.push(child);
@ -40,4 +39,10 @@ export abstract class XmlComponent extends BaseXmlComponent {
public delete(): void {
this.deleted = true;
}
public clone(): XmlComponent {
const newXmlComponent = Object.assign(Object.create(Object.getPrototypeOf(this)), this);
newXmlComponent.root = newXmlComponent.root.map((child) => (child instanceof XmlComponent ? child.clone() : child));
return newXmlComponent as XmlComponent;
}
}