Merge pull request #13482 from Snuffleupagus/scrollMatches-fix
Fix scrolling of search results in documents with marked content (bug 1714183)
This commit is contained in:
		
						commit
						425e58431a
					
				@ -223,7 +223,7 @@ class PDFFindController {
 | 
				
			|||||||
      top: MATCH_SCROLL_OFFSET_TOP,
 | 
					      top: MATCH_SCROLL_OFFSET_TOP,
 | 
				
			||||||
      left: MATCH_SCROLL_OFFSET_LEFT,
 | 
					      left: MATCH_SCROLL_OFFSET_LEFT,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    scrollIntoView(element, spot, /* skipOverflowHiddenElements = */ true);
 | 
					    scrollIntoView(element, spot, /* scrollMatches = */ true);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  _reset() {
 | 
					  _reset() {
 | 
				
			||||||
 | 
				
			|||||||
@ -97,10 +97,11 @@ function getOutputScale(ctx) {
 | 
				
			|||||||
 * @param {Object} element - The element to be visible.
 | 
					 * @param {Object} element - The element to be visible.
 | 
				
			||||||
 * @param {Object} spot - 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
 | 
					 * @param {boolean} [scrollMatches] - When scrolling search results into view,
 | 
				
			||||||
 *   the CSS rule `overflow: hidden;` set. The default is false.
 | 
					 *   ignore elements that either: Contains marked content identifiers,
 | 
				
			||||||
 | 
					 *   or have the CSS-rule `overflow: hidden;` set. The default value is `false`.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
function scrollIntoView(element, spot, skipOverflowHiddenElements = false) {
 | 
					function scrollIntoView(element, spot, scrollMatches = false) {
 | 
				
			||||||
  // 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 animationStarted.
 | 
					  // producing the error. See also animationStarted.
 | 
				
			||||||
@ -114,15 +115,13 @@ function scrollIntoView(element, spot, skipOverflowHiddenElements = false) {
 | 
				
			|||||||
  while (
 | 
					  while (
 | 
				
			||||||
    (parent.clientHeight === parent.scrollHeight &&
 | 
					    (parent.clientHeight === parent.scrollHeight &&
 | 
				
			||||||
      parent.clientWidth === parent.scrollWidth) ||
 | 
					      parent.clientWidth === parent.scrollWidth) ||
 | 
				
			||||||
    (skipOverflowHiddenElements &&
 | 
					    (scrollMatches &&
 | 
				
			||||||
      getComputedStyle(parent).overflow === "hidden")
 | 
					      (parent.classList.contains("markedContent") ||
 | 
				
			||||||
 | 
					        getComputedStyle(parent).overflow === "hidden"))
 | 
				
			||||||
  ) {
 | 
					  ) {
 | 
				
			||||||
    if (parent.dataset._scaleY) {
 | 
					 | 
				
			||||||
      offsetY /= parent.dataset._scaleY;
 | 
					 | 
				
			||||||
      offsetX /= parent.dataset._scaleX;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    offsetY += parent.offsetTop;
 | 
					    offsetY += parent.offsetTop;
 | 
				
			||||||
    offsetX += parent.offsetLeft;
 | 
					    offsetX += parent.offsetLeft;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    parent = parent.offsetParent;
 | 
					    parent = parent.offsetParent;
 | 
				
			||||||
    if (!parent) {
 | 
					    if (!parent) {
 | 
				
			||||||
      return; // no need to scroll
 | 
					      return; // no need to scroll
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user