ui2022/pagination.html.twig line 1

Open in your IDE?
  1. {% set results = _args.results %}
  2. {% set results_count = _args.results_count %}
  3. {% set results_max = _args.results_max %}
  4. {% set page_prev = _args.page_prev %}
  5. {% set page = _args.page %}
  6. {% set limit = _args.limit %}
  7. {% set page_next = _args.page_next %}
  8. {% set pages_min = _args.pages_min %}
  9. {% set pages_max = _args.pages_max %}
  10. {% set numbers = _args.numbers ?? true %}
  11. {% set route = _args.route|default(app.request.attributes.get('_route')) %}
  12. {% set params = _args.params|default(app.request.attributes.get('_route_params')) %}
  13. {% set variable = _args.variable|default('pagination') %}
  14. {% set target = _args.target|default(null) %}
  15. {% if pages_max <= 16 %}
  16.     {% set sets = range(0, pages_max) %}
  17. {% else %}
  18.     {% set first = range(0, min(4, pages_max)) %}
  19.     {% set last = range(max(pages_max - 4, 0), pages_max) %}
  20.     {% set middle = range(max(min((last[0] - 1 - 5), page - 2), (first[first|length - 1] + 1)), min(max((first[first|length - 1] + 1 + 5), page + 2), (last[0] - 1))) %}
  21.     {% set middle = []|merge(middle|filter(p => p not in first)) %}
  22.     {% set middle = []|merge(middle|filter(p => p not in last)) %}
  23.     {% set last = []|merge(last|filter(p => p not in first)) %}
  24.     {% if first|length == 5 and middle|length and (first[first|length - 1] + 2) == middle[0] %}
  25.         {% set first = first|merge([middle[0] - 1]) %}
  26.     {% endif %}
  27.     {% if middle|length == 5 and last|length and (middle[middle|length - 1] + 2) == last[0] %}
  28.         {% set middle = middle|merge([last[0] - 1]) %}
  29.     {% endif %}
  30.     {% set sets = []
  31.         |merge(first)
  32.         |merge((middle|length <= 6 and middle[0] > (first[first|length - 1] + 1)) ? [max((middle[0] - 3), (first[first|length - 1] + 1)) * -1] : [])
  33.         |merge(middle)
  34.         |merge((middle|length <= 6 and middle[middle|length - 1] < (last[0] - 1)) ? [min((middle[middle|length - 1] + 3), (last[0] - 1)) * -1] : [])
  35.         |merge(last) %}
  36. {% endif %}
  37. <nav class="pagination__wrapper text-semibold">
  38.     <ul class="pagination align-items-center pb-2">
  39.         <li class="page-item pagination__arrow pagination__arrow--prev{% if page is same as(0) %} disabled{% endif %}">
  40.             <a class="page-link" href="{{- (route is not empty) ? path(route, params|merge(app.request.query.all)|merge({
  41.                 (variable): max((page - 1), 0),
  42.             })) : '#' -}}"{% if target %} target="{{ target }}"{% endif %}>
  43.                 <i class="icon-chevron-left"></i>
  44.                 <span>Prev</span>
  45.             </a>
  46.         </li>
  47.         {% if numbers == true %}
  48.             {% for item in sets %}
  49.                 {% if item < 0 %}
  50.                     <li class="page-item page-btn">
  51.                         <a class="page-link" href="{{- (route is not empty) ? url(route, params|merge(app.request.query.all)|merge({
  52.                             (variable): (item * -1),
  53.                         })) : '#' -}}"{% if target %} target="{{ target }}"{% endif %}>&hellip;</a>
  54.                     </li>
  55.                 {% else %}
  56.                     <li class="page-item page-btn{% if item is same as(page) %} active{% endif %}">
  57.                         <a class="page-link" href="{{- (route is not empty) ? url(route, params|merge(app.request.query.all)|merge({
  58.                             (variable): item,
  59.                         })) : '#' -}}"{% if target %} target="{{ target }}"{% endif %}>
  60.                             {{ (item + 1) }}
  61.                             {% if item is same as(page)%}<span class="sr-only">(page)</span>{% endif %}
  62.                         </a>
  63.                     </li>
  64.                 {% endif %}
  65.             {% endfor %}
  66.         {% endif %}
  67.         <li class="page-item pagination__arrow pagination__arrow--next{% if page is same as(pages_max) %} disabled{% endif %}">
  68.             <a class="page-link" href="{{- (route is not empty) ? url(route, params|merge(app.request.query.all)|merge({
  69.                 (variable): min((page + 1), pages_max),
  70.             })) : '#' -}}"{% if target %} target="{{ target }}"{% endif %}>
  71.                 <span>Next</span>
  72.                 <i class="icon-chevron-right"></i>
  73.             </a>
  74.         </li>
  75.     </ul>
  76. </nav>