From f18a6fe1eb9424557d7d1164796ad08ed5dcc476 Mon Sep 17 00:00:00 2001 From: Jon Bockhorst Date: Wed, 6 Nov 2019 22:52:09 -0600 Subject: [PATCH] Fixed bug in link detection for wrapped links --- src/browser/Linkifier2.ts | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/browser/Linkifier2.ts b/src/browser/Linkifier2.ts index 0ae7c8254..6f2d84c94 100644 --- a/src/browser/Linkifier2.ts +++ b/src/browser/Linkifier2.ts @@ -8,7 +8,6 @@ import { IDisposable } from 'common/Types'; import { IMouseService } from './services/Services'; import { IBufferService, ICoreService } from 'common/services/Services'; import { EventEmitter, IEvent } from 'common/EventEmitter'; -import { LinkRenderLayer } from './renderer/LinkRenderLayer'; export class Linkifier2 implements ILinkifier2 { private _element: HTMLElement | undefined; @@ -106,7 +105,7 @@ export class Linkifier2 implements ILinkifier2 { return; } - this._linkCache.forEach((cachedLink, i) => { + this._linkCache.forEach(cachedLink => { if (this._linkAtPosition(cachedLink.link, position)) { cachedLink.link.handle(event, cachedLink.link.url); } @@ -117,13 +116,16 @@ export class Linkifier2 implements ILinkifier2 { if (this._lastMouseEvent && this._mouseOverLink) { this._hideAllTooltips(); } + + this._linkCache = []; } private _onData(e: string): void { if (this._lastMouseEvent && this._mouseOverLink) { - const index = this._hideAllTooltips(); - this._linkCache.splice(index, 1); + this._hideAllTooltips(); } + + this._linkCache = []; } private _handleNewLink(link: ILink | undefined): void { @@ -185,20 +187,19 @@ export class Linkifier2 implements ILinkifier2 { } } - private _hideAllTooltips(): number { + private _hideAllTooltips(): void { if (!this._element) { - return -1; + return; } // Hide all the tooltips for (let i = 0; i < this._linkCache.length; i++) { if (this._linkCache[i].mouseOver) { this._hideTooltip(this._element, this._linkCache[i].link, new MouseEvent('invalid event')); - return i; } } - return -1; + return; } /** @@ -215,7 +216,8 @@ export class Linkifier2 implements ILinkifier2 { // If not, then handle each case seperately, depending on which way it wraps return ((sameLine && link.range.start.x <= position.x && link.range.end.x >= position.x) || (wrappedFromLeft && link.range.end.x >= position.x) || - (wrappedToRight && link.range.start.x <= position.x)) && + (wrappedToRight && link.range.start.x <= position.x) || + (wrappedFromLeft && wrappedToRight)) && link.range.start.y <= position.y && link.range.end.y >= position.y; }