Skip to content

Commit ded8358

Browse files
committed
fix: 'confTo.startsWith is not a function' (Fixes #186 )
1 parent 3dc9872 commit ded8358

4 files changed

Lines changed: 53 additions & 17 deletions

File tree

packages/epub-utils/src/epub-parse.js

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ function parseMetadata(doc, select, epub) {
139139
refines = refines.trim();
140140
if (refines) {
141141
// isEPUB3 implied
142-
if (md === "source-of" && meta.textContent === "pagination" && refines === dcSourceId) {
142+
if (md === "source-of" && meta.textContent === "pagination" && dcSource && refines === dcSourceId) {
143143
dcSourceAdded = true;
144144
addMeta(`dc:source`, dcSource, result);
145145
return;
@@ -168,11 +168,37 @@ function parseMetadata(doc, select, epub) {
168168
});
169169

170170
if (isEPUB3 && dcSource && !dcSourceAdded) {
171-
// console.log(JSON.stringify(result));
172-
const confTo = result["dcterms:conformsTo"] || epub.links && epub.links["dcterms:conformsTo"];
173-
if (confTo && confTo.startsWith("http://www.idpf.org/epub/a11y/")) { // EPUB a11y 1.0
171+
// console.log("LINKS:", JSON.stringify(epub.links, null, 4));
172+
// console.log("METADATA 1:", JSON.stringify(result, null, 4));
173+
const confTo = [];
174+
if (result["dcterms:conformsTo"]) {
175+
if (Array.isArray(result["dcterms:conformsTo"])) {
176+
confTo.push(...result["dcterms:conformsTo"]);
177+
} else {
178+
confTo.push(result["dcterms:conformsTo"]);
179+
}
180+
}
181+
if (epub.links && epub.links["dcterms:conformsTo"]) {
182+
if (Array.isArray(epub.links["dcterms:conformsTo"])) {
183+
confTo.push(...epub.links["dcterms:conformsTo"]);
184+
} else {
185+
confTo.push(epub.links["dcterms:conformsTo"]);
186+
}
187+
}
188+
// console.log("confTo:", JSON.stringify(confTo, null, 4));
189+
// check for EPUB a11y v1.0
190+
if (
191+
// confTo &&
192+
// (
193+
// Array.isArray(confTo) && confTo.find((item) => item.startsWith("http://www.idpf.org/epub/a11y/"))
194+
// ||
195+
// !Array.isArray(confTo) && confTo.startsWith("http://www.idpf.org/epub/a11y/")
196+
// )
197+
confTo.find((item) => item.startsWith("http://www.idpf.org/epub/a11y/"))
198+
) {
174199
addMeta(`dc:source`, dcSource, result);
175200
}
201+
// console.log("METADATA 2:", JSON.stringify(result, null, 4));
176202
}
177203

178204
return result;

tests/__tests__/epub-rules.test.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,10 +269,12 @@ describe('accessibility metadata', () => {
269269
"schema:accessModeSufficient": "visual,textual",
270270
"schema:accessibilityControl": "fullKeyboardControl",
271271
"schema:accessibilityAPI": "AndroidAcessibility",
272-
"dcterms:conformsTo": "EPUB-A11Y-11_WCAG-21-AA"
272+
// "dc:source": "print-source",
273+
"dcterms:conformsTo": ["EPUB-A11Y-11_WCAG-21-AA","EPUB-A11Y-11_WCAG-20-A"]
273274
});
274275
expect(report['earl:testSubject']['links']).toEqual({
275276
"a11y:certifierCredential": "http://GCA",
277+
"dcterms:conformsTo": "xxhttp://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-aa",
276278
});
277279
});
278280
test('accessibilityAPI and accessibilityControl metadata are ignored when missing', async () => {
@@ -306,7 +308,8 @@ describe('accessibility metadata', () => {
306308
"dcterms:conformsTo": [
307309
"EPUB-A11Y-11_WCAG-21-A",
308310
"EPUB-A11Y-11_WCAG-20-AA"
309-
]
311+
],
312+
"dc:source": "print-source"
310313
});
311314
expect(report['earl:testSubject']['links']).toEqual({
312315
"a11y:certifierReport": "http://www.example.com/report.html",

tests/data/epubrules-metadata-accessibilityAPI_Control-missing/EPUB/package.opf

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,19 @@
77
<meta property="dcterms:modified">2017-01-01T00:00:01Z</meta>
88

99
<meta property="schema:accessMode">textual</meta>
10-
10+
1111
<meta property="schema:accessibilityFeature">ARIA</meta>
12-
12+
1313
<meta property="schema:accessibilityHazard">noFlashingHazard</meta>
14-
14+
1515
<meta property="schema:accessibilitySummary">everything OK!</meta>
1616

1717
<meta property="schema:accessModeSufficient">visual,textual</meta>
18-
<!--
18+
<!--
1919
<meta property="schema:accessibilityControl">fullKeyboardControl</meta>
20-
20+
2121
<meta property="schema:accessibilityAPI">AndroidAcessibility</meta> -->
22-
22+
2323
<meta name="a11y:certifiedBy" content="CERTBY" />
2424
<meta property="a11y:certifierCredential">CERTCRED</meta>
2525
<link rel="a11y:certifierReport" href="http://www.example.com/report.html"/>
@@ -31,6 +31,7 @@
3131
EPUB-A11Y-11_WCAG-21-A
3232
</meta>
3333
<meta property="dcterms:conformsTo">EPUB-A11Y-11_WCAG-20-AA</meta>
34+
<dc:source>print-source</dc:source>
3435
</metadata>
3536
<manifest>
3637
<item id="nav" href="nav.xhtml" media-type="application/xhtml+xml" properties="nav"/>

tests/data/epubrules-metadata-accessibilityAPI_Control-present/EPUB/package.opf

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,30 @@
44
<dc:title id="title">Minimal EPUB 3.0</dc:title>
55
<dc:language>en</dc:language>
66
<dc:identifier id="uid">NOID</dc:identifier>
7+
78
<meta property="dcterms:modified">2017-01-01T00:00:01Z</meta>
89

910
<meta property="schema:accessMode">textual</meta>
10-
11+
1112
<meta property="schema:accessibilityFeature">structuralNavigation</meta>
1213
<meta property="schema:accessibilityFeature">ARIA</meta>
13-
14+
1415
<meta property="schema:accessibilityHazard">noFlashingHazard</meta>
15-
16+
1617
<meta property="schema:accessibilitySummary">everything OK!</meta>
1718

1819
<meta property="schema:accessModeSufficient">visual,textual</meta>
1920

2021
<meta property="schema:accessibilityControl">fullKeyboardControl</meta>
21-
22+
2223
<meta property="schema:accessibilityAPI" refines=" # ">AndroidAcessibility</meta>
23-
24+
25+
<dc:source>print-source</dc:source>
26+
2427
<meta property="dcterms:conformsTo" id="conf">EPUB-A11Y-11_WCAG-21-AA</meta>
28+
<meta property="dcterms:conformsTo" id="conf">EPUB-A11Y-11_WCAG-20-A</meta>
29+
<!-- meta property="dcterms:conformsTo">http://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-aa</meta -->
30+
<link rel="dcterms:conformsTo" href="xxhttp://www.idpf.org/epub/a11y/accessibility-20170105.html#wcag-aa" />
2531
<!-- meta property="dcterms:conformsTo" id="conf">EPUB Accessibility 1.1 - WCAG 2.1 Level AA</meta -->
2632

2733
<meta property="a11y:certifiedBy" id="certifier" refines="#conf">Benetech</meta>

0 commit comments

Comments
 (0)