openTab()

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);
        });
      }
    });
  }