From 4c95bfffdf86dae496e47fa27fe615b3a28f91c5 Mon Sep 17 00:00:00 2001 From: Daniel Weck Date: Tue, 4 Feb 2025 11:04:34 +0000 Subject: [PATCH] fix: epub:type non-XML parsing fallback for pagebreak role --- lib/rules/pagebreak-label-matches.js | 6 ++--- .../full/pagebreak-label/content__.xhtml | 9 ++++++- .../full/pagebreak-label/pagebreak-label.js | 7 +++-- .../pagebreak-label/pagebreak-label.json | 6 +++++ .../pagebreak-label/pagebreak-label.xhtml | 26 +++++++++++++++++++ 5 files changed, 48 insertions(+), 6 deletions(-) create mode 100644 test/integration/rules/pagebreak-label/pagebreak-label.json create mode 100644 test/integration/rules/pagebreak-label/pagebreak-label.xhtml diff --git a/lib/rules/pagebreak-label-matches.js b/lib/rules/pagebreak-label-matches.js index 85775c4049..0feaab4710 100644 --- a/lib/rules/pagebreak-label-matches.js +++ b/lib/rules/pagebreak-label-matches.js @@ -7,10 +7,10 @@ function pagebreakLabelMatches(node) { node .getAttributeNS('http://www.idpf.org/2007/ops', 'type') .match(/\S+/g) - .includes('pagebreak')) + .includes('pagebreak')) || + (node.hasAttribute('epub:type') && + node.getAttribute('epub:type').match(/\S+/g).includes('pagebreak')) // for unit tests that are not XML-aware due to fixture.innerHTML ); - - return false; } export default pagebreakLabelMatches; diff --git a/test/integration/full/pagebreak-label/content__.xhtml b/test/integration/full/pagebreak-label/content__.xhtml index b4b84895b9..c968ccbcfc 100644 --- a/test/integration/full/pagebreak-label/content__.xhtml +++ b/test/integration/full/pagebreak-label/content__.xhtml @@ -30,8 +30,15 @@ - + + +
+ + + +
+ diff --git a/test/integration/full/pagebreak-label/pagebreak-label.js b/test/integration/full/pagebreak-label/pagebreak-label.js index d99c23abf8..ea55c17420 100644 --- a/test/integration/full/pagebreak-label/pagebreak-label.js +++ b/test/integration/full/pagebreak-label/pagebreak-label.js @@ -26,9 +26,11 @@ describe('pagebreak-label test fail', function () { assert.lengthOf(results.violations, 1); }); - it('should find #p3 #p4', function () { + it('should find #p3 #p4 #p5 #p9', function () { assert.deepEqual(results.violations[0].nodes[0].target, ['#p3']); assert.deepEqual(results.violations[0].nodes[1].target, ['#p4']); + assert.deepEqual(results.violations[0].nodes[2].target, ['#p5']); + assert.deepEqual(results.violations[0].nodes[3].target, ['#p9']); }); }); @@ -38,9 +40,10 @@ describe('pagebreak-label test fail', function () { assert.lengthOf(results.passes, 1); }); - it('should find section #p1 #p2', function () { + it('should find section #p1 #p2 #p6', function () { assert.deepEqual(results.passes[0].nodes[0].target, ['#p1']); assert.deepEqual(results.passes[0].nodes[1].target, ['#p2']); + assert.deepEqual(results.passes[0].nodes[2].target, ['#p6']); }); }); diff --git a/test/integration/rules/pagebreak-label/pagebreak-label.json b/test/integration/rules/pagebreak-label/pagebreak-label.json new file mode 100644 index 0000000000..1da5f701ee --- /dev/null +++ b/test/integration/rules/pagebreak-label/pagebreak-label.json @@ -0,0 +1,6 @@ +{ + "description": "pagebreak-label test", + "rule": "pagebreak-label", + "violations": [["#p3"], ["#p4"], ["#p5"], ["#p9"]], + "passes": [["#p1"], ["#p2"], ["#p6"]] +} diff --git a/test/integration/rules/pagebreak-label/pagebreak-label.xhtml b/test/integration/rules/pagebreak-label/pagebreak-label.xhtml new file mode 100644 index 0000000000..4b199cc819 --- /dev/null +++ b/test/integration/rules/pagebreak-label/pagebreak-label.xhtml @@ -0,0 +1,26 @@ + + + pagebreak-label test + + + +

Loomings

+

Call me Ishmael.

+ + + + + + + +
+ + + +
+ +