Better aproach, check i a selection is being performed
This commit is contained in:
@@ -24,7 +24,9 @@ const start = '(?:^|' + negatedDomainCharacterSet + ')(';
|
|||||||
const end = ')($|' + negatedPathCharacterSet + ')';
|
const end = ')($|' + negatedPathCharacterSet + ')';
|
||||||
const strictUrlRegex = new RegExp(start + protocolClause + bodyClause + end);
|
const strictUrlRegex = new RegExp(start + protocolClause + bodyClause + end);
|
||||||
|
|
||||||
let handleLink: (event: MouseEvent, uri: string) => void;
|
function handleLink(event: MouseEvent, uri: string): void {
|
||||||
|
window.open(uri, '_blank');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize the web links addon, registering the link matcher.
|
* Initialize the web links addon, registering the link matcher.
|
||||||
@@ -34,18 +36,11 @@ let handleLink: (event: MouseEvent, uri: string) => void;
|
|||||||
*/
|
*/
|
||||||
export function webLinksInit(term: Terminal, handler: (event: MouseEvent, uri: string) => void = handleLink, options: ILinkMatcherOptions = {}): void {
|
export function webLinksInit(term: Terminal, handler: (event: MouseEvent, uri: string) => void = handleLink, options: ILinkMatcherOptions = {}): void {
|
||||||
options.matchIndex = 1;
|
options.matchIndex = 1;
|
||||||
|
|
||||||
term.registerLinkMatcher(strictUrlRegex, handler, options);
|
term.registerLinkMatcher(strictUrlRegex, handler, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function apply(terminalConstructor: typeof Terminal): void {
|
export function apply(terminalConstructor: typeof Terminal): void {
|
||||||
(<any>terminalConstructor.prototype).webLinksInit = function (handler?: (event: MouseEvent, uri: string) => void, options?: ILinkMatcherOptions): void {
|
(<any>terminalConstructor.prototype).webLinksInit = function (handler?: (event: MouseEvent, uri: string) => void, options?: ILinkMatcherOptions): void {
|
||||||
handleLink = (event, uri) => {
|
|
||||||
if (!this.hasSelection()) {
|
|
||||||
window.open(uri, '_blank');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
webLinksInit(this, handler, options);
|
webLinksInit(this, handler, options);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ export class MouseZoneManager extends Disposable implements IMouseZoneManager {
|
|||||||
private _tooltipTimeout: number = null;
|
private _tooltipTimeout: number = null;
|
||||||
private _currentZone: IMouseZone = null;
|
private _currentZone: IMouseZone = null;
|
||||||
private _lastHoverCoords: [number, number] = [null, null];
|
private _lastHoverCoords: [number, number] = [null, null];
|
||||||
|
private _initialSelectionLenght: number;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private _terminal: ITerminal
|
private _terminal: ITerminal
|
||||||
@@ -157,6 +158,10 @@ export class MouseZoneManager extends Disposable implements IMouseZoneManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private _onMouseDown(e: MouseEvent): void {
|
private _onMouseDown(e: MouseEvent): void {
|
||||||
|
// Store current terminal selection length, to check if we're performing
|
||||||
|
// a selection operation
|
||||||
|
this._initialSelectionLenght = this._terminal.getSelection().length;
|
||||||
|
|
||||||
// Ignore the event if there are no zones active
|
// Ignore the event if there are no zones active
|
||||||
if (!this._areZonesActive) {
|
if (!this._areZonesActive) {
|
||||||
return;
|
return;
|
||||||
@@ -186,9 +191,12 @@ export class MouseZoneManager extends Disposable implements IMouseZoneManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private _onClick(e: MouseEvent): void {
|
private _onClick(e: MouseEvent): void {
|
||||||
// Find the active zone and click it if found
|
// Find the active zone and click it if found and no selection was
|
||||||
|
// being performed
|
||||||
const zone = this._findZoneEventAt(e);
|
const zone = this._findZoneEventAt(e);
|
||||||
if (zone) {
|
const currentSelectionLength = this._terminal.getSelection().length;
|
||||||
|
|
||||||
|
if (zone && currentSelectionLength === this._initialSelectionLenght) {
|
||||||
zone.clickCallback(e);
|
zone.clickCallback(e);
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
e.stopImmediatePropagation();
|
e.stopImmediatePropagation();
|
||||||
|
|||||||
Reference in New Issue
Block a user