Formular-Infrastruktur: Contact/Demo/Helpdesk mit E-Mail- und Salesforce-Delivery, JSON-Renderer-Erweiterungen, Crop-Variants

Build-Artefakte in public/_frontend/assets nicht enthalten.
This commit is contained in:
orasche committed 2026-07-30 13:12:45 +02:00
1 parent eae40f4286
commit a739dd8fe3
51 files changed
+1598 -303

No files matched your search

@@ -118,14 +118,70 @@ class VitecContainerCollapse {
if (this.isCollapsed(uid)) {
ce.classList.add('vitec-ce-collapsed');
}
this.syncPreviewHeader(ce);
button.addEventListener('click', (event) => {
event.preventDefault();
event.stopPropagation();
const collapsed = ce.classList.toggle('vitec-ce-collapsed');
this.setCollapsed(uid, collapsed);
this.syncPreviewHeader(ce);
});
}
/**
* Keep the element's own `.element-preview-header` visible while collapsed:
* it is moved into the CE header row (after `.t3-page-ce-header-right`) and
* moved back to its original spot (placeholder marker) on expand.
*/
syncPreviewHeader(ce) {
const element = ce.querySelector(':scope > .t3-page-ce-element');
if (!element) {
return;
}
const header = element.querySelector(':scope > .t3-page-ce-header');
const body = element.querySelector(':scope > .t3-page-ce-body');
if (!header || !body) {
return;
}
const collapsed = ce.classList.contains('vitec-ce-collapsed');
if (collapsed) {
// Find THIS element's preview header (not one of a nested child CE).
let preview = null;
for (const candidate of body.querySelectorAll('.element-preview-header')) {
if (candidate.closest('.t3-page-ce') === ce) {
preview = candidate;
break;
}
}
if (!preview || header.contains(preview)) {
return;
}
const placeholder = document.createElement('span');
placeholder.className = 'vitec-preview-header-placeholder';
placeholder.hidden = true;
preview.before(placeholder);
preview.classList.add('vitec-preview-header--in-header');
const headerRight = header.querySelector('.t3-page-ce-header-right');
if (headerRight) {
headerRight.insertAdjacentElement('afterend', preview);
} else {
header.appendChild(preview);
}
} else {
const preview = header.querySelector('.element-preview-header.vitec-preview-header--in-header');
const placeholder = body.querySelector('.vitec-preview-header-placeholder');
if (preview && placeholder) {
preview.classList.remove('vitec-preview-header--in-header');
placeholder.replaceWith(preview);
} else if (preview) {
preview.classList.remove('vitec-preview-header--in-header');
body.prepend(preview);
}
}
}
}
export default new VitecContainerCollapse();