redact: unify save to single 'Save to My Docs' button; fix DOCX content type

- Remove js-save-corpus button from redact output (was failing with 'no_workspace'
  for users without a linked CaveauAI workspace)
- Single save path now goes through showSaveResultButton() → api/case/save-result.php,
  which works for all paid (Plus/Pro) users without workspace dependency
- Relabel 'Save result' → 'Save to My Docs' and update success message
- Fix DOCX: contentTypesXml() had wrong ContentType for docProps/core.xml
  (application/package/... → application/vnd.openxmlformats-package.core-properties+xml);
  Word validates this strictly and was rejecting the file

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-25 08:40:39 +02:00
parent 56cd87dd7b
commit 4b8b675a64
2 changed files with 3 additions and 6 deletions
+2 -5
View File
@@ -1551,13 +1551,10 @@ function renderMainFinding(data) {
? `<button type="button" class="upgrade-engine-btn" id="rerunBetterBtn">Re-run with gpt-4o for higher accuracy →</button>`
: '';
const sourceDocIds = lastToolPayload?.doc_ids?.join(',') || '';
const suggestedTitle = `Redacted document — ${new Date().toLocaleDateString()}`;
const dlRow = `<div class="redact-downloads">
<button type="button" class="redact-dl-btn" id="rdlCopy">${t('redactCopy')}</button>
<button type="button" class="redact-dl-btn" id="rdlTxt">${t('redactDownloadTxt')}</button>
<button type="button" class="redact-dl-btn" id="rdlDocx">${t('redactDownloadDocx')}</button>
<button type="button" class="redact-dl-btn js-save-corpus" data-content-id="redactOutputPre" data-tool="redact" data-suggested-title="${escapeHtml(suggestedTitle)}" data-source-doc-ids="${escapeHtml(sourceDocIds)}">Save to My Docs</button>
</div>`;
return `${viewToggle}<pre class="redacted-output" id="redactOutputPre">${highlightRedactedText(lastRedactedText)}</pre>${inventoryHtml}${upgradeBtn}${dlRow}`;
@@ -2506,7 +2503,7 @@ function showSaveResultButton(tool, inputPayload, outputPayload, meta, container
widget.className = 'save-result-widget';
widget.innerHTML = `
<div class="save-result-idle">
<button type="button" class="save-result-btn" id="saveResultTrigger">💾 Save result</button>
<button type="button" class="save-result-btn" id="saveResultTrigger">Save to My Docs</button>
</div>
<div class="save-result-prompt is-hidden">
<input type="text" class="save-result-input" id="saveResultTitle" maxlength="200" aria-label="Result title">
@@ -2514,7 +2511,7 @@ function showSaveResultButton(tool, inputPayload, outputPayload, meta, container
<button type="button" class="save-result-cancel" id="saveResultCancel">Cancel</button>
</div>
<div class="save-result-done is-hidden">
<a class="save-result-link" href="min-sak.php">✓ Saved — View in My Case ↗</a>
<a class="save-result-link" href="min-sak.php">✓ Saved to My Docs ↗</a>
</div>
<p class="save-result-error is-hidden"></p>`;