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 = ndoc.createElement('span')
|
||||||
span.setAttribute('style', 'border-width: 0; padding: 0; margin: 0')
|
span.setAttribute('style', 'border-width: 0; padding: 0; margin: 0')
|
||||||
r.surroundContents(span)
|
r.surroundContents(span)
|
||||||
span.scrollIntoView()
|
scroll_viewport.scroll_into_view(span)
|
||||||
fn = def():
|
fn = def():
|
||||||
# Remove the span and get the new position now that scrolling
|
# Remove the span and get the new position now that scrolling
|
||||||
# has (hopefully) completed
|
# has (hopefully) completed
|
||||||
@ -482,7 +482,7 @@ def scroll_to(cfi, callback, doc): # {{{
|
|||||||
callback(x, y)
|
callback(x, y)
|
||||||
else:
|
else:
|
||||||
node = point_.node
|
node = point_.node
|
||||||
node.scrollIntoView()
|
scroll_viewport.scroll_into_view(node)
|
||||||
|
|
||||||
fn = def():
|
fn = def():
|
||||||
r = node.getBoundingClientRect()
|
r = node.getBoundingClientRect()
|
||||||
|
@ -50,12 +50,20 @@ def flow_viewport_y():
|
|||||||
def flow_viewport_scroll_to(x, y):
|
def flow_viewport_scroll_to(x, y):
|
||||||
window.scrollTo(x, y)
|
window.scrollTo(x, y)
|
||||||
|
|
||||||
|
def flow_viewport_scroll_into_view(elem):
|
||||||
|
elem.scrollIntoView()
|
||||||
|
|
||||||
|
def flow_reset_globals():
|
||||||
|
pass
|
||||||
|
|
||||||
def paged_viewport_y():
|
def paged_viewport_y():
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
scroll_viewport.x = flow_viewport_x
|
scroll_viewport.x = flow_viewport_x
|
||||||
scroll_viewport.y = flow_viewport_y
|
scroll_viewport.y = flow_viewport_y
|
||||||
scroll_viewport.scroll_to = flow_viewport_scroll_to
|
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:
|
if is_ios:
|
||||||
window_width = def ():
|
window_width = def ():
|
||||||
@ -80,6 +88,20 @@ if is_ios:
|
|||||||
if isNaN(ans):
|
if isNaN(ans):
|
||||||
return 0
|
return 0
|
||||||
return ans
|
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:
|
else:
|
||||||
window_width = def():
|
window_width = def():
|
||||||
@ -88,6 +110,8 @@ else:
|
|||||||
return window.innerHeight
|
return window.innerHeight
|
||||||
paged_viewport_scroll_to = flow_viewport_scroll_to
|
paged_viewport_scroll_to = flow_viewport_scroll_to
|
||||||
paged_viewport_x = flow_viewport_x
|
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.width = window_width
|
||||||
scroll_viewport.height = window_height
|
scroll_viewport.height = window_height
|
||||||
@ -103,10 +127,14 @@ def set_layout_mode(val):
|
|||||||
scroll_viewport.x = flow_viewport_x
|
scroll_viewport.x = flow_viewport_x
|
||||||
scroll_viewport.y = flow_viewport_y
|
scroll_viewport.y = flow_viewport_y
|
||||||
scroll_viewport.scroll_to = flow_viewport_scroll_to
|
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:
|
else:
|
||||||
scroll_viewport.x = paged_viewport_x
|
scroll_viewport.x = paged_viewport_x
|
||||||
scroll_viewport.y = paged_viewport_y
|
scroll_viewport.y = paged_viewport_y
|
||||||
scroll_viewport.scroll_to = paged_viewport_scroll_to
|
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():
|
def current_spine_item():
|
||||||
return current_spine_item.value
|
return current_spine_item.value
|
||||||
|
@ -54,6 +54,7 @@ is_full_screen_layout = False
|
|||||||
|
|
||||||
def reset_paged_mode_globals():
|
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
|
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
|
col_width = screen_width = screen_height = cols_per_screen = gap = col_and_gap = 0
|
||||||
is_full_screen_layout = _in_paged_mode = False
|
is_full_screen_layout = _in_paged_mode = False
|
||||||
|
|
||||||
@ -339,7 +340,8 @@ def jump_to_anchor(name):
|
|||||||
scroll_to_elem(elem)
|
scroll_to_elem(elem)
|
||||||
|
|
||||||
def scroll_to_elem(elem):
|
def scroll_to_elem(elem):
|
||||||
elem.scrollIntoView()
|
scroll_viewport.scroll_into_view(elem)
|
||||||
|
|
||||||
if in_paged_mode:
|
if in_paged_mode:
|
||||||
# Ensure we are scrolled to the column containing elem
|
# Ensure we are scrolled to the column containing elem
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user