This commit is contained in:
2026-01-14 02:01:15 +01:00
parent d49c326c90
commit 6c67d37adc
2 changed files with 44 additions and 8 deletions

View File

@@ -218,6 +218,33 @@ require dirname(__DIR__) . '/../structure/layout_start.php';
</div> </div>
<div id="setupStatus" class="text-xs text-slate-500">Noch nicht gespeichert.</div> <div id="setupStatus" class="text-xs text-slate-500">Noch nicht gespeichert.</div>
</form> </form>
<div class="border-t border-slate-200 pt-4">
<h4 class="text-base font-semibold mb-2">Schriftarten (optional)</h4>
<p class="text-sm text-slate-600 mb-3">
Eigene Fonts vom Hoster: gib einen lokalen Schriftarten-Ordner (plus oeffentliche URL) an
oder trage direkte Font-URLs ein. Das System erstellt @font-face automatisch und zeigt die
Fonts im Editor an.
</p>
<div id="bridgeFontsForm" class="space-y-3">
<label class="block text-sm text-slate-600">Schriftarten-Ordner (Serverpfad, optional)
<input type="text" name="fonts_dir" class="input mt-1" placeholder="/var/www/site/public/fonts">
</label>
<label class="block text-sm text-slate-600">Oeffentliche Basis-URL zum Ordner
<input type="text" name="fonts_url_base" class="input mt-1" placeholder="https://deine-seite.de/fonts">
<p class="text-xs text-slate-500 mt-1">Wird genutzt, um die Dateien im Editor/Email zu laden.</p>
</label>
<label class="block text-sm text-slate-600">Direkte Font-URLs (eine pro Zeile, optional)
<textarea name="fonts_urls" class="input mt-1 h-28" placeholder="Family|https://deine-seite.de/fonts/MyFont.woff2"></textarea>
<p class="text-xs text-slate-500 mt-1">
Format: <code>Family|URL</code> oder nur <code>URL</code>. Erlaubte Endungen: woff2, woff, ttf, otf.
</p>
</label>
<p class="text-xs text-slate-500">
Hinweis: woff2/woff ist empfohlen, ttf/otf funktioniert meist, wird aber nicht von allen Mail-Clients geladen.
</p>
</div>
</div>
</div> </div>
</dialog> </dialog>

View File

@@ -491,14 +491,18 @@
saveBtn.style.cursor = 'pointer'; saveBtn.style.cursor = 'pointer';
saveBtn.addEventListener('click', () => { saveBtn.addEventListener('click', () => {
const html = content.innerHTML; const html = content.innerHTML;
if (component.is && component.is('text')) { try {
component.set && component.set('content', html); if (component.components) {
} else if (component.components) {
component.components(html); component.components(html);
} }
if (component.set) {
component.set('content', html);
component.trigger && component.trigger('change:content');
}
if (component.view && component.view.render) { if (component.view && component.view.render) {
component.view.render(); component.view.render();
} }
} catch {}
modal.close(); modal.close();
}); });
@@ -612,6 +616,11 @@
editor.on('component:selected', (model) => ensureTextToolbarButton(editor, model)); editor.on('component:selected', (model) => ensureTextToolbarButton(editor, model));
editor.on('component:add', (model) => ensureTextToolbarButton(editor, model)); editor.on('component:add', (model) => ensureTextToolbarButton(editor, model));
editor.on('component:dblclick', (model) => {
if (model && model.is && model.is('text')) {
openRichTextModal(editor, model);
}
});
}; };
const loadDynamicFonts = async () => { const loadDynamicFonts = async () => {