in karavan-vscode/src/designerView.ts [106:173]
openKaravanWebView(filename: string, relativePath: string, fullPath: string, yaml?: string, tab?: string) {
if (!KARAVAN_PANELS.has(relativePath)) {
// Karavan webview
const panel = window.createWebviewPanel(
"karavan",
filename,
ViewColumn.One,
{
enableScripts: true,
retainContextWhenHidden: true,
localResourceRoots: [
Uri.joinPath(this.context.extensionUri, "dist"),
],
}
);
panel.webview.html = getWebviewContent(this.context, panel.webview);
panel.iconPath = Uri.joinPath(
this.context.extensionUri,
"icons/karavan.svg"
);
// Handle messages from the webview
panel.webview.onDidReceiveMessage(
message => {
switch (message.command) {
case 'save':
utils.save(message.relativePath, message.code);
break;
case 'saveCode':
utils.saveCode(message.name, message.yamlFullPath, message.yamFileName, message.code);
break;
case 'savePropertyPlaceholder':
utils.savePropertyPlaceholder(message.key, message.value);
break;
case 'getData':
this.sendData(panel, filename, relativePath, fullPath, message.reread === true, yaml, tab);
break;
case 'internalConsumerClick':
this.internalConsumerClick(panel, fullPath, message.uri, message.name, message.routeId);
break;
}
},
undefined,
this.context.subscriptions
);
// Handle close event
panel.onDidDispose(() => {
KARAVAN_PANELS.delete(relativePath);
commands.executeCommand("setContext", KARAVAN_LOADED, false);
}, null, this.context.subscriptions);
// Handle reopen
panel.onDidChangeViewState((e: WebviewPanelOnDidChangeViewStateEvent) => {
if (e.webviewPanel.active) {
e.webviewPanel.webview.postMessage({ command: 'activate', tab: tab });
} else {
e.webviewPanel.webview.postMessage({ command: 'deactivate' });
}
});
KARAVAN_PANELS.set(relativePath, panel);
commands.executeCommand("setContext", KARAVAN_LOADED, true);
} else {
const panel = KARAVAN_PANELS.get(relativePath);
panel?.reveal(undefined, true);
panel?.webview.postMessage({ command: 'activate', tab: tab });
}
}