Add titles-only list export and Custom lists

Export
- GET /l/<list>/export?format=csv|txt downloads a list's titles in rank
  order, one per line, with no header or other fields (CSV gets a UTF-8
  BOM for Excel)
- Export menu in the list editor and, for the owner, on the public list
  page; hidden lists stay owner-only

Custom lists
- New "Custom" category for anything not built in (sports teams,
  drinks…): owner-named, slug from the title, entries added by hand or
  from an unfiltered Wikipedia search
- Per-list artwork shape (square or tall), stored in a new lists.art
  column (migration 2)
- Art can be uploaded while adding an entry, not only after

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
cdnutterandClaude Opus 5.5 committed 2026-09-24 17:18:24 -07:00
1 parent e9a75a968a
commit 58a29b7339
23 files changed
+314 -37

No files matched your search

+7
View File
@@ -158,3 +158,10 @@ export function storageGet(key) {
export function storageSet(key, val) {
try { localStorage.setItem(key, val); } catch { /* private mode */ }
}
// Close <details class="menu"> dropdowns when clicking elsewhere or picking an item.
document.addEventListener("click", (e) => {
for (const d of document.querySelectorAll("details.menu[open]")) {
if (!d.contains(e.target) || e.target.closest(".menu-pop a")) d.open = false;
}
});