Paginate the homepage
This commit is contained in:
		
							parent
							
								
									740393bc18
								
							
						
					
					
						commit
						18125ab398
					
				| @ -65,6 +65,10 @@ impl Post { | ||||
|             .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> { | ||||
|         posts::table.order(posts::creation_date.desc()) | ||||
|             .limit(limit) | ||||
| @ -106,6 +110,14 @@ impl Post { | ||||
|             .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> { | ||||
|         use schema::users; | ||||
|         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" | ||||
| msgstr[0] "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" | ||||
| msgstr[0] "" | ||||
| 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" | ||||
| msgstr[0] "{{ count }} aut⋅eur⋅rice 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[2] "Ten blog ma {{ count }} autorów: " | ||||
| 
 | ||||
| msgid "Previous page" | ||||
| msgstr "" | ||||
| 
 | ||||
| msgid "Next page" | ||||
| msgstr "" | ||||
| 
 | ||||
| #~ msgid "Logowanie" | ||||
| #~ msgstr "Zaloguj się" | ||||
|  | ||||
| @ -46,6 +46,7 @@ fn main() { | ||||
| 
 | ||||
|             routes::comments::create, | ||||
| 
 | ||||
|             routes::instance::paginated_index, | ||||
|             routes::instance::index, | ||||
|             routes::instance::shared_inbox, | ||||
|             routes::instance::nodeinfo, | ||||
|  | ||||
| @ -10,17 +10,20 @@ use plume_models::{ | ||||
|     instance::* | ||||
| }; | ||||
| use inbox::Inbox; | ||||
| use routes::Page; | ||||
| 
 | ||||
| #[get("/")] | ||||
| fn index(conn: DbConn, user: Option<User>) -> Template { | ||||
| #[get("/?<page>")] | ||||
| fn paginated_index(conn: DbConn, user: Option<User>, page: Page) -> Template { | ||||
|     match Instance::get_local(&*conn) { | ||||
|         Some(inst) => { | ||||
|             let recents = Post::get_recents(&*conn, 6); | ||||
|             let recents = Post::get_recents_page(&*conn, page.limits()); | ||||
| 
 | ||||
|             Template::render("instance/index", json!({ | ||||
|                 "instance": inst, | ||||
|                 "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 => { | ||||
| @ -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>")] | ||||
| fn shared_inbox(conn: DbConn, data: String) -> String { | ||||
|     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 { | ||||
| 	display: flex; | ||||
| 	width: 100%; | ||||
| 	justify-content: space-evenly; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -14,4 +14,5 @@ | ||||
|             {{ macros::post_card(article=article) }} | ||||
|         {% endfor %} | ||||
|     </div> | ||||
|     {{ macros::paginate(page=page, total=n_pages) }} | ||||
| {% endblock content %} | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user