Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/markdown-language-features/src/commands/showPreview.ts
3294 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import * as vscode from 'vscode';
7
import { Command } from '../commandManager';
8
import { DynamicPreviewSettings, MarkdownPreviewManager } from '../preview/previewManager';
9
import { TelemetryReporter } from '../telemetryReporter';
10
11
12
interface ShowPreviewSettings {
13
readonly sideBySide?: boolean;
14
readonly locked?: boolean;
15
}
16
17
async function showPreview(
18
webviewManager: MarkdownPreviewManager,
19
telemetryReporter: TelemetryReporter,
20
uri: vscode.Uri | undefined,
21
previewSettings: ShowPreviewSettings,
22
): Promise<any> {
23
let resource = uri;
24
if (!(resource instanceof vscode.Uri)) {
25
if (vscode.window.activeTextEditor) {
26
// we are relaxed and don't check for markdown files
27
resource = vscode.window.activeTextEditor.document.uri;
28
}
29
}
30
31
if (!(resource instanceof vscode.Uri)) {
32
if (!vscode.window.activeTextEditor) {
33
// this is most likely toggling the preview
34
return vscode.commands.executeCommand('markdown.showSource');
35
}
36
// nothing found that could be shown or toggled
37
return;
38
}
39
40
const resourceColumn = vscode.window.activeTextEditor?.viewColumn || vscode.ViewColumn.One;
41
webviewManager.openDynamicPreview(resource, {
42
resourceColumn: resourceColumn,
43
previewColumn: previewSettings.sideBySide ? vscode.ViewColumn.Beside : resourceColumn,
44
locked: !!previewSettings.locked
45
});
46
47
telemetryReporter.sendTelemetryEvent('openPreview', {
48
where: previewSettings.sideBySide ? 'sideBySide' : 'inPlace',
49
how: (uri instanceof vscode.Uri) ? 'action' : 'pallete'
50
});
51
}
52
53
export class ShowPreviewCommand implements Command {
54
public readonly id = 'markdown.showPreview';
55
56
public constructor(
57
private readonly _webviewManager: MarkdownPreviewManager,
58
private readonly _telemetryReporter: TelemetryReporter
59
) { }
60
61
public execute(mainUri?: vscode.Uri, allUris?: vscode.Uri[], previewSettings?: DynamicPreviewSettings) {
62
for (const uri of Array.isArray(allUris) ? allUris : [mainUri]) {
63
showPreview(this._webviewManager, this._telemetryReporter, uri, {
64
sideBySide: false,
65
locked: previewSettings?.locked
66
});
67
}
68
}
69
}
70
71
export class ShowPreviewToSideCommand implements Command {
72
public readonly id = 'markdown.showPreviewToSide';
73
74
public constructor(
75
private readonly _webviewManager: MarkdownPreviewManager,
76
private readonly _telemetryReporter: TelemetryReporter
77
) { }
78
79
public execute(uri?: vscode.Uri, previewSettings?: DynamicPreviewSettings) {
80
showPreview(this._webviewManager, this._telemetryReporter, uri, {
81
sideBySide: true,
82
locked: previewSettings?.locked
83
});
84
}
85
}
86
87
88
export class ShowLockedPreviewToSideCommand implements Command {
89
public readonly id = 'markdown.showLockedPreviewToSide';
90
91
public constructor(
92
private readonly _webviewManager: MarkdownPreviewManager,
93
private readonly _telemetryReporter: TelemetryReporter
94
) { }
95
96
public execute(uri?: vscode.Uri) {
97
showPreview(this._webviewManager, this._telemetryReporter, uri, {
98
sideBySide: true,
99
locked: true
100
});
101
}
102
}
103
104