mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Fix a regression that broke scrolling to CFIs with zero offset pointing to text surrounded by a range wrapper
This commit is contained in:
parent
1f1d8024cb
commit
9dadd1a1a4
@ -590,6 +590,9 @@ def decode_with_range(cfi, doc): # {{{
|
|||||||
# We can only create a meaningful range if the node length is
|
# We can only create a meaningful range if the node length is
|
||||||
# positive and nonzero.
|
# positive and nonzero.
|
||||||
node_len = node.nodeValue.length if node.nodeValue else 0
|
node_len = node.nodeValue.length if node.nodeValue else 0
|
||||||
|
if not node_len and node.nextSibling?.dataset?.calibreRangeWrapper and node.nextSibling.firstChild?.nodeType is Node.TEXT_NODE:
|
||||||
|
node = node.nextSibling.firstChild
|
||||||
|
node_len = node.nodeValue.length if node.nodeValue else 0
|
||||||
if node_len:
|
if node_len:
|
||||||
range_ = ndoc.createRange()
|
range_ = ndoc.createRange()
|
||||||
|
|
||||||
@ -607,6 +610,9 @@ def decode_with_range(cfi, doc): # {{{
|
|||||||
if not rect:
|
if not rect:
|
||||||
print(str.format("Could not find caret position for {} (offset: {})", cfi, decoded.offset))
|
print(str.format("Could not find caret position for {} (offset: {})", cfi, decoded.offset))
|
||||||
range_ = None
|
range_ = None
|
||||||
|
else:
|
||||||
|
print(f'Caret offset pointed to an empty text node or a non-text node for {cfi}, (offset: {decoded.offset})')
|
||||||
|
range_ = None
|
||||||
|
|
||||||
# Augment decoded with range, if found
|
# Augment decoded with range, if found
|
||||||
decoded.range = range_
|
decoded.range = range_
|
||||||
@ -762,6 +768,10 @@ def scroll_to(cfi, callback, doc): # {{{
|
|||||||
callback(doc_x, doc_y)
|
callback(doc_x, doc_y)
|
||||||
else:
|
else:
|
||||||
node = decoded.node
|
node = decoded.node
|
||||||
|
if node.nodeType is Node.TEXT_NODE:
|
||||||
|
node = decoded.node = node.parentNode
|
||||||
|
if not node.scrollIntoView:
|
||||||
|
return
|
||||||
scroll_viewport.scroll_into_view(node)
|
scroll_viewport.scroll_into_view(node)
|
||||||
|
|
||||||
fn = def():
|
fn = def():
|
||||||
|
Loading…
x
Reference in New Issue
Block a user