diff -r fc78844c8a76 -r 99ad73ef7385 vendor/bundles/Pagerfanta/View/DefaultView.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/bundles/Pagerfanta/View/DefaultView.php Fri Oct 21 17:10:54 2011 +0200 @@ -0,0 +1,182 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Pagerfanta\View; + +use Pagerfanta\PagerfantaInterface; + +/** + * DefaultInterface. + * + * @author Pablo Díez + * + * @api + */ +class DefaultView implements ViewInterface +{ + /** + * {@inheritdoc} + */ + public function render(PagerfantaInterface $pagerfanta, $routeGenerator, array $options = array()) + { + $options = array_merge(array( + 'proximity' => 2, + 'previous_message' => 'Previous', + 'next_message' => 'Next', + 'css_disabled_class' => 'disabled', + 'css_dots_class' => 'dots', + 'css_current_class' => 'current', + ), $options); + + $currentPage = $pagerfanta->getCurrentPage(); + + $startPage = $currentPage - $options['proximity']; + $endPage = $currentPage + $options['proximity']; + + if ($startPage < 1) { + $endPage = min($endPage + (1 - $startPage), $pagerfanta->getNbPages()); + $startPage = 1; + } + if ($endPage > $pagerfanta->getNbPages()) { + $startPage = max($startPage - ($endPage - $pagerfanta->getNbPages()), 1); + $endPage = $pagerfanta->getNbPages(); + } + + $pages = array(); + + // previous + if ($pagerfanta->hasPreviousPage()) { + $pages[] = array($pagerfanta->getPreviousPage(), $options['previous_message']); + } else { + $pages[] = sprintf('%s', $options['css_disabled_class'], $options['previous_message']); + } + + // first + if ($startPage > 1) { + $pages[] = array(1, 1); + if (3 == $startPage) { + $pages[] = array(2, 2); + } elseif (2 != $startPage) { + $pages[] = sprintf('...', $options['css_dots_class']); + } + } + + // pages + for ($page = $startPage; $page <= $endPage; $page++) { + if ($page == $currentPage) { + $pages[] = sprintf('%s', $options['css_current_class'], $page); + } else { + $pages[] = array($page, $page); + } + } + + // last + if ($pagerfanta->getNbPages() > $endPage) { + if ($pagerfanta->getNbPages() > ($endPage + 1)) { + if ($pagerfanta->getNbPages() > ($endPage + 2)) { + $pages[] = sprintf('...', $options['css_dots_class']); + } else { + $pages[] = array($endPage + 1, $endPage + 1); + } + } + + $pages[] = array($pagerfanta->getNbPages(), $pagerfanta->getNbPages()); + } + + // next + if ($pagerfanta->hasNextPage()) { + $pages[] = array($pagerfanta->getNextPage(), $options['next_message']); + } else { + $pages[] = sprintf('%s', $options['css_disabled_class'], $options['next_message']); + } + + // process + $pagesHtml = ''; + foreach ($pages as $page) { + if (is_string($page)) { + $pagesHtml .= $page; + } else { + $pagesHtml .= ''.$page[1].''; + } + } + + return ''; + } + + /** + * {@inheritdoc} + */ + public function getName() + { + return 'default'; + } +} + +/* + +CSS: + +.pagerfanta { +} + +.pagerfanta a, +.pagerfanta span { + display: inline-block; + border: 1px solid blue; + color: blue; + margin-right: .2em; + padding: .25em .35em; +} + +.pagerfanta a { + text-decoration: none; +} + +.pagerfanta a:hover { + background: #ccf; +} + +.pagerfanta .dots { + border-width: 0; +} + +.pagerfanta .current { + background: #ccf; + font-weight: bold; +} + +.pagerfanta .disabled { + border-color: #ccf; + color: #ccf; +} + +COLORS: + +.pagerfanta a, +.pagerfanta span { + border-color: blue; + color: blue; +} + +.pagerfanta a:hover { + background: #ccf; +} + +.pagerfanta .current { + background: #ccf; +} + +.pagerfanta .disabled { + border-color: #ccf; + color: #cf; +} + +*/