Skip to content

Commit 3b9d854

Browse files
committed
chore(read): move table data reader to slide-helper
1 parent 7e6df11 commit 3b9d854

File tree

5 files changed

+50
-69
lines changed

5 files changed

+50
-69
lines changed

__tests__/read-table-data.test.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import Automizer, { TableData } from '../src/index';
2-
import { ModifyTableHelper } from '../src';
1+
import Automizer from '../src/index';
32
import { TableInfo } from '../src/types/table-types';
43

54
test('read table data from slide', async () => {
@@ -12,18 +11,18 @@ test('read table data from slide', async () => {
1211
.loadRoot(`RootTemplate.pptx`)
1312
.load(`SlideWithTables.pptx`, 'tables');
1413

15-
const data = <TableInfo[]>[];
14+
let data = <TableInfo[]>[];
1615

1716
await pres
18-
.addSlide('tables', 1, (slide) => {
19-
slide.modifyElement('TableWithLabels', [
20-
// ToDo: use from ElementInfo
21-
// ModifyTableHelper.readTableData(data),
22-
]);
17+
.addSlide('tables', 1, async (slide) => {
18+
const tableInfo = await slide.getElement('TableWithLabels');
19+
20+
data = tableInfo.getTableInfo();
2321
})
2422
.write(`read-table-data.test.pptx`);
2523

2624
// We have 12 text values in a 3x3 table:
27-
// console.log(data);
25+
console.log(data.map((data) => data.textContent));
26+
2827
expect(data.length).toBe(12);
2928
});

src/automizer.ts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,7 @@ import { IPresentationProps } from './interfaces/ipresentation-props';
1212
import { PresTemplate } from './interfaces/pres-template';
1313
import { RootPresTemplate } from './interfaces/root-pres-template';
1414
import { Template } from './classes/template';
15-
import {
16-
ModifyXmlCallback,
17-
SlideInfo,
18-
TemplateInfo,
19-
XmlElement,
20-
} from './types/xml-types';
15+
import { ModifyXmlCallback, TemplateInfo } from './types/xml-types';
2116
import { GeneralHelper, vd } from './helper/general-helper';
2217
import { Master } from './classes/master';
2318
import path from 'path';

src/helper/modify-table-helper.ts

Lines changed: 2 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { ModifyTableParams, TableData, TableInfo } from '../types/table-types';
22
import { ModifyTable } from '../modify/modify-table';
33
import { XmlDocument, XmlElement } from '../types/xml-types';
4-
import { ShapeModificationCallback } from '../types/types';
4+
import { XmlSlideHelper } from './xml-slide-helper';
55

66
export default class ModifyTableHelper {
77
static setTable =
@@ -11,7 +11,7 @@ export default class ModifyTableHelper {
1111

1212
if (params?.expand) {
1313
params?.expand.forEach((expand) => {
14-
const tableInfo = ModifyTableHelper.getTableInfo(element);
14+
const tableInfo = XmlSlideHelper.readTableInfo(element);
1515
const targetCell = tableInfo.find(
1616
(infoCell) => infoCell.textContent === expand.tag,
1717
);
@@ -69,48 +69,4 @@ export default class ModifyTableHelper {
6969
const modTable = new ModifyTable(element, data);
7070
modTable.adjustWidth();
7171
};
72-
73-
static readTableData =
74-
(info?: TableInfo[]): ShapeModificationCallback =>
75-
(element: XmlElement): void => {
76-
if (Array.isArray(info)) {
77-
// const infoCells = ModifyTableHelper.getTableInfo(element);
78-
// info.push(...infoCells);
79-
}
80-
};
81-
82-
static getTableInfo = (element: XmlElement) => {
83-
const info = <TableInfo[]>[];
84-
const rows = element.getElementsByTagName('a:tr');
85-
if (!rows) {
86-
console.error("Can't find a table row.");
87-
return info;
88-
}
89-
90-
for (let r = 0; r < rows.length; r++) {
91-
const row = rows.item(r);
92-
const columns = row.getElementsByTagName('a:tc');
93-
for (let c = 0; c < columns.length; c++) {
94-
const cell = columns.item(c);
95-
const gridSpan = cell.getAttribute('gridSpan');
96-
const hMerge = cell.getAttribute('hMerge');
97-
const texts = cell.getElementsByTagName('a:t');
98-
const text: string[] = [];
99-
for (let t = 0; t < texts.length; t++) {
100-
text.push(texts.item(t).textContent);
101-
}
102-
info.push({
103-
row: r,
104-
column: c,
105-
rowXml: row,
106-
columnXml: cell,
107-
text: text,
108-
textContent: text.join(''),
109-
gridSpan: Number(gridSpan),
110-
hMerge: Number(hMerge),
111-
});
112-
}
113-
}
114-
return info;
115-
};
11672
}

src/helper/xml-slide-helper.ts

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
} from '../types/xml-types';
77
import { XmlHelper } from './xml-helper';
88
import HasShapes from '../classes/has-shapes';
9-
import { FindElementSelector } from '../types/types';
9+
import { FindElementSelector, ShapeModificationCallback } from '../types/types';
1010
import ModifyTableHelper from './modify-table-helper';
1111
import { TableData, TableInfo } from '../types/table-types';
1212

@@ -114,13 +114,9 @@ export class XmlSlideHelper {
114114
type: XmlSlideHelper.getElementType(slideElement),
115115
position: XmlSlideHelper.parseShapeCoordinates(slideElement),
116116
hasTextBody: !!XmlSlideHelper.getTextBody(slideElement),
117-
getText: () => XmlSlideHelper.parseTextFragments(slideElement),
118-
// getTableInfo: () => {
119-
// const data = <TableInfo[]>[];
120-
// ModifyTableHelper.readTableData(data)(slideElement);
121-
// return data;
122-
// },
123117
getXmlElement: () => slideElement,
118+
getText: () => XmlSlideHelper.parseTextFragments(slideElement),
119+
getTableInfo: () => XmlSlideHelper.readTableInfo(slideElement),
124120
getAltText: () => XmlSlideHelper.getImageAltText(slideElement),
125121
};
126122
}
@@ -293,4 +289,39 @@ export class XmlSlideHelper {
293289
return null;
294290
}
295291
};
292+
293+
static readTableInfo = (element: XmlElement): TableInfo[] => {
294+
const info = <TableInfo[]>[];
295+
const rows = element.getElementsByTagName('a:tr');
296+
if (!rows) {
297+
console.error("Can't find a table row.");
298+
return info;
299+
}
300+
301+
for (let r = 0; r < rows.length; r++) {
302+
const row = rows.item(r);
303+
const columns = row.getElementsByTagName('a:tc');
304+
for (let c = 0; c < columns.length; c++) {
305+
const cell = columns.item(c);
306+
const gridSpan = cell.getAttribute('gridSpan');
307+
const hMerge = cell.getAttribute('hMerge');
308+
const texts = cell.getElementsByTagName('a:t');
309+
const text: string[] = [];
310+
for (let t = 0; t < texts.length; t++) {
311+
text.push(texts.item(t).textContent);
312+
}
313+
info.push({
314+
row: r,
315+
column: c,
316+
rowXml: row,
317+
columnXml: cell,
318+
text: text,
319+
textContent: text.join(''),
320+
gridSpan: Number(gridSpan),
321+
hMerge: Number(hMerge),
322+
});
323+
}
324+
}
325+
return info;
326+
};
296327
}

src/types/xml-types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ export type ElementInfo = {
7676
hasTextBody: boolean;
7777
getText: () => string[];
7878
getAltText: () => string;
79-
// getTableInfo: () => TableInfo[];
79+
getTableInfo: () => TableInfo[];
8080
getXmlElement: () => XmlElement;
8181
};
8282

0 commit comments

Comments
 (0)