Skip to content

Commit 92bcf8b

Browse files
committed
fix(types): fix slide selector; minor fixes
1 parent 798f723 commit 92bcf8b

File tree

7 files changed

+33
-19
lines changed

7 files changed

+33
-19
lines changed

src/automizer.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Slide } from './classes/slide';
22
import { FileHelper } from './helper/file-helper';
3-
import { AutomizerParams, AutomizerSummary } from './types/types';
3+
import {AutomizerParams, AutomizerSummary, SourceSlideIdentifier} from './types/types';
44
import { IPresentationProps } from './interfaces/ipresentation-props';
55
import { PresTemplate } from './interfaces/pres-template';
66
import { RootPresTemplate } from './interfaces/root-pres-template';
@@ -144,15 +144,15 @@ export default class Automizer implements IPresentationProps {
144144
}
145145

146146
/**
147-
* Add a slide from one of the imported templates by slide number.
147+
* Add a slide from one of the imported templates by slide number or creationId.
148148
* @param name - Name or alias of the template; must have been loaded with `Automizer.load()`
149-
* @param slideNumber - Number of slide in template presentation
149+
* @param slideIdentifier - Number or creationId of slide in template presentation
150150
* @param callback - Executed after slide was added. The newly created slide will be passed to the callback as first argument.
151151
* @returns Instance of Automizer
152152
*/
153153
public addSlide(
154154
name: string,
155-
slideNumber: number,
155+
slideIdentifier: SourceSlideIdentifier,
156156
callback?: (slide: Slide) => void,
157157
): this {
158158
if (this.rootTemplate === undefined) {
@@ -164,7 +164,7 @@ export default class Automizer implements IPresentationProps {
164164
const newSlide = new Slide({
165165
presentation: this,
166166
template,
167-
slideNumber,
167+
slideIdentifier,
168168
});
169169

170170
if (callback !== undefined) {

src/classes/slide.ts

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
ImportedElement,
88
ImportElement,
99
SlideModificationCallback,
10-
ShapeModificationCallback,
10+
ShapeModificationCallback, SourceSlideIdentifier,
1111
} from '../types/types';
1212
import { ISlide } from '../interfaces/islide';
1313
import { IPresentationProps } from '../interfaces/ipresentation-props';
@@ -99,13 +99,12 @@ export class Slide implements ISlide {
9999
constructor(params: {
100100
presentation: IPresentationProps;
101101
template: PresTemplate;
102-
slideNumber: number;
102+
slideIdentifier: SourceSlideIdentifier;
103103
}) {
104104
this.sourceTemplate = params.template;
105-
this.sourceNumber = params.slideNumber;
106105
this.sourceNumber = this.getSlideNumber(
107106
params.template,
108-
params.slideNumber,
107+
params.slideIdentifier,
109108
);
110109

111110
this.sourcePath = `ppt/slides/slide${this.sourceNumber}.xml`;
@@ -115,13 +114,27 @@ export class Slide implements ISlide {
115114
this.importElements = [];
116115
}
117116

118-
getSlideNumber(template, slideNumber) {
117+
/**
118+
* Try to convert a given slide's creationId to corresponding slide number.
119+
* Used if automizer is run with useCreationIds: true
120+
* @internal
121+
* @param PresTemplate
122+
* @slideNumber SourceSlideIdentifier
123+
* @returns number
124+
*/
125+
getSlideNumber(template: PresTemplate, slideIdentifier: SourceSlideIdentifier): number {
119126
if (template.creationIds !== undefined) {
120-
return template.creationIds.find(
121-
(slideInfo) => slideInfo.id === slideNumber,
122-
).number;
127+
const matchCreationId = template.creationIds.find(
128+
(slideInfo) => slideInfo.id === Number(slideIdentifier),
129+
)
130+
131+
if(matchCreationId) {
132+
return matchCreationId.number
133+
}
134+
135+
throw('Could not find slide number for creationId: ' + slideIdentifier + '@' + template.name)
123136
}
124-
return slideNumber;
137+
return slideIdentifier as number;
125138
}
126139

127140
/**

src/helper/modify-color-helper.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ export default class ModifyColorHelper {
3333

3434
XmlHelper.sliceCollection(solidFill.childNodes as unknown as HTMLCollectionOf<Element>, 0)
3535
solidFill.appendChild(colorType)
36-
3736
}
3837

3938
static removeNoFill = () => (element: Element): void => {

src/helper/modify-shape-helper.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,9 @@ export default class ModifyShapeHelper {
6060
const xfrm = element.getElementsByTagName('a:off')[0].parentNode as Element;
6161

6262
Object.keys(pos).forEach((key) => {
63-
const value = Math.round(pos[key]);
63+
let value = Math.round(pos[key]);
6464
if(typeof value !== 'number' || !map[key]) return;
65+
value = (value < 0) ? 0 : value
6566

6667
xfrm
6768
.getElementsByTagName(map[key].tag)[0]

src/helper/xml-helper.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
} from '../types/xml-types';
1111
import { TargetByRelIdMap } from '../constants/constants';
1212
import { XmlPrettyPrint } from './xml-pretty-print';
13-
import { GetRelationshipsCallback, Target } from '../types/types';
13+
import {GetRelationshipsCallback, SourceSlideIdentifier, Target} from '../types/types';
1414
import { XmlTemplateHelper } from './xml-template-helper';
1515

1616
export class XmlHelper {

src/interfaces/islide.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import JSZip from 'jszip';
22
import { RootPresTemplate } from './root-pres-template';
3-
import { SlideModificationCallback } from '../types/types';
3+
import { SlideModificationCallback, SourceSlideIdentifier } from '../types/types';
44

55
export interface ISlide {
66
sourceArchive: JSZip;
7-
sourceNumber: number;
7+
sourceNumber: SourceSlideIdentifier;
88
modifications: SlideModificationCallback[];
99

1010
modify(callback: SlideModificationCallback): void;

src/types/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import JSZip from 'jszip';
22
import { ElementType } from '../enums/element-type';
33

4+
export type SourceSlideIdentifier = number | string
45
export type SlideModificationCallback = (document: Document) => void;
56
export type ShapeModificationCallback = (
67
XMLDocument: XMLDocument | Element,

0 commit comments

Comments
 (0)