mirror of
https://github.com/BradNut/personal-website-sveltekit
synced 2025-09-08 23:20:18 +00:00
77 lines
No EOL
1.6 KiB
Svelte
77 lines
No EOL
1.6 KiB
Svelte
<script lang="ts">
|
|
export let additionalClasses: string;
|
|
export let pageSize: number;
|
|
export let totalCount: number;
|
|
export let currentPage: number;
|
|
export let base: string;
|
|
|
|
// make some variables
|
|
$: totalPages = Math.ceil(totalCount / pageSize);
|
|
$: prevPage = currentPage - 1;
|
|
$: nextPage = currentPage + 1;
|
|
$: hasNextPage = nextPage <= totalPages;
|
|
$: hasPrevPage = prevPage >= 1;
|
|
</script>
|
|
|
|
<div class={`paginationStyles ${additionalClasses}`}>
|
|
<a
|
|
title={`${!hasPrevPage ? 'No ' : ''}Prev Page`}
|
|
aria-disabled={!hasPrevPage}
|
|
href={`${base}/${prevPage}`}
|
|
>
|
|
← <span class="word">Prev</span>
|
|
</a>
|
|
{#each { length: totalPages } as _, i}
|
|
<a
|
|
aria-current={currentPage === i + 1}
|
|
href={`${base}/${i + 1}`}
|
|
>
|
|
{i + 1}
|
|
</a>
|
|
{/each}
|
|
<a
|
|
title={`${!hasNextPage ? 'No ' : ''}Next Page`}
|
|
aria-disabled={!hasNextPage}
|
|
href={`${base}/${nextPage}`}
|
|
>
|
|
<span class="word">Next</span> →
|
|
</a>
|
|
</div>
|
|
|
|
<style lang="postcss">
|
|
a {
|
|
&[aria-current="true"] {
|
|
color: var(--shellYellow)
|
|
}
|
|
|
|
&[aria-disabled="true"] {
|
|
pointer-events: none;
|
|
color: var(--lightGrey);
|
|
text-decoration: line-through;
|
|
}
|
|
}
|
|
|
|
.paginationStyles {
|
|
display: flex;
|
|
align-content: center;
|
|
align-items: center;
|
|
justify-items: center;
|
|
border: 1px solid var(--grey);
|
|
margin: 3rem 0;
|
|
border-radius: 5px;
|
|
text-align: center;
|
|
font-size: 1.5rem;
|
|
|
|
& > * {
|
|
padding: 1rem;
|
|
flex: 1;
|
|
border-right: 1px solid var(--grey);
|
|
text-decoration: none;
|
|
}
|
|
@media (max-width: 800px) {
|
|
.word {
|
|
display: none;
|
|
}
|
|
}
|
|
}
|
|
</style> |