Paginate the homepage
This commit is contained in:
parent
740393bc18
commit
18125ab398
@ -65,6 +65,10 @@ impl Post {
|
|||||||
.len()
|
.len()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn count(conn: &PgConnection) -> i64 {
|
||||||
|
posts::table.count().get_result(conn).expect("Couldn't count posts")
|
||||||
|
}
|
||||||
|
|
||||||
pub fn get_recents(conn: &PgConnection, limit: i64) -> Vec<Post> {
|
pub fn get_recents(conn: &PgConnection, limit: i64) -> Vec<Post> {
|
||||||
posts::table.order(posts::creation_date.desc())
|
posts::table.order(posts::creation_date.desc())
|
||||||
.limit(limit)
|
.limit(limit)
|
||||||
@ -106,6 +110,14 @@ impl Post {
|
|||||||
.expect("Error loading a page of posts for blog")
|
.expect("Error loading a page of posts for blog")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_recents_page(conn: &PgConnection, (min, max): (i32, i32)) -> Vec<Post> {
|
||||||
|
posts::table.order(posts::creation_date.desc())
|
||||||
|
.offset(min.into())
|
||||||
|
.limit((max - min).into())
|
||||||
|
.load::<Post>(conn)
|
||||||
|
.expect("Error loading recent posts page")
|
||||||
|
}
|
||||||
|
|
||||||
pub fn get_authors(&self, conn: &PgConnection) -> Vec<User> {
|
pub fn get_authors(&self, conn: &PgConnection) -> Vec<User> {
|
||||||
use schema::users;
|
use schema::users;
|
||||||
use schema::post_authors;
|
use schema::post_authors;
|
||||||
|
6
po/de.po
6
po/de.po
@ -345,3 +345,9 @@ msgid "One article in this blog"
|
|||||||
msgid_plural "{{ count }} articles in this blog"
|
msgid_plural "{{ count }} articles in this blog"
|
||||||
msgstr[0] "Du bist kein Autor in diesem Blog."
|
msgstr[0] "Du bist kein Autor in diesem Blog."
|
||||||
msgstr[1] "Du bist kein Autor in diesem Blog."
|
msgstr[1] "Du bist kein Autor in diesem Blog."
|
||||||
|
|
||||||
|
msgid "Previous page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Next page"
|
||||||
|
msgstr ""
|
||||||
|
6
po/en.po
6
po/en.po
@ -337,3 +337,9 @@ msgid "One article in this blog"
|
|||||||
msgid_plural "{{ count }} articles in this blog"
|
msgid_plural "{{ count }} articles in this blog"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
|
msgid "Previous page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Next page"
|
||||||
|
msgstr ""
|
||||||
|
6
po/fr.po
6
po/fr.po
@ -341,3 +341,9 @@ msgid "One article in this blog"
|
|||||||
msgid_plural "{{ count }} articles in this blog"
|
msgid_plural "{{ count }} articles in this blog"
|
||||||
msgstr[0] "{{ count }} aut⋅eur⋅rice dans ce blog : "
|
msgstr[0] "{{ count }} aut⋅eur⋅rice dans ce blog : "
|
||||||
msgstr[1] "{{ count }} aut⋅eur⋅rice⋅s dans ce blog : "
|
msgstr[1] "{{ count }} aut⋅eur⋅rice⋅s dans ce blog : "
|
||||||
|
|
||||||
|
msgid "Previous page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Next page"
|
||||||
|
msgstr ""
|
||||||
|
6
po/pl.po
6
po/pl.po
@ -350,5 +350,11 @@ msgstr[0] "Ten blog ma jednego autora: "
|
|||||||
msgstr[1] "Ten blog ma {{ count }} autorów: "
|
msgstr[1] "Ten blog ma {{ count }} autorów: "
|
||||||
msgstr[2] "Ten blog ma {{ count }} autorów: "
|
msgstr[2] "Ten blog ma {{ count }} autorów: "
|
||||||
|
|
||||||
|
msgid "Previous page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Next page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid "Logowanie"
|
#~ msgid "Logowanie"
|
||||||
#~ msgstr "Zaloguj się"
|
#~ msgstr "Zaloguj się"
|
||||||
|
@ -46,6 +46,7 @@ fn main() {
|
|||||||
|
|
||||||
routes::comments::create,
|
routes::comments::create,
|
||||||
|
|
||||||
|
routes::instance::paginated_index,
|
||||||
routes::instance::index,
|
routes::instance::index,
|
||||||
routes::instance::shared_inbox,
|
routes::instance::shared_inbox,
|
||||||
routes::instance::nodeinfo,
|
routes::instance::nodeinfo,
|
||||||
|
@ -10,17 +10,20 @@ use plume_models::{
|
|||||||
instance::*
|
instance::*
|
||||||
};
|
};
|
||||||
use inbox::Inbox;
|
use inbox::Inbox;
|
||||||
|
use routes::Page;
|
||||||
|
|
||||||
#[get("/")]
|
#[get("/?<page>")]
|
||||||
fn index(conn: DbConn, user: Option<User>) -> Template {
|
fn paginated_index(conn: DbConn, user: Option<User>, page: Page) -> Template {
|
||||||
match Instance::get_local(&*conn) {
|
match Instance::get_local(&*conn) {
|
||||||
Some(inst) => {
|
Some(inst) => {
|
||||||
let recents = Post::get_recents(&*conn, 6);
|
let recents = Post::get_recents_page(&*conn, page.limits());
|
||||||
|
|
||||||
Template::render("instance/index", json!({
|
Template::render("instance/index", json!({
|
||||||
"instance": inst,
|
"instance": inst,
|
||||||
"account": user,
|
"account": user,
|
||||||
"recents": recents.into_iter().map(|p| p.to_json(&*conn)).collect::<Vec<serde_json::Value>>()
|
"recents": recents.into_iter().map(|p| p.to_json(&*conn)).collect::<Vec<serde_json::Value>>(),
|
||||||
|
"page": page.page,
|
||||||
|
"n_pages": Page::total(Post::count(&*conn) as i32)
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
@ -31,6 +34,11 @@ fn index(conn: DbConn, user: Option<User>) -> Template {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[get("/")]
|
||||||
|
fn index(conn: DbConn, user: Option<User>) -> Template {
|
||||||
|
paginated_index(conn, user, Page::first())
|
||||||
|
}
|
||||||
|
|
||||||
#[post("/inbox", data = "<data>")]
|
#[post("/inbox", data = "<data>")]
|
||||||
fn shared_inbox(conn: DbConn, data: String) -> String {
|
fn shared_inbox(conn: DbConn, data: String) -> String {
|
||||||
let act: serde_json::Value = serde_json::from_str(&data[..]).unwrap();
|
let act: serde_json::Value = serde_json::from_str(&data[..]).unwrap();
|
||||||
|
@ -544,7 +544,6 @@ form.new-post input[type="submit"]:hover { background: #DADADA; }
|
|||||||
/*== Pagination ==*/
|
/*== Pagination ==*/
|
||||||
.pagination {
|
.pagination {
|
||||||
display: flex;
|
display: flex;
|
||||||
width: 100%;
|
|
||||||
justify-content: space-evenly;
|
justify-content: space-evenly;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,4 +14,5 @@
|
|||||||
{{ macros::post_card(article=article) }}
|
{{ macros::post_card(article=article) }}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
{{ macros::paginate(page=page, total=n_pages) }}
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
Loading…
Reference in New Issue
Block a user