in karavan-vscode/src/helpView.ts [46:95]
openKaravanWebView(page: string) {
if (!KARAVAN_PANELS.has(page)) {
// Karavan webview
const panel = vscode.window.createWebviewPanel(
"karavan",
page.toUpperCase(),
vscode.ViewColumn.One,
{
enableScripts: true,
retainContextWhenHidden: true,
localResourceRoots: [
vscode.Uri.joinPath(this.context.extensionUri, "dist"),
],
}
);
panel.webview.html = getWebviewContent(this.context, panel.webview);
panel.iconPath = vscode.Uri.joinPath(
this.context.extensionUri,
"icons/karavan.svg"
);
// Handle messages from the webview
panel.webview.onDidReceiveMessage(
message => {
switch (message.command) {
case 'getData':
this.sendData(panel, page);
break;
}
},
undefined,
this.context.subscriptions
);
// Handle close event
panel.onDidDispose(() => {
KARAVAN_PANELS.delete(page);
}, null, this.context.subscriptions);
// Handle reopen
panel.onDidChangeViewState((e: vscode.WebviewPanelOnDidChangeViewStateEvent) => {
if (e.webviewPanel.active) {
e.webviewPanel.webview.postMessage({ command: 'reread' })
}
});
KARAVAN_PANELS.set(page, panel);
} else {
KARAVAN_PANELS.get(page)?.reveal(undefined, true);
}
}