mirror of
https://github.com/klaussilveira/gitlist.git
synced 2025-11-17 19:20:56 +01:00
Abstracting the pager and improving the pagination system
This commit is contained in:
@@ -2,13 +2,8 @@
|
|||||||
|
|
||||||
$app->get('{repo}/commits/{branch}', function($repo, $branch) use($app) {
|
$app->get('{repo}/commits/{branch}', function($repo, $branch) use($app) {
|
||||||
$repository = $app['git']->getRepository($app['git.repos'] . $repo);
|
$repository = $app['git']->getRepository($app['git.repos'] . $repo);
|
||||||
$pageNumber = $app['request']->get('page');
|
$pager = $app['utils']->getPager($app['request']->get('page'), $repository->getTotalCommits());
|
||||||
$pageNumber = (empty($pageNumber)) ? 0 : $pageNumber;
|
$commits = $repository->getCommits(null, $pager['current']);
|
||||||
$totalCommits = $repository->getTotalCommits();
|
|
||||||
$lastPage = intval($totalCommits / 15);
|
|
||||||
// If total commits are integral multiple of 15, the lastPage will be commits/15 - 1.
|
|
||||||
$lastPage = ($lastPage * 15 == $totalCommits) ? $lastPage - 1 : $lastPage;
|
|
||||||
$commits = $repository->getCommits(null, $pageNumber);
|
|
||||||
|
|
||||||
foreach ($commits as $commit) {
|
foreach ($commits as $commit) {
|
||||||
$date = $commit->getDate();
|
$date = $commit->getDate();
|
||||||
@@ -19,8 +14,7 @@ $app->get('{repo}/commits/{branch}', function($repo, $branch) use($app) {
|
|||||||
return $app['twig']->render('commits.twig', array(
|
return $app['twig']->render('commits.twig', array(
|
||||||
'baseurl' => $app['baseurl'],
|
'baseurl' => $app['baseurl'],
|
||||||
'page' => 'commits',
|
'page' => 'commits',
|
||||||
'pagenumber' => $pageNumber,
|
'pager' => $pager,
|
||||||
'lastpage' => $lastPage,
|
|
||||||
'repo' => $repo,
|
'repo' => $repo,
|
||||||
'branch' => $branch,
|
'branch' => $branch,
|
||||||
'branches' => $repository->getBranches(),
|
'branches' => $repository->getBranches(),
|
||||||
@@ -33,10 +27,8 @@ $app->get('{repo}/commits/{branch}', function($repo, $branch) use($app) {
|
|||||||
|
|
||||||
$app->get('{repo}/commits/{branch}/{file}/', function($repo, $branch, $file) use($app) {
|
$app->get('{repo}/commits/{branch}/{file}/', function($repo, $branch, $file) use($app) {
|
||||||
$repository = $app['git']->getRepository($app['git.repos'] . $repo);
|
$repository = $app['git']->getRepository($app['git.repos'] . $repo);
|
||||||
$pageNumber = $app['request']->get('page');
|
$pager = $app['utils']->getPager($app['request']->get('page'), $repository->getTotalCommits($file));
|
||||||
$pageNumber = (empty($pageNumber)) ? 0 : $pageNumber;
|
$commits = $repository->getCommits($file, $pager['current']);
|
||||||
$lastPage = round($repository->getTotalCommits() / 15, 0, PHP_ROUND_HALF_UP);
|
|
||||||
$commits = $repository->getCommits($file, $pagenumber);
|
|
||||||
|
|
||||||
foreach ($commits as $commit) {
|
foreach ($commits as $commit) {
|
||||||
$date = $commit->getDate();
|
$date = $commit->getDate();
|
||||||
@@ -47,8 +39,7 @@ $app->get('{repo}/commits/{branch}/{file}/', function($repo, $branch, $file) use
|
|||||||
return $app['twig']->render('commits.twig', array(
|
return $app['twig']->render('commits.twig', array(
|
||||||
'baseurl' => $app['baseurl'],
|
'baseurl' => $app['baseurl'],
|
||||||
'page' => 'commits',
|
'page' => 'commits',
|
||||||
'pagenumber' => $pageNumber,
|
'pager' => $pager,
|
||||||
'lastpage' => $lastPage,
|
|
||||||
'repo' => $repo,
|
'repo' => $repo,
|
||||||
'branch' => $branch,
|
'branch' => $branch,
|
||||||
'branches' => $repository->getBranches(),
|
'branches' => $repository->getBranches(),
|
||||||
|
|||||||
@@ -203,4 +203,21 @@ class Utils
|
|||||||
return 'text';
|
return 'text';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getPager($pageNumber, $totalCommits)
|
||||||
|
{
|
||||||
|
$pageNumber = (empty($pageNumber)) ? 0 : $pageNumber;
|
||||||
|
$lastPage = intval($totalCommits / 15);
|
||||||
|
// If total commits are integral multiple of 15, the lastPage will be commits/15 - 1.
|
||||||
|
$lastPage = ($lastPage * 15 == $totalCommits) ? $lastPage - 1 : $lastPage;
|
||||||
|
$nextPage = $pageNumber + 1;
|
||||||
|
$previousPage = $pageNumber - 1;
|
||||||
|
|
||||||
|
return array('current' => $pageNumber,
|
||||||
|
'next' => $nextPage,
|
||||||
|
'previous' => $previousPage,
|
||||||
|
'last' => $lastPage,
|
||||||
|
'total' => $totalCommits,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -222,9 +222,15 @@ class Repository
|
|||||||
* @access public
|
* @access public
|
||||||
* @return integer Total number of commits
|
* @return integer Total number of commits
|
||||||
*/
|
*/
|
||||||
public function getTotalCommits()
|
public function getTotalCommits($file = null)
|
||||||
{
|
{
|
||||||
$commits = $this->getClient()->run($this, "rev-list --all --count");
|
$command = "rev-list --all --count";
|
||||||
|
|
||||||
|
if ($file) {
|
||||||
|
$command .= " $file";
|
||||||
|
}
|
||||||
|
|
||||||
|
$commits = $this->getClient()->run($this, $command);
|
||||||
return $commits;
|
return $commits;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -40,14 +40,14 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
<ul class="pager">
|
<ul class="pager">
|
||||||
{% if pagenumber != 0 %}
|
{% if pager.current != 0 %}
|
||||||
<li class="previous">
|
<li class="previous">
|
||||||
<a href="?page={{ pagenumber - 1 }}">← Older</a>
|
<a href="?page={{ pager.previous }}">← Older</a>
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if pagenumber != lastpage %}
|
{% if pager.current != pager.last %}
|
||||||
<li class="next">
|
<li class="next">
|
||||||
<a href="?page={{ pagenumber + 1 }}">Newer →</a>
|
<a href="?page={{ pager.next }}">Newer →</a>
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
Reference in New Issue
Block a user