in src/webview.ts [55:111]
openTab(extensionUri: vscode.Uri, panelConfig: PanelConfig, context) {
const panelKey = getPanelKey(panelConfig);
const activeEditor = vscode.window.activeTextEditor;
const getViewColumn = () => {
if (activeEditor && vscode.window.visibleTextEditors.length > 1) {
return activeEditor.viewColumn;
} else {
return activeEditor ? vscode.ViewColumn.Two : vscode.ViewColumn.Active;
}
};
const column = getViewColumn();
let webview = AlicloudAPIWebview.webviewPanels[panelKey];
// If we already have a panel, show it.
if (webview) {
webview.reveal(column);
return;
}
// Otherwise, create a new panel.
AlicloudAPIWebview.webviewPanels[panelKey] = vscode.window.createWebviewPanel(
AlicloudAPIWebview.viewType, // WebView 面板的标识符
panelConfig.name, // WebView 面板的标题
panelConfig.column || column || vscode.ViewColumn.One, // WebView 在编辑器中的显示位置
{
// Enable javascript in the webview
enableScripts: true,
retainContextWhenHidden: true,
},
);
webview = AlicloudAPIWebview.webviewPanels[panelKey];
webview.onDidDispose(() => {
webview.dispose();
webview = null;
delete AlicloudAPIWebview.webviewPanels[panelKey];
});
webview.title = panelConfig.name;
const iconPath = panelConfig?.schemaType
? vscode.Uri.joinPath(extensionUri, webviewIconPath[panelConfig.schemaType])
: vscode.Uri.joinPath(extensionUri, webviewIconPath["others"]);
webview.iconPath = iconPath;
panelConfig.displayLanguage = getCurrentLang();
webview.webview.html = htmlTemplate(
{
getUri: (assetUri) => webview.webview.asWebviewUri(vscode.Uri.joinPath(extensionUri, assetUri)),
cspSource: webview.webview.cspSource,
},
panelConfig,
);
webview.webview.onDidReceiveMessage((message) => {
if (message.type && message.requestId) {
alicloudAPIMessageService.exectService(message).then((result) => {
webview.webview.postMessage(result);
});
}
});
}