Ignore:
Timestamp:
08/09/2026 08:24:16 AM (4 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
d60c498
Parents:
a5d14c7
Message:

De tags kwamen er als onzin uit, en de tekst helemaal niet (shaer-38y)

Live nagekeken op dev, en twee dingen klopten niet.

DE TAGS. posts.tags staat als JSON-ARRAY in de database, niet als kommalijst.
Mijn eigen split leverde #["Doen we Niet" en #"music" op -- geen fout die
omvalt, een die onzin uitlevert. Nu met normalizeTags en tagParts, dezelfde
parser als de rest, dus ook dezelfde CamelCase voor tags van meerdere woorden.

Die twee stonden in ActivityPubService en music/ mag daar niet uit importeren,
dus ze zijn naar ap-core verhuisd -- de plek voor precies dit soort gedeelde
grondstof. Een kopie maken zou hetzelfde uit elkaar lopen opleveren als bij de
afleidingsregel.

DE TEKST. De excerpt bleek in de praktijk vaak leeg, en dan kwam er geen
content mee terwijl de post wel tekst heeft. Nu: excerpt eerst -- die is
geschreven om samen te vatten -- en anders het lijf zelf, zonder shortcodes
(die zijn de muziek, niet het verhaal erover) en zonder opmaak. Blijft er niets
over, dan geen veld: dat is beter dan een leeg veld.

De test gebruikte de kommavorm en testte dus de terugval in plaats van de echte
weg. Nu JSON, zoals het er staat.

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/services/ActivityPubService.js

    ra5d14c7 r0677bac  
    2929import Blocklist from './BlocklistService.js';
    3030import * as Guardianship from './guardianship/index.js';
    31 import { PUBLIC, AP_CONTEXT, safeUrl, actorId, noteId, guessMediaType } from './ap-core.js';
     31import { PUBLIC, AP_CONTEXT, safeUrl, actorId, noteId, guessMediaType, normalizeTags, tagParts } from './ap-core.js';
    3232// Doorgeven wat hier altijd vandaan kwam, zodat elke bestaande aanroep blijft werken.
    3333export { AP_CONTEXT, actorId, noteId, guessMediaType };
     
    29732973
    29742974// Normalise a post's tags field (array, JSON-string, or comma-string) to an array.
    2975 function normalizeTags(t) {
    2976   if (Array.isArray(t)) return t;
    2977   if (typeof t === 'string') {
    2978     const s = t.trim(); if (!s) return [];
    2979     if (s[0] === '[') { try { const a = JSON.parse(s); return Array.isArray(a) ? a : []; } catch { /* fall through */ } }
    2980     return s.split(',').map((x) => x.trim()).filter(Boolean);
    2981   }
    2982   return [];
    2983 }
     2975// normalizeTags en tagParts staan sinds shaer-38y in ap-core: music/ heeft ze
     2976// ook nodig en mag hier niet uit importeren.
    29842977// A tag → { label, slug }. Multi-word tags become CamelCase (#LiveMusic) for the display
    29852978// name (Mastodon hashtags can't contain spaces; CamelCase is the accessibility norm); the
    29862979// slug/href stays lowercase ("livemusic").
    2987 function tagParts(raw) {
    2988   const words = String(raw || '').trim().split(/[\s_]+/).map((w) => w.replace(/[^\p{L}\p{M}\p{N}]/gu, '')).filter(Boolean);
    2989   if (!words.length) return null;
    2990   const slug = words.join('').toLowerCase();
    2991   if (!slug) return null;
    2992   const label = words.length > 1 ? words.map((w) => w[0].toUpperCase() + w.slice(1)).join('') : words[0];
    2993   return { label, slug };
    2994 }
    29952980// Merge a post's tags field + the #hashtags linked inline in its body into one deduped
    29962981// Hashtag tag list (with hrefs to our /tag page).
Note: See TracChangeset for help on using the changeset viewer.