(function () { if (window.__fc_addsource_injected) return; window.__fc_addsource_injected = true; evaluate(); const reEval = () => evaluate(); window.addEventListener('popstate', reEval); const origPush = history.pushState; history.pushState = function () { origPush.apply(this, arguments); reEval(); }; function evaluate() { const platform = getPlatformFromUrl(window.location.href); const onArtist = platform && isArtistPage(window.location.href, platform); let btn = document.getElementById('fc-add-source-btn'); if (onArtist && !btn) injectButton(); else if (!onArtist && btn) btn.remove(); } function injectButton() { const btn = document.createElement('button'); btn.id = 'fc-add-source-btn'; btn.className = 'fc-add-source-btn'; btn.textContent = '+ Add to FabledCurator'; btn.addEventListener('click', onClick); document.body.appendChild(btn); } async function onClick() { const btn = document.getElementById('fc-add-source-btn'); btn.disabled = true; const original = btn.textContent; btn.textContent = 'Adding…'; try { const r = await browser.runtime.sendMessage({ type: 'ADD_AS_SOURCE', url: window.location.href, }); if (r.error) { showToast(`Error: ${r.error}`, 'error'); } else { const verb = r.created_source ? 'Added' : 'Already a source for'; showToast(`${verb} ${r.artist?.name || 'artist'} (${r.source?.platform || ''})`, 'success'); } } catch (e) { showToast(`Error: ${e.message}`, 'error'); } finally { btn.disabled = false; btn.textContent = original; } } function showToast(text, kind) { const t = document.createElement('div'); t.className = `fc-toast fc-toast--${kind}`; t.textContent = text; document.body.appendChild(t); setTimeout(() => t.remove(), 4000); } })();