Changeset 5ae4d61 in Klonkt


Ignore:
Timestamp:
08/09/2026 08:37:29 AM (4 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
6259305
Parents:
ea3e722
Message:

En dan vindt de uitgave ze ook: hashtags in RUWE inhoud (shaer-38y)

De Note kreeg de geschreven vorm terug, maar de uitgave-collectie nog niet. Die
leest rechtstreeks uit posts.content, en daar staan hashtags als kale tekst --
de linkjes worden pas door de renderer gemaakt. hashtagTags zoekt naar
<a class="hashtag">, vond dus niets, en viel stil terug op het tagveld: precies
de genormaliseerde vorm die niet moest winnen.

buildHashtagList kent nu een ruw-stand die ook kale #tags oppikt. Zo'n tag
moet met een LETTER beginnen -- "issue #12" is een nummer en geen hashtag, en
die zou anders als tag de deur uit gaan.

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

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/services/ap-core.js

    rea3e722 r5ae4d61  
    151151 * dat geen benadering meer maar de tag zelf, en dan hoort die te staan zoals
    152152 * hij er staat. Eerder won het veld, en verdween de geschreven vorm.
     153 *
     154 * `opts.ruw` voor inhoud die nog niet door de renderer is geweest: dan staan de
     155 * hashtags er als kale tekst en niet als <a class="hashtag">. buildNote krijgt
     156 * het bewerkte lijf en heeft dit niet nodig; wie rechtstreeks uit posts.content
     157 * leest wel -- anders vindt hij er geen enkele en valt hij stil terug op het
     158 * tagveld, precies de vorm die hier juist niet moest winnen.
    153159 */
    154 export function buildHashtagList(base, tagsField, content) {
     160export function hashtagTagsRuw(base, content) {
     161  const tags = [], seen = new Set();
     162  // Moet met een LETTER beginnen: "#12" in "issue #12" is een nummer en geen
     163  // tag, en die zou hier anders als hashtag de deur uit gaan.
     164  const re = /(^|[\s>(\[])#(\p{L}[\p{L}\p{M}\p{N}_]*)/gu;
     165  let m;
     166  while ((m = re.exec(content || ''))) {
     167    const k = m[2].toLowerCase();
     168    if (seen.has(k)) continue; seen.add(k);
     169    tags.push({ type: 'Hashtag', href: `${base}/tag/${encodeURIComponent(k)}`, name: '#' + m[2] });
     170  }
     171  return tags;
     172}
     173
     174export function buildHashtagList(base, tagsField, content, opts = {}) {
    155175  const out = [], seen = new Set();
    156   for (const h of hashtagTags(base, content)) {
     176  const uitLijf = opts.ruw
     177    ? [...hashtagTags(base, content), ...hashtagTagsRuw(base, content)]
     178    : hashtagTags(base, content);
     179  for (const h of uitLijf) {
    157180    const k = h.name.slice(1).toLowerCase(); if (seen.has(k)) continue; seen.add(k);
    158181    out.push(h);
  • src/services/music/index.js

    rea3e722 r5ae4d61  
    380380  // de geschreven vorm voorgaat. Een eigen lijst hier zou de tags uit de tekst
    381381  // missen en de rest anders spellen dan dezelfde post elders doet.
    382   const tags = buildHashtagList(base, post.tags, post.content);
     382  const tags = buildHashtagList(base, post.tags, post.content, { ruw: true });
    383383  if (tags.length) obj.tag = tags;
    384384
  • test/music-uitgave.test.js

    rea3e722 r5ae4d61  
    203203  const p = maakPost({
    204204    id: 'p-schrijf', slug: 'zoals-geschreven', titel: 'Zoals geschreven',
    205     content: '<p>Zie <a class="hashtag" href="/tag/doenweniet">#DoenweNiet</a></p>[[track:t-een]]',
     205    content: '<p>Zie #DoenweNiet</p>[[track:t-een]]',
    206206    tags: '["Doen we Niet","lofi"]',
    207207  });
     
    213213  assert.equal(col.tag[0].href, `${BASE}/tag/doenweniet`, 'de slug blijft wel klein: dat is een adres');
    214214});
     215
     216test('"issue #12" levert geen tag op -- een nummer is geen hashtag', () => {
     217  const p = maakPost({
     218    id: 'p-nr', slug: 'nummer', titel: 'Nummer',
     219    content: '<p>Zie issue #12 en #lofi</p>[[track:t-twee]]',
     220  });
     221  assert.deepEqual(M.buildPostTrackCollection(BASE, site, p).tag.map((t) => t.name), ['#lofi']);
     222});
Note: See TracChangeset for help on using the changeset viewer.