Something went wrong. Try again.
@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
Something went wrong. Try again.
PHP
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196<?php
final class AphrontCursorPagerView extends AphrontView {
private $afterID; private $beforeID;
private $pageSize = 100;
private $nextPageID; private $prevPageID; private $moreResults;
private $uri;
public function setPageSize($page_size) { $this->pageSize = max(1, $page_size); return $this; }
public function getPageSize() { return $this->pageSize; }
public function setURI(PhutilURI $uri) { $this->uri = $uri; return $this; }
public function readFromRequest(AphrontRequest $request) { $this->uri = $request->getRequestURI(); $this->afterID = $request->getStr('after'); $this->beforeID = $request->getStr('before'); return $this; }
public function setAfterID($after_id) { $this->afterID = $after_id; return $this; }
public function getAfterID() { return $this->afterID; }
public function setBeforeID($before_id) { $this->beforeID = $before_id; return $this; }
public function getBeforeID() { return $this->beforeID; }
public function setNextPageID($next_page_id) { $this->nextPageID = $next_page_id; return $this; }
public function getNextPageID() { return $this->nextPageID; }
public function setPrevPageID($prev_page_id) { $this->prevPageID = $prev_page_id; return $this; }
public function getPrevPageID() { return $this->prevPageID; }
/** * @param T[] $results * @return T[] * @template T */ public function sliceResults(array $results) { if (count($results) > $this->getPageSize()) { $page_size = (int)$this->getPageSize(); $offset = ($this->beforeID ? count($results) - $page_size : 0); $results = array_slice($results, $offset, $page_size, true); $this->moreResults = true; } return $results; }
public function getHasMoreResults() { return $this->moreResults; }
public function willShowPagingControls() { return $this->prevPageID || $this->nextPageID || $this->afterID || ($this->beforeID && $this->moreResults); }
public function getFirstPageURI() { if (!$this->uri) { throw new PhutilInvalidStateException('setURI'); }
if (!$this->afterID && !($this->beforeID && $this->moreResults)) { return null; }
return id(clone $this->uri) ->removeQueryParam('after') ->removeQueryParam('before'); }
public function getPrevPageURI() { if (!$this->uri) { throw new PhutilInvalidStateException('getPrevPageURI'); }
if (!$this->prevPageID) { return null; }
return id(clone $this->uri) ->removeQueryParam('after') ->replaceQueryParam('before', $this->prevPageID); }
public function getNextPageURI() { if (!$this->uri) { throw new PhutilInvalidStateException('setURI'); }
if (!$this->nextPageID) { return null; }
return id(clone $this->uri) ->replaceQueryParam('after', $this->nextPageID) ->removeQueryParam('before'); }
public function render() { if (!$this->uri) { throw new PhutilInvalidStateException('setURI'); }
$links = array();
$first_uri = $this->getFirstPageURI(); if ($first_uri) { $icon = id(new PHUIIconView()) ->setIcon('fa-fast-backward'); $links[] = id(new PHUIButtonView()) ->setTag('a') ->setHref($first_uri) ->setIcon($icon) ->addClass('mml') ->setColor(PHUIButtonView::GREY) ->setText(pht('First')); }
$prev_uri = $this->getPrevPageURI(); if ($prev_uri) { $icon = id(new PHUIIconView()) ->setIcon('fa-backward'); $links[] = id(new PHUIButtonView()) ->setTag('a') ->setHref($prev_uri) ->setIcon($icon) ->addClass('mml') ->setColor(PHUIButtonView::GREY) ->setText(pht('Prev')); }
$next_uri = $this->getNextPageURI(); if ($next_uri) { $icon = id(new PHUIIconView()) ->setIcon('fa-forward'); $links[] = id(new PHUIButtonView()) ->setTag('a') ->setHref($next_uri) ->setIcon($icon, false) ->addClass('mml') ->setColor(PHUIButtonView::GREY) ->setText(pht('Next')); }
return phutil_tag( 'div', array( 'class' => 'phui-pager-view', ), $links); }
}