From 85da733d623ddc1b959a8f3502b3309a4643b4e5 Mon Sep 17 00:00:00 2001 From: tux tucker Date: Mon, 18 May 2026 18:52:17 -0400 Subject: [PATCH] Dropdown cleanup + bounce marker polish + auto popup title (v1.10.2) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Removed "Test connection" item from the browse settings dropdown (chrome+firefox HTML + JS handler). Available in Advanced Options. - Model column "*" bounce marker: - Color now matches the badge per family (sonnet/opus/haiku/default) instead of always rendering var(--badge-default) at 0.7 opacity. - Tooltip on the bounced cell now fires when hovering EITHER the badge or the asterisk: wrapped both in a .model-cell span that carries the title + cursor: help. - Popup header (#header-title) is now populated from manifest.name in popup.js — testing branch's "Claude Exporter Beta" surfaces in the popup automatically without a separate HTML edit per branch. - src/CLAUDE.md extended the existing manifest-name rule to note that popup.js reads manifest.name into #header-title. (Workspace-root CLAUDE.md was mirrored locally but isn't tracked in git.) Co-Authored-By: Claude Opus 4.7 (1M context) --- CLAUDE.md | 2 ++ chrome/browse.html | 15 +++++++++------ chrome/browse.js | 28 +++++----------------------- chrome/manifest.json | 2 +- chrome/popup.js | 4 +++- docs/CHANGELOG.md | 7 +++++++ firefox/browse.html | 15 +++++++++------ firefox/browse.js | 26 ++++---------------------- firefox/manifest.json | 2 +- firefox/popup.js | 4 +++- 10 files changed, 44 insertions(+), 61 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 77da654..28756f2 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -89,6 +89,8 @@ Any export producing more than one file should always create a ZIP — never tri - `"Claude Exporter"` on the `main` branch (released version) - `"Claude Exporter Beta"` on the `testing` branch (so the user can tell at a glance which build is loaded) +The popup header title is populated from `manifest.name` in `popup.js` (`#header-title`), so the popup automatically reads "Claude Exporter Beta" on the testing branch — no separate HTML edit needed. + When merging `testing` → `main` for a release, flip both manifest names to drop "Beta" as part of the merge. ## Testing diff --git a/chrome/browse.html b/chrome/browse.html index dcaedf8..ebf7a5f 100644 --- a/chrome/browse.html +++ b/chrome/browse.html @@ -577,7 +577,15 @@ margin-left: 4px; font-size: 12px; color: var(--badge-default); - opacity: 0.7; + } + + .model-bounced.sonnet { color: var(--badge-sonnet); } + .model-bounced.haiku { color: var(--badge-haiku); } + .model-bounced.opus { color: var(--badge-opus); } + + /* Wrapper that carries the tooltip + cursor so hover works on the badge or asterisk */ + .model-cell { + display: inline-block; cursor: help; } @@ -779,11 +787,6 @@ Advanced Options -
-
- Test connection - -
diff --git a/chrome/browse.js b/chrome/browse.js index 9b2a1e5..8dd34e1 100644 --- a/chrome/browse.js +++ b/chrome/browse.js @@ -89,7 +89,7 @@ function getDisplayModel(conv) { return { model: useCurrent ? current : original, other: useCurrent ? original : current, - otherLabel: useCurrent ? 'Originally' : 'Now using', + otherLabel: useCurrent ? 'Originally' : 'Currently', bounced }; } @@ -472,9 +472,10 @@ function displayConversations() { ${escapeHtml(updatedDate)}
${escapeHtml(updatedTime)} ${escapeHtml(createdDate)}
${escapeHtml(createdTime)} - - ${escapeHtml(formatModelName(modelInfo.model))} - ${modelInfo.bounced ? `*` : ''} + ${modelInfo.bounced + ? `${escapeHtml(formatModelName(modelInfo.model))}*` + : `${escapeHtml(formatModelName(modelInfo.model))}` + }
@@ -1213,25 +1214,6 @@ function setupEventListeners() { settingsDropdown.classList.remove('open'); }); - // Test connection - document.getElementById('testConnection').addEventListener('click', async () => { - const statusEl = document.getElementById('connectionStatus'); - statusEl.textContent = 'Testing...'; - try { - const response = await sendMessageToClaudeTab('loadConversations', { orgId }); - if (response && response.success) { - statusEl.textContent = `OK (${response.conversations.length})`; - statusEl.style.color = '#22c55e'; - } else { - statusEl.textContent = 'Failed'; - statusEl.style.color = '#ef4444'; - } - } catch (e) { - statusEl.textContent = 'Error'; - statusEl.style.color = '#ef4444'; - } - }); - // Search input const searchInput = document.getElementById('searchInput'); searchInput.addEventListener('input', (e) => { diff --git a/chrome/manifest.json b/chrome/manifest.json index 9723895..9b4c665 100644 --- a/chrome/manifest.json +++ b/chrome/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 3, "name": "Claude Exporter Beta", - "version": "1.10.1", + "version": "1.10.2", "description": "Export conversations and artifacts from Claude.ai", "permissions": [ "activeTab", diff --git a/chrome/popup.js b/chrome/popup.js index eb034dc..10be7a2 100644 --- a/chrome/popup.js +++ b/chrome/popup.js @@ -35,8 +35,10 @@ async function getOrgId() { } document.addEventListener('DOMContentLoaded', async () => { - // Display version from manifest + // Pull the popup title + version from the manifest so the testing branch + // shows "Claude Exporter Beta" without a separate HTML edit. const manifest = chrome.runtime.getManifest(); + document.getElementById('header-title').textContent = manifest.name; document.getElementById('header-version').textContent = `v${manifest.version}`; // Handle checkbox dependencies diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index bfa4fe3..9f46bab 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [1.10.2] + +- Removed "Test connection" from the browse settings dropdown — it's already available in Advanced Options (next to Save Settings) +- Model column "*" bounce marker now matches the badge color per family (Sonnet/Opus/Haiku/default), full opacity +- Tooltip on bounced model cells now fires when hovering the badge or the asterisk (wrapped in a `.model-cell` with the `title` attribute) +- Popup header title is now read from `manifest.name`, so the testing branch's "Claude Exporter Beta" appears in the popup automatically. CLAUDE.md updated. + ## [1.10.1] - Browse page funnel menu: new "Search projects" option (below the existing status filters, separated by a divider). When selected, the search bar matches against project names (placeholder updates to "Search projects by name...") and the table shows conversations whose project name matches. Status filters do not apply in this mode. diff --git a/firefox/browse.html b/firefox/browse.html index 29ebc09..d5510d8 100644 --- a/firefox/browse.html +++ b/firefox/browse.html @@ -577,7 +577,15 @@ margin-left: 4px; font-size: 12px; color: var(--badge-default); - opacity: 0.7; + } + + .model-bounced.sonnet { color: var(--badge-sonnet); } + .model-bounced.haiku { color: var(--badge-haiku); } + .model-bounced.opus { color: var(--badge-opus); } + + /* Wrapper that carries the tooltip + cursor so hover works on the badge or asterisk */ + .model-cell { + display: inline-block; cursor: help; } @@ -780,11 +788,6 @@ Advanced Options
-
-
- Test connection - -
diff --git a/firefox/browse.js b/firefox/browse.js index 939e07e..ed16012 100644 --- a/firefox/browse.js +++ b/firefox/browse.js @@ -472,9 +472,10 @@ function displayConversations() { ${escapeHtml(updatedDate)}
${escapeHtml(updatedTime)} ${escapeHtml(createdDate)}
${escapeHtml(createdTime)} - - ${escapeHtml(formatModelName(modelInfo.model))} - ${modelInfo.bounced ? `*` : ''} + ${modelInfo.bounced + ? `${escapeHtml(formatModelName(modelInfo.model))}*` + : `${escapeHtml(formatModelName(modelInfo.model))}` + }
@@ -1212,25 +1213,6 @@ function setupEventListeners() { settingsDropdown.classList.remove('open'); }); - // Test connection - document.getElementById('testConnection').addEventListener('click', async () => { - const statusEl = document.getElementById('connectionStatus'); - statusEl.textContent = 'Testing...'; - try { - const response = await sendMessageToClaudeTab('loadConversations', { orgId }); - if (response && response.success) { - statusEl.textContent = `OK (${response.conversations.length})`; - statusEl.style.color = '#22c55e'; - } else { - statusEl.textContent = 'Failed'; - statusEl.style.color = '#ef4444'; - } - } catch (e) { - statusEl.textContent = 'Error'; - statusEl.style.color = '#ef4444'; - } - }); - // Search input const searchInput = document.getElementById('searchInput'); searchInput.addEventListener('input', (e) => { diff --git a/firefox/manifest.json b/firefox/manifest.json index fd27635..639f0e1 100644 --- a/firefox/manifest.json +++ b/firefox/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 2, "name": "Claude Exporter Beta", - "version": "1.10.1", + "version": "1.10.2", "description": "Export conversations and artifacts from Claude.ai", "permissions": [ "activeTab", diff --git a/firefox/popup.js b/firefox/popup.js index f110fe3..90dd1ce 100644 --- a/firefox/popup.js +++ b/firefox/popup.js @@ -35,8 +35,10 @@ async function getOrgId() { } document.addEventListener('DOMContentLoaded', async () => { - // Display version from manifest + // Pull the popup title + version from the manifest so the testing branch + // shows "Claude Exporter Beta" without a separate HTML edit. const manifest = chrome.runtime.getManifest(); + document.getElementById('header-title').textContent = manifest.name; document.getElementById('header-version').textContent = `v${manifest.version}`; // Handle checkbox dependencies