JSFiddle - React, Tailwind, and code Playground
by Patrick Hund
JavaScript
class ThreadListPager {
constructor(page, numThreads) {
this._page = page;
this._numThreads = numThreads;
}
initFiveOrMorePages() {
this._numPages = this._numThreads / 40;
if (this._page != null && this._page >= 1 && this._page < this._numPages) {
this._currentPageNumber = this._page;
} else {
this._currentPageNumber = this._numPages;
}
this._indexOfFirstItemOnPage = new Array(this._numPages + 1);
this._numberOfItemsOnPage = new Array(this._numPages + 1);
let r = this._numThreads % 40;
this._indexOfFirstItemOnPage[this._numPages] = 0;
this._numberOfItemsOnPage[this._numPages] = 40 + (r + 3) / 4;
this._indexOfFirstItemOnPage[this._numPages - 1] = this._numberOfItemsOnPage[this._numPages];
this._numberOfItemsOnPage[this._numPages - 1] = 40 + (r + 2) / 4;
this._indexOfFirstItemOnPage[this._numPages - 2] = this._indexOfFirstItemOnPage[this._numPages - 1] + this._numberOfItemsOnPage[this._numPages - 1];
this._numberOfItemsOnPage[this._numPages - 2] = 40 + (r + 1) / 4;
this._indexOfFirstItemOnPage[this._numPages - 3] = this._indexOfFirstItemOnPage[this._numPages - 2] + this._numberOfItemsOnPage[this._numPages - 2];
this._numberOfItemsOnPage[this._numPages - 3] = 40 + r / 4;
for (let pageNumber = this._numPages - 4; pageNumber >= 1; --pageNumber) {
this._indexOfFirstItemOnPage[pageNumber] = this._indexOfFirstItemOnPage[pageNumber + 1] + this._numberOfItemsOnPage[pageNumber + 1];
this._numberOfItemsOnPage[pageNumber] = 40;
}
// Paranoia check ...
if (this._indexOfFirstItemOnPage[1] + 40 != this._numThreads) {
throw new Error("Should never happen. (_numThreads == " + this._numThreads + ")");
}
}
}
const pager = new ThreadListPager(1552,100000);
pager.initFiveOrMorePages();