oficina / sheets Public

Answer the review (Claude Fable 5.1); estilo 846b397

- estilo's busy.js now holds only a submit with a spinner showing
  (rastrillo discussion 51), so script submits no longer stall.
- Scripts that submit on the visitor's behalf pass the form's button, so
  it shows the spinner (Calendar quick-add, Sheets file drop).
- Slides' presenter Next/Previous/Blackout opt out (data-busy="false"):
  a live talk wants those instant. Memoria's old vendoring tool no longer
  writes rastrillo.js, which would bring the old busy rule back.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Paul Campbell pushed by paul@keymail.dev fb43fd9c1673eca13bd5e43339e8005732c36357 parent 23b4941
3 files changed, +9 −5
  • go.mod +1 −1
  • go.sum +2 −0
  • internal/sheets/static/drop.js +6 −4

CI passed — run details

CI log
amadan: .amadan/timeout: this job's budget is 15m0s (this runner allows up to 30m0s)
=== vet ===
CGO_ENABLED=0 go vet ./...
go: downloading amadan.net/oficina/estilo.git v0.0.0-20260929165053-846b39772f3c
=== fmt ===
=== build ===
CGO_ENABLED=0 go build ./...
=== migrations ===
rastrillo migration check
rastrillo migration check: models and migrations agree
=== go-test ===
CGO_ENABLED=0 go test -count=1 ./...
?   	amadan.net/oficina/sheets/cmd/sheets	[no test files]
ok  	amadan.net/oficina/sheets/internal/guardstest	0.088s
ok  	amadan.net/oficina/sheets/internal/sheets	11.068s
ok  	amadan.net/oficina/sheets/internal/sheets/calc	0.008s
ok  	amadan.net/oficina/sheets/internal/sheets/format	0.003s
ok  	amadan.net/oficina/sheets/internal/sheets/live	0.054s
ok  	amadan.net/oficina/sheets/internal/sheets/seal	0.003s
ok  	amadan.net/oficina/sheets/internal/sheets/sealtest	0.003s
ok  	amadan.net/oficina/sheets/internal/sheets/store	3.000s
ok  	amadan.net/oficina/sheets/internal/sheets/xlsx	0.310s
?   	amadan.net/oficina/sheets/tools/gencorpus	[no test files]
=== race ===
go test -race -count=1 ./internal/sheets/store/... ./internal/sheets/live/...
ok  	amadan.net/oficina/sheets/internal/sheets/store	53.506s
ok  	amadan.net/oficina/sheets/internal/sheets/live	1.060s
diff --git a/go.mod b/go.mod
index fd236f8..096e607 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module amadan.net/oficina/sheets
go 1.25.0
require (
- amadan.net/oficina/estilo.git v0.0.0-20260929095838-0994675f496e
+ amadan.net/oficina/estilo.git v0.0.0-20260929165053-846b39772f3c
amadan.net/oficina/home/connect v0.0.0-20260923190447-01166fcfc0a9
amadan.net/oficina/home/handoff v0.0.0-20260908102137-481d2d57f489
amadan.net/rastrillo/rastrillo v0.26.1-0.20260908075707-29e4491631bd
diff --git a/go.sum b/go.sum
index 68b0de3..cb4ad0f 100644
--- a/go.sum
+++ b/go.sum
@@ -6,6 +6,8 @@ amadan.net/oficina/estilo.git v0.0.0-20260929095046-d0664ee49914 h1:V0AyxXYCxqGZ
amadan.net/oficina/estilo.git v0.0.0-20260929095046-d0664ee49914/go.mod h1:4u0jNBtIdMLOsJyrScfqoEuYDJF7BBM3qM9YWbzt6aw=
amadan.net/oficina/estilo.git v0.0.0-20260929095838-0994675f496e h1:LTSmIWUS8RjPb6m94Ynf7moyFYeBXr08rdOr3nmNqvg=
amadan.net/oficina/estilo.git v0.0.0-20260929095838-0994675f496e/go.mod h1:4u0jNBtIdMLOsJyrScfqoEuYDJF7BBM3qM9YWbzt6aw=
+amadan.net/oficina/estilo.git v0.0.0-20260929165053-846b39772f3c h1:YYocIz3r3b4oIA0K/58JkSsmyTOCzMT/2GaW/MFbbPo=
+amadan.net/oficina/estilo.git v0.0.0-20260929165053-846b39772f3c/go.mod h1:4u0jNBtIdMLOsJyrScfqoEuYDJF7BBM3qM9YWbzt6aw=
amadan.net/oficina/home/connect v0.0.0-20260923190447-01166fcfc0a9 h1:K/PaOVdQqRMwifPD6ipiwLeGR5nbFSxm9FxjrDJlZcg=
amadan.net/oficina/home/connect v0.0.0-20260923190447-01166fcfc0a9/go.mod h1:YroavXe43Wietec+po8mtSk4a9Bir2h31Q3iAf4MWxI=
amadan.net/oficina/home/handoff v0.0.0-20260908102137-481d2d57f489 h1:RPKtyry/71i06o8L+gjAaUyexbmG56kO1YPs601URAM=
diff --git a/internal/sheets/static/drop.js b/internal/sheets/static/drop.js
index 3a89703..6d84b5f 100644
--- a/internal/sheets/static/drop.js
+++ b/internal/sheets/static/drop.js
@@ -122,10 +122,12 @@
say('Use the button to choose that file.');
return;
}
- /* requestSubmit fires the submit event, which is what rastrillo's
- * shim listens for to show the button busy. form.submit() skips
- * it, so it is the fallback and not the first choice. */
- if (typeof form.requestSubmit === 'function') form.requestSubmit();
+ /* requestSubmit fires the submit event, which is what the busy
+ * rule listens for; passing the form's button is what makes that
+ * button show the spinner. form.submit() skips the event, so it is
+ * the fallback and not the first choice. */
+ var button = form.querySelector('button[type=submit]');
+ if (typeof form.requestSubmit === 'function') form.requestSubmit(button || undefined);
else form.submit();
}