Changeset 7917407 in Klonkt for src/routes
- Timestamp:
- 06/16/2026 02:22:31 AM (3 months ago)
- Branches:
- main
- Children:
- ff08153
- Parents:
- b960185
- File:
-
- 1 edited
-
src/routes/circle.js (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/routes/circle.js
rb960185 r7917407 1 1 /** 2 * Publieke Cirkel-feed: /cirkel 3 * Toont de gecachte publieke posts uit je cirkel als statische kaarten. 2 * Cirkel-feed + lokale lees-pagina. 3 * GET /cirkel -> overzicht (zelfde timeline/grid-view als de home) 4 * GET /cirkel/:id -> losse remote-post in eigen chrome (blijf op je site) 4 5 * Alleen actief als tenancy === 'circle' (anders next() -> postsRoutes/404). 5 6 * Zie docs/cirkels-v1-spec.md §5c. … … 19 20 try { return s ? JSON.parse(s) : []; } catch { return []; } 20 21 } 22 function mediaImage(media_json) { 23 const media = safeJson(media_json).map((m) => ({ ...m, url: safeUrl(m.url) })).filter((m) => m.url); 24 return media.find((m) => m.type === 'image') || null; 25 } 21 26 27 // ── Overzicht ──────────────────────────────────────────────── 22 28 router.get('/cirkel', (req, res, next) => { 23 29 if (getTenancy() !== 'circle') return next(); 24 30 25 31 const rows = db.prepare(` 26 SELECT p.id, p.published, p.title, p.summary, p. url, p.media_json,27 a.name AS actor_name , a.url AS actor_url, a.avatar AS actor_avatar32 SELECT p.id, p.published, p.title, p.summary, p.media_json, 33 a.name AS actor_name 28 34 FROM remote_posts p 29 35 JOIN remote_actors a ON a.id = p.actor_id … … 33 39 34 40 const posts = rows.map((r) => { 35 const media = safeJson(r.media_json) 36 .map((m) => ({ ...m, url: safeUrl(m.url) })) 37 .filter((m) => m.url); 38 const image = media.find((m) => m.type === 'image') || null; 39 // Vorm de remote-post naar het lokale post-shape zodat post-card/post-tile 40 // (dezelfde timeline/grid-view als de home) 'm renderen. external_url maakt 41 // de partials extern-linkend (naar de bron) i.p.v. lokaal/htmx. 41 const image = mediaImage(r.media_json); 42 42 return { 43 43 id: r.id, 44 slug: encodeURIComponent(r.id), 44 // Lokale lees-pagina -> de kaart blijft op de eigen site (post-card linkt 45 // lokaal + htmx, GEEN external_url). 46 slug: 'cirkel/' + encodeURIComponent(r.id), 45 47 title: r.title || '(zonder titel)', 46 48 excerpt: r.summary || '', … … 52 54 pinned: 0, 53 55 status: 'published', 54 external_url: safeUrl(r.url),55 56 source_name: r.actor_name || 'Onbekend', 56 source_url: safeUrl(r.actor_url),57 57 }; 58 58 }); … … 61 61 }); 62 62 63 // ── Losse remote-post (lokaal lezen) ───────────────────────── 64 router.get('/cirkel/:id', (req, res, next) => { 65 if (getTenancy() !== 'circle') return next(); 66 67 const row = db.prepare(` 68 SELECT p.id, p.published, p.title, p.summary, p.url, p.media_json, 69 a.name AS actor_name, a.url AS actor_url, a.avatar AS actor_avatar 70 FROM remote_posts p 71 JOIN remote_actors a ON a.id = p.actor_id 72 WHERE p.id = ? 73 `).get(req.params.id); 74 75 if (!row) return next(); 76 77 const image = mediaImage(row.media_json); 78 const post = { 79 title: row.title || '(zonder titel)', 80 body: row.summary || '', // platte tekst (gesanitized bij ingest) 81 published: row.published, 82 image: image ? image.url : null, 83 sourceName: row.actor_name || 'Onbekend', 84 sourceUrl: safeUrl(row.actor_url), 85 sourceAvatar: safeUrl(row.actor_avatar), 86 originalUrl: safeUrl(row.url), 87 }; 88 89 renderPage(req, res, 'pages/circle-post', { 90 pageTitle: post.title, 91 bodyClass: 'on-cirkel-post', 92 post, 93 }); 94 }); 95 63 96 export default router;
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)