refactor(extension): DRY the web-root transform + cookie-export flow (#161)
Behavior-preserving (extension JS has lint-only CI + your manual test): - api.webRoot() single-sources the baseUrl→web-root transform (strip trailing slash + /api) that was copy-pasted in background.js's self-update check and OPEN_ARTIST_PAGE, whose comments even cross-referenced each other. - exportPlatformCookies(key) shares the extract→verify→upload spine between EXPORT_COOKIES (single) and EXPORT_ALL_COOKIES; it returns a structured outcome so each caller keeps its own response/skip messages verbatim. - popup.js mutedNote(text) replaces the "centered muted note" div hand-rolled in the platform-loading, sources-loading, and empty-sources renderers. No version bump — no behavior change, so it rides the next real ext release rather than forcing an AMO re-sign + reinstall. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NsmJSQxnNxGgtM5Yz4GAqi
This commit is contained in:
+12
-12
@@ -2,6 +2,15 @@ document.addEventListener('DOMContentLoaded', init);
|
||||
|
||||
const CONNECTION_TEST_INTERVAL = 2 * 60 * 1000;
|
||||
|
||||
// A centered muted note div — the loading / empty state shared by the platform
|
||||
// and sources lists.
|
||||
function mutedNote(text) {
|
||||
const d = document.createElement('div');
|
||||
d.style.cssText = 'text-align:center;padding:18px;color:var(--on-surface-variant);';
|
||||
d.textContent = text;
|
||||
return d;
|
||||
}
|
||||
|
||||
async function init() {
|
||||
try {
|
||||
const cfg = await browser.runtime.sendMessage({ type: 'GET_CONFIG' });
|
||||
@@ -38,10 +47,7 @@ function showSetupRequired() {
|
||||
function showPlatformsLoading() {
|
||||
const c = document.getElementById('platforms-list');
|
||||
c.textContent = '';
|
||||
const d = document.createElement('div');
|
||||
d.style.cssText = 'text-align:center;padding:18px;color:var(--on-surface-variant);';
|
||||
d.textContent = 'Loading platforms…';
|
||||
c.appendChild(d);
|
||||
c.appendChild(mutedNote('Loading platforms…'));
|
||||
}
|
||||
|
||||
async function testConnectionIfNeeded() {
|
||||
@@ -183,10 +189,7 @@ async function exportAllCookies() {
|
||||
async function loadSources() {
|
||||
const c = document.getElementById('sources-list');
|
||||
c.textContent = '';
|
||||
const d = document.createElement('div');
|
||||
d.style.cssText = 'text-align:center;padding:18px;color:var(--on-surface-variant);';
|
||||
d.textContent = 'Loading sources…';
|
||||
c.appendChild(d);
|
||||
c.appendChild(mutedNote('Loading sources…'));
|
||||
const r = await browser.runtime.sendMessage({ type: 'LIST_SOURCES' });
|
||||
c.textContent = '';
|
||||
if (r.error) {
|
||||
@@ -197,10 +200,7 @@ async function loadSources() {
|
||||
return;
|
||||
}
|
||||
if (!r.sources || r.sources.length === 0) {
|
||||
const empty = document.createElement('div');
|
||||
empty.style.cssText = 'text-align:center;padding:18px;color:var(--on-surface-variant);';
|
||||
empty.textContent = 'No sources yet.';
|
||||
c.appendChild(empty);
|
||||
c.appendChild(mutedNote('No sources yet.'));
|
||||
return;
|
||||
}
|
||||
for (const src of r.sources) c.appendChild(createSourceRow(src));
|
||||
|
||||
Reference in New Issue
Block a user