Fix a regression, from PR 5356, that breaks all scrolling in PresentationMode
*This regressed in PR 5356.* Rather than just backing out the offending code, this patch restores scrolling in PresentationMode by making the `overflow: hidden;` check optional and letting the callers that need it (e.g. `PDFFindController`) opt-in to use it.
This commit is contained in:
		
							parent
							
								
									c4403e6fd2
								
							
						
					
					
						commit
						9fc8e1ea25
					
				@ -325,10 +325,12 @@ var PDFFindController = (function PDFFindControllerClosure() {
 | 
				
			|||||||
        pageIndex, index, elements, beginIdx, endIdx) {
 | 
					        pageIndex, index, elements, beginIdx, endIdx) {
 | 
				
			||||||
      if (this.selected.matchIdx === index &&
 | 
					      if (this.selected.matchIdx === index &&
 | 
				
			||||||
          this.selected.pageIdx === pageIndex) {
 | 
					          this.selected.pageIdx === pageIndex) {
 | 
				
			||||||
        scrollIntoView(elements[beginIdx], {
 | 
					        var spot = {
 | 
				
			||||||
          top: FIND_SCROLL_OFFSET_TOP,
 | 
					          top: FIND_SCROLL_OFFSET_TOP,
 | 
				
			||||||
          left: FIND_SCROLL_OFFSET_LEFT
 | 
					          left: FIND_SCROLL_OFFSET_LEFT
 | 
				
			||||||
        });
 | 
					        };
 | 
				
			||||||
 | 
					        scrollIntoView(elements[beginIdx], spot,
 | 
				
			||||||
 | 
					                       /* skipOverflowHiddenElements = */ true);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -113,11 +113,13 @@ function getOutputScale(ctx) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Scrolls specified element into view of its parent.
 | 
					 * Scrolls specified element into view of its parent.
 | 
				
			||||||
 * element {Object} The element to be visible.
 | 
					 * @param {Object} element - The element to be visible.
 | 
				
			||||||
 * spot {Object} An object with optional top and left properties,
 | 
					 * @param {Object} spot - An object with optional top and left properties,
 | 
				
			||||||
 *               specifying the offset from the top left edge.
 | 
					 *   specifying the offset from the top left edge.
 | 
				
			||||||
 | 
					 * @param {boolean} skipOverflowHiddenElements - Ignore elements that have
 | 
				
			||||||
 | 
					 *   the CSS rule `overflow: hidden;` set. The default is false.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
function scrollIntoView(element, spot) {
 | 
					function scrollIntoView(element, spot, skipOverflowHiddenElements) {
 | 
				
			||||||
  // Assuming offsetParent is available (it's not available when viewer is in
 | 
					  // Assuming offsetParent is available (it's not available when viewer is in
 | 
				
			||||||
  // hidden iframe or object). We have to scroll: if the offsetParent is not set
 | 
					  // hidden iframe or object). We have to scroll: if the offsetParent is not set
 | 
				
			||||||
  // producing the error. See also animationStartedClosure.
 | 
					  // producing the error. See also animationStartedClosure.
 | 
				
			||||||
@ -126,10 +128,11 @@ function scrollIntoView(element, spot) {
 | 
				
			|||||||
    console.error('offsetParent is not set -- cannot scroll');
 | 
					    console.error('offsetParent is not set -- cannot scroll');
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					  var checkOverflow = skipOverflowHiddenElements || false;
 | 
				
			||||||
  var offsetY = element.offsetTop + element.clientTop;
 | 
					  var offsetY = element.offsetTop + element.clientTop;
 | 
				
			||||||
  var offsetX = element.offsetLeft + element.clientLeft;
 | 
					  var offsetX = element.offsetLeft + element.clientLeft;
 | 
				
			||||||
  while (parent.clientHeight === parent.scrollHeight ||
 | 
					  while (parent.clientHeight === parent.scrollHeight ||
 | 
				
			||||||
         getComputedStyle(parent).overflow === 'hidden') {
 | 
					         (checkOverflow && getComputedStyle(parent).overflow === 'hidden')) {
 | 
				
			||||||
    if (parent.dataset._scaleY) {
 | 
					    if (parent.dataset._scaleY) {
 | 
				
			||||||
      offsetY /= parent.dataset._scaleY;
 | 
					      offsetY /= parent.dataset._scaleY;
 | 
				
			||||||
      offsetX /= parent.dataset._scaleX;
 | 
					      offsetX /= parent.dataset._scaleX;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user