Signed by hanna SSH key fingerprint: SHA256:4g9cWhkAAw8gwqhJUcVbSnGEvdGwklW+1Aa/fMUu59k
assets/base.css +13 −3 crates/web/src/activity.rs +20 −5 crates/web/src/pages.rs +4 −3 assets/base.css +13 −3 Expand 341 hidden lines 342 342 } 343 343 . label-list . entry-row-body { 344 344 display : flex ; 345 - flex-direction : column ; 346 - gap : 0.25rem ; 347 - align-items : flex-start ; 345 + flex-direction : row ; 346 + align-items : center ; 347 + gap : 0.6rem ; 348 + flex-wrap : wrap ; 349 + } 350 + . label-list . entry-row-meta { 351 + margin : 0 ; 348 352 } 349 353 . label-add { 350 354 display : flex ; Expand 255 hidden lines 606 610 margin : 0 0 1rem ; 607 611 } 608 612 . lang-bar-summary { 613 + 614 + 615 + display : block ; 609 616 list-style : none ; 610 617 cursor : pointer ; 611 618 } 612 619 . lang-bar-summary :: -webkit-details-marker { 613 620 display : none ; 614 621 } 622 + . lang-bar-summary :: marker { 623 + content : "" ; 624 + } 615 625 . lang-bar { 616 626 display : flex ; 617 627 height : 0.6rem ;
crates/web/src/activity.rs +20 −5 Expand 24 hidden lines 25 25 const WEEKS : usize = 53 ; 26 26 27 27 const SCAN_PER_REPO : usize = 400 ; 28 - 29 - const FEED_LIMIT : usize = 20 ; 28 + 29 + const FEED_LIMIT : usize = 100 ; 30 30 31 31 32 32 pub struct FeedItem { Expand 186 hidden lines 219 219 } 220 220 } 221 221 222 - 223 - pub fn feed_section ( & self , now_ms : i64 ) -> Markup { 222 + 223 + 224 + 225 + pub fn feed_section ( 226 + & self , 227 + now_ms : i64 , 228 + paging : crate :: repo:: Pagination , 229 + path : & str , 230 + query : Option < & str > , 231 + ) -> Markup { 232 + let start = paging. offset ( ) . min ( self . feed. len ( ) ) ; 233 + let end = start. saturating_add ( paging. per_page) . min ( self . feed. len ( ) ) ; 234 + let page = & self . feed[ start..end] ; 235 + let has_next = end < self . feed. len ( ) ; 224 236 html ! { 225 237 section class="listing" { 226 238 h2 { "Recent activity" } Expand 1 hidden lines 228 240 div class="card" { p class="muted" { "No recent activity." } } 229 241 } @else { 230 242 ul class="activity-feed card" { 231 - @for item in & self . feed { 243 + @for item in page { 232 244 @let base = format ! ( "/{}/{}" , item. owner, item. repo) ; 233 245 li class="activity-item" { 234 246 div class="activity-head muted" { Expand 11 hidden lines 246 258 } 247 259 } 248 260 } 261 + @if has_next || paging. page > 1 { 262 + ( crate :: repo:: pagination_nav ( path, query, paging, has_next) ) 263 + } 249 264 } 250 265 } 251 266 }
crates/web/src/pages.rs +4 −3 Expand 69 hidden lines 70 70 ) -> AppResult < Response > { 71 71 let ( jar, chrome) = build_chrome ( & state, jar, user. clone ( ) , uri. path ( ) . to_string ( ) ) ; 72 72 if let Some ( u) = user { 73 - let body = dashboard_body ( & state, & u, & lq. q. unwrap_or_default ( ) ) . await ?; 73 + let body = dashboard_body ( & state, & u, & lq. q. unwrap_or_default ( ) , & uri) . await ?; 74 74 Ok ( ( jar, page ( & chrome, "Dashboard" , body) ) . into_response ( ) ) 75 75 } else { 76 76 let body = explore_repos_body ( & state, "" ) . await ?; Expand 140 hidden lines 217 217 218 218 219 219 220 - async fn dashboard_body ( state : & AppState , user : & User , q : & str ) -> AppResult < Markup > { 220 + async fn dashboard_body ( state : & AppState , user : & User , q : & str , uri : & Uri ) -> AppResult < Markup > { 221 221 let now = now_ms ( ) ; 222 222 let activity = crate :: activity:: compute ( state, user, now) . await ?; 223 + let paging = repo:: Pagination :: from_query ( uri. query ( ) ) ; 223 224 224 225 let mine = state. store. repos_by_owner ( & user. id) . await ?; 225 226 let needle = q. trim ( ) . to_lowercase ( ) ; Expand 7 hidden lines 233 234 div class="dashboard" { 234 235 div class="dashboard-main" { 235 236 ( activity. heatmap ( ) ) 236 - ( activity. feed_section ( now) ) 237 + ( activity. feed_section ( now, paging, uri. path ( ) , uri. query ( ) ) ) 237 238 } 238 239 aside class="dashboard-side" { 239 240 form class="search-row" method="get" {