Allow relative file links inside of markdown notebook cells

Fixes #126097
This commit is contained in:
Matt Bierner 2021-11-15 18:43:28 -08:00
parent 4415c0f105
commit 8a7324fd2e
No known key found for this signature in database
GPG key ID: 099C331567E11888
3 changed files with 23 additions and 1 deletions

View file

@ -27,7 +27,7 @@ import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
import { IFileDialogService } from 'vs/platform/dialogs/common/dialogs';
import { IFileService } from 'vs/platform/files/common/files';
import { IOpenerService, matchesScheme } from 'vs/platform/opener/common/opener';
import { IOpenerService, matchesScheme, matchesSomeScheme } from 'vs/platform/opener/common/opener';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';
import { IWorkspaceTrustManagementService } from 'vs/platform/workspace/common/workspaceTrust';
@ -615,6 +615,16 @@ var requirejs = (function() {
this._onDidClickDataLink(data);
break;
}
case 'clicked-link':
{
if (matchesSomeScheme(data.href, Schemas.http, Schemas.https, Schemas.mailto)) {
this.openerService.open(data.href, { fromUserGesture: true });
} else if (!/^[\w\-]+:/.test(data.href)) {
const path = URI.joinPath(dirname(this.documentUri), data.href);
this.openerService.open(path, { fromUserGesture: true });
}
break;
}
case 'customKernelMessage':
{
this._onMessage.fire({ message: data.message });

View file

@ -83,6 +83,11 @@ export interface IClickMarkupCellMessage extends BaseToWebviewMessage {
readonly shiftKey: boolean;
}
export interface IClickedLinkMessage extends BaseToWebviewMessage {
readonly type: 'clicked-link';
readonly href: string;
}
export interface IContextMenuMarkupCellMessage extends BaseToWebviewMessage {
readonly type: 'contextMenuMarkupCell';
readonly cellId: string;
@ -373,6 +378,7 @@ export type FromWebviewMessage = WebviewInitialized |
ICustomRendererMessage |
IClickedDataUrlMessage |
IClickMarkupCellMessage |
IClickedLinkMessage |
IContextMenuMarkupCellMessage |
IMouseEnterMarkupCellMessage |
IMouseLeaveMarkupCellMessage |

View file

@ -96,9 +96,15 @@ async function webviewPreloads(ctx: PreloadContext) {
postNotebookMessage<webviewMessages.IScrollToRevealMessage>('scroll-to-reveal', { scrollTop });
return;
}
} else {
const href = node.getAttribute('href');
if (href) {
postNotebookMessage<webviewMessages.IClickedLinkMessage>('clicked-link', { href });
}
}
event.preventDefault();
event.stopPropagation();
return;
}
}