From ccf428342eb03462709108f44211cb0679941fe4 Mon Sep 17 00:00:00 2001 From: Mitch Davis Date: Fri, 12 Dec 2025 14:05:23 +1100 Subject: [PATCH 1/4] Add sheet query parameter to preselect schematic sheet --- src/kicanvas/elements/common/project-panel.ts | 18 ++++++++++++-- src/kicanvas/elements/kicanvas-shell.ts | 24 ++++++++++++++++++- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/kicanvas/elements/common/project-panel.ts b/src/kicanvas/elements/common/project-panel.ts index 4a0c543c..d63b5a8e 100644 --- a/src/kicanvas/elements/common/project-panel.ts +++ b/src/kicanvas/elements/common/project-panel.ts @@ -65,6 +65,7 @@ export class KCProjectPanelElement extends KCUIElement { ]; #menu: KCUIMenuElement; + #selected_name: string | null = null; project: Project; override connectedCallback() { @@ -105,11 +106,14 @@ export class KCProjectPanelElement extends KCUIElement { } get selected() { - return this.#menu.selected?.name ?? null; + return this.#menu?.selected?.name ?? this.#selected_name; } set selected(name: string | null) { - this.#menu.selected = name; + this.#selected_name = name; + if (this.#menu) { + this.#menu.selected = name; + } } @no_self_recursion @@ -124,6 +128,12 @@ export class KCProjectPanelElement extends KCUIElement { return html``; } + // Update selected_name from active page if not already set + const active_path = this.project.active_page?.project_path ?? null; + if (active_path !== null && this.#selected_name !== active_path) { + this.#selected_name = active_path; + } + for (const page of this.project.pages()) { const icon = page.type == "schematic" @@ -161,6 +171,10 @@ export class KCProjectPanelElement extends KCUIElement { ${file_btn_elms} ` as KCUIMenuElement; + if (this.#selected_name !== null) { + this.#menu.selected = this.#selected_name; + } + return html` ${this.#menu} diff --git a/src/kicanvas/elements/kicanvas-shell.ts b/src/kicanvas/elements/kicanvas-shell.ts index 603d436d..a7cf2025 100644 --- a/src/kicanvas/elements/kicanvas-shell.ts +++ b/src/kicanvas/elements/kicanvas-shell.ts @@ -129,7 +129,29 @@ class KiCanvasShellElement extends KCUIElement { try { await this.project.load(vfs); - this.project.set_active_page(this.project.first_page); + // Determine which page to activate based on URL query parameter "sheet" + const url_params = new URLSearchParams(window.location.search); + const sheet_param = url_params.get("sheet"); + let target_page = this.project.first_page; + if (sheet_param) { + // Try to find a matching page + for (const page of this.project.pages()) { + console.log(page.page, page.name, page.project_path); + if (page.page === sheet_param) { + target_page = page; + break; + } + if (page.name?.toLowerCase().includes(sheet_param.toLowerCase())) { + target_page = page; + break; + } + if (page.project_path.includes(sheet_param)) { + target_page = page; + break; + } + } + } + this.project.set_active_page(target_page); this.loaded = true; } catch (e) { console.error(e); From 685a3db2be247afbaf0ff47a65d6630bea366bcb Mon Sep 17 00:00:00 2001 From: Mitch Davis Date: Sun, 14 Dec 2025 15:57:13 +1100 Subject: [PATCH 2/4] Fixed some PR review comments: Removed a log, reformatted code --- src/kicanvas/elements/kicanvas-shell.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/kicanvas/elements/kicanvas-shell.ts b/src/kicanvas/elements/kicanvas-shell.ts index a7cf2025..27514c2e 100644 --- a/src/kicanvas/elements/kicanvas-shell.ts +++ b/src/kicanvas/elements/kicanvas-shell.ts @@ -136,12 +136,15 @@ class KiCanvasShellElement extends KCUIElement { if (sheet_param) { // Try to find a matching page for (const page of this.project.pages()) { - console.log(page.page, page.name, page.project_path); if (page.page === sheet_param) { target_page = page; break; } - if (page.name?.toLowerCase().includes(sheet_param.toLowerCase())) { + if ( + page.name + ?.toLowerCase() + .includes(sheet_param.toLowerCase()) + ) { target_page = page; break; } From 3a72dd40d428a5f6cafb7a9373e81bf2dc5f8242 Mon Sep 17 00:00:00 2001 From: Mitch Davis Date: Sun, 14 Dec 2025 16:23:50 +1100 Subject: [PATCH 3/4] If the sheet query arg was a number, it could match a UUID. Fixed. --- src/kicanvas/elements/kicanvas-shell.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/kicanvas/elements/kicanvas-shell.ts b/src/kicanvas/elements/kicanvas-shell.ts index 27514c2e..6406f17a 100644 --- a/src/kicanvas/elements/kicanvas-shell.ts +++ b/src/kicanvas/elements/kicanvas-shell.ts @@ -148,7 +148,9 @@ class KiCanvasShellElement extends KCUIElement { target_page = page; break; } - if (page.project_path.includes(sheet_param)) { + const match = page.project_path.match(/^([^:]+)/)!; // If there's a colon, only take the part before it + const filenamePart = match[1] + if (filenamePart == sheet_param) { target_page = page; break; } From 503f52be1c58ad849f0253c37040ce51d030e6ef Mon Sep 17 00:00:00 2001 From: Mitch Davis Date: Mon, 15 Dec 2025 17:40:26 +1100 Subject: [PATCH 4/4] Simplified how sheet names are matched against "sheet" query arg --- src/kicanvas/elements/kicanvas-shell.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/kicanvas/elements/kicanvas-shell.ts b/src/kicanvas/elements/kicanvas-shell.ts index 6406f17a..aecb6c8a 100644 --- a/src/kicanvas/elements/kicanvas-shell.ts +++ b/src/kicanvas/elements/kicanvas-shell.ts @@ -148,9 +148,7 @@ class KiCanvasShellElement extends KCUIElement { target_page = page; break; } - const match = page.project_path.match(/^([^:]+)/)!; // If there's a colon, only take the part before it - const filenamePart = match[1] - if (filenamePart == sheet_param) { + if (page.filename === sheet_param) { target_page = page; break; }