|
@@ -1506,12 +1506,17 @@ var TextLayerBuilder = (function TextLayerBuilderClosure() {
|
|
|
this.viewport = options.viewport;
|
|
|
this.textDivs = [];
|
|
|
this.findController = options.findController || null;
|
|
|
+ this._bindMouse();
|
|
|
}
|
|
|
|
|
|
TextLayerBuilder.prototype = {
|
|
|
_finishRendering: function TextLayerBuilder_finishRendering() {
|
|
|
this.renderingDone = true;
|
|
|
|
|
|
+ var endOfContent = document.createElement('div');
|
|
|
+ endOfContent.className = 'endOfContent';
|
|
|
+ this.textLayerDiv.appendChild(endOfContent);
|
|
|
+
|
|
|
var event = document.createEvent('CustomEvent');
|
|
|
event.initCustomEvent('textlayerrendered', true, true, {
|
|
|
pageNumber: this.pageNumber
|
|
@@ -1847,7 +1852,41 @@ var TextLayerBuilder = (function TextLayerBuilderClosure() {
|
|
|
this.matches = this.convertMatches(this.findController === null ?
|
|
|
[] : (this.findController.pageMatches[this.pageIdx] || []));
|
|
|
this.renderMatches(this.matches);
|
|
|
- }
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Fixes text selection: adds additional div where mouse was clicked.
|
|
|
+ * This reduces flickering of the content if mouse slowly dragged down/up.
|
|
|
+ * @private
|
|
|
+ */
|
|
|
+ _bindMouse: function TextLayerBuilder_bindMouse() {
|
|
|
+ var div = this.textLayerDiv;
|
|
|
+ div.addEventListener('mousedown', function (e) {
|
|
|
+ var end = div.querySelector('.endOfContent');
|
|
|
+ if (!end) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // On non-Firefox browsers, the selection will feel better if the height
|
|
|
+ // of the endOfContent div will be adjusted to start at mouse click
|
|
|
+ // location -- this will avoid flickering when selections moves up.
|
|
|
+ // However it does not work when selection started on empty space.
|
|
|
+ var adjustTop = e.target !== div;
|
|
|
+ if (adjustTop) {
|
|
|
+ var divBounds = div.getBoundingClientRect();
|
|
|
+ var r = Math.max(0, (e.pageY - divBounds.top) / divBounds.height);
|
|
|
+ end.style.top = (r * 100).toFixed(2) + '%';
|
|
|
+ }
|
|
|
+ end.classList.add('active');
|
|
|
+ });
|
|
|
+ div.addEventListener('mouseup', function (e) {
|
|
|
+ var end = div.querySelector('.endOfContent');
|
|
|
+ if (!end) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ end.style.top = '';
|
|
|
+ end.classList.remove('active');
|
|
|
+ });
|
|
|
+ },
|
|
|
};
|
|
|
return TextLayerBuilder;
|
|
|
})();
|