Better aproach, check i a selection is being performed

This commit is contained in:
Bruno Ribeito
2019-03-11 20:54:17 +00:00
parent c16e3e54e8
commit 62cfa642cb
2 changed files with 13 additions and 10 deletions
+3 -8
View File
@@ -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);
}; };
} }
+10 -2
View File
@@ -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();