doctype html
html
head
title #{cleanTitle(post.title)} : #{subreddit}
include includes/meta_post.pug
include includes/head.pug
body(class=""+ (user_preferences.theme === 'auto' ? 'dark' : user_preferences.theme) + "")
include includes/topbar.pug
if post === null
h1 Error occured
p #{JSON.stringify(error_data)}
else
#post
if (post.over_18 && instance_nsfw_enabled === false && user_preferences.nsfw_enabled != 'true') || (post.over_18 && user_preferences.nsfw_enabled === 'false')
.nsfw-warning
span 18+
h2 You must be 18+ to view this community
p You must be at least eighteen years old to view this content. Are you over eighteen and willing to see adult content?
a(href="/") No thank you
a(href="?nsfw_enabled=true") Continue
p If you continue, nsfw_enabled
cookie preference will be automatically set to true
.
else
header
div
p subreddit:
a(href="/r/" + subreddit + "")
p /r/#{subreddit}
if user_preferences.post_media_max_height
if(post_media_max_heights.hasOwnProperty(user_preferences.post_media_max_height))
style.
#post .image img, #post .video video {
max-height: #{post_media_max_heights[user_preferences.post_media_max_height]}px;
max-width: 100%;
}
else if(!isNaN(user_preferences.post_media_max_height))
style.
#post .image img, #post .video video {
max-height: #{user_preferences.post_media_max_height}px;
max-width: 100%;
}
-
let video_muted = false
if(instance_videos_muted === true || user_preferences.videos_muted === 'true') {
video_muted = true
}
if(user_preferences.videos_muted === 'false') {
video_muted = false
}
.info
if user_preferences.show_upvotes === 'false'
style.
.comment .meta .ups, #post .score, #user .upvotes {
display: none;
}
.score
div.arrow
span #{kFormatter(post.ups)}
if user_preferences.show_upvoted_percentage === 'true'
- let downvoted = parseInt(post.ups * (1 - post.upvote_ratio))
span.ratio(title="~"+ downvoted +" downvoted") #{(post.upvote_ratio * 100).toFixed(0)}%
div.arrow.down
.title
a(href="" + post.url + "", rel="noopener noreferrer")
h2 #{cleanTitle(post.title)}
!= post.link_flair
span(class="domain") (#{post.domain})
p.submitted
span(title="" + toUTCString(post.created) + "") submitted #{timeDifference(post.created)} by
if post.author === '[deleted]'
span [deleted]
else
a(href="/u/" + post.author + "")
| #{post.author}
!= post.user_flair
.links
if post.over_18
span.tag.nsfw NSFW
-
let back_url = "/r/" + subreddit + "/comments/" + post.id
let saved_post = false
if user_preferences.saved
each post_id in user_preferences.saved
if post_id === post.id
- saved_post = true
if saved_post
a(href="/unsave/" + post.id + "/?rk=" + redis_key + "&b=" + back_url + "") unsave
else
a(href="/save/" + post.id + "/?rk=" + redis_key + "&b=" + back_url + "") save
if post.crosspost.is_crosspost === true
.crosspost
.title
a(href="" + post.crosspost.permalink + "", rel="noopener noreferrer")
h2 #{cleanTitle(post.crosspost.title)}
span(class="domain") (#{post.domain})
.num_comments
| #{post.crosspost.num_comments} comments
.score
div.arrow
span #{kFormatter(post.crosspost.ups)}
if user_preferences.show_upvoted_percentage === 'true'
- let downvoted = parseInt(post.ups * (1 - post.upvote_ratio))
span.ratio(title="~"+ downvoted +" downvoted") #{post.upvote_ratio * 100}%
div.arrow.down
p.submitted
span(title="" + toUTCString(post.crosspost.created) + "") submitted #{timeDifference(post.crosspost.created)} by
if post.crosspost.author === '[deleted]'
span [deleted]
else
a(href="/u/" + post.crosspost.author + "")
| #{post.crosspost.author}
!= post.user_flair
p.to to
a(href="/r/" + post.crosspost.subreddit + "")
| #{post.crosspost.subreddit}
if !post.has_media
if post.images
.image
a(href="" + post.images.source + "")
img(src="" + post.images.source + "", alt="")
else
if post.media.not_hosted_in_reddit
.video
a(href="" + post.media.source + "")
img(src=""+ post.media.source +"")
p Embed URL:
a(href="" + post.media.embed_src + "", target="_blank", rel="noopener noreferrer")
p #{post.media.embed_src}
else
.video
video(controls="controls", autoplay="autoplay", loop="loop", muted=(video_muted ? true : false))
source(src="" + post.media.source + "", type="video/mp4")
| Your browser does not support the video element.
a(href="" + post.media.source + "") [media]
else
if !post.has_media
if post.gallery
.gallery
each item in post.gallery_items
.item
div
a(href="" + item.large + "", target="_blank")
img(src=""+ item.thumbnail +"", alt="")
a(href="" + item.source + "", target="_blank", class="source-link")
small source
if post.images
.image
a(href="" + post.images.source + "")
img(src="" + post.images.source + "", alt="")
else
if post.media
if post.media.not_hosted_in_reddit
if post.media.source === 'YouTube'
.video
.title
a(href="" + post.media.embed_src + "", target="_blank", rel="noopener noreferrer")
p #{cleanTitle(post.media.title)}
span(class="domain") (#{post.domain})
.video-holder
a(href="" + post.media.embed_src + "", target="_blank", rel="noopener noreferrer")
img(src="" + post.media.thumbnail + "")
div(class="youtube-info")
p YouTube video info:
p #{cleanTitle(post.media.title)} #{post.media.embed_src}
p #{post.media.author_name} #{post.media.author_url}
else
if post.media.source === 'external'
if post.images
.image
a(href="" + post.media.embed_src + "", target="_blank", rel="noopener noreferrer")
img(src="" + post.images.source + "", alt="")
if !post.media.embed_src.startsWith("https://twitter.com")
details(class="source-details")
summary Source
p
a(href="" + post.media.embed_src + "", target="_blank", rel="noopener noreferrer")
p(class="source-url") #{post.media.embed_src}
else
.video
a(href="" + post.media.source + "")
img(src="" + post.media.source + "")
p Embed URL:
a(href="" + post.media.embed_src + "", target="_blank", rel="noopener noreferrer")
p #{post.media.embed_src}
else
.video
video(controls="controls", autoplay="autoplay", loop="loop", muted=(video_muted ? true : false))
source(src="" + post.media.source + "", type="video/mp4")
| Your browser does not support the video element.
a(href="" + post.media.source + "") [media]
if post.selftext
div.usertext-body !{post.selftext}
if post.poll_data
.poll
.votes #{post.poll_data.total_vote_count} votes
if !post.poll_data.options[0].vote_count
em Cannot fetch poll data (either the poll is only for logged in users, or the result is shown after voting is complete).
br
em Showing only voting options:
br
each option in post.poll_data.options
.option
if(option.vote_count)
- let perc = option.vote_count / post.poll_data.total_vote_count * 100
.background(style="width:" + perc + "%")
.vote_count #{option.vote_count} (#{perc.toFixed(0)} %)
.text #{option.text}
else
.vote_count
.text #{option.text}
.meta
if post.poll_data.voting_end_timestamp < new Date().getTime()
em voting ended #{timeDifference(post.poll_data.voting_end_timestamp/1000)}
else
em voting will end in #{timeDifference(post.poll_data.voting_end_timestamp/1000, true)}
if post.contest_mode
.infobar.blue
p this thread is in contest mode - contest mode randomizes comment sorting and hides scores.
if viewing_comment
div(class="infobar", id="c")
p you are viewing a single comment's thread.
a(href="" + post_url + "") view the rest of the comments →
.comments-info
p all #{post.num_comments} comments
.comments-sort
details
summary
if sortby === 'confidence'
span sorted by: best
if sortby === 'top'
span sorted by: top
if sortby === 'new'
span sorted by: new
if sortby === 'controversial'
span sorted by: controversial
if sortby === 'old'
span sorted by: old
if sortby === 'qa'
span sorted by: q&a
ul
li(class=sortby === 'confidence' ? 'active' : '')
a(href="?sort=confidence") best
li(class=sortby === 'top' ? 'active' : '')
a(href="?sort=top") top
li(class=sortby === 'new' ? 'active' : '')
a(href="?sort=new") new
li(class=sortby === 'controversial' ? 'active' : '')
a(href="?sort=controversial") controversial
li(class=sortby === 'old' ? 'active' : '')
a(href="?sort=old") old
li(class=sortby === 'qa' ? 'active' : '')
a(href="?sort=qa") Q&A
!= comments
include includes/footer.pug