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