'How to create webview in sidebar in vscode using javascript?

I am unable to create a review in the sidebar. All the codes that are available are in typescript and I don't have any experience regarding that.

Here is my main extension.js code

const vscode = require("vscode");
const SideBarProvider = require("./sidebarProvider.js");

/**
 * @param {vscode.ExtensionContext} context
 */

function activate(context) {
  const sidebarProvider = new SideBarProvider(context.extensionUri);
  context.subscriptions.push(
    vscode.window.registerWebviewViewProvider("sidebar-view", sidebarProvider)
  );
  context.subscriptions.push();
}

// this method is called when your extension is deactivated
function deactivate() {}

module.exports = {
  activate,
  deactivate,
};

This is my sidebarProvider.js

const vscode = require("vscode");

class SideBarProvider extends vscode.WebviewViewProvider {
  constructor(extensionUri) {
    super();
    this.extensionUri = extensionUri;
    this.view;
  }
  resolveWebviewView(webviewView) {
    this.webviewView = webviewView;
    webviewView.webview.options = {
      // Allow scripts in the webview
      enableScripts: true,
    };
    webviewView.webview.html = this._getHtmlForWebview(webviewView.webview);
    webviewView.webview.onDidReceiveMessage((data) => {
      switch (data.type) {
        case "onInfo": {
          if (!data.value) {
            return;
          }
          vscode.window.showInformationMessage(data.value);
          break;
        }
        case "onError": {
          if (!data.value) {
            return;
          }
          vscode.window.showErrorMessage(data.value);
          break;
        }
      }
    });
  }
  revive(panel) {
    this.view = panel;
  }
  _getHtmlForWebview(webview) {
    const styleResetUri = webview.asWebviewUri(
      vscode.Uri.joinPath(this._extensionUri, "media", "reset.css")
    );
    const styleVSCodeUri = webview.asWebviewUri(
      vscode.Uri.joinPath(this._extensionUri, "media", "vscode.css")
    );
    return `!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="UTF-8" />
          <meta http-equiv="X-UA-Compatible" content="IE=edge" />
          <meta name="viewport" content="width=device-width, initial-scale=1.0" />
            <link href="${styleResetUri}" rel="stylesheet">
            <link href="${styleVSCodeUri}" rel="stylesheet">
          <title>Document</title>
        </head>

        <body>
          <div>Hello world</div>
        </body>
      </html>`;
  }
}
module.exports = SideBarProvider;

And finally, in my package.json, I am registering my views

"contributes": {
    "viewsContainers": {
      "activitybar": [
        {
          "id": "testview-explorer",
          "title": "Tazim Rahbar",
          "icon": "./resources/testView.svg"
        }
      ]
    },
    "views": {
      "testview-explorer": [
        {
          "type": "webview",
          "id": "sidebar-view",
          "name": "Work",
          "icon": "./resources/testView.svg",
          "contextualTitle": "Work"
        }
      ]
    }
  },

I am able to understand every part but am unable to figure out how to write a provider for "registerwebViewProvider".



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source