Skip to content

Commit a1362aa

Browse files
authored
Merge pull request #47 from singerla/main
merge from main
2 parents afde8db + 5c4a8f1 commit a1362aa

File tree

9 files changed

+1350
-2261
lines changed

9 files changed

+1350
-2261
lines changed

__tests__/modify-by-creation-id.test.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import Automizer, { modify } from '../src/index';
2+
import { vd } from '../src/helper/general-helper';
23

34
test('create presentation, add and modify an existing table by creation id.', async () => {
45
const automizer = new Automizer({
56
templateDir: `${__dirname}/pptx-templates`,
67
outputDir: `${__dirname}/pptx-output`,
8+
useCreationIds: true,
79
});
810

911
const data1 = {
@@ -18,19 +20,21 @@ test('create presentation, add and modify an existing table by creation id.', as
1820
.loadRoot(`RootTemplate.pptx`)
1921
.load(`SlideWithTables.pptx`, 'tables');
2022

21-
const creationIds = await pres.setCreationIds()
23+
const creationIds = await pres.setCreationIds();
24+
// vd(creationIds);
2225

2326
const result = await pres
2427
.addSlide('tables', 1950777067, (slide) => {
25-
slide.modifyElement(
26-
'{EFC74B4C-D832-409B-9CF4-73C1EFF132D8}',
27-
[modify.setTableData(data1)]);
28+
slide.modifyElement('{EFC74B4C-D832-409B-9CF4-73C1EFF132D8}', [
29+
modify.setTableData(data1),
30+
]);
2831

2932
slide.addElement(
3033
'tables',
3134
1950777067,
3235
'{EFC74B4C-D832-409B-9CF4-73C1EFF132D8}',
33-
[modify.setTableData(data1)]);
36+
[modify.setTableData(data1)],
37+
);
3438
})
3539
.write(`modify-existing-table.test.pptx`);
3640

jest.config.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
module.exports = {
22
preset: 'ts-jest',
33
testEnvironment: 'node',
4-
};
4+
collectCoverageFrom: ['src/helper/{!(pretty),}.js'],
5+
};

package.json

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "pptx-automizer",
3-
"version": "0.2.0",
3+
"version": "0.2.1",
44
"description": "A template based pptx generator",
55
"repository": {
66
"type": "git",
@@ -18,11 +18,6 @@
1818
"lint": "eslint '*/**/*.{js,ts,tsx}' --fix",
1919
"prettier": "prettier --config .prettierrc 'src/**/*.ts' --write"
2020
},
21-
"jest": {
22-
"collectCoverageFrom": [
23-
"src/helper/{!(pretty),}.js"
24-
]
25-
},
2621
"files": [
2722
"dist",
2823
"README"
@@ -45,24 +40,24 @@
4540
"presentations"
4641
],
4742
"devDependencies": {
48-
"@types/jest": "^26.0.20",
49-
"@types/node": "^14.14.33",
43+
"@types/jest": "^29.4.0",
44+
"@types/node": "^18.11.18",
5045
"@types/xmldom": "^0.1.30",
51-
"@typescript-eslint/eslint-plugin": "^4.18.0",
52-
"@typescript-eslint/parser": "^4.18.0",
53-
"eslint": "^7.22.0",
54-
"eslint-config-prettier": "^8.1.0",
55-
"eslint-plugin-prettier": "^3.3.1",
56-
"jest": "^26.6.3",
46+
"@typescript-eslint/eslint-plugin": "^5.49.0",
47+
"@typescript-eslint/parser": "^5.49.0",
48+
"eslint": "^8.32.0",
49+
"eslint-config-prettier": "^8.6.0",
50+
"eslint-plugin-prettier": "^4.2.1",
51+
"jest": "^29.4.0",
5752
"nodemon": "^2.0.20",
58-
"prettier": "^2.2.1",
59-
"ts-jest": "^26.5.2",
60-
"ts-node": "^9.1.1",
61-
"typedoc": "^0.22.15",
62-
"typescript": "^4.2.3"
53+
"prettier": "^2.8.3",
54+
"ts-jest": "^29.0.5",
55+
"ts-node": "^10.9.1",
56+
"typedoc": "^0.23.24",
57+
"typescript": "^4.9.4"
6358
},
6459
"dependencies": {
65-
"@xmldom/xmldom": "^0.8.2",
60+
"@xmldom/xmldom": "^0.8.6",
6661
"extract-zip": "^2.0.1",
6762
"jszip": "^3.10.1",
6863
"regexp.escape": "^1.1.0"

src/automizer.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ export default class Automizer implements IPresentationProps {
197197
for (const template of this.templates) {
198198
const creationIds =
199199
template.creationIds || (await template.setCreationIds());
200+
template.useCreationIds = this.params.useCreationIds;
200201
templateCreationId.push({
201202
name: template.name,
202203
slides: creationIds,

src/classes/slide.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,10 @@ export class Slide implements ISlide {
143143
template: PresTemplate,
144144
slideIdentifier: SourceSlideIdentifier,
145145
): number {
146-
if (template.creationIds !== undefined) {
146+
if (
147+
template.useCreationIds === true &&
148+
template.creationIds !== undefined
149+
) {
147150
const matchCreationId = template.creationIds.find(
148151
(slideInfo) => slideInfo.id === Number(slideIdentifier),
149152
);
@@ -159,6 +162,7 @@ export class Slide implements ISlide {
159162
template.name
160163
);
161164
}
165+
162166
return slideIdentifier as number;
163167
}
164168

@@ -368,8 +372,9 @@ export class Slide implements ISlide {
368372
const sourcePath = `ppt/slides/slide${slideNumber}.xml`;
369373

370374
const sourceArchive = await template.archive;
371-
const hasCreationId = template.creationIds !== undefined;
372-
const method = hasCreationId
375+
const useCreationIds =
376+
template.useCreationIds === true && template.creationIds !== undefined;
377+
const method = useCreationIds
373378
? 'findByElementCreationId'
374379
: 'findByElementName';
375380

@@ -399,7 +404,7 @@ export class Slide implements ISlide {
399404
return {
400405
mode: importElement.mode,
401406
name: importElement.selector,
402-
hasCreationId: hasCreationId,
407+
hasCreationId: useCreationIds,
403408
sourceArchive,
404409
sourceSlideNumber: slideNumber,
405410
sourceElement,

src/helper/archive/archive-jszip.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ export default class ArchiveJszip extends Archive implements IArchive {
5151
await this.initialize();
5252
}
5353

54+
if (!this.archive.files[file]) {
55+
throw 'Could not find file ' + file;
56+
}
57+
5458
return this.archive.files[file].async(type || 'string');
5559
}
5660

src/helper/xml-helper.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import {
1111
import { TargetByRelIdMap } from '../constants/constants';
1212
import { XmlPrettyPrint } from './xml-pretty-print';
1313
import { GetRelationshipsCallback, Target } from '../types/types';
14-
import _ from 'lodash';
1514
import { vd } from './general-helper';
1615
import { contentTracker } from './content-tracker';
1716
import IArchive from '../interfaces/iarchive';
@@ -190,10 +189,12 @@ export class XmlHelper {
190189
const file = element.getAttribute('Target');
191190
const rId = element.getAttribute('Id');
192191

193-
const subtype = _.last(prefix.split('/'));
194-
const relType = _.last(type.split('/'));
195-
const filename = _.last(file.split('/'));
196-
const filenameExt = _.last(filename.split('.'));
192+
const last = (arr: string[]): string => arr[arr.length - 1];
193+
194+
const subtype = last(prefix.split('/'));
195+
const relType = last(type.split('/'));
196+
const filename = last(file.split('/'));
197+
const filenameExt = last(filename.split('.'));
197198
const filenameMatch = filename
198199
.replace('.' + filenameExt, '')
199200
.match(/^(.+?)(\d+)*$/);

src/interfaces/pres-template.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ export interface PresTemplate extends ITemplate {
55
name: string;
66
setCreationIds(): Promise<SlideInfo[]>;
77
creationIds?: SlideInfo[];
8+
useCreationIds?: boolean;
89
}

0 commit comments

Comments
 (0)