Changeset 0677bac in Klonkt for src/services/ap-core.js


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/ap-core.js

    ra5d14c7 r0677bac  
    9393  })[(e || '').toLowerCase()] || 'image/jpeg';
    9494}
     95
     96/**
     97 * Het tagveld van een post als lijst. Het staat in de database als JSON-ARRAY
     98 * en niet als kommalijst -- op komma's splitsen levert `#["Doen we Niet"` op,
     99 * en dat faalt niet, het liegt. Vandaar een echte parser, met de kommavorm als
     100 * terugval voor wat er handmatig is ingevuld.
     101 */
     102export function normalizeTags(t) {
     103  if (Array.isArray(t)) return t;
     104  if (typeof t === 'string') {
     105    const s = t.trim(); if (!s) return [];
     106    if (s[0] === '[') { try { const a = JSON.parse(s); return Array.isArray(a) ? a : []; } catch { /* dan toch als kommalijst */ } }
     107    return s.split(',').map((x) => x.trim()).filter(Boolean);
     108  }
     109  return [];
     110}
     111
     112/**
     113 * Een tag -> { label, slug }. Tags van meerdere woorden worden CamelCase
     114 * (#LiveMusic) voor de weergavenaam -- een Mastodon-hashtag mag geen spaties
     115 * bevatten en CamelCase is daar de toegankelijkheidsnorm; de slug en de href
     116 * blijven kleingeschreven ("livemusic").
     117 */
     118export function tagParts(raw) {
     119  const words = String(raw || '').trim().split(/[\s_]+/).map((w) => w.replace(/[^\p{L}\p{M}\p{N}]/gu, '')).filter(Boolean);
     120  if (!words.length) return null;
     121  const slug = words.join('').toLowerCase();
     122  if (!slug) return null;
     123  const label = words.length > 1 ? words.map((w) => w[0].toUpperCase() + w.slice(1)).join('') : words[0];
     124  return { label, slug };
     125}
Note: See TracChangeset for help on using the changeset viewer.