← Sendungen
{data.show.title}
{data.show.startsAtUtc ? `${berlinDate(data.show.startsAtUtc)} Uhr` : 'Termin offen'}
{plannedCount}Pieces
{formatDuration(data.show.totalDurationSeconds)}Planzeit
Live-Steuerung ↗
{#if form?.error}
{form.error}
{/if}
{#if form?.success}
{form.success}
{/if}
{copyMessage}
Sendungsdaten und Twitch-Texte
{formatDuration(data.show.totalDurationSeconds)}
{#each data.show.sections as section, index (section.id)}
{
event.preventDefault();
event.stopPropagation();
}}
ondrop={(event) => {
event.stopPropagation();
dropAtPreview();
}}
animate:flip={{ duration: 180 }}
>
{#if dropPreview?.kind === 'section' && dropPreview.position === index}
Hier einfügen{draggedTitle()}
{/if}
{
if (dragged?.kind === 'section') previewSection(event, index);
else previewUsage(event, section.id, section.usages.length, false);
}}
ondrop={dropAtPreview}
>
startDrag('section', section.id, event)}
ondragend={finishDrag}
>
{String(index + 1).padStart(2, '0')}
{section.category ?? 'Offen'}
{section.name}
{formatClock(section.durationSeconds)}
{#if section.usages.length}
{#each section.usages as usage, usageIndex (usage.id)}
{
event.preventDefault();
event.stopPropagation();
}}
ondrop={(event) => {
event.stopPropagation();
dropAtPreview();
}}
animate:flip={{ duration: 180 }}
>
{#if showsUsagePreview(section.id, usageIndex)}
{draggedTitle()}Hier einfügen
{/if}
previewUsage(event, section.id, usageIndex)}
ondrop={(event) => {
event.stopPropagation();
dropAtPreview();
}}
>
{
event.stopPropagation();
startDrag('usage', usage.id, event);
}}
ondragend={finishDrag}
>
{usage.title}{formatClock(usage.durationSeconds)}
{/each}
{#if showsUsagePreview(section.id, section.usages.length)}
{draggedTitle()}Hier einfügen
{/if}
{:else}
{#if showsUsagePreview(section.id, 0)}
{draggedTitle()}Hier einfügen
{/if}
previewUsage(event, section.id, 0, false)}
ondrop={(event) => {
event.stopPropagation();
dropAtPreview();
}}
>
Leerer Abschnitt · Piece aus dem Fundus hinzufügen oder hierher ziehen
{/if}
Abschnitt bearbeiten
{/each}
{#if dropPreview?.kind === 'section' && dropPreview.position === data.show.sections.length}
event.preventDefault()}
ondrop={dropAtPreview}
>
Hier einfügen{draggedTitle()}
{/if}
previewUsage(event, null, data.show.reserve.length, false)}
ondrop={dropAtPreview}
>
{#each data.show.reserve as usage, usageIndex (usage.id)}
{
event.preventDefault();
event.stopPropagation();
}}
ondrop={(event) => {
event.stopPropagation();
dropAtPreview();
}}
animate:flip={{ duration: 180 }}
>
{#if showsUsagePreview(null, usageIndex)}
{draggedTitle()}Hier in die Reserve einfügen
{/if}
previewUsage(event, null, usageIndex)}
ondrop={(event) => {
event.stopPropagation();
dropAtPreview();
}}
>
startDrag('usage', usage.id, event)}
ondragend={finishDrag}
>
{usage.title}{formatClock(usage.durationSeconds)}
{/each}
{#if showsUsagePreview(null, data.show.reserve.length)}
{draggedTitle()}Hier in die Reserve einfügen
{/if}
{#if !data.show.reserve.length}
Pieces lassen sich hier parken, ohne die geplante Dauer zu erhöhen.
{/if}