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);
|
// console.log("Generating content for paragraph: ", bookmarkId);
|
||||||
|
|
||||||
// deep clone the original paragraph
|
// 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");
|
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 {
|
public addChildElement(child: XmlComponent | string): XmlComponent {
|
||||||
this.root.push(child);
|
this.root.push(child);
|
||||||
|
|
||||||
@ -40,4 +39,10 @@ export abstract class XmlComponent extends BaseXmlComponent {
|
|||||||
public delete(): void {
|
public delete(): void {
|
||||||
this.deleted = true;
|
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