claude-exporter/firefox/popup.html
tux tucker 0bc0158f2e Chrome/Firefox parity sync pass (v1.10.12)
Multiple files had drifted out of sync over recent commits. Brought
Firefox in line with Chrome (canonical copy per CLAUDE.md):

- popup.html: removed Chrome typo "dd" after --error-text: #ff9999;
- popup.html: synced firefox label { margin: 6px 0 } -> 6px (chrome's value)
- browse.html: synced firefox td { padding: 15px } -> 15px 20px
- browse.html: removed stale .btn-view CSS from firefox (the v1.10.9
  cleanup only touched chrome)
- browse.html: bumped firefox body min-width 1140 -> 1200 and added
  min-width: 1200px to .container to match chrome's recent tweak
- browse.js: synced firefox tooltip label "Now using" -> "Currently"
- options.html: synced firefox width: 800px -> 810px
- content.js: removed firefox-only [Claude Exporter] debug console.log
  lines at top of file

Legitimate differences left alone:
- background.js: chrome MV3 scripting.executeScript vs firefox MV2
  tabs.executeScript loop (per CLAUDE.md API differences)
- popup.js: chrome.tabs.* (chrome) vs browser.tabs.* (firefox idiom)

Uncertain (left for direction):
- browse.js exportConversation toast handling differs (chrome emits
  inline showToast per branch; firefox has them removed with a
  "Toast handled below after timestamp save" comment, but no
  unified toast was found later in the function)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 20:44:11 -04:00

224 lines
No EOL
5.7 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
/* Dark mode by default */
:root {
--bg-color: #1e1e1e;
--text-color: #e0e0e0;
--border-color: #3a3a3a;
--primary-color: #6b52e8;
--primary-hover: #7d66f0;
--secondary-color: #32b34a;
--secondary-hover: #3cc752;
--disabled-bg: #3a3a3a;
--success-bg: #1a4d2e;
--success-text: #90ee90;
--error-bg: #4d1a1a;
--error-text: #ff9999;
--info-bg: #1a3d4d;
--info-text: #87ceeb;
--link-color: #8b7aff;
}
/* Light mode when system prefers light */
:root[data-theme="light"] {
--bg-color: #f6f7f9;
--text-color: #2c313a;
--border-color: #e2e4e9;
--primary-color: #5d44e8;
--primary-hover: #4a35ba;
--secondary-color: #10b981;
--secondary-hover: #059669;
--disabled-bg: #e9ecef;
--success-bg: #d1fae5;
--success-text: #065f46;
--error-bg: #fee2e2;
--error-text: #991b1b;
--info-bg: #e0f2fe;
--info-text: #075985;
--link-color: #5d44e8;
}
body {
width: 275px;
padding: 8px;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
margin: 0;
background-color: var(--bg-color);
color: var(--text-color);
min-height: 0;
max-height: 600px;
overflow-y: auto;
}
h2 {
margin-top: 0;
color: var(--text-color);
font-size: 16px;
}
button {
width: 100%;
padding: 8px;
margin: 4px 0;
border: none;
border-radius: 4px;
background: var(--primary-color);
color: white;
font-size: 13px;
cursor: pointer;
transition: background 0.2s;
}
button:hover {
background: var(--primary-hover);
}
button:disabled {
background: var(--disabled-bg);
cursor: not-allowed;
color: #999;
}
#browseConversations {
background: var(--secondary-color);
margin-top: 6px;
}
#browseConversations:hover {
background: var(--secondary-hover);
}
.status {
margin: 6px 0;
padding: 8px;
border-radius: 4px;
font-size: 12px;
}
.success {
background: var(--success-bg);
color: var(--success-text);
}
.error {
background: var(--error-bg);
color: var(--error-text);
}
.info {
background: var(--info-bg);
color: var(--info-text);
}
.info a {
color: var(--link-color);
}
.options {
margin: 8px 0;
}
label {
display: block;
margin: 6px;
font-size: 12px;
color: var(--text-color);
}
input[type="checkbox"] {
margin-right: 5px;
}
select {
width: 100%;
padding: 4px;
margin-top: 3px;
border: 1px solid var(--border-color);
border-radius: 3px;
background-color: var(--bg-color);
color: var(--text-color);
font-size: 12px;
}
#popup-header {
margin: -8px -8px 8px -8px;
padding: 14px 16px;
background: linear-gradient(135deg, var(--primary-color), var(--primary-hover));
text-align: center;
}
#header-title {
color: white;
font-size: 15px;
font-weight: 600;
letter-spacing: 0.3px;
}
#header-version {
color: rgba(255, 255, 255, 0.7);
font-size: 11px;
margin-top: 3px;
}
</style>
</head>
<body>
<div id="popup-header">
<div id="header-title">Claude Exporter</div>
<div id="header-version"></div>
</div>
<div style="padding: 0 5px;">
<div class="options">
<!-- Chat Export Options -->
<div class="export-row">
<label>
Chat format:
<select id="format">
<option value="json">JSON</option>
<option value="markdown">Markdown</option>
<option value="text">Plain Text</option>
</select>
</label>
<label title="Include the conversation messages in the exported file">
<input type="checkbox" id="includeChats" checked>
Chats
</label>
<label title="Include extended thinking blocks in the exported conversation">
<input type="checkbox" id="includeThinking">
Extended Thinking
</label>
<label title="Add conversation metadata (name, date, model, etc.) at the top of exported files">
<input type="checkbox" id="includeMetadata">
Metadata
</label>
</div>
<!-- Artifact Export Options -->
<div class="export-row" style="margin-top: 12px;">
<label>
Artifact format:
<select id="artifactFormat">
<option value="original">Original</option>
<option value="markdown">Markdown</option>
<option value="text">Plain Text</option>
<option value="json">JSON</option>
</select>
</label>
<label title="Include artifacts (code, documents, etc.) directly within the conversation text">
<input type="checkbox" id="includeArtifacts">
Inline Artifacts
</label>
<label title="Extract artifacts as separate files in nested folders">
<input type="checkbox" id="extractArtifacts">
Nested Artifacts
</label>
<label title="Flatten artifact structure (no subfolders, with conversation name prefix)">
<input type="checkbox" id="flattenArtifacts">
Flat Artifacts
</label>
</div>
</div>
<button id="exportCurrent">Export Current Conversation</button>
<button id="exportAll">Export All Conversations</button>
<button id="browseConversations">Browse All Conversations</button>
<div id="status"></div>
</div>
<script src="popup-theme.js"></script>
<script src="utils.js"></script>
<script src="popup.js"></script>
</body>
</html>