379445c244
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
61 lines
1.9 KiB
JavaScript
61 lines
1.9 KiB
JavaScript
(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);
|
|
}
|
|
})();
|