diff --git a/extensions/void/src/extension/CtrlKWebviewProvider.ts b/extensions/void/src/extension/CtrlKWebviewProvider.ts new file mode 100644 index 00000000..4dbd8cff --- /dev/null +++ b/extensions/void/src/extension/CtrlKWebviewProvider.ts @@ -0,0 +1,77 @@ +// renders the code from `src/sidebar` + +import * as vscode from 'vscode'; + + +export class SidebarWebviewProvider implements vscode.WebviewViewProvider { + public static readonly viewId = 'void.viewnumberone'; + + public webview: Promise // used to send messages to the webview, resolved by _res in resolveWebviewView + private _res: (c: vscode.Webview) => void // used to resolve the webview + + private readonly _extensionUri: vscode.Uri + + // private _webviewView?: vscode.WebviewView; + private _webviewDeps: string[] = []; + + constructor(context: vscode.ExtensionContext) { + // const extensionPath = context.extensionPath // the directory where the extension is installed, might be useful later... was included in webviewProvider code + this._extensionUri = context.extensionUri + + let temp_res: typeof this._res | undefined = undefined + this.webview = new Promise((res, rej) => { temp_res = res }) + if (!temp_res) throw new Error("Void sidebar provider: resolver was undefined") + this._res = temp_res + } + + // called by us + updateWebviewHTML(webview: vscode.Webview) { + this._webviewDeps = [] + + const scriptUri = webview.asWebviewUri(vscode.Uri.joinPath(this._extensionUri, 'dist/sidebar/index.js')); + const stylesUri = webview.asWebviewUri(vscode.Uri.joinPath(this._extensionUri, 'dist/sidebar/styles.css')); + const rootUri = webview.asWebviewUri(vscode.Uri.joinPath(this._extensionUri)); + const nonce = generateNonce(); + + const webviewHTML = ` + + + + + Custom View + + + + + +
+
+ + + `; + + webview.html = webviewHTML; + } + + + // called internally by vscode + resolveWebviewView( + webviewView: vscode.WebviewView, + context: vscode.WebviewViewResolveContext, + token: vscode.CancellationToken, + ) { + + const webview = webviewView.webview; + + webview.options = { + enableScripts: true, + localResourceRoots: [this._extensionUri] + }; + + this.updateWebviewHTML(webview); + + // resolve webview and _webviewView + this._res(webview); + // this._webviewView = webviewView; + } +} diff --git a/extensions/void/src/DisplayChangesProvider.ts b/extensions/void/src/extension/DisplayChangesProvider.ts similarity index 99% rename from extensions/void/src/DisplayChangesProvider.ts rename to extensions/void/src/extension/DisplayChangesProvider.ts index 5130a16b..e65593ef 100644 --- a/extensions/void/src/DisplayChangesProvider.ts +++ b/extensions/void/src/extension/DisplayChangesProvider.ts @@ -1,6 +1,6 @@ import * as vscode from 'vscode'; import { findDiffs } from './findDiffs'; -import { Diff, BaseDiffArea, BaseDiff, DiffArea } from './common/shared_types'; +import { Diff, BaseDiffArea, BaseDiff, DiffArea } from '../common/shared_types'; diff --git a/extensions/void/src/SidebarWebviewProvider.ts b/extensions/void/src/extension/SidebarWebviewProvider.ts similarity index 100% rename from extensions/void/src/SidebarWebviewProvider.ts rename to extensions/void/src/extension/SidebarWebviewProvider.ts diff --git a/extensions/void/src/extension.ts b/extensions/void/src/extension/extension.ts similarity index 96% rename from extensions/void/src/extension.ts rename to extensions/void/src/extension/extension.ts index bebc3bf0..549fb891 100644 --- a/extensions/void/src/extension.ts +++ b/extensions/void/src/extension/extension.ts @@ -1,6 +1,6 @@ import * as vscode from 'vscode'; import { DisplayChangesProvider } from './DisplayChangesProvider'; -import { BaseDiffArea, ChatThreads, MessageFromSidebar, MessageToSidebar } from './common/shared_types'; +import { BaseDiffArea, ChatThreads, MessageFromSidebar, MessageToSidebar } from '../common/shared_types'; import { SidebarWebviewProvider } from './SidebarWebviewProvider'; import { v4 as uuidv4 } from 'uuid' @@ -46,15 +46,6 @@ export function activate(context: vscode.ExtensionContext) { const editor = vscode.window.activeTextEditor if (!editor) return - - // const inset = vscode.window.createWebviewTextEditorInset(editor, 10, 10, {}) - // inset.webview.html = ` - // - // Hello World! - // - // `; - - // show the sidebar vscode.commands.executeCommand('workbench.view.extension.voidViewContainer'); // vscode.commands.executeCommand('vscode.moveViewToPanel', CustomViewProvider.viewId); // move to aux bar diff --git a/extensions/void/src/findDiffs.ts b/extensions/void/src/extension/findDiffs.ts similarity index 99% rename from extensions/void/src/findDiffs.ts rename to extensions/void/src/extension/findDiffs.ts index e95b533a..8777d078 100644 --- a/extensions/void/src/findDiffs.ts +++ b/extensions/void/src/extension/findDiffs.ts @@ -1,7 +1,7 @@ import * as vscode from 'vscode'; // import { diffLines, Change } from 'diff'; -import { BaseDiff } from './common/shared_types'; +import { BaseDiff } from '../common/shared_types'; import { diff_match_patch } from 'diff-match-patch'; diff --git a/extensions/void/src/extension/webviewHTMLTemplate.ts b/extensions/void/src/extension/webviewHTMLTemplate.ts new file mode 100644 index 00000000..56e592db --- /dev/null +++ b/extensions/void/src/extension/webviewHTMLTemplate.ts @@ -0,0 +1,10 @@ + + +function generateNonce() { + let text = ""; + const possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + for (let i = 0; i < 32; i++) { + text += possible.charAt(Math.floor(Math.random() * possible.length)); + } + return text; +}