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:
Jonas Jenwald 2015-10-13 12:47:07 +02:00
parent c4403e6fd2
commit 9fc8e1ea25
2 changed files with 12 additions and 7 deletions

View File

@ -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);
} }
}, },

View File

@ -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;