Fixes for imposter element and range y position

Hides the imposter element once we've finished using it and checks the y position for the range against the point given
This commit is contained in:
Gareth Parker 2018-06-08 22:48:26 +01:00 committed by GitHub
parent f0e9716aa5
commit 0cc5566886
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -55,6 +55,8 @@ function docImposterCreate(element) {
document.body.appendChild(imposter); document.body.appendChild(imposter);
imposter.scrollTop = element.scrollTop; imposter.scrollTop = element.scrollTop;
imposter.scrollLeft = element.scrollLeft; imposter.scrollLeft = element.scrollLeft;
return imposter;
} }
function docImposterDestroy() { function docImposterDestroy() {
@ -65,11 +67,12 @@ function docImposterDestroy() {
function docRangeFromPoint(point) { function docRangeFromPoint(point) {
const element = document.elementFromPoint(point.x, point.y); const element = document.elementFromPoint(point.x, point.y);
let imposter = null;
if (element) { if (element) {
if (element.nodeName === 'IMG' || element.nodeName === 'BUTTON') { if (element.nodeName === 'IMG' || element.nodeName === 'BUTTON') {
return new TextSourceElement(element); return new TextSourceElement(element);
} else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') { } else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {
docImposterCreate(element); imposter = docImposterCreate(element);
} }
} }
@ -86,6 +89,14 @@ function docRangeFromPoint(point) {
} }
const range = document.caretRangeFromPoint(point.x, point.y); const range = document.caretRangeFromPoint(point.x, point.y);
if(imposter !== null) imposter.style.zIndex = -2147483646;
const rect = range.getClientRects()[0];
if (point.y > rect.bottom + 2) {
return;
}
if (range) { if (range) {
return new TextSourceRange(range); return new TextSourceRange(range);
} }