mirror of
https://github.com/overleaf/overleaf.git
synced 2025-04-09 14:29:03 +00:00
clean up calculation of visible pdf pages and display on redraw
This commit is contained in:
parent
776535f9f3
commit
c9e019b4a7
1 changed files with 22 additions and 21 deletions
|
@ -144,18 +144,18 @@ define [
|
|||
# find first visible page
|
||||
visible = $scope.pages.some (page, i) ->
|
||||
[topPageIdx, topPage] = [i, page] if page.visible
|
||||
if visible
|
||||
if visible && topPage.element?
|
||||
# console.log 'found it', topPageIdx
|
||||
else
|
||||
# console.log 'CANNOT FIND TOP PAGE'
|
||||
return
|
||||
|
||||
# console.log 'top page is', topPage.pageNum, topPage.elemTop, topPage.elemBottom, topPage
|
||||
top = topPage.elemTop
|
||||
bottom = topPage.elemBottom
|
||||
viewportTop = 0
|
||||
viewportHeight = $element.height()
|
||||
topVisible = (top >= viewportTop && top < viewportTop + viewportHeight)
|
||||
top = topPage.element.offset().top
|
||||
bottom = top + topPage.element.innerHeight()
|
||||
viewportTop = $element.offset().top
|
||||
viewportBottom = viewportTop + $element.height()
|
||||
topVisible = (top >= viewportTop && top < viewportBottom)
|
||||
someContentVisible = (top < viewportTop && bottom > viewportTop)
|
||||
# console.log 'in PdfListView', top, topVisible, someContentVisible, viewportTop
|
||||
if topVisible
|
||||
|
@ -237,13 +237,10 @@ define [
|
|||
layoutReady.promise.then () ->
|
||||
# console.log 'layoutReady was resolved'
|
||||
|
||||
# TODO can we combine this with scope.parentSize, need to finalize boxes
|
||||
updateContainer = () ->
|
||||
scope.containerSize = [
|
||||
element.innerWidth()
|
||||
element.innerHeight()
|
||||
element.offset().top
|
||||
]
|
||||
renderVisiblePages = () ->
|
||||
visiblePages = getVisiblePages()
|
||||
pages = getExtraPages visiblePages
|
||||
scope.document.renderPages(pages)
|
||||
|
||||
getVisiblePages = () ->
|
||||
top = element.offset().top
|
||||
|
@ -252,7 +249,11 @@ define [
|
|||
pageTop = pageElement.offset().top
|
||||
pageBottom = pageTop + pageElement.innerHeight()
|
||||
return pageTop < bottom and pageBottom > top
|
||||
return (page for page in scope.pages when isVisible(page.element))
|
||||
visiblePages = []
|
||||
for page in scope.pages
|
||||
page.visible = visible = isVisible(page.element)
|
||||
visiblePages.push page if visible
|
||||
return visiblePages
|
||||
|
||||
getExtraPages = (visiblePages) ->
|
||||
extra = []
|
||||
|
@ -282,6 +283,7 @@ define [
|
|||
ctrl.setScale(scale, h, w).then () ->
|
||||
spinner.remove(element)
|
||||
ctrl.redraw(origposition)
|
||||
$timeout renderVisiblePages, 0
|
||||
|
||||
checkElementReady = () ->
|
||||
# if element is zero-sized keep checking until it is ready
|
||||
|
@ -297,7 +299,7 @@ define [
|
|||
scope.$on 'layout-ready', () ->
|
||||
# console.log 'GOT LAYOUT READY EVENT'
|
||||
# console.log 'calling refresh'
|
||||
updateContainer()
|
||||
# updateContainer()
|
||||
spinner.add(element)
|
||||
layoutReady.resolve 'layout is ready'
|
||||
scope.parentSize = [
|
||||
|
@ -336,21 +338,20 @@ define [
|
|||
|
||||
element.on 'scroll', () ->
|
||||
#console.log 'scroll event', element.scrollTop(), 'adjusting?', scope.adjustingScroll
|
||||
scope.scrollPosition = element.scrollTop()
|
||||
#scope.scrollPosition = element.scrollTop()
|
||||
if scope.adjustingScroll
|
||||
updateContainer()
|
||||
renderVisiblePages()
|
||||
# updateContainer()
|
||||
scope.$apply()
|
||||
scope.adjustingScroll = false
|
||||
return
|
||||
scope.scrolled = true
|
||||
#scope.scrolled = true
|
||||
if scope.scrollHandlerTimeout
|
||||
$timeout.cancel(scope.scrollHandlerTimeout)
|
||||
scope.scrollHandlerTimeout = $timeout scrollHandler, 25
|
||||
|
||||
scrollHandler = () ->
|
||||
visiblePages = getVisiblePages()
|
||||
pages = getExtraPages visiblePages
|
||||
scope.document.renderPages(pages)
|
||||
renderVisiblePages()
|
||||
scope.$apply()
|
||||
newPosition = ctrl.getPdfPosition()
|
||||
if newPosition?
|
||||
|
|
Loading…
Add table
Reference in a new issue