selfhostable, read-only reddit client
at main 3.9 kB view raw
1include ../utils 2include postUtils 3mixin post(p, currentUrl) 4 - var from = encodeURIComponent(currentUrl) 5 - var viewQuery = query && query.view ? query.view : 'compact' 6 - var sortQuery = query && query.sort ? query.sort + (query.t ? '&t=' + query.t : '') : 'hot' 7 article(class=`post`) 8 div.post-container(class=`${query.view} ${p.stickied?"sticky":""}`) 9 div.post-info 10 div.post-text(class=`${query.view}`) 11 div.title-container(class=`${query.view}`) 12 a(class=`${query.view}`, href=`/comments/${p.id}?from=${from}&sort=${sortQuery}&view=${viewQuery}`) 13 != p.title 14 span.domain (#{p.domain}) 15 div.info-container 16 p 17 | #{fmtnum(p.ups)} ↑ 18 if p.gilded > 0 19 |  ·  20 span.gilded 21 | #{p.gilded} ☆ 22 span.post-author 23 |  ·  24 | u/#{p.author} 25 |  ·  26 | #{timeDifference(Date.now(), p.created * 1000)} 27 |  ·  28 a(href=`/r/${p.subreddit}?view=${viewQuery}`) r/#{p.subreddit} 29 |  ·  30 a(href=`/comments/${p.id}?from=${from}`) #{fmtnum (p.num_comments)} ↩ 31 if (query.view == "card" && !isPostMedia(p) && p.selftext_html) 32 div.self-text-overflow.card 33 if p.spoiler || p.over_18 34 div.spoiler(id=`spoiler_${p.id}`, onclick=`javascript:document.getElementById('spoiler_${p.id}').style.display = 'none';`) 35 h2 36 != p.over_18 ? 'nsfw' : 'spoiler' 37 div.self-text.card 38 != convertInlineImageLinks(p.selftext_html) 39 if query.view != "card" 40 div.media-preview 41 - var onclick = `toggleDetails('${p.id}')` 42 if isPostGallery(p) 43 - var item = (p.over_18 ? `/nsfw.svg` : p.spoiler ? `/spoiler.svg` : postGalleryItems(p)[0].url) 44 img(src=item onclick=onclick) 45 else if isPostImage(p) 46 - var url = postThumbnail(p) 47 img(src=url onclick=onclick) 48 else if isPostVideo(p) 49 - var decodedVideos = decodePostVideoUrls(p) 50 video(data-dashjs-player="" playsinline="" autoplay="" muted="" onclick=`toggleDetails('${p.id}')` src=decodedVideos[3] poster=decodedVideos[4] width="100px" height="100px") 51 else if isPostLink(p) 52 a(href=p.url) 53 | ↗ 54 55 details(id=`${p.id}` open=(query.view == "card" && (isPostMedia(p) || isPostLink(p))) class=`${query.view}`) 56 summary.expand-post expand media 57 div.image-viewer 58 if query.view == "card" && (p.spoiler || p.over_18) && isPostMedia(p) 59 div.spoiler(id=`spoiler_${p.id}`, onclick=`javascript:document.getElementById('spoiler_${p.id}').style.display = 'none';`) 60 h2 61 != p.over_18 ? 'nsfw' : 'spoiler' 62 if isPostGallery(p) 63 div.gallery 64 each item in postGalleryItems(p) 65 div.gallery-item 66 a(href=`/media/${item.url}`) 67 img(src=item.url loading="lazy") 68 div.gallery-item-idx 69 | #{`${item.idx}/${item.total}`} 70 else if isPostImage(p) 71 a(href=`/media/${p.url}`) 72 img(src=p.url loading="lazy") 73 else if isPostVideo(p) 74 - var decodedVideos = decodePostVideoUrls(p) 75 video(data-dashjs-player="" playsinline="" controls="" muted="" preload="metadata" src=decodedVideos[1] poster=decodedVideos[4]) 76 else if isPostLink(p) 77 a(href=p.url) 78 | #{p.domain} ↗ 79 if (query.view == "compact") 80 button(onclick=`toggleDetails('${p.id}')`) 81 | close