Changeset 5ae4d61 in Klonkt
- Timestamp:
- 08/09/2026 08:37:29 AM (4 weeks ago)
- Branches:
- main
- Children:
- 6259305
- Parents:
- ea3e722
- Files:
-
- 3 edited
-
src/services/ap-core.js (modified) (1 diff)
-
src/services/music/index.js (modified) (1 diff)
-
test/music-uitgave.test.js (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/services/ap-core.js
rea3e722 r5ae4d61 151 151 * dat geen benadering meer maar de tag zelf, en dan hoort die te staan zoals 152 152 * 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. 153 159 */ 154 export function buildHashtagList(base, tagsField, content) { 160 export 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 174 export function buildHashtagList(base, tagsField, content, opts = {}) { 155 175 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) { 157 180 const k = h.name.slice(1).toLowerCase(); if (seen.has(k)) continue; seen.add(k); 158 181 out.push(h); -
src/services/music/index.js
rea3e722 r5ae4d61 380 380 // de geschreven vorm voorgaat. Een eigen lijst hier zou de tags uit de tekst 381 381 // 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 }); 383 383 if (tags.length) obj.tag = tags; 384 384 -
test/music-uitgave.test.js
rea3e722 r5ae4d61 203 203 const p = maakPost({ 204 204 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]]', 206 206 tags: '["Doen we Niet","lofi"]', 207 207 }); … … 213 213 assert.equal(col.tag[0].href, `${BASE}/tag/doenweniet`, 'de slug blijft wel klein: dat is een adres'); 214 214 }); 215 216 test('"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.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)