← <%= t('nav.admin') %>

<%- include('../partials/media-tabs', { active: 'audio', audioOn: true }) %>

<%= t('aaud.title') %>

<%= t('aaud.tagline_pre') %> [[track:<id>]] <%= t('aaud.tagline_post') %>

<% if (success) { %>
<%= success %>
<% } %> <% if (error) { %>
<%= error %>
<% } %> <%# ── UPLOAD ──────────────────────────────────────────────── %>
<%= t('aaud.upload') %>
<%# Bulk drag-drop zone. Multiple files at once, transcoded sequentially. Title is auto-derived from each filename. Artist/album/cover are SHARED across the batch (set once, applied to every track) — same pattern as iTunes/Plex bulk-add. %>
<%# Shared metadata fields (apply to ALL files in the batch). %>
<%# The drop-zone itself. Click anywhere to open file picker. %> <%# Per-file progress list. Populated by JS as files are queued. %>
<%# ── TRACK LIST ─────────────────────────────────────────── %>
<%= t('aaud.tracks') %> <%= tracks.length %>
<% if (!tracks.length) { %>

<%= t('aaud.no_tracks') %>

<% } else { %> <% // Pre-fetch loop labels — `t` is shadowed by the loop var below. var _aaudUntitled = t('aaud.untitled'); var _aaudPlay = t('aaud.play'); var _aaudEdit = t('aaud.edit'); var _aaudDlOn = t('aaud.dl_on'); var _aaudDlOff = t('aaud.dl_off'); var _aaudDelete = t('aaud.delete'); var _aaudCopy = t('aaud.copy_click'); var _aaudDelConfirm = t('aaud.delete_confirm'); %> <% } %>
<% if ((typeof premiumUnlocked === 'undefined' || premiumUnlocked) && typeof embedUrl !== 'undefined') { %>

🔊 <%= t('aaud.embed_player') %>

<%= t('aaud.embed_hint') %>

▶ <%= t('aaud.preview_player') %>

<% } %>
<%# Track editor modal (exposes window.openTrackEditor) %> <%- include('../partials/track-editor', { csrfToken: (typeof csrfToken !== 'undefined' ? csrfToken : '') }) %> <%# Het script staat in assets/js/mod/admin-audio.js; de gegevens via partials/page-data.ejs (shaer-bqr). %> <%- include('../partials/page-data', { pageData: { change_failed: t('aaud.change_failed'), copied: t('aaud.copied'), create_failed: t('aaud.create_failed'), dl_off: t('aaud.dl_off'), dl_on: t('aaud.dl_on'), editor_not_loaded: t('aaud.editor_not_loaded'), err_unexpected: t('aaud.err_unexpected'), failed: t('aaud.failed'), new_track: t('aaud.new_track'), no_file: t('aaud.no_file'), pause: t('aaud.pause'), play: t('aaud.play'), st_done: t('aaud.st_done'), st_error: t('aaud.st_error'), st_queued: t('aaud.st_queued'), st_transcoding: t('aaud.st_transcoding'), st_uploading: t('aaud.st_uploading'), untitled: t('aaud.untitled') } }) %>