redact: UX overhaul — engine simplification, credits, spinner, save-to-docs, badges

- Remove GPU/regex engine options; keep only azure_mini (1 credit) and azure_full (2 credits)
- Variable credit cost: engine-aware pre-check and charge in api/redact.php; PricingCatalog base = 1
- Fix ATTORNEY not preserved when keepOfficials=true: add to LLM prompt, generic-tag, pseudonym regexes
- Replace Azure credits hint with per-engine credit cost text (all 4 languages)
- Single-file upload only (was: up to 5); simplify status messages
- Clear previous redaction output and show pulsing spinner when a new run starts
- Add "Save to My Docs" button in redact output panel (corpus-save.js path)
- corpus-save.js: capture source_doc_ids from button dataset, pass in POST payload
- api/save-to-corpus.php: accept source_doc_ids, store first as source_url=corpus-doc:{id}
- doc-picker.js: show "✂ Redacted" badge for documents saved from the redact tool
- CSS: .redact-working spinner, doc-item__badge--redact pill styles

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-25 08:18:51 +02:00
parent a821d39dcd
commit 56cd87dd7b
10 changed files with 117 additions and 50 deletions
+4 -1
View File
@@ -97,10 +97,13 @@
.toLocaleDateString(undefined, { dateStyle: 'medium' }));
} catch (_) {}
}
var redactBadge = doc.source_tool === 'redact'
? '<span class="doc-item__badge doc-item__badge--redact">✂ Redacted</span>'
: '';
return '<div class="doc-item' + (sel ? ' is-selected' : '') + '" data-id="' + id + '" role="option" aria-selected="' + sel + '">'
+ '<input type="checkbox" ' + (sel ? 'checked' : '') + ' tabindex="-1" aria-hidden="true">'
+ '<div>'
+ '<div class="doc-item__title">' + esc(doc.title || 'Untitled') + '</div>'
+ '<div class="doc-item__title">' + esc(doc.title || 'Untitled') + redactBadge + '</div>'
+ (meta.length ? '<div class="doc-item__meta">' + esc(meta.join(' · ')) + '</div>' : '')
+ '</div>'
+ '</div>';