fix: added unique numeric id creator to avoid numbering render errors
This commit is contained in:
@ -2,7 +2,7 @@
|
|||||||
import { IContext, IXmlableObject, NextAttributeComponent, XmlComponent } from "@file/xml-components";
|
import { IContext, IXmlableObject, NextAttributeComponent, XmlComponent } from "@file/xml-components";
|
||||||
import { ConcreteHyperlink } from "@file/paragraph";
|
import { ConcreteHyperlink } from "@file/paragraph";
|
||||||
|
|
||||||
import { uniqueNumericId } from "@util/convenience-functions";
|
import { uniqueNumericIdCreator } from "@util/convenience-functions";
|
||||||
|
|
||||||
import { createHyperlinkClick } from "./doc-properties-children";
|
import { createHyperlinkClick } from "./doc-properties-children";
|
||||||
|
|
||||||
@ -24,6 +24,8 @@ export interface DocPropertiesOptions {
|
|||||||
readonly title: string;
|
readonly title: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const uniqueNumericId = uniqueNumericIdCreator();
|
||||||
|
|
||||||
export class DocProperties extends XmlComponent {
|
export class DocProperties extends XmlComponent {
|
||||||
public constructor({ name, description, title }: DocPropertiesOptions = { name: "", description: "", title: "" }) {
|
public constructor({ name, description, title }: DocPropertiesOptions = { name: "", description: "", title: "" }) {
|
||||||
super("wp:docPr");
|
super("wp:docPr");
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
// https://stackoverflow.com/questions/58622437/purpose-of-abstractnum-and-numberinginstance
|
// https://stackoverflow.com/questions/58622437/purpose-of-abstractnum-and-numberinginstance
|
||||||
import { AlignmentType } from "@file/paragraph";
|
import { AlignmentType } from "@file/paragraph";
|
||||||
import { IContext, IXmlableObject, XmlComponent } from "@file/xml-components";
|
import { IContext, IXmlableObject, XmlComponent } from "@file/xml-components";
|
||||||
import { convertInchesToTwip, uniqueNumericId } from "@util/convenience-functions";
|
import { convertInchesToTwip, uniqueNumericIdCreator } from "@util/convenience-functions";
|
||||||
|
|
||||||
import { DocumentAttributes } from "../document/document-attributes";
|
import { DocumentAttributes } from "../document/document-attributes";
|
||||||
import { AbstractNumbering } from "./abstract-numbering";
|
import { AbstractNumbering } from "./abstract-numbering";
|
||||||
@ -16,6 +16,9 @@ export interface INumberingOptions {
|
|||||||
}[];
|
}[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const abstractNumUniqueNumericId = uniqueNumericIdCreator();
|
||||||
|
const concreteNumUniqueNumericId = uniqueNumericIdCreator(1); // Setting initial to 1 as we have numId = 1 for "default-bullet-numbering"
|
||||||
|
|
||||||
// <xsd:element name="numbering" type="CT_Numbering"/>
|
// <xsd:element name="numbering" type="CT_Numbering"/>
|
||||||
//
|
//
|
||||||
// <xsd:complexType name="CT_Numbering">
|
// <xsd:complexType name="CT_Numbering">
|
||||||
@ -55,7 +58,7 @@ export class Numbering extends XmlComponent {
|
|||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
const abstractNumbering = new AbstractNumbering(uniqueNumericId(), [
|
const abstractNumbering = new AbstractNumbering(abstractNumUniqueNumericId(), [
|
||||||
{
|
{
|
||||||
level: 0,
|
level: 0,
|
||||||
format: LevelFormat.BULLET,
|
format: LevelFormat.BULLET,
|
||||||
@ -176,7 +179,7 @@ export class Numbering extends XmlComponent {
|
|||||||
this.abstractNumberingMap.set("default-bullet-numbering", abstractNumbering);
|
this.abstractNumberingMap.set("default-bullet-numbering", abstractNumbering);
|
||||||
|
|
||||||
for (const con of options.config) {
|
for (const con of options.config) {
|
||||||
this.abstractNumberingMap.set(con.reference, new AbstractNumbering(uniqueNumericId(), con.levels));
|
this.abstractNumberingMap.set(con.reference, new AbstractNumbering(abstractNumUniqueNumericId(), con.levels));
|
||||||
this.referenceConfigMap.set(con.reference, con.levels);
|
this.referenceConfigMap.set(con.reference, con.levels);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -209,7 +212,7 @@ export class Numbering extends XmlComponent {
|
|||||||
const firstLevelStartNumber = referenceConfigLevels && referenceConfigLevels[0].start;
|
const firstLevelStartNumber = referenceConfigLevels && referenceConfigLevels[0].start;
|
||||||
|
|
||||||
const concreteNumberingSettings = {
|
const concreteNumberingSettings = {
|
||||||
numId: uniqueNumericId(),
|
numId: concreteNumUniqueNumericId(),
|
||||||
abstractNumId: abstractNumbering.id,
|
abstractNumId: abstractNumbering.id,
|
||||||
reference,
|
reference,
|
||||||
instance,
|
instance,
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
// http://officeopenxml.com/WPbookmark.php
|
// http://officeopenxml.com/WPbookmark.php
|
||||||
import { XmlComponent } from "@file/xml-components";
|
import { XmlComponent } from "@file/xml-components";
|
||||||
import { uniqueNumericId } from "@util/convenience-functions";
|
import { uniqueNumericIdCreator } from "@util/convenience-functions";
|
||||||
|
|
||||||
import { ParagraphChild } from "../paragraph";
|
import { ParagraphChild } from "../paragraph";
|
||||||
import { BookmarkEndAttributes, BookmarkStartAttributes } from "./bookmark-attributes";
|
import { BookmarkEndAttributes, BookmarkStartAttributes } from "./bookmark-attributes";
|
||||||
|
|
||||||
|
const uniqueNumericId = uniqueNumericIdCreator();
|
||||||
|
|
||||||
export class Bookmark {
|
export class Bookmark {
|
||||||
public readonly start: BookmarkStart;
|
public readonly start: BookmarkStart;
|
||||||
public readonly children: readonly ParagraphChild[];
|
public readonly children: readonly ParagraphChild[];
|
||||||
|
@ -1,12 +1,14 @@
|
|||||||
import { nanoid } from "nanoid/non-secure";
|
import { nanoid } from "nanoid/non-secure";
|
||||||
|
|
||||||
let currentCount = 0;
|
|
||||||
|
|
||||||
// Twip - twentieths of a point
|
// Twip - twentieths of a point
|
||||||
export const convertMillimetersToTwip = (millimeters: number): number => Math.floor((millimeters / 25.4) * 72 * 20);
|
export const convertMillimetersToTwip = (millimeters: number): number => Math.floor((millimeters / 25.4) * 72 * 20);
|
||||||
|
|
||||||
export const convertInchesToTwip = (inches: number): number => Math.floor(inches * 72 * 20);
|
export const convertInchesToTwip = (inches: number): number => Math.floor(inches * 72 * 20);
|
||||||
|
|
||||||
export const uniqueNumericId = (): number => ++currentCount;
|
export const uniqueNumericIdCreator = (initial = 0): (() => number) => {
|
||||||
|
let currentCount = initial;
|
||||||
|
|
||||||
|
return () => ++currentCount;
|
||||||
|
};
|
||||||
|
|
||||||
export const uniqueId = (): string => nanoid().toLowerCase();
|
export const uniqueId = (): string => nanoid().toLowerCase();
|
||||||
|
Reference in New Issue
Block a user