fix diagram delete confirmation

This commit is contained in:
Daniel 2026-05-08 06:28:12 +02:00
parent 9af599a0b0
commit f8b563e642
4 changed files with 12 additions and 8 deletions

View file

@ -494,7 +494,7 @@
<script defer src="/js/peGuide.js"></script> <script defer src="/js/peGuide.js"></script>
<script defer src="/js/extensions.js"></script> <script defer src="/js/extensions.js"></script>
<script type="module" src="/js/notes.js"></script> <script type="module" src="/js/notes.js"></script>
<script defer src="/js/diagrams.js"></script> <script type="module" src="/js/diagrams.js"></script>
<script type="module" src="/js/clinicalAssistant.js"></script> <script type="module" src="/js/clinicalAssistant.js"></script>
<script defer src="/js/nextcloud.js"></script> <script defer src="/js/nextcloud.js"></script>
<script type="module" src="/js/wellVisit.js"></script> <script type="module" src="/js/wellVisit.js"></script>

View file

@ -3,8 +3,6 @@
// Source on the left, live SVG preview on the right. CRUD against // Source on the left, live SVG preview on the right. CRUD against
// /api/diagrams. Autosaves on quiet typing like Personal Notes. // /api/diagrams. Autosaves on quiet typing like Personal Notes.
// ============================================================ // ============================================================
(function () {
'use strict';
var initialized = false; var initialized = false;
var mermaidReady = false; var mermaidReady = false;
@ -243,9 +241,7 @@
function onDelete() { function onDelete() {
if (currentId == null) return; if (currentId == null) return;
var id = currentId; var id = currentId;
var confirmFn = window.showConfirm || function (msg) { return Promise.resolve(window.confirm(msg)); }; confirmDelete('Delete this diagram?', function () {
Promise.resolve(confirmFn('Delete this diagram?')).then(function (ok) {
if (!ok) return;
fetch('/api/diagrams/' + id, { fetch('/api/diagrams/' + id, {
method: 'DELETE', method: 'DELETE',
credentials: 'include', credentials: 'include',
@ -257,6 +253,14 @@
}); });
} }
function confirmDelete(message, onConfirm) {
if (window.showConfirm) {
window.showConfirm(message, onConfirm, { danger: true, confirmText: 'Delete' });
return;
}
if (window.confirm(message)) onConfirm();
}
// ── Render ───────────────────────────────────────────────── // ── Render ─────────────────────────────────────────────────
function scheduleRender(delay) { function scheduleRender(delay) {
if (renderTimer) clearTimeout(renderTimer); if (renderTimer) clearTimeout(renderTimer);
@ -394,4 +398,3 @@
document.addEventListener('visibilitychange', function () { document.addEventListener('visibilitychange', function () {
if (document.visibilityState === 'hidden') flushSaveIfPending(); if (document.visibilityState === 'hidden') flushSaveIfPending();
}); });
})();

View file

@ -7,6 +7,7 @@ const moduleEntrypoints = [
'public/js/calculators.js', 'public/js/calculators.js',
'public/js/clinicalAssistant.js', 'public/js/clinicalAssistant.js',
'public/js/admin.js', 'public/js/admin.js',
'public/js/diagrams.js',
'public/js/notes.js', 'public/js/notes.js',
'public/js/wellVisit.js' 'public/js/wellVisit.js'
]; ];

View file

@ -17,7 +17,7 @@ const assert = require('node:assert/strict');
const { JSDOM } = require('jsdom'); const { JSDOM } = require('jsdom');
const createDOMPurify = require('dompurify'); const createDOMPurify = require('dompurify');
// Match the allowlist used in public/js/notes.js `sanitizeHtml`. // Match the allowlist used in public/js/notes/utils.js `sanitizeHtml`.
const ALLOWED_TAGS = ['p','br','strong','em','b','i','u','s','h2','h3','h4', const ALLOWED_TAGS = ['p','br','strong','em','b','i','u','s','h2','h3','h4',
'ul','ol','li','a','blockquote','code','pre','hr']; 'ul','ol','li','a','blockquote','code','pre','hr'];
const ALLOWED_ATTR = ['href','target','rel']; const ALLOWED_ATTR = ['href','target','rel'];