lyrics

lyrics
git clone git://brookjeynes.dev/bjeynes/lyrics.git
Log | Files | Refs

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 }