Ignore:
Timestamp:
08/16/2026 03:06:18 PM (3 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
a5caa73
Parents:
a5515b4 (diff), 9026de5 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Bibliotheek en album-federatie terug op main (shaer-0nh, shaer-756s)

Achttien commits, in drie brokken.

DE BIBLIOTHEEK. Een Library-skelet met een eigen volgerssoort: wie de
bibliotheek volgt krijgt de muziek en met opzet niet de gewone posts, en
die staan daarom in een eigen tabel -- een vlag die iemand vergeet te
filteren bezorgt stilletjes de Krant aan mensen die er niet om vroegen.
Daarna wat er nodig bleek om werkelijk gelezen te worden: audience
(zonder dat gaf hun create() een KeyError en dus een 500 op onze URL),
de ongeordende collectievorm, en paginering op elke collectie die first
belooft -- die laatste vond meteen dat featured hetzelfde gat had.

HET VOCABULAIRE. fw:track in de kleine vorm die Emissary ook stuurt,
artist_credit met de site-actor als Artist (mogelijk geworden door de
MusicBrainz-koppeling), en het album als ingesloten fw:Album met
released, musicbrainzId en een eigen artist_credit. Daarvoor kwamen er
twee kolommen op playlists, alleen bij kind='album' en afgedwongen in
PlaylistService -- niet in het scherm, want de API ligt open.

HET BEHEER. De vijf mediapagina's stonden op drie verschillende
ontwerpen; nu op een gedeelde ax-romp, met de primitieven op een plek in
plaats van in acht kopieen. De playlist-modal ging alsnog door i18n: die
teksten stonden hard in het script, wat niet opviel omdat het toevallig
de brontaal was.

WAT ER NIET IN ZIT: bitrate en size top-level als fw:. Dat is bewust
(shaer-3f8a). Hun eigen outbox zet ze op de Link, net als wij, en het
wordt een gesprek in plaats van een aanpassing -- briefing in
~/bewaard/funkwhale-briefing-en.md.

Gereedschap dat meekomt: scripts/funkwhale-gat.mjs meet het gat naar hun
ingest, admin-css.mjs en admin-css-gelijk.mjs ontleden en vergelijken de
beheer-CSS, render-admin-views.mjs rendert de views gevuld en leeg. Die
laatste drie omdat de testsuite geen enkele view aanraakt.

Co-Authored-By: Claude Opus 5 <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/views/partials/playlist-editor.ejs

    ra5515b4 r749605a  
    9999}
    100100.pl-field { display: flex; flex-direction: column; gap: .25rem; }
     101/* `display: flex` wint van het hidden-attribuut, dus zonder deze regel doet
     102   [hidden] op een .pl-field NIETS -- het veld blijft gewoon staan. De
     103   uitgavevelden schakelen daarop (album versus afspeellijst). */
     104.pl-field[hidden] { display: none; }
    101105.pl-field-full { grid-column: 1 / -1; }
    102106.pl-field > span {
     
    280284</style>
    281285
    282 <%# Het script staat in assets/js/mod/playlist-editor.js; de gegevens via partials/page-data.ejs (shaer-bqr). %>
     286<%# Het script staat in assets/js/mod/playlist-editor.js.
     287
     288    EIGEN GEGEVENSBLOK, niet dat van partials/page-data.ejs. pageData() pakt met
     289    querySelector EEN blok, en deze modal wordt ingesloten op pagina's die er al
     290    zelf een hebben (admin-playlists, post-edit) -- een tweede blok zou daar
     291    stilzwijgend genegeerd worden en dan stond de hele modal weer in het
     292    Nederlands. Eigen kenmerk, eigen lezer.
     293
     294    De teksten stonden hier tot 16-8 hard in het script. Dat viel niet op omdat
     295    het toevallig de brontaal was: een Engelse of Duitse beheerder kreeg een
     296    Nederlandse modal midden in een vertaalde pagina. %>
     297<script type="application/json" data-playlist-editor-i18n><%- JSON.stringify({
     298  titel: t('ple.titel'), artiest: t('ple.artiest'), jaar: t('ple.jaar'), type: t('ple.type'),
     299  k_album: t('ple.k_album'), k_playlist: t('ple.k_playlist'),
     300  uitgave: t('ple.uitgave'), mb_release: t('ple.mb_release'),
     301  cover: t('ple.cover'), cover_kies: t('ple.cover_kies'), cover_url: t('ple.cover_url'),
     302  tracks_in: t('ple.tracks_in'), sleep_hint: t('ple.sleep_hint'),
     303  beschikbaar: t('ple.beschikbaar'), zoek: t('ple.zoek'), geen_res: t('ple.geen_res'),
     304  leeg_sel: t('ple.leeg_sel'),
     305  t_edit: t('ple.t_edit'), t_new: t('ple.t_new'), dialoog: t('ple.dialoog'),
     306  sluiten: t('ple.sluiten'), annuleren: t('ple.annuleren'),
     307  opslaan: t('ple.opslaan'), aanmaken: t('ple.aanmaken'),
     308  bezig_opslaan: t('ple.bezig_opslaan'),
     309  versleep: t('ple.versleep'), verwijder: t('ple.verwijder'),
     310  geen_audio: t('ple.geen_audio'), e_geen_tracks: t('ple.e_geen_tracks'),
     311  e_tracks: t('ple.e_tracks'), e_opslaan: t('ple.e_opslaan'), e_mislukt: t('ple.e_mislukt'),
     312  e_alleen_afb: t('ple.e_alleen_afb'), bezig: t('ple.bezig'), e_upload: t('ple.e_upload'),
     313}).replace(/</g, '\\u003c') %></script>
Note: See TracChangeset for help on using the changeset viewer.