diff --git a/public/assets/js/ui-list.js b/public/assets/js/ui-list.js index 067246f..6f53805 100644 --- a/public/assets/js/ui-list.js +++ b/public/assets/js/ui-list.js @@ -59,21 +59,79 @@ async function openContentEditor(item, section) { } } -async function openTemplateEditor(item, section) { - const dlg = document.getElementById('editTemplateDialog'); - const form = document.getElementById('editTemplateForm'); - const inpName = document.getElementById('edit_tpl_name'); - const inpApiName = document.getElementById('edit_tpl_api_name'); - const apiWarn = document.getElementById('edit_tpl_api_warn'); - const btnCancel = document.getElementById('editTemplateCancel'); +async function openTemplateManager(item, section) { + const dlg = document.getElementById('manageTemplateDialog'); + const inpName = document.getElementById('manage_tpl_name'); + const inpApiName = document.getElementById('manage_tpl_api_name'); + const apiWrap = document.getElementById('manage_tpl_api_wrap'); + const apiWarn = document.getElementById('manage_tpl_api_warn'); + const badge = document.getElementById('manage_tpl_badge'); + const versionsWrap = document.getElementById('manage_tpl_versions'); + const previewFrame = document.getElementById('manage_tpl_preview'); + const btnClose = document.getElementById('manageTemplateClose'); + const btnSave = document.getElementById('manageTemplateSave'); + const btnDelete = document.getElementById('manageTemplateDelete'); + const deleteHint = document.getElementById('manage_tpl_delete_hint'); const detail = await fetchContentItem(item.id, section.id).catch(() => ({})); const row = detail?.item || detail?.data || detail || {}; const initialApi = row.api_name || ''; + if (badge) badge.textContent = `ID ${item.id}`; if (inpName) inpName.value = row.name || ''; if (inpApiName) inpApiName.value = initialApi; if (apiWarn) apiWarn.classList.add('hidden'); + if (apiWrap) apiWrap.classList.toggle('hidden', !section?.is_template); + + let versions = []; + let activeId = 0; + + const renderPreview = (html) => { + if (!previewFrame) return; + previewFrame.srcdoc = '
' + (html || '(leer)') + ''; + }; + + const updateDeleteState = () => { + const hasActive = !!activeId; + if (btnDelete) btnDelete.disabled = hasActive; + if (deleteHint) { + deleteHint.textContent = hasActive + ? 'Aktive Version vorhanden – Löschen deaktiviert.' + : 'Nur möglich, wenn keine aktive Version existiert.'; + } + }; + + const loadVersions = async () => { + const res = await apiAction('content_versions.list', { method: 'GET', data: { content_id: item.id } }).catch(() => ({})); + versions = Array.isArray(res?.items) ? res.items : []; + activeId = 0; + versions.forEach(v => { + if (Number(v.is_active) === 1) activeId = Number(v.id || 0); + }); + renderVersions(); + updateDeleteState(); + }; + + const renderVersions = () => { + if (!versionsWrap) return; + if (!versions.length) { + versionsWrap.innerHTML = '