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": {
|
||||
"@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"
|
||||
},
|
||||
|
@ -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"
|
||||
},
|
||||
|
@ -12,9 +12,11 @@ describe("ConcreteNumbering", () => {
|
||||
abstractNumId: 1,
|
||||
reference: "1",
|
||||
instance: 0,
|
||||
overrideLevel: {
|
||||
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: {
|
||||
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: {
|
||||
overrideLevels: [
|
||||
{
|
||||
num: 1,
|
||||
},
|
||||
],
|
||||
});
|
||||
const tree = new Formatter().format(concreteNumbering);
|
||||
expect(tree).to.deep.equal({
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -164,10 +164,12 @@ export class Numbering extends XmlComponent {
|
||||
abstractNumId: abstractNumbering.id,
|
||||
reference: "default-bullet-numbering",
|
||||
instance: 0,
|
||||
overrideLevel: {
|
||||
overrideLevels: [
|
||||
{
|
||||
num: 0,
|
||||
start: 1,
|
||||
},
|
||||
],
|
||||
}),
|
||||
);
|
||||
|
||||
|
@ -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"),
|
||||
},
|
||||
],
|
||||
});
|
||||
|
Reference in New Issue
Block a user