(function () { 'use strict'; var textarea = document.getElementById('description'); if (!textarea) return; var form = textarea.closest('form'); if (!form) return; // Create editor container var editorContainer = document.createElement('div'); editorContainer.id = 'description-editor'; textarea.parentNode.insertBefore(editorContainer, textarea.nextSibling); // Hide original textarea textarea.style.display = 'none'; // Determine initial content var initialContent = textarea.value || ''; var isHtml = /<[a-z][\s\S]*>/i.test(initialContent); // Better-Table-Modul registrieren (idempotent) if (typeof quillBetterTable !== 'undefined') { Quill.register({ 'modules/better-table': quillBetterTable }, true); } // Initialize Quill auf Goldstandard-Compact (kein Image/Video) var quill = new Quill('#description-editor', { theme: 'snow', placeholder: 'Beschreibung eingeben...', modules: { toolbar: { container: window.QuillToolbarPresets.compact(), handlers: { table: function () { var tableModule = this.quill.getModule('better-table'); if (tableModule) tableModule.insertTable(3, 3); } } }, table: false, 'better-table': window.QuillToolbarPresets.betterTableConfig(), keyboard: (typeof quillBetterTable !== 'undefined') ? { bindings: quillBetterTable.keyboardBindings } : undefined, imageResize: true } }); // Load existing content via dangerouslyPasteHTML statt innerHTML — // so behält Quill 2.x auch alte Listen-Strukturen korrekt. if (initialContent !== '') { if (isHtml) { quill.clipboard.dangerouslyPasteHTML(0, initialContent, 'silent'); } else { // Plain text: convert newlines to paragraphs var paragraphs = initialContent.split(/\n\n+/); var html = paragraphs.map(function (p) { var escaped = p.replace(/&/g, '&').replace(//g, '>'); escaped = escaped.replace(/\n/g, '
'); return '

' + escaped + '

'; }).join(''); quill.clipboard.dangerouslyPasteHTML(0, html, 'silent'); } } // Sync Quill content to textarea before form submit form.addEventListener('submit', function () { var html = quill.root.innerHTML || ''; // Treat Quill empty state as empty string if (html === '


' || html.replace(/

\s*\s*<\/p>/g, '').trim() === '') { textarea.value = ''; } else { textarea.value = html; } }); })();