1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
#[render::component]
pub fn TimeAgo<'a>(
since: chrono::DateTime<chrono::offset::FixedOffset>,
lang: &'a crate::Translator,
) {
let since_str = since.to_rfc3339();
let duration = chrono::offset::Utc::now().signed_duration_since(since);
let (key, args) = {
let weeks = duration.num_weeks();
if weeks > 52 {
let years = ((weeks as f32) / 52.18).floor() as u32;
(
"timeago_years",
Some(fluent::fluent_args!["years" => years]),
)
} else if weeks > 5 {
let months = (f32::from(weeks as i8) / 4.35).floor() as u8;
(
"timeago_months",
Some(fluent::fluent_args!["months" => months]),
)
} else if weeks > 0 {
(
"timeago_weeks",
Some(fluent::fluent_args!["weeks" => weeks]),
)
} else {
let days = duration.num_days();
if days > 0 {
("timeago_days", Some(fluent::fluent_args!["days" => days]))
} else {
let hours = duration.num_hours();
if hours > 0 {
(
"timeago_hours",
Some(fluent::fluent_args!["hours" => hours]),
)
} else {
let minutes = duration.num_minutes();
if minutes > 0 {
(
"timeago_minutes",
Some(fluent::fluent_args!["minutes" => minutes]),
)
} else {
let seconds = duration.num_seconds();
if seconds > 0 {
(
"timeago_seconds",
Some(fluent::fluent_args!["seconds" => seconds]),
)
} else if seconds < 0 {
("timeago_future", None)
} else {
("timeago_now", None)
}
}
}
}
}
};
let text = lang.tr(key, args.as_ref()).into_owned();
render::rsx! {
<span title={since_str}>{text}</span>
}
}
|