Fix scroll to element on Safari

This commit is contained in:
Kovid Goyal 2017-05-28 00:33:17 +05:30
parent 7dbdc040d9
commit 757c9a5c9e
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 14 additions and 2 deletions

View File

@ -56,6 +56,9 @@ def flow_viewport_scroll_into_view(elem):
def flow_reset_globals(): def flow_reset_globals():
pass pass
def flow_reset_transforms():
pass
def paged_viewport_y(): def paged_viewport_y():
return 0 return 0
@ -64,6 +67,7 @@ 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.scroll_into_view = flow_viewport_scroll_into_view
scroll_viewport.reset_globals = flow_reset_globals scroll_viewport.reset_globals = flow_reset_globals
scroll_viewport.reset_transforms = flow_reset_transforms
if is_ios: if is_ios:
window_width = def (): window_width = def ():
@ -101,10 +105,12 @@ if is_ios:
p = p.offsetParent p = p.offsetParent
# left -= window_width() // 2 # left -= window_width() // 2
paged_viewport_scroll_to(max(0, left), 0) paged_viewport_scroll_to(max(0, left), 0)
paged_reset_globals = def():
document.documentElement.style.transform = 'none'
paged_content_width = def(): paged_content_width = def():
return document.documentElement.scrollWidth return document.documentElement.scrollWidth
paged_reset_transforms = def():
document.documentElement.style.transform = 'none'
paged_reset_globals = def():
paged_reset_transforms()
else: else:
window_width = def(): window_width = def():
@ -117,6 +123,8 @@ else:
paged_reset_globals = flow_reset_globals paged_reset_globals = flow_reset_globals
paged_content_width = def(): paged_content_width = def():
return document.documentElement.scrollWidth return document.documentElement.scrollWidth
paged_reset_transforms = def():
pass
scroll_viewport.width = window_width scroll_viewport.width = window_width
scroll_viewport.height = window_height scroll_viewport.height = window_height
@ -135,12 +143,14 @@ def set_layout_mode(val):
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.scroll_into_view = flow_viewport_scroll_into_view
scroll_viewport.reset_globals = flow_reset_globals scroll_viewport.reset_globals = flow_reset_globals
scroll_viewport.reset_transforms = flow_reset_transforms
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.scroll_into_view = paged_viewport_scroll_into_view
scroll_viewport.reset_globals = paged_reset_globals scroll_viewport.reset_globals = paged_reset_globals
scroll_viewport.reset_transforms = paged_reset_transforms
def current_spine_item(): def current_spine_item():
return current_spine_item.value return current_spine_item.value

View File

@ -341,6 +341,7 @@ def jump_to_anchor(name):
def scroll_to_elem(elem): def scroll_to_elem(elem):
scroll_viewport.scroll_into_view(elem) scroll_viewport.scroll_into_view(elem)
scroll_viewport.reset_transforms() # needed for viewport_to_document()
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
@ -365,6 +366,7 @@ def snap_to_selection():
# Ensure that the viewport is positioned at the start of the column # Ensure that the viewport is positioned at the start of the column
# containing the start of the current selection # containing the start of the current selection
if in_paged_mode: if in_paged_mode:
scroll_viewport.reset_transforms() # needed for viewport_to_document()
sel = window.getSelection() sel = window.getSelection()
r = sel.getRangeAt(0).getBoundingClientRect() r = sel.getRangeAt(0).getBoundingClientRect()
node = sel.anchorNode node = sel.anchorNode