Merge pull request #1823 from anti-the-social/overrideLevels-impl

Override levels impl
This commit is contained in:
Dolan
2022-12-10 23:15:39 +00:00
committed by GitHub
6 changed files with 207 additions and 26 deletions

2
package-lock.json generated
View File

@ -11,7 +11,7 @@
"dependencies": {
"@types/node": "^18.0.0",
"jszip": "^3.1.5",
"nanoid": "^3.1.20",
"nanoid": "^3.3.4",
"xml": "^1.0.1",
"xml-js": "^1.6.8"
},

View File

@ -52,7 +52,7 @@
"dependencies": {
"@types/node": "^18.0.0",
"jszip": "^3.1.5",
"nanoid": "^3.1.20",
"nanoid": "^3.3.4",
"xml": "^1.0.1",
"xml-js": "^1.6.8"
},

View File

@ -12,9 +12,11 @@ describe("ConcreteNumbering", () => {
abstractNumId: 1,
reference: "1",
instance: 0,
overrideLevel: {
num: 3,
},
overrideLevels: [
{
num: 3,
},
],
});
const tree = new Formatter().format(concreteNumbering);
@ -44,16 +46,61 @@ describe("ConcreteNumbering", () => {
});
});
it("sets a new override level for two different level numbers", () => {
const concreteNumbering = new ConcreteNumbering({
numId: 0,
abstractNumId: 1,
reference: "1",
instance: 0,
overrideLevels: [{ num: 3 }, { num: 5 }],
});
const tree = new Formatter().format(concreteNumbering);
expect(tree).to.deep.equal({
"w:num": [
{
_attr: {
"w:numId": 0,
},
},
{
"w:abstractNumId": {
_attr: {
"w:val": 1,
},
},
},
{
"w:lvlOverride": {
_attr: {
"w:ilvl": 3,
},
},
},
{
"w:lvlOverride": {
_attr: {
"w:ilvl": 5,
},
},
},
],
});
});
it("sets the startOverride element if start is given", () => {
const concreteNumbering = new ConcreteNumbering({
numId: 0,
abstractNumId: 1,
reference: "1",
instance: 0,
overrideLevel: {
num: 1,
start: 9,
},
overrideLevels: [
{
num: 1,
start: 9,
},
],
});
const tree = new Formatter().format(concreteNumbering);
expect(tree).to.deep.equal({
@ -90,15 +137,143 @@ describe("ConcreteNumbering", () => {
});
});
it("sets the startOverride element for several levels if start is given", () => {
const concreteNumbering = new ConcreteNumbering({
numId: 0,
abstractNumId: 1,
reference: "1",
instance: 0,
overrideLevels: [
{
num: 1,
start: 9,
},
{
num: 3,
start: 10,
},
],
});
const tree = new Formatter().format(concreteNumbering);
expect(tree).to.deep.equal({
"w:num": [
{
_attr: {
"w:numId": 0,
},
},
{
"w:abstractNumId": {
_attr: {
"w:val": 1,
},
},
},
{
"w:lvlOverride": [
{
_attr: {
"w:ilvl": 1,
},
},
{
"w:startOverride": {
_attr: {
"w:val": 9,
},
},
},
],
},
{
"w:lvlOverride": [
{
_attr: {
"w:ilvl": 3,
},
},
{
"w:startOverride": {
_attr: {
"w:val": 10,
},
},
},
],
},
],
});
});
it("Mix of overrideLevels with start and without", () => {
const concreteNumbering = new ConcreteNumbering({
numId: 0,
abstractNumId: 1,
reference: "1",
instance: 0,
overrideLevels: [
{
num: 1,
start: 9,
},
{
num: 3,
},
],
});
const tree = new Formatter().format(concreteNumbering);
expect(tree).to.deep.equal({
"w:num": [
{
_attr: {
"w:numId": 0,
},
},
{
"w:abstractNumId": {
_attr: {
"w:val": 1,
},
},
},
{
"w:lvlOverride": [
{
_attr: {
"w:ilvl": 1,
},
},
{
"w:startOverride": {
_attr: {
"w:val": 9,
},
},
},
],
},
{
"w:lvlOverride": {
_attr: {
"w:ilvl": 3,
},
},
},
],
});
});
it("sets the lvl element if overrideLevel.Level is accessed", () => {
const concreteNumbering = new ConcreteNumbering({
numId: 0,
abstractNumId: 1,
reference: "1",
instance: 0,
overrideLevel: {
num: 1,
},
overrideLevels: [
{
num: 1,
},
],
});
const tree = new Formatter().format(concreteNumbering);
expect(tree).to.deep.equal({

View File

@ -18,15 +18,17 @@ class NumAttributes extends XmlAttributeComponent<{
protected readonly xmlKeys = { numId: "w:numId" };
}
interface IOverrideLevel {
readonly num: number;
readonly start?: number;
}
export interface IConcreteNumberingOptions {
readonly numId: number;
readonly abstractNumId: number;
readonly reference: string;
readonly instance: number;
readonly overrideLevel?: {
readonly num: number;
readonly start?: number;
};
readonly overrideLevels?: readonly IOverrideLevel[];
}
// <xsd:complexType name="CT_Numbering">
@ -60,8 +62,10 @@ export class ConcreteNumbering extends XmlComponent {
this.root.push(new AbstractNumId(decimalNumber(options.abstractNumId)));
if (options.overrideLevel) {
this.root.push(new LevelOverride(options.overrideLevel.num, options.overrideLevel.start));
if (options.overrideLevels && options.overrideLevels.length) {
for (const level of options.overrideLevels) {
this.root.push(new LevelOverride(level.num, level.start));
}
}
}
}

View File

@ -164,10 +164,12 @@ export class Numbering extends XmlComponent {
abstractNumId: abstractNumbering.id,
reference: "default-bullet-numbering",
instance: 0,
overrideLevel: {
num: 0,
start: 1,
},
overrideLevels: [
{
num: 0,
start: 1,
},
],
}),
);

View File

@ -44,7 +44,7 @@ describe("Comment", () => {
let clock: sinon.SinonFakeTimers;
beforeEach(() => {
const now = new Date(1999, 0, 1);
const now = new Date("1999-01-01T00:00:00.000Z");
clock = sinon.useFakeTimers(now.getTime());
});
@ -57,7 +57,7 @@ describe("Comment", () => {
const component = new Comment({
id: 0,
text: "test-comment",
date: new Date(1999, 0, 1),
date: new Date("1999-01-01T00:00:00.000Z"),
});
const tree = new Formatter().format(component);
expect(tree).to.deep.equal({
@ -126,12 +126,12 @@ describe("Comments", () => {
{
id: 0,
text: "test-comment",
date: new Date(1999, 0, 1),
date: new Date("1999-01-01T00:00:00.000Z"),
},
{
id: 1,
text: "test-comment-2",
date: new Date(1999, 0, 1),
date: new Date("1999-01-01T00:00:00.000Z"),
},
],
});