Browse Source

Add support for horizontal scrolling in 'scrollIntoView' in ui_utils.js

Jonas Jenwald 12 years ago
parent
commit
736c570231
  1. 7
      web/text_layer_builder.js
  2. 22
      web/ui_utils.js

7
web/text_layer_builder.js

@ -13,10 +13,12 @@ @@ -13,10 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* globals CustomStyle, PDFFindController, scrollIntoView */
'use strict';
/* globals CustomStyle, PDFFindController, scrollIntoView */
var FIND_SCROLL_OFFSET_TOP = -50;
var FIND_SCROLL_OFFSET_LEFT = -400;
/**
* TextLayerBuilder provides text-selection
@ -310,7 +312,8 @@ var TextLayerBuilder = function textLayerBuilder(options) { @@ -310,7 +312,8 @@ var TextLayerBuilder = function textLayerBuilder(options) {
var isSelected = isSelectedPage && i === selectedMatchIdx;
var highlightSuffix = (isSelected ? ' selected' : '');
if (isSelected && !this.isViewerInPresentationMode) {
scrollIntoView(textDivs[begin.divIdx], { top: -50 });
scrollIntoView(textDivs[begin.divIdx], { top: FIND_SCROLL_OFFSET_TOP,
left: FIND_SCROLL_OFFSET_LEFT });
}
// Match inside new div.

22
web/ui_utils.js

@ -100,7 +100,8 @@ function getOutputScale(ctx) { @@ -100,7 +100,8 @@ function getOutputScale(ctx) {
/**
* Scrolls specified element into view of its parent.
* 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) {
// Assuming offsetParent is available (it's not available when viewer is in
@ -108,21 +109,32 @@ function scrollIntoView(element, spot) { @@ -108,21 +109,32 @@ function scrollIntoView(element, spot) {
// producing the error. See also animationStartedClosure.
var parent = element.offsetParent;
var offsetY = element.offsetTop + element.clientTop;
var offsetX = element.offsetLeft + element.clientLeft;
if (!parent) {
console.error('offsetParent is not set -- cannot scroll');
return;
}
while (parent.clientHeight == parent.scrollHeight) {
while (parent.clientHeight === parent.scrollHeight) {
if (parent.dataset._scaleY) {
offsetY /= parent.dataset._scaleY;
offsetX /= parent.dataset._scaleX;
}
offsetY += parent.offsetTop;
offsetX += parent.offsetLeft;
parent = parent.offsetParent;
if (!parent)
if (!parent) {
return; // no need to scroll
}
}
if (spot) {
if (spot.top !== undefined) {
offsetY += spot.top;
}
if (spot.left !== undefined) {
offsetX += spot.left;
parent.scrollLeft = offsetX;
}
}
if (spot)
offsetY += spot.top;
parent.scrollTop = offsetY;
}

Loading…
Cancel
Save