mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Start work on implementing scrollIntoView for Safari
This commit is contained in:
parent
3a270f77c5
commit
6f384dd00a
@ -448,7 +448,7 @@ def scroll_to(cfi, callback, doc): # {{{
|
||||
span = ndoc.createElement('span')
|
||||
span.setAttribute('style', 'border-width: 0; padding: 0; margin: 0')
|
||||
r.surroundContents(span)
|
||||
span.scrollIntoView()
|
||||
scroll_viewport.scroll_into_view(span)
|
||||
fn = def():
|
||||
# Remove the span and get the new position now that scrolling
|
||||
# has (hopefully) completed
|
||||
@ -482,7 +482,7 @@ def scroll_to(cfi, callback, doc): # {{{
|
||||
callback(x, y)
|
||||
else:
|
||||
node = point_.node
|
||||
node.scrollIntoView()
|
||||
scroll_viewport.scroll_into_view(node)
|
||||
|
||||
fn = def():
|
||||
r = node.getBoundingClientRect()
|
||||
|
@ -50,12 +50,20 @@ def flow_viewport_y():
|
||||
def flow_viewport_scroll_to(x, y):
|
||||
window.scrollTo(x, y)
|
||||
|
||||
def flow_viewport_scroll_into_view(elem):
|
||||
elem.scrollIntoView()
|
||||
|
||||
def flow_reset_globals():
|
||||
pass
|
||||
|
||||
def paged_viewport_y():
|
||||
return 0
|
||||
|
||||
scroll_viewport.x = flow_viewport_x
|
||||
scroll_viewport.y = flow_viewport_y
|
||||
scroll_viewport.scroll_to = flow_viewport_scroll_to
|
||||
scroll_viewport.scroll_into_view = flow_viewport_scroll_into_view
|
||||
scroll_viewport.reset_globals = flow_reset_globals
|
||||
|
||||
if is_ios:
|
||||
window_width = def ():
|
||||
@ -80,6 +88,20 @@ if is_ios:
|
||||
if isNaN(ans):
|
||||
return 0
|
||||
return ans
|
||||
paged_viewport_scroll_into_view = def(elem):
|
||||
left = elem.offsetLeft
|
||||
if left is None:
|
||||
return # element has display: none
|
||||
elem.scrollIntoView()
|
||||
window.scrollTo(0, 0)
|
||||
p = elem.offsetParent
|
||||
while p:
|
||||
left += p.offsetLeft
|
||||
p = p.offsetParent
|
||||
# left -= window_width() // 2
|
||||
paged_viewport_scroll_to(max(0, left), 0)
|
||||
paged_reset_globals = def():
|
||||
document.documentElement.style.transform = 'none'
|
||||
|
||||
else:
|
||||
window_width = def():
|
||||
@ -88,6 +110,8 @@ else:
|
||||
return window.innerHeight
|
||||
paged_viewport_scroll_to = flow_viewport_scroll_to
|
||||
paged_viewport_x = flow_viewport_x
|
||||
paged_viewport_scroll_into_view = flow_viewport_scroll_into_view
|
||||
paged_reset_globals = flow_reset_globals
|
||||
|
||||
scroll_viewport.width = window_width
|
||||
scroll_viewport.height = window_height
|
||||
@ -103,10 +127,14 @@ def set_layout_mode(val):
|
||||
scroll_viewport.x = flow_viewport_x
|
||||
scroll_viewport.y = flow_viewport_y
|
||||
scroll_viewport.scroll_to = flow_viewport_scroll_to
|
||||
scroll_viewport.scroll_into_view = flow_viewport_scroll_into_view
|
||||
scroll_viewport.reset_globals = flow_reset_globals
|
||||
else:
|
||||
scroll_viewport.x = paged_viewport_x
|
||||
scroll_viewport.y = paged_viewport_y
|
||||
scroll_viewport.scroll_to = paged_viewport_scroll_to
|
||||
scroll_viewport.scroll_into_view = paged_viewport_scroll_into_view
|
||||
scroll_viewport.reset_globals = paged_reset_globals
|
||||
|
||||
def current_spine_item():
|
||||
return current_spine_item.value
|
||||
|
@ -54,6 +54,7 @@ is_full_screen_layout = False
|
||||
|
||||
def reset_paged_mode_globals():
|
||||
nonlocal _in_paged_mode, col_width, col_and_gap, screen_height, gap, screen_width, is_full_screen_layout, cols_per_screen
|
||||
scroll_viewport.reset_globals()
|
||||
col_width = screen_width = screen_height = cols_per_screen = gap = col_and_gap = 0
|
||||
is_full_screen_layout = _in_paged_mode = False
|
||||
|
||||
@ -339,7 +340,8 @@ def jump_to_anchor(name):
|
||||
scroll_to_elem(elem)
|
||||
|
||||
def scroll_to_elem(elem):
|
||||
elem.scrollIntoView()
|
||||
scroll_viewport.scroll_into_view(elem)
|
||||
|
||||
if in_paged_mode:
|
||||
# Ensure we are scrolled to the column containing elem
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user