<% // Admin: Playlists management // Shows all playlists for current site, with new/edit/delete actions. // The editor itself is the same modal that's used from the post-editor. const _csrf = (typeof csrfToken !== 'undefined' && csrfToken) || ''; %> <%# De gedeelde ax-*-primitieven. MOET boven het eigen style-blok van deze pagina staan: wat hieronder blijft staan wijkt bewust af en hoort dus later te komen, anders wint de partial ervan. %> <%- include('../partials/admin-styles') %>
<%- include('../partials/admin-back') %> <%- include('../partials/media-tabs', { active: 'playlists', audioOn: true }) %>

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

<%= t('apl.tagline_pre') %> [[playlist:<id>]]<%= t('apl.tagline_post') %>

<%# Sticky-on-mobile create button โ€” easier reach than a header button. %>
<% if (!playlists.length) { %>
๐Ÿ“ƒ

<%= t('apl.none') %>

<%= t('apl.none_sub') %>

<% } else { %> <% // Pre-fetch loop labels (defensive โ€” keep `t` calls out of the loop body). var _aplPlaylist = t('apl.pill_playlist'); var _aplAlbum = t('apl.pill_album'); var _aplMixtape = t('apl.pill_mixtape'); // Een soort met een eigen teken en een eigen woord. De ternair die hier // stond kende er maar twee, en toonde een mixtape dus als album. var _aplTeken = { album: '๐Ÿ’ฟ', playlist: '๐Ÿ“ƒ', mixtape: '๐Ÿ“ผ' }; var _aplWoord = { album: _aplAlbum, playlist: _aplPlaylist, mixtape: _aplMixtape }; var _aplTrack = t('apl.track'); var _aplTracks = t('apl.tracks'); var _aplCopy = t('apl.copy_click'); var _aplEdit = t('apl.edit'); var _aplDelete = t('apl.delete'); %> <% } %>
<%# Editor modal lives in its own partial so the post-editor can include it too %> <%- include('../partials/playlist-editor', { csrfToken: _csrf }) %> <%# Het script staat in assets/js/mod/admin-playlists.js; de gegevens via partials/page-data.ejs (shaer-bqr). %> <%- include('../partials/page-data', { pageData: { csrf: _csrf, copied: t('apl.copied'), delConfirm: t('apl.delete_confirm'), delFailed: t('apl.delete_failed') } }) %>