import { openPageDialog } from './page-picker.js'; import { openDocuments } from './media.js'; /* * Ein Linkfeld in der Verwaltung: die Adresse bleibt ein Textfeld - eine fremde Seite tippt man * ein -, daneben „Seite wählen“ und „PDF wählen“. Ohne Skript bleibt das Textfeld allein. * * Markup:
mit einem darin. Felder, die später * erscheinen (neue Menüeinträge), bekommen ihre Knöpfe beim ersten Fokus. */ const enhance = field => { if (field.dataset.linkReady) return; const input = field.querySelector('[data-link-input]'); if (!input) return; field.dataset.linkReady = '1'; const row = document.createElement('div'); row.className = 'link-field-actions'; const choose = value => { input.value = value; input.dispatchEvent(new Event('input', { bubbles: true })); input.dispatchEvent(new Event('change', { bubbles: true })); input.focus(); }; const page = document.createElement('button'); page.type = 'button'; page.className = 'text-button'; page.textContent = 'Seite wählen'; page.addEventListener('click', () => openPageDialog({ onChoose: item => choose(item.path === 'home' ? '/' : `/${item.path}`) })); const pdf = document.createElement('button'); pdf.type = 'button'; pdf.className = 'text-button'; pdf.textContent = 'PDF wählen'; pdf.addEventListener('click', () => openDocuments({ onChoose: item => choose(item.src) })); row.append(page, pdf); input.after(row); }; const all = () => document.querySelectorAll('[data-link-field]').forEach(enhance); all(); new MutationObserver(all).observe(document.body, { childList: true, subtree: true });