diff --git a/Cargo.lock b/Cargo.lock index f551e0b..4a58ba6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -75,7 +75,7 @@ dependencies = [ "log", "mime", "percent-encoding", - "pin-project 1.0.2", + "pin-project 1.0.3", "rand", "regex", "serde", @@ -93,7 +93,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4ca8ce00b267af8ccebbd647de0d61e0674b6e61185cc7a592ff88772bed655" dependencies = [ "quote 1.0.8", - "syn 1.0.57", + "syn 1.0.58", ] [[package]] @@ -247,7 +247,7 @@ dependencies = [ "fxhash", "log", "mime", - "pin-project 1.0.2", + "pin-project 1.0.3", "regex", "rustls", "serde", @@ -267,7 +267,7 @@ checksum = "ad26f77093333e0e7c6ffe54ebe3582d908a104e448723eec6d43d08b07143fb" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.8", - "syn 1.0.57", + "syn 1.0.58", ] [[package]] @@ -346,7 +346,7 @@ checksum = "e5444eec77a9ec2bfe4524139e09195862e981400c4358d3b760cae634e4c4ee" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.8", - "syn 1.0.57", + "syn 1.0.58", ] [[package]] @@ -357,7 +357,7 @@ checksum = "8d3a45e77e34375a7923b1e8febb049bb011f064714a8e17a1a616fef01da13d" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.8", - "syn 1.0.57", + "syn 1.0.58", ] [[package]] @@ -518,9 +518,9 @@ dependencies = [ [[package]] name = "const_fn" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd51eab21ab4fd6a3bf889e2d0958c0a6e3a61ad04260325e919e652a2a62826" +checksum = "28b9d6de7f49e22cf97ad17fc4036ece69300032f45f78f30b4a4482cdc3f4a6" [[package]] name = "cookie" @@ -562,7 +562,7 @@ checksum = "41cb0e6161ad61ed084a36ba71fbba9e3ac5aee3606fb607fe08da6acbcf3d8c" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.8", - "syn 1.0.57", + "syn 1.0.58", ] [[package]] @@ -604,7 +604,7 @@ dependencies = [ "heck", "proc-macro2 1.0.24", "quote 1.0.8", - "syn 1.0.57", + "syn 1.0.58", ] [[package]] @@ -696,7 +696,7 @@ dependencies = [ "proc-macro-hack", "proc-macro2 1.0.24", "quote 1.0.8", - "syn 1.0.57", + "syn 1.0.58", ] [[package]] @@ -727,7 +727,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project 1.0.2", + "pin-project 1.0.3", "pin-utils", "proc-macro-hack", "proc-macro-nested", @@ -880,7 +880,7 @@ dependencies = [ "httparse", "httpdate", "itoa", - "pin-project 1.0.2", + "pin-project 1.0.3", "socket2", "tokio", "tower-service", @@ -1017,6 +1017,7 @@ dependencies = [ "reqwest", "serde", "serde_json", + "time 0.2.23", "url", ] @@ -1249,11 +1250,11 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ccc2237c2c489783abd8c4c80e5450fc0e98644555b1364da68cc29aa151ca7" +checksum = "5a83804639aad6ba65345661744708855f9fbcb71176ea8d28d05aeb11d975e7" dependencies = [ - "pin-project-internal 1.0.2", + "pin-project-internal 1.0.3", ] [[package]] @@ -1264,18 +1265,18 @@ checksum = "65ad2ae56b6abe3a1ee25f15ee605bacadb9a764edaba9c2bf4103800d4a1895" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.8", - "syn 1.0.57", + "syn 1.0.58", ] [[package]] name = "pin-project-internal" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8e8d2bf0b23038a4424865103a4df472855692821aab4e4f5c3312d461d9e5f" +checksum = "b7bcc46b8f73443d15bc1c5fecbb315718491fa9187fa483f0e359323cde8b3a" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.8", - "syn 1.0.57", + "syn 1.0.58", ] [[package]] @@ -1286,9 +1287,9 @@ checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b" [[package]] name = "pin-project-lite" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b063f57ec186e6140e2b8b6921e5f1bd89c7356dda5b33acc5401203ca6131c" +checksum = "e36743d754ccdf9954c2e352ce2d4b106e024c814f6499c2dadff80da9a442d8" [[package]] name = "pin-utils" @@ -1443,7 +1444,7 @@ dependencies = [ "mime", "mime_guess", "percent-encoding", - "pin-project-lite 0.2.0", + "pin-project-lite 0.2.1", "rustls", "serde", "serde_urlencoded", @@ -1564,7 +1565,7 @@ checksum = "c84d3526699cd55261af4b941e4e725444df67aa4f9e6a3564f18030d12672df" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.8", - "syn 1.0.57", + "syn 1.0.58", ] [[package]] @@ -1680,7 +1681,7 @@ dependencies = [ "quote 1.0.8", "serde", "serde_derive", - "syn 1.0.57", + "syn 1.0.58", ] [[package]] @@ -1696,7 +1697,7 @@ dependencies = [ "serde_derive", "serde_json", "sha1", - "syn 1.0.57", + "syn 1.0.58", ] [[package]] @@ -1718,9 +1719,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.57" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4211ce9909eb971f111059df92c45640aad50a619cf55cd76476be803c4c68e6" +checksum = "cc60a3d73ea6594cd712d830cc1f0390fd71542d8c8cd24e70cc54cdfd5e05d5" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.8", @@ -1744,7 +1745,7 @@ checksum = "9be73a2caec27583d0046ef3796c3794f868a5bc813db689eed00c7631275cd1" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.8", - "syn 1.0.57", + "syn 1.0.58", ] [[package]] @@ -1811,7 +1812,7 @@ dependencies = [ "proc-macro2 1.0.24", "quote 1.0.8", "standback", - "syn 1.0.57", + "syn 1.0.58", ] [[package]] @@ -1899,7 +1900,7 @@ checksum = "9f47026cdc4080c07e49b37087de021820269d996f581aac150ef9e5583eefe3" dependencies = [ "cfg-if 1.0.0", "log", - "pin-project-lite 0.2.0", + "pin-project-lite 0.2.1", "tracing-core", ] @@ -2094,7 +2095,7 @@ dependencies = [ "log", "proc-macro2 1.0.24", "quote 1.0.8", - "syn 1.0.57", + "syn 1.0.58", "wasm-bindgen-shared", ] @@ -2128,7 +2129,7 @@ checksum = "b5a48c72f299d80557c7c62e37e7225369ecc0c963964059509fbafe917c7549" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.8", - "syn 1.0.57", + "syn 1.0.58", "wasm-bindgen-backend", "wasm-bindgen-shared", ] diff --git a/Cargo.toml b/Cargo.toml index e81721d..414b694 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,4 +17,5 @@ serde_json = "1.0" chrono = "0.4.19" async-recursion = "0.3.1" url = "2.2.0" -regex = "1" \ No newline at end of file +regex = "1" +time = "0.2.23" \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 0b6cfdb..46eafe2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,7 +5,7 @@ use actix_web::{get, middleware::NormalizePath, web, App, HttpResponse, HttpServ mod post; mod proxy; mod search; -// mod settings; +mod settings; mod subreddit; mod user; mod utils; @@ -52,8 +52,8 @@ async fn main() -> std::io::Result<()> { .route("/favicon.ico/", web::get().to(HttpResponse::Ok)) .route("/robots.txt/", web::get().to(robots)) // SETTINGS SERVICE - // .route("/settings/", web::get().to(settings::get)) - // .route("/settings/save/", web::post().to(settings::set)) + .route("/settings/", web::get().to(settings::get)) + .route("/settings/", web::post().to(settings::set)) // PROXY SERVICE .route("/proxy/{url:.*}/", web::get().to(proxy::handler)) // SEARCH SERVICES diff --git a/src/post.rs b/src/post.rs index de78253..c6a77ed 100644 --- a/src/post.rs +++ b/src/post.rs @@ -1,5 +1,5 @@ // CRATES -use crate::utils::{error, format_num, format_url, param, request, rewrite_url, val, Comment, Flags, Flair, Post}; +use crate::utils::{Comment, Flags, Flair, Post, cookie, error, format_num, format_url, media, param, request, rewrite_url, val}; use actix_web::{HttpRequest, HttpResponse, Result}; use async_recursion::async_recursion; @@ -14,6 +14,7 @@ struct PostTemplate { comments: Vec, post: Post, sort: String, + layout: String, } pub async fn item(req: HttpRequest) -> HttpResponse { @@ -33,7 +34,14 @@ pub async fn item(req: HttpRequest) -> HttpResponse { let comments = parse_comments(&res[1]).await.unwrap(); // Use the Post and Comment structs to generate a website to show users - let s = PostTemplate { comments, post, sort }.render().unwrap(); + let s = PostTemplate { + comments, + post, + sort, + layout: cookie(req, "layout"), + } + .render() + .unwrap(); HttpResponse::Ok().content_type("text/html").body(s) } // If the Reddit API returns an error, exit and send error page to user @@ -41,26 +49,6 @@ pub async fn item(req: HttpRequest) -> HttpResponse { } } -// UTILITIES -async fn media(data: &serde_json::Value) -> (String, String) { - let post_type: &str; - let url = if !data["preview"]["reddit_video_preview"]["fallback_url"].is_null() { - post_type = "video"; - format_url(data["preview"]["reddit_video_preview"]["fallback_url"].as_str().unwrap_or_default().to_string()) - } else if !data["secure_media"]["reddit_video"]["fallback_url"].is_null() { - post_type = "video"; - format_url(data["secure_media"]["reddit_video"]["fallback_url"].as_str().unwrap_or_default().to_string()) - } else if data["post_hint"].as_str().unwrap_or("") == "image" { - post_type = "image"; - format_url(data["preview"]["images"][0]["source"]["url"].as_str().unwrap_or_default().to_string()) - } else { - post_type = "link"; - data["url"].as_str().unwrap_or_default().to_string() - }; - - (post_type.to_string(), url) -} - // POSTS async fn parse_post(json: &serde_json::Value) -> Result { // Retrieve post (as opposed to comments) from JSON @@ -91,6 +79,7 @@ async fn parse_post(json: &serde_json::Value) -> Result { score: format_num(score), upvote_ratio: ratio as i64, post_type: media.0, + thumbnail: format_url(val(post, "thumbnail")), flair: Flair( val(post, "link_flair_text"), val(post, "link_flair_background_color"), diff --git a/src/search.rs b/src/search.rs index 9911217..89c34f7 100644 --- a/src/search.rs +++ b/src/search.rs @@ -1,5 +1,5 @@ // CRATES -use crate::utils::{error, fetch_posts, param, Post}; +use crate::utils::{cookie, error, fetch_posts, param, Post}; use actix_web::{HttpRequest, HttpResponse}; use askama::Template; @@ -19,6 +19,7 @@ struct SearchTemplate { posts: Vec, sub: String, params: SearchParams, + layout: String, } // SERVICES @@ -44,6 +45,7 @@ pub async fn find(req: HttpRequest) -> HttpResponse { after: posts.1, restrict_sr: param(&path, "restrict_sr"), }, + layout: cookie(req, "layout"), } .render() .unwrap(), diff --git a/src/settings.rs b/src/settings.rs index 5fc903f..1e4869c 100644 --- a/src/settings.rs +++ b/src/settings.rs @@ -1,48 +1,48 @@ -// // CRATES -// use crate::utils::cookies; -// use actix_web::{cookie::Cookie, web::Form, HttpRequest, HttpResponse, Result}; // http::Method, -// use askama::Template; +// CRATES +use crate::utils::cookie; +use actix_web::{cookie::Cookie, web::Form, HttpRequest, HttpResponse}; // http::Method, +use askama::Template; +use time::{Duration, OffsetDateTime}; -// // STRUCTS -// #[derive(Template)] -// #[template(path = "settings.html", escape = "none")] -// struct SettingsTemplate { -// pref_nsfw: String, -// } +// STRUCTS +#[derive(Template)] +#[template(path = "settings.html", escape = "none")] +struct SettingsTemplate { + layout: String, +} -// #[derive(serde::Deserialize)] -// pub struct Preferences { -// pref_nsfw: Option, -// } +#[derive(serde::Deserialize)] +pub struct Preferences { + layout: Option, +} -// // FUNCTIONS +// FUNCTIONS -// // Retrieve cookies from request "Cookie" header -// pub async fn get(req: HttpRequest) -> Result { -// let cookies = cookies(req); +// Retrieve cookies from request "Cookie" header +pub async fn get(req: HttpRequest) -> HttpResponse { + let s = SettingsTemplate { layout: cookie(req, "layout") }.render().unwrap(); -// let pref_nsfw: String = cookies.get("pref_nsfw").unwrap_or(&String::new()).to_owned(); + HttpResponse::Ok().content_type("text/html").body(s) +} -// let s = SettingsTemplate { pref_nsfw }.render().unwrap(); -// Ok(HttpResponse::Ok().content_type("text/html").body(s)) -// } +// Set cookies using response "Set-Cookie" header +pub async fn set(req: HttpRequest, form: Form) -> HttpResponse { + let mut response = HttpResponse::Found(); -// // Set cookies using response "Set-Cookie" header -// pub async fn set(form: Form) -> HttpResponse { -// let nsfw: Cookie = match &form.pref_nsfw { -// Some(value) => Cookie::build("pref_nsfw", value).path("/").secure(true).http_only(true).finish(), -// None => Cookie::build("pref_nsfw", "").finish(), -// }; + match &form.layout { + Some(value) => response.cookie( + Cookie::build("layout", value) + .path("/") + .secure(true) + .http_only(true) + .expires(OffsetDateTime::now_utc() + Duration::weeks(52)) + .finish(), + ), + None => response.del_cookie(&actix_web::HttpMessage::cookie(&req, "layout").unwrap()), + }; -// let body = SettingsTemplate { -// pref_nsfw: form.pref_nsfw.clone().unwrap_or_default(), -// } -// .render() -// .unwrap(); - -// HttpResponse::Found() -// .content_type("text/html") -// .set_header("Set-Cookie", nsfw.to_string()) -// .set_header("Location", "/settings") -// .body(body) -// } + response + .content_type("text/html") + .set_header("Location", "/settings") + .body(r#"Redirecting to settings..."#) +} diff --git a/src/subreddit.rs b/src/subreddit.rs index e306b73..376877f 100644 --- a/src/subreddit.rs +++ b/src/subreddit.rs @@ -1,5 +1,5 @@ // CRATES -use crate::utils::{error, fetch_posts, format_num, format_url, param, request, rewrite_url, val, Post, Subreddit}; +use crate::utils::{cookie, error, fetch_posts, format_num, format_url, param, request, rewrite_url, val, Post, Subreddit}; use actix_web::{HttpRequest, HttpResponse, Result}; use askama::Template; @@ -11,6 +11,7 @@ struct SubredditTemplate { posts: Vec, sort: (String, String), ends: (String, String), + layout: String, } #[derive(Template)] @@ -19,6 +20,7 @@ struct WikiTemplate { sub: String, wiki: String, page: String, + layout: String, } // SERVICES @@ -40,6 +42,7 @@ pub async fn page(req: HttpRequest) -> HttpResponse { posts: items.0, sort: (sort, param(&path, "t")), ends: (param(&path, "after"), items.1), + layout: cookie(req, "layout"), } .render() .unwrap(); @@ -60,6 +63,7 @@ pub async fn wiki(req: HttpRequest) -> HttpResponse { sub: sub.to_string(), wiki: rewrite_url(res["data"]["content_html"].as_str().unwrap_or_default()), page: page.to_string(), + layout: String::new(), } .render() .unwrap(); diff --git a/src/user.rs b/src/user.rs index 3073bf3..1069390 100644 --- a/src/user.rs +++ b/src/user.rs @@ -1,5 +1,5 @@ // CRATES -use crate::utils::{error, fetch_posts, format_url, nested_val, param, request, Post, User}; +use crate::utils::{cookie, error, fetch_posts, format_url, nested_val, param, request, Post, User}; use actix_web::{HttpRequest, HttpResponse, Result}; use askama::Template; use chrono::{TimeZone, Utc}; @@ -12,6 +12,7 @@ struct UserTemplate { posts: Vec, sort: (String, String), ends: (String, String), + layout: String, } // FUNCTIONS @@ -34,6 +35,7 @@ pub async fn profile(req: HttpRequest) -> HttpResponse { posts: items.0, sort: (sort, param(&path, "t")), ends: (param(&path, "after"), items.1), + layout: cookie(req, "layout"), } .render() .unwrap(); diff --git a/src/utils.rs b/src/utils.rs index 23ca2e1..1a4dfe3 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -1,9 +1,11 @@ // use std::collections::HashMap; +use std::collections::HashMap; + // // CRATES // -use actix_web::{HttpResponse, Result}; +use actix_web::{cookie::Cookie, HttpResponse, Result}; use askama::Template; use base64::encode; use chrono::{TimeZone, Utc}; @@ -37,6 +39,7 @@ pub struct Post { pub post_type: String, pub flair: Flair, pub flags: Flags, + pub thumbnail: String, pub media: String, pub time: String, } @@ -91,6 +94,7 @@ pub struct Params { #[template(path = "error.html", escape = "none")] pub struct ErrorTemplate { pub message: String, + pub layout: String, } // @@ -100,27 +104,14 @@ pub struct ErrorTemplate { // Grab a query param from a url pub fn param(path: &str, value: &str) -> String { let url = Url::parse(format!("https://libredd.it/{}", path).as_str()).unwrap(); - let pairs: std::collections::HashMap<_, _> = url.query_pairs().into_owned().collect(); + let pairs: HashMap<_, _> = url.query_pairs().into_owned().collect(); pairs.get(value).unwrap_or(&String::new()).to_owned() } -// Cookies from request -// pub fn cookies(req: HttpRequest) -> HashMap { -// let mut result: HashMap = HashMap::new(); - -// let cookies: Vec = req -// .headers() -// .get_all("Cookie") -// .map(|value| value.to_str().unwrap()) -// .map(|unparsed| Cookie::parse(unparsed).unwrap()) -// .collect(); - -// for cookie in cookies { -// result.insert(cookie.name().to_string(), cookie.value().to_string()); -// } - -// result -// } +// Cookie value from request +pub fn cookie(req: actix_web::HttpRequest, name: &str) -> String { + actix_web::HttpMessage::cookie(&req, name).unwrap_or_else(|| Cookie::new(name, "")).value().to_string() +} // Direct urls to proxy if proxy is enabled pub fn format_url(url: String) -> String { @@ -148,6 +139,25 @@ pub fn format_num(num: i64) -> String { } } +pub async fn media(data: &serde_json::Value) -> (String, String) { + let post_type: &str; + let url = if !data["preview"]["reddit_video_preview"]["fallback_url"].is_null() { + post_type = "video"; + format_url(data["preview"]["reddit_video_preview"]["fallback_url"].as_str().unwrap_or_default().to_string()) + } else if !data["secure_media"]["reddit_video"]["fallback_url"].is_null() { + post_type = "video"; + format_url(data["secure_media"]["reddit_video"]["fallback_url"].as_str().unwrap_or_default().to_string()) + } else if data["post_hint"].as_str().unwrap_or("") == "image" { + post_type = "image"; + format_url(data["preview"]["images"][0]["source"]["url"].as_str().unwrap_or_default().to_string()) + } else { + post_type = "link"; + data["url"].as_str().unwrap_or_default().to_string() + }; + + (post_type.to_string(), url) +} + // // JSON PARSING // @@ -187,12 +197,16 @@ pub async fn fetch_posts(path: &str, fallback_title: String) -> Result<(Vec Result<(Vec Result<(Vec HttpResponse { - let body = ErrorTemplate { message: msg }.render().unwrap_or_default(); + let body = ErrorTemplate { + message: msg, + layout: String::new(), + } + .render() + .unwrap_or_default(); HttpResponse::NotFound().content_type("text/html").body(body) } diff --git a/static/style.css b/static/style.css index e75c512..72b0ba3 100644 --- a/static/style.css +++ b/static/style.css @@ -37,7 +37,8 @@ nav { min-height: 40px; } -nav #lib, nav #github, nav #version { color: white; } +nav * { color: white; } +nav #reddit { color: var(--accent); } nav #version { opacity: 25%; } main { @@ -93,7 +94,7 @@ aside { max-width: 350px; } -.panel { +.post, .panel { border: 1px solid var(--highlighted); } @@ -408,7 +409,6 @@ input[type="submit"]:hover { color: var(--accent); } .post_thumbnail { object-fit: cover; width: auto; - flex-shrink: 0; border-radius: 5px; border: 1px solid var(--foreground); max-width: 20%; @@ -554,6 +554,81 @@ input[type="submit"]:hover { color: var(--accent); } background: black; } +/* Layouts */ + +#compact .post:not(.highlighted) { + border-radius: 0; + margin: 0; + padding: 0; +} + +#compact .post:not(:last-of-type):not(.highlighted):not(.stickied) { + border-bottom: 0; +} + +#compact .post_left { + border-radius: 0; +} + +#compact .post_header { + font-size: 14px; +} + +#compact .post_title { + margin-top: 5px; +} + +#compact .post_text { + padding: 10px; +} + +#compact .post_thumbnail { + max-width: 75px; + max-height: 75px; +} + +#compact #footer { + margin-top: 10px; +} + +#card .post_right { + flex-direction: column; +} + +#card .post:not(.highlighted) .post_media { + margin-top: 0; + margin-bottom: 15px; +} + +/* Settings */ + +#settings { + display: flex; + flex-direction: column; + align-items: center; +} + +#prefs { + display: flex; + justify-content: space-between; + align-items: center; + padding: 20px; + background: var(--post); + border-radius: 5px; +} + +#prefs > select { + border-radius: 5px; + margin-left: 20px; +} + +#save { + background: var(--highlighted); + padding: 10px 15px; + border-radius: 5px; + margin-top: 20px; +} + /* Markdown */ .md > *:not(:first-child) { diff --git a/templates/base.html b/templates/base.html index f3771bf..5ab7738 100644 --- a/templates/base.html +++ b/templates/base.html @@ -11,10 +11,15 @@ {% endblock %} - + diff --git a/templates/post.html b/templates/post.html index f0a5126..838a436 100644 --- a/templates/post.html +++ b/templates/post.html @@ -39,7 +39,7 @@
-
+

