Merge pull request #1823 from anti-the-social/overrideLevels-impl
Override levels impl
This commit is contained in:
2
package-lock.json
generated
2
package-lock.json
generated
@ -11,7 +11,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/node": "^18.0.0",
|
"@types/node": "^18.0.0",
|
||||||
"jszip": "^3.1.5",
|
"jszip": "^3.1.5",
|
||||||
"nanoid": "^3.1.20",
|
"nanoid": "^3.3.4",
|
||||||
"xml": "^1.0.1",
|
"xml": "^1.0.1",
|
||||||
"xml-js": "^1.6.8"
|
"xml-js": "^1.6.8"
|
||||||
},
|
},
|
||||||
|
@ -52,7 +52,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/node": "^18.0.0",
|
"@types/node": "^18.0.0",
|
||||||
"jszip": "^3.1.5",
|
"jszip": "^3.1.5",
|
||||||
"nanoid": "^3.1.20",
|
"nanoid": "^3.3.4",
|
||||||
"xml": "^1.0.1",
|
"xml": "^1.0.1",
|
||||||
"xml-js": "^1.6.8"
|
"xml-js": "^1.6.8"
|
||||||
},
|
},
|
||||||
|
@ -12,9 +12,11 @@ describe("ConcreteNumbering", () => {
|
|||||||
abstractNumId: 1,
|
abstractNumId: 1,
|
||||||
reference: "1",
|
reference: "1",
|
||||||
instance: 0,
|
instance: 0,
|
||||||
overrideLevel: {
|
overrideLevels: [
|
||||||
num: 3,
|
{
|
||||||
},
|
num: 3,
|
||||||
|
},
|
||||||
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
const tree = new Formatter().format(concreteNumbering);
|
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", () => {
|
it("sets the startOverride element if start is given", () => {
|
||||||
const concreteNumbering = new ConcreteNumbering({
|
const concreteNumbering = new ConcreteNumbering({
|
||||||
numId: 0,
|
numId: 0,
|
||||||
abstractNumId: 1,
|
abstractNumId: 1,
|
||||||
reference: "1",
|
reference: "1",
|
||||||
instance: 0,
|
instance: 0,
|
||||||
overrideLevel: {
|
overrideLevels: [
|
||||||
num: 1,
|
{
|
||||||
start: 9,
|
num: 1,
|
||||||
},
|
start: 9,
|
||||||
|
},
|
||||||
|
],
|
||||||
});
|
});
|
||||||
const tree = new Formatter().format(concreteNumbering);
|
const tree = new Formatter().format(concreteNumbering);
|
||||||
expect(tree).to.deep.equal({
|
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", () => {
|
it("sets the lvl element if overrideLevel.Level is accessed", () => {
|
||||||
const concreteNumbering = new ConcreteNumbering({
|
const concreteNumbering = new ConcreteNumbering({
|
||||||
numId: 0,
|
numId: 0,
|
||||||
abstractNumId: 1,
|
abstractNumId: 1,
|
||||||
reference: "1",
|
reference: "1",
|
||||||
instance: 0,
|
instance: 0,
|
||||||
overrideLevel: {
|
overrideLevels: [
|
||||||
num: 1,
|
{
|
||||||
},
|
num: 1,
|
||||||
|
},
|
||||||
|
],
|
||||||
});
|
});
|
||||||
const tree = new Formatter().format(concreteNumbering);
|
const tree = new Formatter().format(concreteNumbering);
|
||||||
expect(tree).to.deep.equal({
|
expect(tree).to.deep.equal({
|
||||||
|
@ -18,15 +18,17 @@ class NumAttributes extends XmlAttributeComponent<{
|
|||||||
protected readonly xmlKeys = { numId: "w:numId" };
|
protected readonly xmlKeys = { numId: "w:numId" };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface IOverrideLevel {
|
||||||
|
readonly num: number;
|
||||||
|
readonly start?: number;
|
||||||
|
}
|
||||||
|
|
||||||
export interface IConcreteNumberingOptions {
|
export interface IConcreteNumberingOptions {
|
||||||
readonly numId: number;
|
readonly numId: number;
|
||||||
readonly abstractNumId: number;
|
readonly abstractNumId: number;
|
||||||
readonly reference: string;
|
readonly reference: string;
|
||||||
readonly instance: number;
|
readonly instance: number;
|
||||||
readonly overrideLevel?: {
|
readonly overrideLevels?: readonly IOverrideLevel[];
|
||||||
readonly num: number;
|
|
||||||
readonly start?: number;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// <xsd:complexType name="CT_Numbering">
|
// <xsd:complexType name="CT_Numbering">
|
||||||
@ -60,8 +62,10 @@ export class ConcreteNumbering extends XmlComponent {
|
|||||||
|
|
||||||
this.root.push(new AbstractNumId(decimalNumber(options.abstractNumId)));
|
this.root.push(new AbstractNumId(decimalNumber(options.abstractNumId)));
|
||||||
|
|
||||||
if (options.overrideLevel) {
|
if (options.overrideLevels && options.overrideLevels.length) {
|
||||||
this.root.push(new LevelOverride(options.overrideLevel.num, options.overrideLevel.start));
|
for (const level of options.overrideLevels) {
|
||||||
|
this.root.push(new LevelOverride(level.num, level.start));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -164,10 +164,12 @@ export class Numbering extends XmlComponent {
|
|||||||
abstractNumId: abstractNumbering.id,
|
abstractNumId: abstractNumbering.id,
|
||||||
reference: "default-bullet-numbering",
|
reference: "default-bullet-numbering",
|
||||||
instance: 0,
|
instance: 0,
|
||||||
overrideLevel: {
|
overrideLevels: [
|
||||||
num: 0,
|
{
|
||||||
start: 1,
|
num: 0,
|
||||||
},
|
start: 1,
|
||||||
|
},
|
||||||
|
],
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ describe("Comment", () => {
|
|||||||
let clock: sinon.SinonFakeTimers;
|
let clock: sinon.SinonFakeTimers;
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
const now = new Date(1999, 0, 1);
|
const now = new Date("1999-01-01T00:00:00.000Z");
|
||||||
clock = sinon.useFakeTimers(now.getTime());
|
clock = sinon.useFakeTimers(now.getTime());
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -57,7 +57,7 @@ describe("Comment", () => {
|
|||||||
const component = new Comment({
|
const component = new Comment({
|
||||||
id: 0,
|
id: 0,
|
||||||
text: "test-comment",
|
text: "test-comment",
|
||||||
date: new Date(1999, 0, 1),
|
date: new Date("1999-01-01T00:00:00.000Z"),
|
||||||
});
|
});
|
||||||
const tree = new Formatter().format(component);
|
const tree = new Formatter().format(component);
|
||||||
expect(tree).to.deep.equal({
|
expect(tree).to.deep.equal({
|
||||||
@ -126,12 +126,12 @@ describe("Comments", () => {
|
|||||||
{
|
{
|
||||||
id: 0,
|
id: 0,
|
||||||
text: "test-comment",
|
text: "test-comment",
|
||||||
date: new Date(1999, 0, 1),
|
date: new Date("1999-01-01T00:00:00.000Z"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 1,
|
id: 1,
|
||||||
text: "test-comment-2",
|
text: "test-comment-2",
|
||||||
date: new Date(1999, 0, 1),
|
date: new Date("1999-01-01T00:00:00.000Z"),
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user