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();