Changeset 5f3f9ec in Klonkt
- Timestamp:
- 06/30/2026 11:06:00 PM (2 months ago)
- Branches:
- main
- Children:
- 86fa2d2
- Parents:
- e091add
- Location:
- src
- Files:
-
- 3 edited
-
routes/circle.js (modified) (3 diffs)
-
views/partials/post-card.ejs (modified) (2 diffs)
-
views/partials/post-tile.ejs (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/routes/circle.js
re091add r5f3f9ec 19 19 try { return s ? JSON.parse(s) : []; } catch { return []; } 20 20 } 21 function mediaImage(media_json) { 21 // The cover image + (separately) a cover video from a remote note's media. NEVER use a video/audio 22 // item as the cover image — that produced a broken <img> for an animated cover that federated as an 23 // MP4 (the video becomes a <video> instead). 24 function coverMedia(media_json) { 22 25 const media = safeJson(media_json).map((m) => ({ ...m, url: safeUrl(m.url) })).filter((m) => m.url); 23 return media.find((m) => /image/i.test(m.type || '')) || media[0] || null; 26 const video = media.find((m) => /video/i.test(m.type || '')) || null; 27 const image = media.find((m) => /image/i.test(m.type || '')) 28 || (media[0] && !/(video|audio)/i.test(media[0].type || '') ? media[0] : null); 29 return { image, video }; 24 30 } 25 31 function htmlToText(html) { … … 37 43 const titleM = (r.content || '').match(/^\s*<p>\s*<strong>([\s\S]*?)<\/strong>/i); 38 44 const realTitle = titleM ? htmlToText(titleM[1]).trim() : ''; 39 const image = mediaImage(r.media_json);45 const cover = coverMedia(r.media_json); 40 46 const name = r.author_name || r.author_handle || 'Onbekend'; 41 47 return { … … 46 52 : (text ? (text.length > 90 ? text.slice(0, 90) + '…' : text) : name), 47 53 excerpt: '', 48 cover_image_url: image ? image.url : null, 54 cover_image_url: cover.image ? cover.image.url : null, 55 cover_video_url: cover.video ? cover.video.url : null, 49 56 published_at: r.published, 50 57 created_at: r.published, -
src/views/partials/post-card.ejs
re091add r5f3f9ec 16 16 const _ext = !!_external; 17 17 const _src = post.source_name || ''; 18 const _hasCover = !!post.cover_image_url ;18 const _hasCover = !!post.cover_image_url || !!post.cover_video_url; 19 19 const _typeLabel = (post.type && post.type !== 'overig' && post.type !== 'post') ? post.type : ''; 20 20 const _isPinned = !!post.pinned; … … 49 49 <% if (_ext) { %>target="_blank" rel="noopener"<% } else { %>hx-get="<%= _href %>?partial=1" hx-target="#pcms-main" hx-swap="innerHTML" hx-push-url="<%= _href %>" hx-indicator="#pcms-loading"<% } %> 50 50 aria-label="<%= post.title || '(zonder titel)' %>" tabindex="-1"> 51 < img src="<%= thumb(post.cover_image_url, 480) %>"51 <% if (post.cover_image_url) { %><img src="<%= thumb(post.cover_image_url, 480) %>" 52 52 srcset="<%= thumb(post.cover_image_url, 320) %> 320w, <%= thumb(post.cover_image_url, 640) %> 640w, <%= thumb(post.cover_image_url, 1280) %> 1280w" 53 53 sizes="(min-width: 768px) 120px, 100vw" 54 54 alt="" loading="lazy" decoding="async"<% if (post.cover_video_url) { %> data-ios-mp4="<%= post.cover_video_url %>"<% } %>> 55 <% } else if (post.cover_video_url) { %><video src="<%= post.cover_video_url %>" autoplay loop muted playsinline></video><% } %> 55 56 <% if (post.nsfw) { %><span class="nsfw-veil"><span class="nsfw-veil-label">🔞 <%= post.content_warning || t('post.nsfw_warning') %></span><span class="nsfw-veil-btn"><%= t('post.nsfw_show') %></span></span><% } %> 56 57 </a> -
src/views/partials/post-tile.ejs
re091add r5f3f9ec 6 6 const _isPinned = !!post.pinned; 7 7 const _isBoost = !!post.isBoost; 8 const _hasCover = !!post.cover_image_url ;8 const _hasCover = !!post.cover_image_url || !!post.cover_video_url; 9 9 const _typeLabel = (post.type && post.type !== 'post') ? post.type : ''; 10 10 const _src = post.source_name || ''; // bron-site (cirkel-feed: van welke site komt deze post) … … 19 19 <% if (_ext) { %>target="_blank" rel="noopener"<% } else { %>hx-get="<%= _href %>?partial=1" hx-target="#pcms-main" hx-swap="innerHTML" hx-push-url="<%= _href %>" hx-indicator="#pcms-loading"<% } %>> 20 20 21 <% if ( _hasCover) { %><img class="grid-tile-img" src="<%= thumb(post.cover_image_url, 480) %>" alt="" loading="lazy" decoding="async"<% if (post.cover_video_url) { %> data-ios-mp4="<%= post.cover_video_url %>"<% } %>><% } %>21 <% if (post.cover_image_url) { %><img class="grid-tile-img" src="<%= thumb(post.cover_image_url, 480) %>" alt="" loading="lazy" decoding="async"<% if (post.cover_video_url) { %> data-ios-mp4="<%= post.cover_video_url %>"<% } %>><% } else if (post.cover_video_url) { %><video class="grid-tile-img" src="<%= post.cover_video_url %>" autoplay loop muted playsinline></video><% } %> 22 22 23 23 <% if (_typeLabel) { %>
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)