table.templ (2665B)
1 package table 2 3 import "fmt" 4 5 templ Table(params TableParams) { 6 <div class="table-wrapper"> 7 <table> 8 <thead> 9 <tr> 10 for _, header := range params.Headers { 11 <th>{ header }</th> 12 } 13 </tr> 14 </thead> 15 { children... } 16 </table> 17 <nav class="table-pagination" aria-label="Pagination"> 18 <ul> 19 <li> 20 <button 21 hx-get={ fmt.Sprintf("%s&page=%d", params.GetURL, params.CurrentPage-1) } 22 hx-push-url={ fmt.Sprintf("%s&page=%d", params.PushURL, params.CurrentPage-1) } 23 hx-target=".table-wrapper" 24 hx-swap="outerHTML" 25 if params.CurrentPage <= 1 { 26 disabled 27 } 28 > 29 prev 30 </button> 31 </li> 32 if params.CurrentPage - 5 > 0 { 33 <button 34 hx-get={ fmt.Sprintf("%s&page=%d", params.GetURL, 1) } 35 hx-push-url={ fmt.Sprintf("%s&page=%d", params.PushURL, 1) } 36 hx-target=".table-wrapper" 37 hx-swap="outerHTML" 38 > 39 1 40 </button> 41 if params.CurrentPage - 5 != 1 { 42 <button disabled>...</button> 43 } 44 } 45 for i := params.CurrentPage - 4; i < params.CurrentPage; i++ { 46 if i > 0 { 47 <li> 48 <button 49 hx-get={ fmt.Sprintf("%s&page=%d", params.GetURL, i) } 50 hx-push-url={ fmt.Sprintf("%s&page=%d", params.PushURL, i) } 51 hx-target=".table-wrapper" 52 hx-swap="outerHTML" 53 > 54 { i } 55 </button> 56 </li> 57 } 58 } 59 <li><button class="-primary">{ params.CurrentPage }</button></li> 60 for i := params.CurrentPage + 1; i < params.CurrentPage + 5; i++ { 61 if i <= params.TotalPages { 62 <li> 63 <button 64 hx-get={ fmt.Sprintf("%s&page=%d", params.GetURL, i) } 65 hx-push-url={ fmt.Sprintf("%s&page=%d", params.PushURL, i) } 66 hx-target=".table-wrapper" 67 hx-swap="outerHTML" 68 > 69 { i } 70 </button> 71 </li> 72 } 73 } 74 if params.CurrentPage + 4 < params.TotalPages { 75 if params.CurrentPage + 5 != params.TotalPages { 76 <button disabled>...</button> 77 } 78 <button 79 hx-get={ fmt.Sprintf("%s&page=%d", params.GetURL, params.TotalPages) } 80 hx-push-url={ fmt.Sprintf("%s&page=%d", params.PushURL, params.TotalPages) } 81 hx-target=".table-wrapper" 82 hx-swap="outerHTML" 83 >{ params.TotalPages }</button> 84 } 85 <li> 86 <button 87 hx-get={ fmt.Sprintf("%s&page=%d", params.GetURL, params.CurrentPage+1) } 88 hx-push-url={ fmt.Sprintf("%s&page=%d", params.PushURL, params.CurrentPage+1) } 89 hx-target=".table-wrapper" 90 hx-swap="outerHTML" 91 if params.CurrentPage >= params.TotalPages { 92 disabled 93 } 94 > 95 next 96 </button> 97 </li> 98 </ul> 99 </nav> 100 </div> 101 }