Skip to content

Commit d399df0

Browse files
authored
Always find a preview to render (#2035)
1 parent 491440a commit d399df0

File tree

3 files changed

+56
-24
lines changed

3 files changed

+56
-24
lines changed

assets/js/helpers.js

Lines changed: 45 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -75,24 +75,56 @@ export function descriptionElementFromHash (anything = false) {
7575

7676
// Matches a subheader in particular
7777
if (headingTagNames.includes(element.tagName)) {
78-
const div = document.createElement('div')
79-
const nodes = [element]
80-
81-
// Capture all nodes under the current heading level.
82-
let node = element
83-
while ((node = node.nextSibling)) {
84-
if (headingTagNames.includes(node.tagName) && node.tagName <= element.tagName) {
85-
break
86-
} else {
87-
nodes.push(node)
78+
return headingPreview(element)
79+
}
80+
81+
const nearestHeading = findNearestAboveHeading(element)
82+
83+
if (nearestHeading) {
84+
return nearestHeading
85+
} else {
86+
return document.getElementById('top-content')
87+
}
88+
}
89+
90+
function findNearestAboveHeading (element) {
91+
let previous = element.previousElementSibling
92+
while (previous) {
93+
if (headingTagNames.includes(previous.tagName)) {
94+
return headingPreview(previous)
95+
}
96+
previous = previous.previousElementSibling
97+
}
98+
let parent = element.parentNode
99+
while (parent) {
100+
previous = parent.previousElementSibling
101+
while (previous) {
102+
if (headingTagNames.includes(previous.tagName)) {
103+
return headingPreview(previous)
88104
}
105+
previous = previous.previousElementSibling
89106
}
107+
parent = parent.parentNode
108+
}
109+
return null
110+
}
90111

91-
div.append(...nodes)
92-
return div
112+
function headingPreview (element) {
113+
const div = document.createElement('div')
114+
const nodes = [element]
115+
116+
// Capture all nodes under the current heading level.
117+
let node = element
118+
while ((node = node.nextSibling)) {
119+
if (headingTagNames.includes(node.tagName) && node.tagName <= element.tagName) {
120+
break
121+
} else {
122+
nodes.push(node)
123+
}
93124
}
94125

95-
return null
126+
div.append(...nodes)
127+
return div
96128
}
97129

98130
/**

formatters/epub/dist/epub-O5PC34E2.js renamed to formatters/epub/dist/epub-FABSBU4D.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)