Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion addons/xterm-addon-web-links/src/WebLinkProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ export class LinkComputer {
break;
}

let endX = stringIndex + text.length + 1;
let endX = stringIndex + text.length;
let endY = startLineIndex + 1;

while (endX > terminal.cols) {
Expand Down
76 changes: 76 additions & 0 deletions src/browser/Linkifier2.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
/**
* Copyright (c) 2020 The xterm.js authors. All rights reserved.
* @license MIT
*/

import { assert } from 'chai';
import { IBufferService } from 'common/services/Services';
import { Linkifier2 } from 'browser/Linkifier2';
import { MockBufferService } from 'common/TestUtils.test';
import { ILink } from 'browser/Types';

class TestLinkifier2 extends Linkifier2 {
constructor(bufferService: IBufferService) {
super(bufferService);
}

public linkHover(element: HTMLElement, link: ILink, event: MouseEvent): void {
this._linkHover(element, link, event);
}

public linkLeave(element: HTMLElement, link: ILink, event: MouseEvent): void {
this._linkLeave(element, link, event);
}
}

describe('Linkifier2', () => {
let bufferService: IBufferService;
let linkifier: TestLinkifier2;

beforeEach(() => {
bufferService = new MockBufferService(100, 10);
linkifier = new TestLinkifier2(bufferService);
});

const link: ILink = {
text: 'foo',
range: {
start: {
x: 5,
y: 1
},
end: {
x: 7,
y: 1
}
},
activate: () => { }
};

it('onLinkHover event range is correct', done => {
linkifier.onLinkHover(e => {
assert.equal(link.range.start.x - 1, e.x1);
assert.equal(link.range.start.y - 1, e.y1);
assert.equal(link.range.end.x, e.x2);
assert.equal(link.range.end.y - 1, e.y2);

done();
});

linkifier.linkHover({ classList: { add: () => { } } } as any, link, {} as any);
});

it('onLinkLeave event range is correct', done => {
linkifier.onLinkLeave(e => {
assert.equal(link.range.start.x - 1, e.x1);
assert.equal(link.range.start.y - 1, e.y1);
assert.equal(link.range.end.x, e.x2);
assert.equal(link.range.end.y - 1, e.y2);

done();
});

linkifier.linkLeave({ classList: { add: () => { } } } as any, link, {} as any);
});

});
10 changes: 5 additions & 5 deletions src/browser/Linkifier2.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import { ILinkifier2, ILinkProvider, IBufferCellPosition, ILink, ILinkifierEvent } from './Types';
import { IDisposable } from 'common/Types';
import { IMouseService, IRenderService } from './services/Services';
import { IBufferService, ICoreService } from 'common/services/Services';
import { IBufferService } from 'common/services/Services';
import { EventEmitter, IEvent } from 'common/EventEmitter';

export class Linkifier2 implements ILinkifier2 {
Expand Down Expand Up @@ -180,23 +180,23 @@ export class Linkifier2 implements ILinkifier2 {
}
}

private _linkHover(element: HTMLElement, link: ILink, event: MouseEvent): void {
protected _linkHover(element: HTMLElement, link: ILink, event: MouseEvent): void {
const range = link.range;
const scrollOffset = this._bufferService.buffer.ydisp;

this._onLinkHover.fire(this._createLinkHoverEvent(range.start.x - 1, range.start.y - scrollOffset - 1, range.end.x - 1, range.end.y - scrollOffset - 1, undefined));
this._onLinkHover.fire(this._createLinkHoverEvent(range.start.x - 1, range.start.y - scrollOffset - 1, range.end.x, range.end.y - scrollOffset - 1, undefined));
element.classList.add('xterm-cursor-pointer');

if (link.hover) {
link.hover(event, link.text);
}
}

private _linkLeave(element: HTMLElement, link: ILink, event: MouseEvent): void {
protected _linkLeave(element: HTMLElement, link: ILink, event: MouseEvent): void {
const range = link.range;
const scrollOffset = this._bufferService.buffer.ydisp;

this._onLinkLeave.fire(this._createLinkHoverEvent(range.start.x - 1, range.start.y - scrollOffset - 1, range.end.x - 1, range.end.y - scrollOffset - 1, undefined));
this._onLinkLeave.fire(this._createLinkHoverEvent(range.start.x - 1, range.start.y - scrollOffset - 1, range.end.x, range.end.y - scrollOffset - 1, undefined));
element.classList.remove('xterm-cursor-pointer');

if (link.leave) {
Expand Down