Path: blob/main/extensions/markdown-language-features/src/commands/showPreview.ts
3294 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import * as vscode from 'vscode';6import { Command } from '../commandManager';7import { DynamicPreviewSettings, MarkdownPreviewManager } from '../preview/previewManager';8import { TelemetryReporter } from '../telemetryReporter';91011interface ShowPreviewSettings {12readonly sideBySide?: boolean;13readonly locked?: boolean;14}1516async function showPreview(17webviewManager: MarkdownPreviewManager,18telemetryReporter: TelemetryReporter,19uri: vscode.Uri | undefined,20previewSettings: ShowPreviewSettings,21): Promise<any> {22let resource = uri;23if (!(resource instanceof vscode.Uri)) {24if (vscode.window.activeTextEditor) {25// we are relaxed and don't check for markdown files26resource = vscode.window.activeTextEditor.document.uri;27}28}2930if (!(resource instanceof vscode.Uri)) {31if (!vscode.window.activeTextEditor) {32// this is most likely toggling the preview33return vscode.commands.executeCommand('markdown.showSource');34}35// nothing found that could be shown or toggled36return;37}3839const resourceColumn = vscode.window.activeTextEditor?.viewColumn || vscode.ViewColumn.One;40webviewManager.openDynamicPreview(resource, {41resourceColumn: resourceColumn,42previewColumn: previewSettings.sideBySide ? vscode.ViewColumn.Beside : resourceColumn,43locked: !!previewSettings.locked44});4546telemetryReporter.sendTelemetryEvent('openPreview', {47where: previewSettings.sideBySide ? 'sideBySide' : 'inPlace',48how: (uri instanceof vscode.Uri) ? 'action' : 'pallete'49});50}5152export class ShowPreviewCommand implements Command {53public readonly id = 'markdown.showPreview';5455public constructor(56private readonly _webviewManager: MarkdownPreviewManager,57private readonly _telemetryReporter: TelemetryReporter58) { }5960public execute(mainUri?: vscode.Uri, allUris?: vscode.Uri[], previewSettings?: DynamicPreviewSettings) {61for (const uri of Array.isArray(allUris) ? allUris : [mainUri]) {62showPreview(this._webviewManager, this._telemetryReporter, uri, {63sideBySide: false,64locked: previewSettings?.locked65});66}67}68}6970export class ShowPreviewToSideCommand implements Command {71public readonly id = 'markdown.showPreviewToSide';7273public constructor(74private readonly _webviewManager: MarkdownPreviewManager,75private readonly _telemetryReporter: TelemetryReporter76) { }7778public execute(uri?: vscode.Uri, previewSettings?: DynamicPreviewSettings) {79showPreview(this._webviewManager, this._telemetryReporter, uri, {80sideBySide: true,81locked: previewSettings?.locked82});83}84}858687export class ShowLockedPreviewToSideCommand implements Command {88public readonly id = 'markdown.showLockedPreviewToSide';8990public constructor(91private readonly _webviewManager: MarkdownPreviewManager,92private readonly _telemetryReporter: TelemetryReporter93) { }9495public execute(uri?: vscode.Uri) {96showPreview(this._webviewManager, this._telemetryReporter, uri, {97sideBySide: true,98locked: true99});100}101}102103104