created a clone method for xml-components
This commit is contained in:
@ -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");
|
||||
|
||||
|
@ -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": [] }],
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user