asdsad
This commit is contained in:
@@ -67,7 +67,6 @@ async function openTemplateManager(item, section) {
|
|||||||
const apiWarn = document.getElementById('manage_tpl_api_warn');
|
const apiWarn = document.getElementById('manage_tpl_api_warn');
|
||||||
const badge = document.getElementById('manage_tpl_badge');
|
const badge = document.getElementById('manage_tpl_badge');
|
||||||
const versionsWrap = document.getElementById('manage_tpl_versions');
|
const versionsWrap = document.getElementById('manage_tpl_versions');
|
||||||
const previewFrame = document.getElementById('manage_tpl_preview');
|
|
||||||
const btnClose = document.getElementById('manageTemplateClose');
|
const btnClose = document.getElementById('manageTemplateClose');
|
||||||
const btnSave = document.getElementById('manageTemplateSave');
|
const btnSave = document.getElementById('manageTemplateSave');
|
||||||
const btnDelete = document.getElementById('manageTemplateDelete');
|
const btnDelete = document.getElementById('manageTemplateDelete');
|
||||||
@@ -86,11 +85,6 @@ async function openTemplateManager(item, section) {
|
|||||||
let versions = [];
|
let versions = [];
|
||||||
let activeId = 0;
|
let activeId = 0;
|
||||||
|
|
||||||
const renderPreview = (html) => {
|
|
||||||
if (!previewFrame) return;
|
|
||||||
previewFrame.srcdoc = '<!doctype html><html><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"></head><body>' + (html || '<em>(leer)</em>') + '</body></html>';
|
|
||||||
};
|
|
||||||
|
|
||||||
const updateDeleteState = () => {
|
const updateDeleteState = () => {
|
||||||
const hasActive = !!activeId;
|
const hasActive = !!activeId;
|
||||||
if (btnDelete) btnDelete.disabled = hasActive;
|
if (btnDelete) btnDelete.disabled = hasActive;
|
||||||
@@ -121,13 +115,13 @@ async function openTemplateManager(item, section) {
|
|||||||
versionsWrap.innerHTML = versions.map(v => {
|
versionsWrap.innerHTML = versions.map(v => {
|
||||||
const isActive = Number(v.is_active) === 1;
|
const isActive = Number(v.is_active) === 1;
|
||||||
const label = `${isActive ? '✓ ' : ''}#${v.version_no} – ${formatVersionDate(v.created_at)}` + (isActive ? ' (aktiv)' : '');
|
const label = `${isActive ? '✓ ' : ''}#${v.version_no} – ${formatVersionDate(v.created_at)}` + (isActive ? ' (aktiv)' : '');
|
||||||
|
const deleteBtn = isActive ? '' : `<button class=\"btn btn-danger\" data-version-delete=\"${v.id}\">Löschen</button>`;
|
||||||
return `<div class=\"flex items-center gap-2 border rounded-lg px-3 py-2\" data-version-row=\"${v.id}\">
|
return `<div class=\"flex items-center gap-2 border rounded-lg px-3 py-2\" data-version-row=\"${v.id}\">
|
||||||
<div class=\"text-xs text-slate-600\">${label}</div>
|
<div class=\"text-xs text-slate-600\">${label}</div>
|
||||||
<div class=\"ms-auto flex gap-2\">
|
<div class=\"ms-auto flex gap-2\">
|
||||||
<button class=\"btn\" data-version-preview=\"${v.id}\">Vorschau</button>
|
|
||||||
<button class=\"btn\" data-version-edit=\"${v.id}\">Bearbeiten</button>
|
<button class=\"btn\" data-version-edit=\"${v.id}\">Bearbeiten</button>
|
||||||
${isActive ? `<button class=\"btn\" data-version-deactivate=\"${v.id}\">Deaktivieren</button>` : `<button class=\"btn\" data-version-activate=\"${v.id}\">Aktivieren</button>`}
|
${isActive ? `<button class=\"btn\" data-version-deactivate=\"${v.id}\">Deaktivieren</button>` : `<button class=\"btn\" data-version-activate=\"${v.id}\">Aktivieren</button>`}
|
||||||
<button class=\"btn btn-danger\" data-version-delete=\"${v.id}\" ${isActive ? 'disabled' : ''}>Löschen</button>
|
${deleteBtn}
|
||||||
</div>
|
</div>
|
||||||
</div>`;
|
</div>`;
|
||||||
}).join('');
|
}).join('');
|
||||||
@@ -179,15 +173,9 @@ async function openTemplateManager(item, section) {
|
|||||||
const onVersionsClick = async (ev) => {
|
const onVersionsClick = async (ev) => {
|
||||||
const target = ev.target;
|
const target = ev.target;
|
||||||
if (!target || !target.dataset) return;
|
if (!target || !target.dataset) return;
|
||||||
const vid = Number(target.dataset.versionPreview || target.dataset.versionEdit || target.dataset.versionActivate || target.dataset.versionDeactivate || target.dataset.versionDelete || 0);
|
const vid = Number(target.dataset.versionEdit || target.dataset.versionActivate || target.dataset.versionDeactivate || target.dataset.versionDelete || 0);
|
||||||
if (!vid) return;
|
if (!vid) return;
|
||||||
|
|
||||||
if (target.dataset.versionPreview !== undefined) {
|
|
||||||
const res = await apiAction('content_versions.get', { method: 'GET', data: { id: vid, content_id: item.id } }).catch(() => ({}));
|
|
||||||
const html = res?.item?.html || res?.item?.content || res?.html || res?.content || '';
|
|
||||||
renderPreview(html);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (target.dataset.versionEdit !== undefined) {
|
if (target.dataset.versionEdit !== undefined) {
|
||||||
dlg && dlg.close();
|
dlg && dlg.close();
|
||||||
const versionItem = { ...item, version_id: vid };
|
const versionItem = { ...item, version_id: vid };
|
||||||
@@ -224,13 +212,6 @@ async function openTemplateManager(item, section) {
|
|||||||
versionsWrap && versionsWrap.addEventListener('click', onVersionsClick);
|
versionsWrap && versionsWrap.addEventListener('click', onVersionsClick);
|
||||||
|
|
||||||
await loadVersions();
|
await loadVersions();
|
||||||
if (activeId) {
|
|
||||||
const res = await apiAction('content_versions.get', { method: 'GET', data: { id: activeId, content_id: item.id } }).catch(() => ({}));
|
|
||||||
const html = res?.item?.html || res?.item?.content || res?.html || res?.content || '';
|
|
||||||
renderPreview(html);
|
|
||||||
} else {
|
|
||||||
renderPreview('');
|
|
||||||
}
|
|
||||||
|
|
||||||
dlg && dlg.addEventListener('close', cleanup, { once: true });
|
dlg && dlg.addEventListener('close', cleanup, { once: true });
|
||||||
dlg && dlg.showModal();
|
dlg && dlg.showModal();
|
||||||
@@ -388,15 +369,13 @@ export async function loadList(section) {
|
|||||||
const editTplBtn = isTemplate ? `<button class='btn' data-edit='${item.id}'>Verwaltung</button>` : '';
|
const editTplBtn = isTemplate ? `<button class='btn' data-edit='${item.id}'>Verwaltung</button>` : '';
|
||||||
const testBtn = isTemplate ? `<button class='btn' data-test='${item.id}' data-name='${name}'>Testversand</button>` : '';
|
const testBtn = isTemplate ? `<button class='btn' data-test='${item.id}' data-name='${name}'>Testversand</button>` : '';
|
||||||
const prevBtn = `<button class='btn' data-preview='${item.id}'>Vorschau</button>`;
|
const prevBtn = `<button class='btn' data-preview='${item.id}'>Vorschau</button>`;
|
||||||
const delBtn = `<button class='btn btn-danger' data-del='${item.id}' data-name='${name}'>Löschen</button>`;
|
|
||||||
|
|
||||||
return `<div class='p-3 flex items-center gap-3'>
|
return `<div class='p-3 flex items-center gap-3'>
|
||||||
${nameCell}
|
${nameCell}
|
||||||
<div class='text-xs text-gray-500'>#${item.id}</div>
|
<div class='text-xs text-gray-500'>#${item.id}</div>
|
||||||
<div class='ms-auto flex gap-2 items-center'>
|
<div class='ms-auto flex gap-2 items-center'>
|
||||||
${openBtn}
|
${openBtn}
|
||||||
${versionSelect}
|
${versionSelect}
|
||||||
${[editTplBtn, testBtn, prevBtn, delBtn].filter(Boolean).join('')}
|
${[editTplBtn, testBtn, prevBtn].filter(Boolean).join('')}
|
||||||
</div>
|
</div>
|
||||||
</div>`;
|
</div>`;
|
||||||
}).join('');
|
}).join('');
|
||||||
@@ -495,32 +474,7 @@ export async function loadList(section) {
|
|||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
const delDlg = document.getElementById('deleteDialog');
|
// delete handling removed from overview
|
||||||
const delText = document.getElementById('deleteText');
|
|
||||||
const delForm = document.getElementById('deleteForm');
|
|
||||||
const delCancel = document.getElementById('deleteCancel');
|
|
||||||
let pending = null;
|
|
||||||
|
|
||||||
delCancel && (delCancel.onclick = () => { pending = null; delDlg.close(); });
|
|
||||||
|
|
||||||
scope.querySelectorAll('[data-del]').forEach(btn => btn.addEventListener('click', () => {
|
|
||||||
const id = Number(btn.dataset.del || 0);
|
|
||||||
const nm = btn.dataset.name || '';
|
|
||||||
pending = { id, name: nm };
|
|
||||||
if (delText) {
|
|
||||||
delText.innerHTML = `Soll <strong>${nm || '(ohne Name)'} #${id}</strong> wirklich gelöscht werden?`;
|
|
||||||
}
|
|
||||||
delDlg.showModal();
|
|
||||||
}));
|
|
||||||
|
|
||||||
delForm && (delForm.onsubmit = async (ev) => {
|
|
||||||
ev.preventDefault();
|
|
||||||
if (!pending) return delDlg.close();
|
|
||||||
const res = await apiAction('content.delete', { method: 'POST', data: { id: pending.id, section_id: section.id } });
|
|
||||||
delDlg.close();
|
|
||||||
toast(res && res.ok ? 'Gelöscht' : 'Löschen fehlgeschlagen', !!(res && res.ok), { duration: 3000 });
|
|
||||||
loadList(section);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -172,7 +172,7 @@ require __DIR__ . '/../partials/structure/layout_start.php';
|
|||||||
<button type="button" id="manageTemplateSave" class="btn">Speichern</button>
|
<button type="button" id="manageTemplateSave" class="btn">Speichern</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-4 grid grid-cols-1 lg:grid-cols-2 gap-4">
|
<div class="mt-4">
|
||||||
<div class="space-y-3">
|
<div class="space-y-3">
|
||||||
<label class="block">
|
<label class="block">
|
||||||
<span class="text-sm text-slate-600">Name</span>
|
<span class="text-sm text-slate-600">Name</span>
|
||||||
@@ -193,13 +193,6 @@ require __DIR__ . '/../partials/structure/layout_start.php';
|
|||||||
<span id="manage_tpl_delete_hint" class="text-xs text-slate-500"></span>
|
<span id="manage_tpl_delete_hint" class="text-xs text-slate-500"></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="space-y-2">
|
|
||||||
<div class="text-sm font-semibold">Vorschau (gewählte Version)</div>
|
|
||||||
<div class="rounded-lg border bg-slate-50 p-2">
|
|
||||||
<iframe id="manage_tpl_preview" class="w-full h-[360px] bg-white rounded-md"></iframe>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</dialog>
|
</dialog>
|
||||||
|
|||||||
Reference in New Issue
Block a user