Skip to content

web: Kickstart list select for site-served ROMs#230

Merged
LinuxJedi merged 2 commits into
mainfrom
feature/web-kick-list
Jul 19, 2026
Merged

web: Kickstart list select for site-served ROMs#230
LinuxJedi merged 2 commits into
mainfrom
feature/web-kick-list

Conversation

@LinuxJedi

Copy link
Copy Markdown
Owner

Summary

Adds a #kicklist page-shell hook: a <select> that fills itself with the Kickstart ROMs the site serves next to the page and fits the picked one like the ROM picker, mirroring the existing #df0list disk list.

  • The df0list folder-listing glue (a <folder>/index.json manifest, or a scraped server directory listing) is generalised into a shared loadFolderList helper; the disk list's behaviour is unchanged.
  • The Kickstart list defaults to a kick/ folder (overridable via data-src), filtered to raw .rom/.bin images since a pick feeds load_rom directly (uncompressed 256/512 KiB images).
  • A picked ROM rides the existing fitRomFromUrl path: queued before boot (the boot button relabels), and a running machine is power-cycled.
  • The same-origin copyright gate is enforced at the list level too: a cross-origin folder hides the select and cross-origin manifest entries are dropped, so the list never offers a ROM the pick path would refuse. The hosted page serves no ROMs, so the select never appears there; self-hosted shells that serve their owner's ROMs next to the page get a one-click ROM chooser.
  • No wasm-side changes; docs/guide/browser.md documents the hook.

Testing

  • node --check on the modified try.js (as an ES module).
  • Live browser test against the real site shell (patched with both selects) served by python3 -m http.server, with a freshly built wasm pkg:
    • Directory-listing scrape populated both lists (.rom/.bin filter for kick, disk extensions for df0).
    • Pre-boot pick queued the ROM, relabelled the boot button, and booted into the Kickstart 1.3 insert-disk screen.
    • Live pick power-cycled the running machine into Kickstart 3.1.
    • df0list still inserts live after the refactor (disk booted on the swapped machine).
    • kick/index.json manifest: friendly labels and bare-string entries listed, a cross-origin entry filtered out.

🤖 Generated with Claude Code

https://claude.ai/code/session_015yMn3JdhkQaeep5y3o9L3y

Generalise the df0list folder-listing glue (index.json manifest or
scraped server directory listing) into a shared helper and add a
kicklist select that fills itself from a kick/ folder and fits the
picked ROM like the Kickstart picker: queued before boot, power-cycling
a running machine. The list enforces fitRomFromUrl's same-origin
copyright gate up front - a cross-origin folder or manifest entry is
hidden rather than offered and refused pick by pick - and filters to
raw .rom/.bin images, since a pick feeds load_rom directly. The hosted
page serves no ROMs so the select never appears there; self-hosted
shells that serve their owner's ROMs next to the page get a one-click
ROM chooser.
Copilot AI review requested due to automatic review settings July 19, 2026 21:54

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new optional browser page-shell hook (#kicklist) to let self-hosted web shells offer a one-click Kickstart ROM chooser from a same-origin folder, mirroring the existing #df0list behavior and reusing shared folder-listing logic.

Changes:

  • Generalizes #df0list folder listing into a shared loadFolderList helper (manifest or directory scraping).
  • Adds #kicklist support with same-origin enforcement and .rom/.bin targeting, using the existing fitRomFromUrl flow.
  • Documents the new hook and behavior in docs/guide/browser.md.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
docs/guide/browser.md Documents the new #kicklist page-shell hook and its same-origin/copyright-gate behavior.
crates/copperline-web/www/try.js Refactors folder listing into a shared helper and wires up #kicklist alongside the existing #df0list.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread crates/copperline-web/www/try.js
The .rom/.bin filter applies when scraping a server directory listing;
an index.json manifest is the site's explicit statement of what to list
and is trusted as-is (matching the df0list contract), so the kicklist
bullet should not read as though manifest entries are filtered too.
Cross-origin manifest entries are still dropped by the same-origin gate.
@LinuxJedi
LinuxJedi merged commit cd67432 into main Jul 19, 2026
11 checks passed
@LinuxJedi
LinuxJedi deleted the feature/web-kick-list branch July 19, 2026 22:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants