From c9e019b4a78826afcd77d31546e4dd452d7d70e1 Mon Sep 17 00:00:00 2001 From: Brian Gough Date: Tue, 20 Jan 2015 11:06:40 +0000 Subject: [PATCH] clean up calculation of visible pdf pages and display on redraw --- .../ide/pdfng/directives/pdfViewer.coffee | 43 ++++++++++--------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/services/web/public/coffee/ide/pdfng/directives/pdfViewer.coffee b/services/web/public/coffee/ide/pdfng/directives/pdfViewer.coffee index 505e1d8020..e6ec4fe47b 100644 --- a/services/web/public/coffee/ide/pdfng/directives/pdfViewer.coffee +++ b/services/web/public/coffee/ide/pdfng/directives/pdfViewer.coffee @@ -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?