From f43b02d7c5daba6ea87b67f56a1bffa453a96eed Mon Sep 17 00:00:00 2001 From: Jeff Emmett Date: Tue, 14 Apr 2026 17:11:57 -0400 Subject: [PATCH] fix(canvas): eliminate triple reload + toolbar flash on /rspace Guard SW controllerchange to only reload on updates (not first install), remove duplicate SW registration from canvas.html, skip async module fetch when shell already provided data, hide module-gated toolbar items by default via CSS. Also collapse toolbar on click-off. Co-Authored-By: Claude Opus 4.6 --- server/shell.ts | 3 +- website/canvas.html | 158 +++++++++++++++++--------------------------- 2 files changed, 64 insertions(+), 97 deletions(-) diff --git a/server/shell.ts b/server/shell.ts index 0cfd0ace..a9cc79fe 100644 --- a/server/shell.ts +++ b/server/shell.ts @@ -388,8 +388,9 @@ export function renderShell(opts: ShellOptions): string { }); }).catch(() => {}); let refreshing = false; + const hadController = !!navigator.serviceWorker.controller; navigator.serviceWorker.addEventListener('controllerchange', () => { - if (refreshing) return; + if (!hadController || refreshing) return; refreshing = true; location.reload(); }); diff --git a/website/canvas.html b/website/canvas.html index c956617f..70177603 100644 --- a/website/canvas.html +++ b/website/canvas.html @@ -23,6 +23,9 @@ html.rspace-embedded .rstack-tab-row { display: none !important; } html.rspace-embedded #toolbar { bottom: 16px !important; } html.rspace-embedded #community-info { display: none !important; } + /* Hide module-gated toolbar items until JS confirms they're enabled */ + [data-requires-module] { display: none !important; } + [data-requires-module].mod-enabled { display: revert !important; }