From e35d85f95e85a355fe6c68aa90062f5085c35cb4 Mon Sep 17 00:00:00 2001 From: Shirshajit Sen Gupta Date: Fri, 27 Jun 2025 01:43:15 +0800 Subject: [PATCH 1/3] Feat: add rocket button --- package.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 6a4eb90..0a18e1d 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,8 @@ }, { "command": "source-academy.show-panel", - "title": "Source Academy: Show the Source Academy panel" + "title": "Source Academy: Show the Source Academy panel", + "icon": "$(rocket)" }, { "command": "source-academy.eval-editor", @@ -74,6 +75,15 @@ "key": "shift+enter" } ], + "menus": { + "view/title": [ + { + "command": "source-academy.show-panel", + "when": "view == assessments", + "group": "navigation" + } + ] + }, "views": { "source-academy": [ { From ce6cfe64020d86a7e316ce2ce29cf491f2fa6afa Mon Sep 17 00:00:00 2001 From: Shirshajit Sen Gupta Date: Fri, 27 Jun 2025 11:40:39 +0800 Subject: [PATCH 2/3] Add playground item --- src/treeview/index.ts | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/treeview/index.ts b/src/treeview/index.ts index 5e73266..1e86989 100644 --- a/src/treeview/index.ts +++ b/src/treeview/index.ts @@ -33,6 +33,9 @@ export class AssessmentsSidebarProvider } getChildren(element?: BaseTreeItem): Thenable { + // Synthetic root item that launches the Source Academy panel. + const launchItem = new PlaygroundItem(); + // @ts-ignore const assessmentOverviews: VscAssessmentOverview[] = this.context.globalState.get("assessmentOverviews"); @@ -44,14 +47,18 @@ export class AssessmentsSidebarProvider const assessmentTypes = [ ...new Set(assessmentOverviews.map((ao) => ao.type)), ]; - return Promise.resolve( - assessmentTypes.map((at) => new AssessmentFolder(at)), - ); + const folders = assessmentTypes.map((at) => new AssessmentFolder(at)); + + return Promise.resolve([launchItem, ...folders]); } if (element && element.type === "AssessmentFolder") { const elem = element as AssessmentFolder; + if (!assessmentOverviews) { + return Promise.resolve([]); + } + return Promise.resolve( assessmentOverviews .filter((ao) => ao.type == elem.assessmentType) @@ -84,6 +91,21 @@ class BaseTreeItem extends vscode.TreeItem { }; } +/** + * Synthetic tree item that always appears at the top-level of the view. + */ +class PlaygroundItem extends BaseTreeItem { + constructor() { + super("Playground", vscode.TreeItemCollapsibleState.None); + this.type = "LaunchItem"; + this.command = { + title: "Playground", + command: "source-academy.navigate", + arguments: ["/playground"], + }; + } +} + class AssessmentFolder extends BaseTreeItem { constructor(public readonly assessmentType: string) { super(assessmentType, vscode.TreeItemCollapsibleState.Collapsed); From c56dbc67d55fbe27361afebf5ab42c5bf39b1dbb Mon Sep 17 00:00:00 2001 From: Shirshajit Sen Gupta Date: Fri, 27 Jun 2025 14:37:34 +0800 Subject: [PATCH 3/3] Rename source title --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0a18e1d..a69180c 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "source-academy": [ { "id": "assessments", - "name": "Assessments", + "name": "", "icon": "assets/icon.svg", "contextualTitle": "Source Academy" }