Changeset ce8c8c2 in Klonkt
- Timestamp:
- 06/14/2026 06:46:13 PM (3 months ago)
- Branches:
- main
- Children:
- 74c2473
- Parents:
- a3169f5
- Location:
- src
- Files:
-
- 3 edited
-
routes/artists.js (modified) (1 diff)
-
routes/hub.js (modified) (3 diffs)
-
views/pages/hub-home.ejs (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/routes/artists.js
ra3169f5 rce8c8c2 26 26 if (!Number.isFinite(page) || page < 1) page = 1; 27 27 28 // De hoofd-/labelsite (oudste) is geen artiest -> uit de directory weren, 29 // consistent met de hub-home die 'm apart toont. 30 const mainRow = db.prepare('SELECT id FROM sites ORDER BY created_at ASC LIMIT 1').get(); 31 const mainId = mainRow ? mainRow.id : ''; 32 28 33 // Zoekterm tegen titel/slug/tagline (case-insensitive via LIKE; SQLite LIKE is 29 34 // standaard ongevoelig voor ASCII-hoofdletters). De ESCAPE '\' maakt %, _ en \ 30 35 // in de zoekterm letterlijk (anders zouden ze als wildcards werken). 31 const where = q32 ? "WHERE (s.title LIKE @like ESCAPE '\\' OR s.slug LIKE @like ESCAPE '\\' OR s.tagline LIKE @like ESCAPE '\\')"33 : '';34 36 const like = '%' + q.replace(/[\\%_]/g, (m) => '\\' + m) + '%'; 35 const params = q ? { like } : {}; 37 const conds = ['s.id != @mainId']; 38 if (q) conds.push("(s.title LIKE @like ESCAPE '\\' OR s.slug LIKE @like ESCAPE '\\' OR s.tagline LIKE @like ESCAPE '\\')"); 39 const where = 'WHERE ' + conds.join(' AND '); 40 const params = q ? { mainId, like } : { mainId }; 36 41 37 42 const total = db.prepare(`SELECT COUNT(*) AS c FROM sites s ${where}`) -
src/routes/hub.js
ra3169f5 rce8c8c2 35 35 `).all(); 36 36 37 // De hoofd-/labelsite (oudste = de bedrijfs-/hoofdaccount) is GEEN artiest; 38 // die tonen we apart bovenaan, niet in de Artiesten-roster. 39 const mainSite = db.prepare(` 40 SELECT s.id, s.slug, s.title, s.tagline, s.profile_photo, s.accent, 41 u.avatar_url AS owner_avatar, 42 (SELECT COUNT(*) FROM posts WHERE site_id = s.id AND status = 'published') AS post_count 43 FROM sites s 44 LEFT JOIN users u ON u.id = s.owner_id 45 ORDER BY s.created_at ASC 46 LIMIT 1 47 `).get() || null; 48 const mainId = mainSite ? mainSite.id : ''; 49 37 50 // Uitgelichte PrutFolio's voor de home-roster: meest-actief eerst (aantal 38 // gepubliceerde posts), dan nieuwste. Beperkt tot HOME_ROSTER_LIMIT zodat de39 // home schaalt — de volledige, doorzoekbare lijst staat op /artiesten.51 // gepubliceerde posts), dan nieuwste. Excl. de hoofdsite. Beperkt tot 52 // HOME_ROSTER_LIMIT zodat de home schaalt — volledige lijst staat op /artiesten. 40 53 const HOME_ROSTER_LIMIT = 24; 41 54 const artists = db.prepare(` … … 45 58 FROM sites s 46 59 LEFT JOIN users u ON u.id = s.owner_id 60 WHERE s.id != @mainId 47 61 ORDER BY post_count DESC, s.created_at DESC 48 LIMIT ?49 `).all( HOME_ROSTER_LIMIT);50 const totalArtists = db.prepare('SELECT COUNT(*) AS c FROM sites ').get().c;62 LIMIT @limit 63 `).all({ mainId, limit: HOME_ROSTER_LIMIT }); 64 const totalArtists = db.prepare('SELECT COUNT(*) AS c FROM sites WHERE id != ?').get(mainId).c; 51 65 52 66 // De hub-pagina is GENERIEK (van geen enkele user) — branding komt uit globale … … 64 78 bodyClass: 'on-home on-hub', 65 79 hub, 80 mainSite, 66 81 artists, 67 82 totalArtists, -
src/views/pages/hub-home.ejs
ra3169f5 rce8c8c2 30 30 31 31 <div class="container hub-body"> 32 33 <%# ── HOOFDPAGINA (label-/hoofdaccount — geen artiest) ──────────── %> 34 <% if (mainSite) { %> 35 <section class="hub-sec hub-sec-main"> 36 <a class="hub-main-card" href="/user/<%= mainSite.slug %>"> 37 <% var _mAva = mainSite.profile_photo || mainSite.owner_avatar; %> 38 <span class="hub-main-avatar"<% if (_mAva) { %> style="background-image:url('<%= _mAva %>')"<% } else { %> style="background:<%= mainSite.accent || 'var(--accent)' %>;color:#fff"<% } %>> 39 <% if (!_mAva) { %><%= (mainSite.title || mainSite.slug).charAt(0).toUpperCase() %><% } %> 40 </span> 41 <span class="hub-main-info"> 42 <span class="hub-main-badge">Hoofdpagina</span> 43 <span class="hub-main-name"><%= mainSite.title %></span> 44 <% if (mainSite.tagline) { %><span class="hub-main-tag"><%= mainSite.tagline %></span><% } %> 45 </span> 46 <span class="hub-main-cta">Bekijk de pagina <span aria-hidden="true">→</span></span> 47 </a> 48 </section> 49 <% } %> 32 50 33 51 <%# ── ARTIESTEN-ROSTER ─────────────────────────────────────────── %> … … 155 173 .hub-more-link:hover { border-color: var(--accent); background: color-mix(in srgb, var(--accent) 7%, var(--paper-2)); } 156 174 175 /* ── Hoofdpagina-kaart (label-/hoofdaccount, apart van de artiesten) ── */ 176 .hub-sec-main { margin-top: 2.25rem; } 177 .hub-main-card { 178 display: flex; align-items: center; gap: 1.25rem; 179 padding: 1.2rem 1.5rem; 180 border: 1px solid color-mix(in srgb, var(--accent) 40%, var(--rule)); 181 border-radius: 18px; 182 background: linear-gradient(120deg, color-mix(in srgb, var(--accent) 11%, var(--paper-2)) 0%, var(--paper-2) 72%); 183 color: var(--ink); text-decoration: none; 184 transition: border-color 140ms, transform 140ms, box-shadow 140ms; 185 } 186 .hub-main-card:hover { 187 border-color: var(--accent); transform: translateY(-2px); 188 box-shadow: 0 12px 30px -16px color-mix(in srgb, var(--accent) 60%, transparent); 189 } 190 .hub-main-avatar { 191 width: 72px; height: 72px; border-radius: 50%; flex-shrink: 0; 192 background-size: cover; background-position: center; 193 display: inline-flex; align-items: center; justify-content: center; 194 font-family: var(--font-display, serif); font-size: 1.8rem; font-weight: 700; color: #fff; 195 box-shadow: inset 0 0 0 2px rgba(255,255,255,.18); 196 } 197 .hub-main-info { display: flex; flex-direction: column; gap: 0.25rem; min-width: 0; flex: 1; } 198 .hub-main-badge { 199 align-self: flex-start; font-size: 0.65rem; font-weight: 700; 200 text-transform: uppercase; letter-spacing: 0.08em; 201 color: var(--accent); background: color-mix(in srgb, var(--accent) 14%, transparent); 202 padding: 0.12rem 0.55rem; border-radius: 99px; 203 } 204 .hub-main-name { font-family: var(--font-display, serif); font-size: 1.5rem; font-weight: 700; line-height: 1.1; } 205 .hub-main-tag { color: var(--ink-muted); font-size: 0.9rem; } 206 .hub-main-cta { color: var(--accent); font-weight: 600; font-size: 0.9rem; white-space: nowrap; flex-shrink: 0; } 207 @media (max-width: 560px) { 208 .hub-main-card { flex-direction: column; text-align: center; } 209 .hub-main-info { align-items: center; } 210 .hub-main-badge { align-self: center; } 211 .hub-main-cta { display: none; } 212 } 213 157 214 /* ── Roster (artiesten) ───────────────────────────────────────────── */ 158 215 .roster {
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)