Changeset 8e1af9c in Klonkt
- Timestamp:
- 08/22/2026 09:11:56 AM (3 weeks ago)
- Branches:
- main
- Children:
- 16fd4fe
- Parents:
- 25dd08f
- git-author:
- Robin <roboburr@…> (08/22/2026 09:11:36 AM)
- git-committer:
- Robin <roboburr@…> (08/22/2026 09:11:56 AM)
- Files:
-
- 1 added
- 6 edited
-
src/assets/js/mod/post-edit.js (modified) (3 diffs)
-
src/config/post-types.js (modified) (2 diffs)
-
src/services/AudioEmbedService.js (modified) (3 diffs)
-
src/services/i18n.js (modified) (3 diffs)
-
src/views/pages/post-edit.ejs (modified) (2 diffs)
-
src/views/shell.ejs (modified) (1 diff)
-
test/mixtape-ui.test.js (added)
Legend:
- Unmodified
- Added
- Removed
-
src/assets/js/mod/post-edit.js
r25dd08f r8e1af9c 8 8 // Dezelfde regel die de server gebruikt -- zie shared/post-music-type.js voor 9 9 // waarom hij daar staat en niet twee keer. 10 import { afleidenUitInsluitingen } from '../shared/post-music-type.js';10 import { afleidenUitInsluitingen, SOORTEN } from '../shared/post-music-type.js'; 11 11 12 12 // De oude inline scripts draaiden bij ELKE render; een module draait zijn … … 1020 1020 // alleen als ijkpunt onthouden. Anders zou een oude post van type veranderen 1021 1021 // door hem te bekijken. 1022 const VOLGBAAR = new Set(['post', 'album', 'playlist', ' audio']);1022 const VOLGBAAR = new Set(['post', 'album', 'playlist', 'mixtape', 'audio']); 1023 1023 const kindVan = new Map(); 1024 1024 let vorigeAfleiding = null; … … 1028 1028 .then((j) => { 1029 1029 if (j && j.ok && Array.isArray(j.playlists)) { 1030 for (const p of j.playlists) kindVan.set(p.id, p.kind === 'playlist' ? 'playlist' : 'album'); 1030 // De soort ZOALS HIJ IS. Dit was `=== 'playlist' ? 'playlist' : 'album'`, 1031 // en dan ziet de editor een mixtape als album terwijl de server hem 1032 // als mixtape opslaat: het type verspringt onder je handen bij het 1033 // bewaren. SOORTEN is dezelfde lijst die de server gebruikt. 1034 for (const p of j.playlists) kindVan.set(p.id, SOORTEN.includes(p.kind) ? p.kind : 'album'); 1031 1035 } 1032 1036 }) -
src/config/post-types.js
r25dd08f r8e1af9c 13 13 * zo'n post mag zijn type niet stilzwijgend weggooien -- tot de backfill hem 14 14 * heeft omgezet. Daarna kan audio hier weg. 15 * 16 * MIXTAPE erbij (Robins idee, 21-8): een bandje, samengesteld uit de nummers 17 * van een playlist, dat alleen vooruit en achteruit speelt. Het draagt muziek, 18 * dus het deelt het muziekpaneel en de afleiding met album en playlist -- het 19 * verschil zit in de playlist die je insluit, niet in wat je hier uploadt. 15 20 */ 16 21 17 22 /** Types die een gebruiker in de editor kan kiezen. */ 18 export const KEUZE_TYPES = ['post', 'foto', 'video', 'album', 'playlist' ];23 export const KEUZE_TYPES = ['post', 'foto', 'video', 'album', 'playlist', 'mixtape']; 19 24 20 25 /** Alles wat in de kolom posts.type mag staan, inclusief wat er historisch is. */ … … 22 27 23 28 /** De types die muziek dragen -- ze delen hetzelfde paneel en dezelfde afleiding. */ 24 export const MUZIEK_TYPES = new Set(['album', 'playlist', 'audio' ]);29 export const MUZIEK_TYPES = new Set(['album', 'playlist', 'audio', 'mixtape']); -
src/services/AudioEmbedService.js
r25dd08f r8e1af9c 10 10 * </figure> 11 11 */ 12 13 // Dezelfde lijst soorten als de server en de editor gebruiken. Zie 14 // assets/js/shared/post-music-type.js: die module is puur, dus hij mag hier. 15 import { SOORTEN } from '../assets/js/shared/post-music-type.js'; 12 16 13 17 // "Open in" icons (brand-colored via CSS .pat-link--). … … 538 542 539 543 const albumDomId = 'album-' + id; 540 const kind = (pl.kind === 'playlist') ? 'playlist' : 'album'; 541 const kindLabel = kind === 'playlist' ? '📃 Playlist' : '💿 Album'; 544 // De soort zoals hij is opgeslagen. Stond hier als ternair met twee 545 // uitkomsten, en dan draagt een mixtape het jasje en het woord van een 546 // album -- dezelfde vorm die op vier andere plekken al misging. 547 // DE SPELER IS ER NOG NIET. Een mixtape rendert voorlopig als de gewone 548 // lijst; wat hier af is, is dat hij zichzelf goed noemt. 549 const kind = SOORTEN.includes(pl.kind) ? pl.kind : 'album'; 550 const KIND_LABEL = { album: '💿 Album', playlist: '📃 Playlist', mixtape: '📼 Mixtape' }; 551 const kindLabel = KIND_LABEL[kind] || KIND_LABEL.album; 542 552 const titleH = this.escape(pl.title || 'Naamloos'); 543 553 const artistH = this.escape(pl.artist || ''); … … 638 648 data-pcms-track-url="${firstUrl}" 639 649 data-pcms-album-id="${albumDomId}" 640 aria-label="Speel ${kind === 'playlist' ? 'playlist' : 'album'}">650 aria-label="Speel ${kind}"> 641 651 ${coverH 642 652 ? `<span class="post-album-cover" style="background-image:url('${coverH}')"></span>` -
src/services/i18n.js
r25dd08f r8e1af9c 770 770 'pedit.type_audio': 'Audio', 771 771 'pedit.type_album': 'Album', 772 'pedit.type_playlist': 'Playlist', 772 'pedit.type_playlist': 'Playlist', 'pedit.type_mixtape': 'Mixtape', 773 773 'pedit.s_type': 'Wat voor post?', 774 774 'pedit.audio_up_drop': 'Sleep audio hierheen of klik om te kiezen', … … 1779 1779 'pedit.type_audio': 'Audio', 1780 1780 'pedit.type_album': 'Album', 1781 'pedit.type_playlist': 'Playlist', 1781 'pedit.type_playlist': 'Playlist', 'pedit.type_mixtape': 'Mixtape', 1782 1782 'pedit.s_type': 'What kind of post?', 1783 1783 'pedit.audio_up_drop': 'Drop audio here or click to choose', … … 2788 2788 'pedit.type_audio': 'Audio', 2789 2789 'pedit.type_album': 'Album', 2790 'pedit.type_playlist': 'Playlist', 2790 'pedit.type_playlist': 'Playlist', 'pedit.type_mixtape': 'Mixtape', 2791 2791 'pedit.s_type': 'Was für ein Beitrag?', 2792 2792 'pedit.audio_up_drop': 'Audio hierher ziehen oder klicken', -
src/views/pages/post-edit.ejs
r25dd08f r8e1af9c 24 24 Foto → cover/insert hint. %> 25 25 <% var ptype = post.type || 'post'; %> 26 <% var TYPE_ICONS = { post: '📝', foto: '📷', video: '🎬', album: '💿', playlist: '📃', audio: '🎵' }; %>26 <% var TYPE_ICONS = { post: '📝', foto: '📷', video: '🎬', album: '💿', playlist: '📃', mixtape: '📼', audio: '🎵' }; %> 27 27 <%# Audio is geen keuze meer (shaer-cyg): alles wat muziek is landt op Album 28 28 of Playlist. De knop blijft alleen staan zolang deze post nog audio IS, 29 29 zodat een oude post niet stilzwijgend van type verandert bij het openen. %> 30 30 <% var TYPES = (typeof keuzeTypes !== 'undefined' && keuzeTypes.length) 31 ? keuzeTypes.slice() : ['post','foto','video','album','playlist' ]; %>31 ? keuzeTypes.slice() : ['post','foto','video','album','playlist','mixtape']; %> 32 32 <% if (ptype === 'audio' && TYPES.indexOf('audio') < 0) TYPES.push('audio'); %> 33 33 <section class="pe-card pe-type-card"> … … 45 45 46 46 <%# Muziek: inline upload (transcodes + drops [[track]] into the post). 47 Album en Playlist delen dit paneel -- het verschil zit in de playlist, 48 niet in wat je hier uploadt. Audio staat er alleen nog voor oude posts. %> 49 <div class="pe-type-panel" data-panel="album playlist audio" hidden> 47 Album, Playlist en Mixtape delen dit paneel -- het verschil zit in de 48 playlist die je insluit, niet in wat je hier uploadt. Audio staat er 49 alleen nog voor oude posts. %> 50 <div class="pe-type-panel" data-panel="album playlist mixtape audio" hidden> 50 51 <div class="pe-audio-up" id="pe-audio-drop" tabindex="0" role="button" aria-label="<%= t('pedit.audio_up_drop') %>"> 51 52 <input type="file" id="pe-audio-file" accept="audio/*,.mp3,.m4a,.ogg,.opus,.flac,.wav" multiple hidden> -
src/views/shell.ejs
r25dd08f r8e1af9c 505 505 // Eén nummer voor de hele map. Te vaak bumpen kost één download; te weinig 506 506 // bumpen kost een bugfix die nooit aankomt. 507 var MOD_V = 5 0;507 var MOD_V = 51; 508 508 509 509 // name -> 1 (aan het laden) of de module-namespace (geladen). Een module
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)