--- import type { Page } from "astro"; import { Icon } from 'astro-icon/components'; interface Props { page: Page; class?: string; } const {page} = Astro.props; const HIDDEN = -1; const className = Astro.props.class; const ADJ_DIST = 2; const VISIBLE = ADJ_DIST * 2 + 1; // for test let count = 1; let l = page.currentPage, r = page.currentPage; while (0 < l - 1 && r + 1 <= page.lastPage && count + 2 <= VISIBLE) { count += 2; l--; r++; } while (0 < l - 1 && count < VISIBLE) { count++; l--; } while (r + 1 <= page.lastPage && count < VISIBLE) { count++; r++; } let pages: number[] = []; if (l > 1) pages.push(1); if (l == 3) pages.push(2); if (l > 3) pages.push(HIDDEN); for (let i = l; i <= r; i++) pages.push(i); if (r < page.lastPage - 2) pages.push(HIDDEN); if (r == page.lastPage - 2) pages.push(page.lastPage - 1); if (r < page.lastPage) pages.push(page.lastPage); const parts: string[] = page.url.current.split('/'); const commonUrl: string = parts.slice(0, -1).join('/') + '/'; const getPageUrl = (p: number) => { if (p == 1) return commonUrl; return commonUrl + p; } ---