This change brings increased type safety to uses of XmlAttributeComponent. Now the compiler is checkign for us that the properties that get passed in to every subclass match the intended interface, and also that the xmlKeys property -> xml attribute mapping has all the right keys
40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
import { XmlAttributeComponent, XmlComponent } from "../docx/xml-components";
|
|
import { Level } from "./level";
|
|
import { MultiLevelType } from "./multi-level-type";
|
|
|
|
interface IAbstractNumberingAttributesProperties {
|
|
abstractNumId?: number;
|
|
restartNumberingAfterBreak?: number;
|
|
}
|
|
|
|
class AbstractNumberingAttributes extends XmlAttributeComponent<IAbstractNumberingAttributesProperties> {
|
|
protected xmlKeys = {
|
|
abstractNumId: "w:abstractNumId",
|
|
restartNumberingAfterBreak: "w15:restartNumberingAfterBreak",
|
|
};
|
|
}
|
|
|
|
export class AbstractNumbering extends XmlComponent {
|
|
public id: number;
|
|
|
|
constructor(id: number) {
|
|
super("w:abstractNum");
|
|
this.root.push(new AbstractNumberingAttributes({
|
|
abstractNumId: id,
|
|
restartNumberingAfterBreak: 0,
|
|
}));
|
|
this.root.push(new MultiLevelType("hybridMultilevel"));
|
|
this.id = id;
|
|
}
|
|
|
|
public addLevel(level: Level): void {
|
|
this.root.push(level);
|
|
}
|
|
|
|
public createLevel(num: number, format: string, text: string, align: string = "start"): Level {
|
|
const level = new Level(num, format, text, align);
|
|
this.addLevel(level);
|
|
return level;
|
|
}
|
|
}
|