import * as vscode from 'vscode'; import { isArchifyFile } from '../sources/detect'; import { DIAGRAM_EDITOR_VIEW_TYPE } from '../views/diagramView'; import { CommandContext, isHtmlUri, openHtmlViewer, sourceUri } from './context'; export function viewCommands(ctx: CommandContext): vscode.Disposable[] { return [ vscode.commands.registerCommand('archify.showPreview', (arg?: unknown) => { const uri = sourceUri(ctx, arg); if (!uri) return; if (isHtmlUri(uri)) return openHtmlViewer(uri); if (isArchifyFile(uri.path)) return vscode.commands.executeCommand('vscode.openWith', uri, DIAGRAM_EDITOR_VIEW_TYPE); ctx.views.show(uri, vscode.window.activeTextEditor?.viewColumn ?? vscode.ViewColumn.Active); }), vscode.commands.registerCommand('archify.showPreviewToSide', (arg?: unknown) => { const uri = sourceUri(ctx, arg); if (!uri) return; if (isHtmlUri(uri)) return openHtmlViewer(uri, vscode.ViewColumn.Beside); if (isArchifyFile(uri.path)) { return vscode.commands.executeCommand('vscode.openWith', uri, DIAGRAM_EDITOR_VIEW_TYPE, { viewColumn: vscode.ViewColumn.Beside, preserveFocus: true, }); } ctx.views.show(uri, vscode.ViewColumn.Beside, true); }), vscode.commands.registerCommand('archify.openHtmlViewer', (arg?: unknown) => { const uri = sourceUri(ctx, arg); if (uri) return openHtmlViewer(uri); }), vscode.commands.registerCommand('archify.refreshPreview', () => ctx.views.activePreview?.update(true)), vscode.commands.registerCommand('archify.showSource', async () => { const preview = ctx.views.activePreview; if (preview?.isEditor) { // The diagram is the editor; open the YAML text beside it. await vscode.commands.executeCommand('vscode.openWith', preview.uri, 'default', vscode.ViewColumn.Beside); return; } if (preview) { const column = preview.panel.viewColumn === vscode.ViewColumn.One ? vscode.ViewColumn.Two : vscode.ViewColumn.One; await vscode.window.showTextDocument(preview.uri, { viewColumn: column }); return; } const html = ctx.htmlViewer.activeUri; if (html) await vscode.commands.executeCommand('vscode.openWith', html, 'default'); }), ]; }