Changeset d7e72b8 in Klonkt
- Timestamp:
- 08/09/2026 07:47:48 AM (4 weeks ago)
- Branches:
- main
- Children:
- b406d25
- Parents:
- c832064
- Files:
-
- 2 added
- 6 edited
-
package.json (modified) (1 diff)
-
scripts/backfill-post-types.mjs (added)
-
src/assets/js/mod/post-edit.js (modified) (1 diff)
-
src/config/post-types.js (added)
-
src/routes/posts.js (modified) (5 diffs)
-
src/routes/types.js (modified) (1 diff)
-
src/services/i18n.js (modified) (3 diffs)
-
src/views/pages/post-edit.ejs (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
package.json
rc832064 rd7e72b8 12 12 "migrate": "node src/db/migrate.js", 13 13 "reset-admin": "node scripts/reset-admin.mjs", 14 "backfill:durations": "node scripts/backfill-durations.mjs" 14 "backfill:durations": "node scripts/backfill-durations.mjs", 15 "backfill:post-types": "node scripts/backfill-post-types.mjs" 15 16 }, 16 17 "dependencies": { -
src/assets/js/mod/post-edit.js
rc832064 rd7e72b8 980 980 b.setAttribute('aria-checked', on ? 'true' : 'false'); 981 981 }); 982 panels.forEach(p => { p.hidden = (p.dataset.panel !== tt); }); 982 // data-panel mag meerdere types noemen: Album en Playlist delen het 983 // muziekpaneel, want het verschil zit in de playlist en niet in de upload. 984 panels.forEach(p => { 985 const voor = String(p.dataset.panel || '').trim().split(/\s+/); 986 p.hidden = !voor.includes(tt); 987 }); 983 988 } 984 989 seg.addEventListener('click', (e) => { -
src/routes/posts.js
rc832064 rd7e72b8 6 6 import ejs from 'ejs'; 7 7 import db from '../config/database.js'; 8 import { POST_TYPES, KEUZE_TYPES } from '../config/post-types.js'; 8 9 import { requireAuth, requireSiteManager, isViewer } from '../middleware/auth.js'; 9 10 import { renderPage } from '../middleware/render.js'; … … 265 266 }, 266 267 isNew: true, 268 keuzeTypes: KEUZE_TYPES, 267 269 pageTitle: 'New post', 268 270 bodyClass: 'on-special', … … 359 361 finalSlug = uniqueSlug(site.id, finalSlug); 360 362 361 const validTypes = new Set(['post', 'foto', 'video', 'audio']); 362 const finalType = validTypes.has(type) ? type : 'post'; 363 const finalType = POST_TYPES.has(type) ? type : 'post'; 363 364 const pollJson = parsePollForm(req.body); // AS2 Question definition, or null 364 365 const postId = uuid(); … … 454 455 post, 455 456 isNew: false, 457 keuzeTypes: KEUZE_TYPES, 456 458 pollLocked, 457 459 fediOpenAudio: postAudioFediOpen(site.id, post.content), … … 486 488 const newSlug = req.body.slug; 487 489 const action = req.body.action || 'save'; 488 const validTypes = new Set(['post', 'foto', 'video', 'audio']); 489 const finalType = validTypes.has(type) ? type : (post.type || 'post'); 490 const finalType = POST_TYPES.has(type) ? type : (post.type || 'post'); 490 491 491 492 // A poll that has already received votes is frozen (you can still edit the surrounding -
src/routes/types.js
rc832064 rd7e72b8 8 8 import express from 'express'; 9 9 import db from '../config/database.js'; 10 import { POST_TYPES } from '../config/post-types.js'; 10 11 import { renderPage } from '../middleware/render.js'; 11 12 12 13 const router = express.Router(); 13 const VALID_TYPES = new Set(['post', 'foto', 'video', 'audio']); 14 // Een lijst, drie gebruikers: zie config/post-types.js. 15 const VALID_TYPES = POST_TYPES; 14 16 15 17 router.get('/:type', (req, res) => { -
src/services/i18n.js
rc832064 rd7e72b8 706 706 'pedit.type_video': 'Video', 707 707 'pedit.type_audio': 'Audio', 708 'pedit.type_album': 'Album', 709 'pedit.type_playlist': 'Playlist', 708 710 'pedit.s_type': 'Wat voor post?', 709 711 'pedit.audio_up_drop': 'Sleep audio hierheen of klik om te kiezen', … … 1650 1652 'pedit.type_video': 'Video', 1651 1653 'pedit.type_audio': 'Audio', 1654 'pedit.type_album': 'Album', 1655 'pedit.type_playlist': 'Playlist', 1652 1656 'pedit.s_type': 'What kind of post?', 1653 1657 'pedit.audio_up_drop': 'Drop audio here or click to choose', … … 2594 2598 'pedit.type_video': 'Video', 2595 2599 'pedit.type_audio': 'Audio', 2600 'pedit.type_album': 'Album', 2601 'pedit.type_playlist': 'Playlist', 2596 2602 'pedit.s_type': 'Was für ein Beitrag?', 2597 2603 'pedit.audio_up_drop': 'Audio hierher ziehen oder klicken', -
src/views/pages/post-edit.ejs
rc832064 rd7e72b8 24 24 Foto → cover/insert hint. %> 25 25 <% var ptype = post.type || 'post'; %> 26 <% var TYPE_ICONS = { post: '📝', foto: '📷', video: '🎬', audio: '🎵' }; %> 26 <% var TYPE_ICONS = { post: '📝', foto: '📷', video: '🎬', album: '💿', playlist: '📃', audio: '🎵' }; %> 27 <%# Audio is geen keuze meer (shaer-cyg): alles wat muziek is landt op Album 28 of Playlist. De knop blijft alleen staan zolang deze post nog audio IS, 29 zodat een oude post niet stilzwijgend van type verandert bij het openen. %> 30 <% var TYPES = (typeof keuzeTypes !== 'undefined' && keuzeTypes.length) 31 ? keuzeTypes.slice() : ['post','foto','video','album','playlist']; %> 32 <% if (ptype === 'audio' && TYPES.indexOf('audio') < 0) TYPES.push('audio'); %> 27 33 <section class="pe-card pe-type-card"> 28 34 <div class="pe-section-title"><%= t('pedit.s_type') %></div> 29 35 <input type="hidden" name="type" id="pe-type-input" value="<%= ptype %>"> 30 36 <div class="pe-typeseg" role="radiogroup" aria-label="<%= t('pedit.s_type') %>"> 31 <% ['post','foto','video','audio'].forEach(function (tt) { %>37 <% TYPES.forEach(function (tt) { %> 32 38 <button type="button" class="pe-typeseg-btn<%= ptype === tt ? ' is-active' : '' %>" 33 39 data-type="<%= tt %>" role="radio" aria-checked="<%= ptype === tt ? 'true' : 'false' %>"> … … 38 44 </div> 39 45 40 <%# Audio: inline upload (transcodes + drops [[track]] into the post) %> 41 <div class="pe-type-panel" data-panel="audio" hidden> 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> 42 50 <div class="pe-audio-up" id="pe-audio-drop" tabindex="0" role="button" aria-label="<%= t('pedit.audio_up_drop') %>"> 43 51 <input type="file" id="pe-audio-file" accept="audio/*,.mp3,.m4a,.ogg,.opus,.flac,.wav" multiple hidden>
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)