feat: CSV-Import/-Export für Gerichte/Allergene/Zusatzstoffe, RSS-Fix für mehrere Essenszeiten
CSV-Import/-Export (Gerichte, Allergene, Zusatzstoffe): neue Export-/ Import-Routen unter app/api/*/export und */import, hand-geschriebener CSV-Parser/-Serializer (lib/csv.ts, keine neue Abhängigkeit), Upsert über Kürzel (Allergene/Zusatzstoffe) bzw. exakten Namen (Gerichte, mit Ambiguitäts-Check bei Namensdopplung). UI-Buttons in DishManager und CodeListManager. RSS-Feed: <content:encoded> zusätzlich zu <description> ausgeben, da mehrere Feed-Reader description als kürzbare Vorschau behandeln und dadurch bei mehreren Essenszeiten pro Tag nur die erste zeigten. Version 1.7.0. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -80,12 +80,20 @@ export async function GET() {
|
||||
<guid isPermaLink="false">${appUrl}/feed.xml#${iso}</guid>
|
||||
<pubDate>${pubDate}</pubDate>
|
||||
<description><![CDATA[${dayContent}]]></description>
|
||||
<content:encoded><![CDATA[${dayContent}]]></content:encoded>
|
||||
</item>`;
|
||||
})
|
||||
.join("\n");
|
||||
|
||||
// "description" gilt bei vielen Feed-Readern (Thunderbird, Outlook,
|
||||
// etliche Apps) als reine Kurzfassung/Vorschau und wird eigenmächtig
|
||||
// gekürzt – dadurch war z. B. bei mehreren Essenszeiten pro Tag oft nur
|
||||
// die erste sichtbar. "content:encoded" (RSS-Content-Modul) gilt als
|
||||
// vollständiger Artikeltext und wird von den meisten Readern
|
||||
// ungekürzt angezeigt, wenn vorhanden – redundant zu description für
|
||||
// Reader ohne Unterstützung des Moduls.
|
||||
const xml = `<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss version="2.0">
|
||||
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
||||
<channel>
|
||||
<title>${escapeXml(SITE_TITLE)} – Speiseplan</title>
|
||||
<link>${appUrl}</link>
|
||||
|
||||
Reference in New Issue
Block a user