Changeset adb6291 in Klonkt


Ignore:
Timestamp:
06/30/2026 06:11:50 PM (2 months ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
a95dbfd
Parents:
1c33804
Message:

feat(video-cover): render iOS video covers across grid, list, related + listing pages

  • post-tile.ejs / post-card.ejs / post.ejs(related): the cover <img> carries data-ios-mp4 when a loop MP4 exists; shell.ejs's iOS swap upgrades it everywhere covers render
  • cover_video_url threaded through the explicit listing SELECTs (tags/types/users/related); the home grid + main list already use SELECT p.*

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

Location:
src
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • src/routes/posts.js

    r1c33804 radb6291  
    998998  const candidates = isHub
    999999    ? db.prepare(`
    1000         SELECT p.id, p.slug, p.title, p.cover_image_url, p.published_at, p.tags, p.nsfw, p.content_warning, s.slug AS site_slug
     1000        SELECT p.id, p.slug, p.title, p.cover_image_url, p.cover_video_url, p.published_at, p.tags, p.nsfw, p.content_warning, s.slug AS site_slug
    10011001        FROM posts p JOIN sites s ON s.id = p.site_id
    10021002        WHERE p.status = 'published' AND p.id != ?
     
    10041004      `).all(post.id)
    10051005    : db.prepare(`
    1006         SELECT id, slug, title, cover_image_url, published_at, tags, nsfw, content_warning
     1006        SELECT id, slug, title, cover_image_url, cover_video_url, published_at, tags, nsfw, content_warning
    10071007        FROM posts
    10081008        WHERE site_id = ? AND status = 'published' AND id != ?
  • src/routes/tags.js

    r1c33804 radb6291  
    2222  try {
    2323    posts = db.prepare(`
    24       SELECT DISTINCT p.id, p.slug, p.title, p.excerpt, p.cover_image_url,
     24      SELECT DISTINCT p.id, p.slug, p.title, p.excerpt, p.cover_image_url, p.cover_video_url,
    2525                      p.published_at, u.username AS author_username
    2626      FROM posts p, json_each(p.tags) j
     
    3535    // Fall back to a LIKE match if json_each isn't available for some reason
    3636    posts = db.prepare(`
    37       SELECT p.id, p.slug, p.title, p.excerpt, p.cover_image_url,
     37      SELECT p.id, p.slug, p.title, p.excerpt, p.cover_image_url, p.cover_video_url,
    3838             p.published_at, u.username AS author_username
    3939      FROM posts p JOIN users u ON u.id = p.author_id
  • src/routes/types.js

    r1c33804 radb6291  
    2121
    2222  const posts = db.prepare(`
    23     SELECT p.id, p.slug, p.title, p.excerpt, p.cover_image_url,
     23    SELECT p.id, p.slug, p.title, p.excerpt, p.cover_image_url, p.cover_video_url,
    2424           p.published_at, p.type, u.username AS author_username
    2525    FROM posts p JOIN users u ON u.id = p.author_id
  • src/routes/users.js

    r1c33804 radb6291  
    2727
    2828  const posts = db.prepare(`
    29     SELECT p.id, p.slug, p.title, p.excerpt, p.cover_image_url, p.published_at
     29    SELECT p.id, p.slug, p.title, p.excerpt, p.cover_image_url, p.cover_video_url, p.published_at
    3030    FROM posts p
    3131    WHERE p.author_id = ? AND p.site_id = ? AND p.status = 'published'
  • src/views/pages/post.ejs

    r1c33804 radb6291  
    182182               hx-push-url="/<%= rp.slug %>" hx-indicator="#pcms-loading"<% } %>>
    183183              <% if (rp.cover_image_url) { %>
    184                 <span class="post-related-cover<%= rp.nsfw ? ' nsfw-media' : '' %>" aria-hidden="true"><img class="post-related-img" src="<%= rp.cover_image_url %>" alt="" loading="lazy" decoding="async"><% if (rp.nsfw) { %><span class="nsfw-veil"><span class="nsfw-veil-label">🔞 <%= rp.content_warning || t('post.nsfw_warning') %></span><span class="nsfw-veil-btn"><%= t('post.nsfw_show') %></span></span><% } %></span>
     184                <span class="post-related-cover<%= rp.nsfw ? ' nsfw-media' : '' %>" aria-hidden="true"><img class="post-related-img" src="<%= rp.cover_image_url %>" alt="" loading="lazy" decoding="async"<% if (rp.cover_video_url) { %> data-ios-mp4="<%= rp.cover_video_url %>"<% } %>><% if (rp.nsfw) { %><span class="nsfw-veil"><span class="nsfw-veil-label">🔞 <%= rp.content_warning || t('post.nsfw_warning') %></span><span class="nsfw-veil-btn"><%= t('post.nsfw_show') %></span></span><% } %></span>
    185185              <% } else { %>
    186186                <span class="post-related-cover post-related-cover--empty<%= rp.nsfw ? ' nsfw-media' : '' %>" aria-hidden="true"><% if (rp.nsfw) { %><span class="nsfw-veil"><span class="nsfw-veil-label">🔞 <%= rp.content_warning || t('post.nsfw_warning') %></span><span class="nsfw-veil-btn"><%= t('post.nsfw_show') %></span></span><% } %></span>
  • src/views/partials/post-card.ejs

    r1c33804 radb6291  
    5252           srcset="<%= thumb(post.cover_image_url, 320) %> 320w, <%= thumb(post.cover_image_url, 640) %> 640w, <%= thumb(post.cover_image_url, 1280) %> 1280w"
    5353           sizes="(min-width: 768px) 120px, 100vw"
    54            alt="" loading="lazy" decoding="async">
     54           alt="" loading="lazy" decoding="async"<% if (post.cover_video_url) { %> data-ios-mp4="<%= post.cover_video_url %>"<% } %>>
    5555      <% 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><% } %>
    5656    </a>
  • src/views/partials/post-tile.ejs

    r1c33804 radb6291  
    1919   <% 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"<% } %>>
    2020
    21   <% if (_hasCover) { %><img class="grid-tile-img" src="<%= thumb(post.cover_image_url, 480) %>" alt="" loading="lazy" decoding="async"><% } %>
     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 %>"<% } %>><% } %>
    2222
    2323  <% if (_typeLabel) { %>
Note: See TracChangeset for help on using the changeset viewer.