From 9ef5b52b8531f0ed1eb753a673ddff5a15758482 Mon Sep 17 00:00:00 2001 From: mae Date: Thu, 5 Mar 2026 00:32:25 -0600 Subject: [PATCH] cmd/pkgserver: pagination --- cmd/pkgserver/ui/index.html | 13 ++++--- cmd/pkgserver/ui/static/index.js | 63 ++++++++++++++++++++++++++++++ cmd/pkgserver/ui/static/index.ts | 66 ++++++++++++++++++++++++++++++-- 3 files changed, 134 insertions(+), 8 deletions(-) diff --git a/cmd/pkgserver/ui/index.html b/cmd/pkgserver/ui/index.html index 6a832cb..3ca3fc2 100644 --- a/cmd/pkgserver/ui/index.html +++ b/cmd/pkgserver/ui/index.html @@ -4,20 +4,23 @@ Hakurei PkgServer +

Hakurei PkgServer

+ + + +
StatusNameVersion
+

Showing entries .

+« Previous 1 Next » - - -
StatusNameVersion
-

Showing entries .

-« PreviousNext » + \ No newline at end of file diff --git a/cmd/pkgserver/ui/static/index.js b/cmd/pkgserver/ui/static/index.js index 26cdcb8..759c2c2 100644 --- a/cmd/pkgserver/ui/static/index.js +++ b/cmd/pkgserver/ui/static/index.js @@ -1,4 +1,67 @@ +"use strict"; +var PackageEntry = /** @class */ (function () { + function PackageEntry() { + } + return PackageEntry; +}()); +var State = /** @class */ (function () { + function State() { + this.entriesPerPage = 10; + this.currentPage = 1; + this.entryIndex = 0; + this.loadedEntries = []; + } + State.prototype.getEntriesPerPage = function () { + return this.entriesPerPage; + }; + State.prototype.setEntriesPerPage = function (entriesPerPage) { + this.entriesPerPage = entriesPerPage; + this.updateRange(); + }; + State.prototype.getCurrentPage = function () { + return this.currentPage; + }; + State.prototype.setCurrentPage = function (page) { + this.currentPage = page; + document.getElementById("page-number").innerText = String(this.currentPage); + this.updateRange(); + }; + State.prototype.getEntryIndex = function () { + return this.entryIndex; + }; + State.prototype.setEntryIndex = function (entryIndex) { + this.entryIndex = entryIndex; + this.updateRange(); + }; + State.prototype.getLoadedEntries = function () { + return this.loadedEntries; + }; + State.prototype.getMaxPage = function () { + return this.loadedEntries.length / this.entriesPerPage; + }; + State.prototype.updateRange = function () { + var max = Math.min(this.entryIndex + this.entriesPerPage, this.loadedEntries.length); + document.getElementById("entry-counter").innerText = "".concat(this.entryIndex, "-").concat(max, " of ").concat(this.loadedEntries.length); + }; + return State; +}()); +var STATE; function prevPage() { + var current = STATE.getCurrentPage(); + if (current > 1) { + STATE.setCurrentPage(STATE.getCurrentPage() - 1); + } } function nextPage() { + var current = STATE.getCurrentPage(); + if (current < STATE.getMaxPage()) { + STATE.setCurrentPage(STATE.getCurrentPage() + 1); + } } +document.addEventListener("DOMContentLoaded", function () { + STATE = new State(); + STATE.updateRange(); + document.getElementById("count").addEventListener("change", function (event) { + STATE.setEntriesPerPage(parseInt(event.target.value)); + }); +}); diff --git a/cmd/pkgserver/ui/static/index.ts b/cmd/pkgserver/ui/static/index.ts index 1253812..0301df0 100644 --- a/cmd/pkgserver/ui/static/index.ts +++ b/cmd/pkgserver/ui/static/index.ts @@ -1,6 +1,66 @@ -function prevPage() { +"use strict" + +class PackageEntry { } -function nextPage() { +class State { + entriesPerPage: number = 10 + currentPage: number = 1 + entryIndex: number = 0 + loadedEntries: PackageEntry[] = [] + getEntriesPerPage(): number { + return this.entriesPerPage + } + setEntriesPerPage(entriesPerPage: number) { + this.entriesPerPage = entriesPerPage + this.updateRange() + } + getCurrentPage(): number { + return this.currentPage + } + setCurrentPage(page: number) { + this.currentPage = page + document.getElementById("page-number").innerText = String(this.currentPage) + this.updateRange() + } + getEntryIndex(): number { + return this.entryIndex + } + setEntryIndex(entryIndex: number) { + this.entryIndex = entryIndex + this.updateRange() + } + getLoadedEntries(): PackageEntry[] { + return this.loadedEntries + } + getMaxPage(): number { + return this.loadedEntries.length / this.entriesPerPage + } + updateRange() { + let max = Math.min(this.entryIndex + this.entriesPerPage, this.loadedEntries.length) + document.getElementById("entry-counter").innerText = `${this.entryIndex}-${max} of ${this.loadedEntries.length}` + } +} -} \ No newline at end of file +let STATE: State + +function prevPage() { + let current = STATE.getCurrentPage() + if (current > 1) { + STATE.setCurrentPage(STATE.getCurrentPage() - 1) + } +} +function nextPage() { + let current = STATE.getCurrentPage() + if (current < STATE.getMaxPage()) { + STATE.setCurrentPage(STATE.getCurrentPage() + 1) + } +} + +document.addEventListener("DOMContentLoaded", () => { + STATE = new State() + STATE.updateRange() + document.getElementById("count").addEventListener("change", (event) => { + STATE.setEntriesPerPage(parseInt((event.target as HTMLSelectElement).value)) + }) +}) \ No newline at end of file