|
|
@ -100,7 +100,8 @@ 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. |
|
|
|
* element {Object} The element to be visible. |
|
|
|
* spot {Object} The object with the top property -- offset from the top edge. |
|
|
|
* spot {Object} An object with optional top and left properties, |
|
|
|
|
|
|
|
* specifying the offset from the top left edge. |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
function scrollIntoView(element, spot) { |
|
|
|
function scrollIntoView(element, spot) { |
|
|
|
// Assuming offsetParent is available (it's not available when viewer is in
|
|
|
|
// Assuming offsetParent is available (it's not available when viewer is in
|
|
|
@ -108,21 +109,32 @@ function scrollIntoView(element, spot) { |
|
|
|
// producing the error. See also animationStartedClosure.
|
|
|
|
// producing the error. See also animationStartedClosure.
|
|
|
|
var parent = element.offsetParent; |
|
|
|
var parent = element.offsetParent; |
|
|
|
var offsetY = element.offsetTop + element.clientTop; |
|
|
|
var offsetY = element.offsetTop + element.clientTop; |
|
|
|
|
|
|
|
var offsetX = element.offsetLeft + element.clientLeft; |
|
|
|
if (!parent) { |
|
|
|
if (!parent) { |
|
|
|
console.error('offsetParent is not set -- cannot scroll'); |
|
|
|
console.error('offsetParent is not set -- cannot scroll'); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
while (parent.clientHeight == parent.scrollHeight) { |
|
|
|
while (parent.clientHeight === parent.scrollHeight) { |
|
|
|
if (parent.dataset._scaleY) { |
|
|
|
if (parent.dataset._scaleY) { |
|
|
|
offsetY /= parent.dataset._scaleY; |
|
|
|
offsetY /= parent.dataset._scaleY; |
|
|
|
|
|
|
|
offsetX /= parent.dataset._scaleX; |
|
|
|
} |
|
|
|
} |
|
|
|
offsetY += parent.offsetTop; |
|
|
|
offsetY += parent.offsetTop; |
|
|
|
|
|
|
|
offsetX += parent.offsetLeft; |
|
|
|
parent = parent.offsetParent; |
|
|
|
parent = parent.offsetParent; |
|
|
|
if (!parent) |
|
|
|
if (!parent) { |
|
|
|
return; // no need to scroll
|
|
|
|
return; // no need to scroll
|
|
|
|
} |
|
|
|
} |
|
|
|
if (spot) |
|
|
|
} |
|
|
|
|
|
|
|
if (spot) { |
|
|
|
|
|
|
|
if (spot.top !== undefined) { |
|
|
|
offsetY += spot.top; |
|
|
|
offsetY += spot.top; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (spot.left !== undefined) { |
|
|
|
|
|
|
|
offsetX += spot.left; |
|
|
|
|
|
|
|
parent.scrollLeft = offsetX; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
parent.scrollTop = offsetY; |
|
|
|
parent.scrollTop = offsetY; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|