diff --git a/extension/bwcontest/src/SidebarProvider.ts b/extension/bwcontest/src/SidebarProvider.ts index 2cc9422..4631dfb 100644 --- a/extension/bwcontest/src/SidebarProvider.ts +++ b/extension/bwcontest/src/SidebarProvider.ts @@ -1,6 +1,7 @@ import * as vscode from 'vscode'; import { getNonce } from './getNonce'; import { cloneAndOpenRepo } from './extension'; +import { BWPanel } from './problemPanel'; export class SidebarProvider implements vscode.WebviewViewProvider { _view?: vscode.WebviewView; @@ -24,6 +25,12 @@ export class SidebarProvider implements vscode.WebviewViewProvider { webviewView.webview.onDidReceiveMessage(async (data) => { switch (data.type) { + case 'onTestAndSubmit': { + if (this._context) { + BWPanel.createOrShow(this._context?.extensionUri, this._context); + } + break; + } case 'onStartup': { const token: string | undefined = this._context?.globalState.get('token'); if (token) { diff --git a/extension/bwcontest/src/extension.ts b/extension/bwcontest/src/extension.ts index 2e546f2..787570b 100644 --- a/extension/bwcontest/src/extension.ts +++ b/extension/bwcontest/src/extension.ts @@ -2,6 +2,7 @@ import * as vscode from 'vscode'; import { SidebarProvider } from './SidebarProvider'; import * as child_process from 'child_process'; import * as fs from 'fs-extra'; +import { BWPanel } from './problemPanel'; interface BWContestSettings { repoBaseUrl: string; @@ -42,7 +43,9 @@ export async function cloneAndOpenRepo(contestId: number, teamId: number) { fs.mkdirSync(`${currentSettings.repoClonePath}/BWContest/${contestId.toString()}`); } - const clonedRepoPath = `${currentSettings.repoClonePath}/BWContest/${contestId.toString()}/${repoName}`; + const clonedRepoPath = `${ + currentSettings.repoClonePath + }/BWContest/${contestId.toString()}/${repoName}`; if (fs.existsSync(clonedRepoPath)) { const confirm = await vscode.window.showWarningMessage( @@ -88,7 +91,11 @@ export function activate(context: vscode.ExtensionContext) { vscode.window.registerWebviewViewProvider('bwcontest-sidebar', sidebarProvider) ); - context.subscriptions.push(vscode.commands.registerCommand('bwcontest.helloWorld', () => {})); + context.subscriptions.push( + vscode.commands.registerCommand('bwcontest.helloWorld', () => { + BWPanel.createOrShow(context.extensionUri, context); + }) + ); context.subscriptions.push( vscode.commands.registerCommand('bwcontest.askQuestion', async () => { diff --git a/extension/bwcontest/src/BWPanel.ts b/extension/bwcontest/src/problemPanel.ts similarity index 85% rename from extension/bwcontest/src/BWPanel.ts rename to extension/bwcontest/src/problemPanel.ts index 5dcf8ee..8c2d13b 100644 --- a/extension/bwcontest/src/BWPanel.ts +++ b/extension/bwcontest/src/problemPanel.ts @@ -12,8 +12,10 @@ export class BWPanel { private readonly _panel: vscode.WebviewPanel; private readonly _extensionUri: vscode.Uri; private _disposables: vscode.Disposable[] = []; + private static _context?: vscode.ExtensionContext; - public static createOrShow(extensionUri: vscode.Uri) { + public static createOrShow(extensionUri: vscode.Uri, context: vscode.ExtensionContext) { + this._context = context; const column = vscode.window.activeTextEditor ? vscode.window.activeTextEditor.viewColumn : undefined; @@ -99,6 +101,17 @@ export class BWPanel { this._panel.webview.html = this._getHtmlForWebview(webview); webview.onDidReceiveMessage(async (data) => { switch (data.type) { + case 'onStartup': { + const token: string | undefined = BWPanel._context?.globalState.get('token'); + + if (token) { + this._panel.webview.postMessage({ + type: 'onSession', + value: token + }); + } + break; + } case 'onInfo': { if (!data.value) { return; @@ -125,7 +138,7 @@ export class BWPanel { private _getHtmlForWebview(webview: vscode.Webview) { // // And the uri we use to load this script in the webview const scriptUri = webview.asWebviewUri( - vscode.Uri.joinPath(this._extensionUri, 'out/compiled', 'HelloWorld.js') + vscode.Uri.joinPath(this._extensionUri, 'out/compiled', 'problemPanel.js') ); // Uri to load styles into webview @@ -135,9 +148,9 @@ export class BWPanel { const stylesMainUri = webview.asWebviewUri( vscode.Uri.joinPath(this._extensionUri, 'media', 'vscode.css') ); - // const cssUri = webview.asWebviewUri( - // vscode.Uri.joinPath(this._extensionUri, 'out', 'compiled/swiper.css') - // ); + const cssUri = webview.asWebviewUri( + vscode.Uri.joinPath(this._extensionUri, 'out/compiled', 'problemPanel.css') + ); // // Use a nonce to only allow specific scripts to be run const nonce = getNonce(); @@ -154,6 +167,10 @@ export class BWPanel { + + diff --git a/extension/bwcontest/webviews/components/HelloWorld.svelte b/extension/bwcontest/webviews/components/HelloWorld.svelte deleted file mode 100644 index 1ff133f..0000000 --- a/extension/bwcontest/webviews/components/HelloWorld.svelte +++ /dev/null @@ -1,4 +0,0 @@ - - -

Test!

\ No newline at end of file diff --git a/extension/bwcontest/webviews/components/ProblemPanel.svelte b/extension/bwcontest/webviews/components/ProblemPanel.svelte new file mode 100644 index 0000000..5cf45eb --- /dev/null +++ b/extension/bwcontest/webviews/components/ProblemPanel.svelte @@ -0,0 +1,110 @@ + + +

Test & Submit Problems

+ +{#if problemData} +
+ {#each problemData as problem} + + {/each} +
+{/if} + +{#if activeProblem} +

{activeProblem.name}

+
+
+

Sample Input (You can edit this!)

+ + +
+
+

Output

+ +
+
+{/if} + + \ No newline at end of file diff --git a/extension/bwcontest/webviews/components/Sidebar.svelte b/extension/bwcontest/webviews/components/Sidebar.svelte index 6b10df5..4b9e153 100644 --- a/extension/bwcontest/webviews/components/Sidebar.svelte +++ b/extension/bwcontest/webviews/components/Sidebar.svelte @@ -86,6 +86,10 @@ } }) + function onTestAndSubmit() { + postMessage({type: 'onTestAndSubmit'}); + } + onMount(() => { postMessage({type: "onStartup"}); }) @@ -107,5 +111,6 @@

TeamID: {teamData.teamId}

ContestID: {teamData.contestId}

+ {/if} {/if} \ No newline at end of file diff --git a/extension/bwcontest/webviews/pages/HelloWorld.ts b/extension/bwcontest/webviews/pages/problemPanel.ts similarity index 57% rename from extension/bwcontest/webviews/pages/HelloWorld.ts rename to extension/bwcontest/webviews/pages/problemPanel.ts index 15a9682..4e57701 100644 --- a/extension/bwcontest/webviews/pages/HelloWorld.ts +++ b/extension/bwcontest/webviews/pages/problemPanel.ts @@ -1,4 +1,4 @@ -import App from '../components/HelloWorld.svelte'; +import App from '../components/ProblemPanel.svelte'; const app = new App({ target: document.body