Switch Pages to UTF-8
This commit is contained in:
parent
bfc05adbce
commit
a1e6f95151
18
src/post.rs
18
src/post.rs
@ -43,6 +43,9 @@ async fn render(id: String, sort: String) -> Result<HttpResponse> {
|
|||||||
}
|
}
|
||||||
.render()
|
.render()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
// println!("{}", s);
|
||||||
|
|
||||||
Ok(HttpResponse::Ok().content_type("text/html").body(s))
|
Ok(HttpResponse::Ok().content_type("text/html").body(s))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,13 +83,6 @@ async fn media(data: &serde_json::Value) -> String {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn html_escape(input: String) -> String {
|
|
||||||
input
|
|
||||||
.replace("&", "&")
|
|
||||||
.replace("’", "'")
|
|
||||||
.replace("\"", """)
|
|
||||||
}
|
|
||||||
|
|
||||||
// POSTS
|
// POSTS
|
||||||
async fn fetch_post (id: &String) -> Post {
|
async fn fetch_post (id: &String) -> Post {
|
||||||
let url: String = format!("https://reddit.com/{}.json", id);
|
let url: String = format!("https://reddit.com/{}.json", id);
|
||||||
@ -100,9 +96,9 @@ async fn fetch_post (id: &String) -> Post {
|
|||||||
let score = post_data["data"]["score"].as_i64().unwrap();
|
let score = post_data["data"]["score"].as_i64().unwrap();
|
||||||
|
|
||||||
Post {
|
Post {
|
||||||
title: html_escape(val(post_data, "title").await),
|
title: val(post_data, "title").await,
|
||||||
community: val(post_data, "subreddit").await,
|
community: val(post_data, "subreddit").await,
|
||||||
body: html_escape(markdown_to_html(post_data["data"]["selftext"].as_str().unwrap(), &ComrakOptions::default())),
|
body: markdown_to_html(post_data["data"]["selftext"].as_str().unwrap(), &ComrakOptions::default()),
|
||||||
author: val(post_data, "author").await,
|
author: val(post_data, "author").await,
|
||||||
url: val(post_data, "permalink").await,
|
url: val(post_data, "permalink").await,
|
||||||
score: if score>1000 {format!("{}k",score/1000)} else {score.to_string()},
|
score: if score>1000 {format!("{}k",score/1000)} else {score.to_string()},
|
||||||
@ -127,8 +123,10 @@ async fn fetch_comments (id: String, sort: &String) -> Result<Vec<Comment>, Box<
|
|||||||
let score = comment["data"]["score"].as_i64().unwrap_or(0);
|
let score = comment["data"]["score"].as_i64().unwrap_or(0);
|
||||||
let body = markdown_to_html(comment["data"]["body"].as_str().unwrap_or(""), &ComrakOptions::default());
|
let body = markdown_to_html(comment["data"]["body"].as_str().unwrap_or(""), &ComrakOptions::default());
|
||||||
|
|
||||||
|
// println!("{}", body);
|
||||||
|
|
||||||
comments.push(Comment {
|
comments.push(Comment {
|
||||||
body: html_escape(body),
|
body: body,
|
||||||
author: val(comment, "author").await,
|
author: val(comment, "author").await,
|
||||||
score: if score>1000 {format!("{}k",score/1000)} else {score.to_string()},
|
score: if score>1000 {format!("{}k",score/1000)} else {score.to_string()},
|
||||||
time: Utc.timestamp(unix_time, 0).format("%b %e %Y %H:%M UTC").to_string()
|
time: Utc.timestamp(unix_time, 0).format("%b %e %Y %H:%M UTC").to_string()
|
||||||
|
@ -62,13 +62,6 @@ async fn sorted(web::Path((sub, sort)): web::Path<(String, String)>) -> Result<H
|
|||||||
// UTILITIES
|
// UTILITIES
|
||||||
async fn val (j: &serde_json::Value, k: &str) -> String { String::from(j["data"][k].as_str().unwrap_or("")) }
|
async fn val (j: &serde_json::Value, k: &str) -> String { String::from(j["data"][k].as_str().unwrap_or("")) }
|
||||||
|
|
||||||
fn html_escape(input: String) -> String {
|
|
||||||
input
|
|
||||||
.replace("&", "&")
|
|
||||||
.replace("’", "'")
|
|
||||||
.replace("\"", """)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SUBREDDIT
|
// SUBREDDIT
|
||||||
async fn subreddit(sub: &String) -> Subreddit {
|
async fn subreddit(sub: &String) -> Subreddit {
|
||||||
let url: String = format!("https://www.reddit.com/r/{}/about.json", sub);
|
let url: String = format!("https://www.reddit.com/r/{}/about.json", sub);
|
||||||
@ -82,8 +75,8 @@ async fn subreddit(sub: &String) -> Subreddit {
|
|||||||
|
|
||||||
Subreddit {
|
Subreddit {
|
||||||
name: val(&data, "display_name").await,
|
name: val(&data, "display_name").await,
|
||||||
title: html_escape(val(&data, "title").await),
|
title: val(&data, "title").await,
|
||||||
description: html_escape(val(&data, "public_description").await),
|
description: val(&data, "public_description").await,
|
||||||
icon: String::from(icon_parts[0]),
|
icon: String::from(icon_parts[0]),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -103,7 +96,7 @@ pub async fn posts(sub: String, sort: &String) -> Vec<Post> {
|
|||||||
let unix_time: i64 = post["data"]["created_utc"].as_f64().unwrap().round() as i64;
|
let unix_time: i64 = post["data"]["created_utc"].as_f64().unwrap().round() as i64;
|
||||||
let score = post["data"]["score"].as_i64().unwrap();
|
let score = post["data"]["score"].as_i64().unwrap();
|
||||||
posts.push(Post {
|
posts.push(Post {
|
||||||
title: html_escape(val(post, "title").await),
|
title: val(post, "title").await,
|
||||||
community: val(post, "subreddit").await,
|
community: val(post, "subreddit").await,
|
||||||
author: val(post, "author").await,
|
author: val(post, "author").await,
|
||||||
score: if score>1000 {format!("{}k",score/1000)} else {score.to_string()},
|
score: if score>1000 {format!("{}k",score/1000)} else {score.to_string()},
|
||||||
|
11
src/user.rs
11
src/user.rs
@ -61,13 +61,6 @@ async fn sorted(web::Path((username, sort)): web::Path<(String, String)>) -> Res
|
|||||||
async fn user_val (j: &serde_json::Value, k: &str) -> String { String::from(j["data"]["subreddit"][k].as_str().unwrap()) }
|
async fn user_val (j: &serde_json::Value, k: &str) -> String { String::from(j["data"]["subreddit"][k].as_str().unwrap()) }
|
||||||
async fn post_val (j: &serde_json::Value, k: &str) -> String { String::from(j["data"][k].as_str().unwrap_or("Comment")) }
|
async fn post_val (j: &serde_json::Value, k: &str) -> String { String::from(j["data"][k].as_str().unwrap_or("Comment")) }
|
||||||
|
|
||||||
fn html_escape(input: String) -> String {
|
|
||||||
input
|
|
||||||
.replace("&", "&")
|
|
||||||
.replace("’", "'")
|
|
||||||
.replace("\"", """)
|
|
||||||
}
|
|
||||||
|
|
||||||
// USER
|
// USER
|
||||||
async fn user(name: &String) -> User {
|
async fn user(name: &String) -> User {
|
||||||
let url: String = format!("https://www.reddit.com/user/{}/about.json", name);
|
let url: String = format!("https://www.reddit.com/user/{}/about.json", name);
|
||||||
@ -80,7 +73,7 @@ async fn user(name: &String) -> User {
|
|||||||
icon: user_val(&data, "icon_img").await,
|
icon: user_val(&data, "icon_img").await,
|
||||||
karma: data["data"]["total_karma"].as_i64().unwrap(),
|
karma: data["data"]["total_karma"].as_i64().unwrap(),
|
||||||
banner: user_val(&data, "banner_img").await,
|
banner: user_val(&data, "banner_img").await,
|
||||||
description: html_escape(user_val(&data, "public_description").await)
|
description: user_val(&data, "public_description").await
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,7 +92,7 @@ async fn posts(sub: String, sort: &String) -> Vec<Post> {
|
|||||||
let unix_time: i64 = post["data"]["created_utc"].as_f64().unwrap().round() as i64;
|
let unix_time: i64 = post["data"]["created_utc"].as_f64().unwrap().round() as i64;
|
||||||
let score = post["data"]["score"].as_i64().unwrap();
|
let score = post["data"]["score"].as_i64().unwrap();
|
||||||
posts.push(Post {
|
posts.push(Post {
|
||||||
title: html_escape(post_val(post, "title").await),
|
title: post_val(post, "title").await,
|
||||||
community: post_val(post, "subreddit").await,
|
community: post_val(post, "subreddit").await,
|
||||||
author: post_val(post, "author").await,
|
author: post_val(post, "author").await,
|
||||||
score: if score>1000 {format!("{}k",score/1000)} else {score.to_string()},
|
score: if score>1000 {format!("{}k",score/1000)} else {score.to_string()},
|
||||||
|
@ -263,6 +263,7 @@ span {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.comment_right {
|
.comment_right {
|
||||||
|
word-wrap: anywhere;
|
||||||
padding: 20px 25px;
|
padding: 20px 25px;
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
flex-shrink: 1;
|
flex-shrink: 1;
|
||||||
|
@ -2,7 +2,14 @@
|
|||||||
<head>
|
<head>
|
||||||
<title>Libreddit</title>
|
<title>Libreddit</title>
|
||||||
<meta name="description" content="Alternative private front-end to Reddit">
|
<meta name="description" content="Alternative private front-end to Reddit">
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||||
<link rel="stylesheet" href="/style.css">
|
<link rel="stylesheet" href="/style.css">
|
||||||
|
<style>
|
||||||
|
#sort > #sort_{{ sort }} {
|
||||||
|
background: aqua;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<header>
|
<header>
|
||||||
|
@ -3,12 +3,13 @@
|
|||||||
<title>{{ post.title }} - r/{{ post.community }}</title>
|
<title>{{ post.title }} - r/{{ post.community }}</title>
|
||||||
<meta name="author" content="u/{{ post.author }}">
|
<meta name="author" content="u/{{ post.author }}">
|
||||||
<meta name="description" content="View on Libreddit, an alternative private front-end to Reddit.">
|
<meta name="description" content="View on Libreddit, an alternative private front-end to Reddit.">
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||||
<link rel="stylesheet" href="/style.css">
|
<link rel="stylesheet" href="/style.css">
|
||||||
<style>
|
<style>
|
||||||
/* #sort > #sort_{{ sort }} {
|
#sort > #sort_{{ sort }} {
|
||||||
background: aqua;
|
background: aqua;
|
||||||
color: black;
|
color: black;
|
||||||
} */
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -2,7 +2,14 @@
|
|||||||
<head>
|
<head>
|
||||||
<title>r/{{ sub.name }}: {{ sub.description }}</title>
|
<title>r/{{ sub.name }}: {{ sub.description }}</title>
|
||||||
<meta name="description" content="View on Libreddit, an alternative private front-end to Reddit.">
|
<meta name="description" content="View on Libreddit, an alternative private front-end to Reddit.">
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||||
<link rel="stylesheet" href="/style.css">
|
<link rel="stylesheet" href="/style.css">
|
||||||
|
<style>
|
||||||
|
#sort > #sort_{{ sort }} {
|
||||||
|
background: aqua;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<header>
|
<header>
|
||||||
|
@ -2,7 +2,14 @@
|
|||||||
<head>
|
<head>
|
||||||
<title>Libreddit: u/{{ user.name }}</title>
|
<title>Libreddit: u/{{ user.name }}</title>
|
||||||
<meta name="description" content="View on Libreddit, an alternative private front-end to Reddit.">
|
<meta name="description" content="View on Libreddit, an alternative private front-end to Reddit.">
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||||
<link rel="stylesheet" href="/style.css">
|
<link rel="stylesheet" href="/style.css">
|
||||||
|
<style>
|
||||||
|
#sort > #sort_{{ sort }} {
|
||||||
|
background: aqua;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<header>
|
<header>
|
||||||
|
Loading…
Reference in New Issue
Block a user