You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
v0.8.0: choose your export format (CSV or a sortable HTML report)
'Export open tabs to CSV…' becomes 'Export open tabs…' and asks for a format
first: Spreadsheet (CSV), Web page (HTML), or Cancel. The choice drives the file
extension; the rest of the flow (re-poll, timestamped name, reveal in Finder) is
unchanged.
New HTML report (tabexport.write_html) is a self-contained single file:
- same columns as the CSV, reordered for reading (title/url before the flags,
which otherwise pushed them behind seven metadata columns)
- clickable links, opened with rel=noopener noreferrer
- click a heading to sort, click again to reverse, with a ▲/▼ indicator;
window/tab sort numerically (1,2,3,10,20 — not lexicographically)
- sticky header, zebra striping, light/dark aware, long text ellipsized with the
full value as a tooltip, table wrapped in overflow-x
- loads nothing external; the one ~20-line script does only the sorting
Injection safety: tab titles/URLs are untrusted text going into HTML, so every
value is html.escape'd and only http(s) URLs are linkified — a javascript: URL
is shown as text, never as an href. Regression-tested.
Both formats now end with a provenance note (app name, version, repo) read from
appinfo.py via a shared disclaimer_text(), so it can't drift from the build. In
the CSV it's a blank row plus one trailing line; data rows still parse intact.
Tests: HTML escaping/linkifying, HTML-vs-CSV column parity, CSV footer safety.
README updated. Rationale and the keep-the-script decision are recorded in the
dossier (build-log Phase 11).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>