Format post and comment votes with a decimal place, like vanilla reddit does. (#324)
* Format post and comment votes with a decimal place, like vanilla reddit does. Before this change, a vote count of 1999 was displayed as 1k, which is a pretty big gap. The displayed count also differed from what Reddit does. Now, the behaviour is consistent. Added some tests for format_num. * Provide more space for post scores Co-authored-by: spikecodes <19519553+spikecodes@users.noreply.github.com>
This commit is contained in:
parent
f7de5285e4
commit
5d9c320a7e
37
src/utils.rs
37
src/utils.rs
@ -544,12 +544,14 @@ pub fn rewrite_urls(input_text: &str) -> String {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// Append `m` and `k` for millions and thousands respectively
|
// Format vote count to a string that will be displayed.
|
||||||
|
// Append `m` and `k` for millions and thousands respectively, and
|
||||||
|
// round to the nearest tenth.
|
||||||
pub fn format_num(num: i64) -> (String, String) {
|
pub fn format_num(num: i64) -> (String, String) {
|
||||||
let truncated = if num >= 1_000_000 || num <= -1_000_000 {
|
let truncated = if num >= 1_000_000 || num <= -1_000_000 {
|
||||||
format!("{}m", num / 1_000_000)
|
format!("{:.1}m", num as f64 / 1_000_000.0)
|
||||||
} else if num >= 1000 || num <= -1000 {
|
} else if num >= 1000 || num <= -1000 {
|
||||||
format!("{}k", num / 1_000)
|
format!("{:.1}k", num as f64 / 1_000.0)
|
||||||
} else {
|
} else {
|
||||||
num.to_string()
|
num.to_string()
|
||||||
};
|
};
|
||||||
@ -628,3 +630,32 @@ pub async fn error(req: Request<Body>, msg: String) -> Result<Response<Body>, St
|
|||||||
|
|
||||||
Ok(Response::builder().status(404).header("content-type", "text/html").body(body.into()).unwrap_or_default())
|
Ok(Response::builder().status(404).header("content-type", "text/html").body(body.into()).unwrap_or_default())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::format_num;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn format_num_works() {
|
||||||
|
assert_eq!(
|
||||||
|
format_num(567),
|
||||||
|
("567".to_string(), "567".to_string())
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
format_num(1234),
|
||||||
|
("1.2k".to_string(), "1234".to_string())
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
format_num(1999),
|
||||||
|
("2.0k".to_string(), "1999".to_string())
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
format_num(1001),
|
||||||
|
("1.0k".to_string(), "1001".to_string())
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
format_num(1_999_999),
|
||||||
|
("2.0m".to_string(), "1999999".to_string())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -697,12 +697,12 @@ a.search_subreddit:hover {
|
|||||||
|
|
||||||
.post_score {
|
.post_score {
|
||||||
padding-top: 16px;
|
padding-top: 16px;
|
||||||
|
padding-left: 12px;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-align: end;
|
|
||||||
color: var(--accent);
|
color: var(--accent);
|
||||||
grid-area: post_score;
|
grid-area: post_score;
|
||||||
text-align: end;
|
text-align: center;
|
||||||
border-radius: 5px 0 0 5px;
|
border-radius: 5px 0 0 5px;
|
||||||
transition: 0.2s background;
|
transition: 0.2s background;
|
||||||
}
|
}
|
||||||
@ -712,7 +712,7 @@ a.search_subreddit:hover {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.post_header {
|
.post_header {
|
||||||
margin: 15px 20px 5px 15px;
|
margin: 15px 20px 5px 12px;
|
||||||
grid-area: post_header;
|
grid-area: post_header;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -724,7 +724,7 @@ a.search_subreddit:hover {
|
|||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
margin: 5px 15px;
|
margin: 5px 15px 5px 12px;
|
||||||
grid-area: post_title;
|
grid-area: post_title;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1076,7 +1076,7 @@ summary.comment_data {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.compact .post_header {
|
.compact .post_header {
|
||||||
margin: 15px 15px 2.5px 15px;
|
margin: 15px 15px 2.5px 12px;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user