Make source-use badges read-only display labels

Removing toggle interactivity from use badges — they were confusing
and the wrong place to manage uses. The uses array is now managed
automatically by upload context. Badges are plain spans.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-01 04:41:44 +00:00
parent 38c2d89c9b
commit 53bd086661
3 changed files with 7 additions and 37 deletions

View File

@@ -900,33 +900,11 @@ function build_source_card(src, selectable, on_select = null) {
qs(card, '.source-card-link').href = `/img/${src.id}`;
set_text(card, '.source-card-meta', [src.original_name, `${src.width}×${src.height}`].filter(Boolean).join(' · '));
const uses_el = qs(card, '.source-card-uses');
const KNOWN_USES = ['grid', 'bin'];
for (const use of KNOWN_USES) {
const btn = document.createElement('button');
btn.type = 'button';
btn.className = `source-use-badge source-use-${use}`;
btn.textContent = use;
const active = (src.uses ?? []).includes(use);
btn.classList.toggle('source-use-inactive', !active);
btn.title = active ? `Remove "${use}" tag` : `Add "${use}" tag`;
btn.addEventListener('click', async (e) => {
e.stopPropagation();
const current = (src.uses ?? []);
const new_uses = current.includes(use)
? current.filter(u => u !== use)
: [...current, use];
try {
const result = await api.update_source_image_uses(src.id, new_uses);
src.uses = result.source.uses;
all_sources = all_sources.map(s => s.id === src.id ? { ...s, uses: src.uses } : s);
// Re-render just this card's badges
btn.classList.toggle('source-use-inactive', !src.uses.includes(use));
btn.title = src.uses.includes(use) ? `Remove "${use}" tag` : `Add "${use}" tag`;
} catch (err) {
alert(err.message);
}
});
uses_el.appendChild(btn);
for (const use of (src.uses ?? [])) {
const badge = document.createElement('span');
badge.className = `source-use-badge source-use-${use}`;
badge.textContent = use;
uses_el.appendChild(badge);
}
if (selectable) {