{{ post.score }}

{% if post.flags.nsfw %}
NSFW
{% endif %} diff --git a/templates/search.html b/templates/search.html index 3a87dad..c52464e 100644 --- a/templates/search.html +++ b/templates/search.html @@ -21,7 +21,7 @@ {% for post in posts %} {% if post.title != "Comment" %} -
+

{{ post.score }}

{% if post.flags.nsfw %}
NSFW
{% endif %} diff --git a/templates/settings.html b/templates/settings.html index cf69691..0eaea43 100644 --- a/templates/settings.html +++ b/templates/settings.html @@ -9,10 +9,14 @@ {% block body %}
-
- - - + +
+ + +
+
{% endblock %} \ No newline at end of file diff --git a/templates/subreddit.html b/templates/subreddit.html index ad229aa..061ffca 100644 --- a/templates/subreddit.html +++ b/templates/subreddit.html @@ -28,7 +28,7 @@ {% endif %} {% for post in posts %} -
+

{{ post.score }}

{% if post.flags.nsfw %}
NSFW
{% endif %} @@ -49,7 +49,13 @@ {{ post.title }}

- + + + {% if layout == "card" && post.post_type == "image" %} + + {% else if layout != "card" %} + + {% endif %}
{% endfor %} diff --git a/templates/user.html b/templates/user.html index dcacc2f..af4ca4b 100644 --- a/templates/user.html +++ b/templates/user.html @@ -18,7 +18,7 @@ {% for post in posts %} {% if post.title != "Comment" %} -
+

{{ post.score }}

{% if post.flags.nsfw %}
NSFW
{% endif %} @@ -42,7 +42,13 @@ {{ post.title }}

- + + + {% if layout == "card" && post.post_type == "image" %} + + {% else if layout != "card" %} + + {% endif %}
{% else %}