{% set results = _args.results %}
{% set results_count = _args.results_count %}
{% set results_max = _args.results_max %}
{% set page_prev = _args.page_prev %}
{% set page = _args.page %}
{% set limit = _args.limit %}
{% set page_next = _args.page_next %}
{% set pages_min = _args.pages_min %}
{% set pages_max = _args.pages_max %}
{% set numbers = _args.numbers ?? true %}
{% set route = _args.route|default(app.request.attributes.get('_route')) %}
{% set params = _args.params|default(app.request.attributes.get('_route_params')) %}
{% set variable = _args.variable|default('pagination') %}
{% set target = _args.target|default(null) %}
{% if pages_max <= 16 %}
{% set sets = range(0, pages_max) %}
{% else %}
{% set first = range(0, min(4, pages_max)) %}
{% set last = range(max(pages_max - 4, 0), pages_max) %}
{% 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))) %}
{% set middle = []|merge(middle|filter(p => p not in first)) %}
{% set middle = []|merge(middle|filter(p => p not in last)) %}
{% set last = []|merge(last|filter(p => p not in first)) %}
{% if first|length == 5 and middle|length and (first[first|length - 1] + 2) == middle[0] %}
{% set first = first|merge([middle[0] - 1]) %}
{% endif %}
{% if middle|length == 5 and last|length and (middle[middle|length - 1] + 2) == last[0] %}
{% set middle = middle|merge([last[0] - 1]) %}
{% endif %}
{% set sets = []
|merge(first)
|merge((middle|length <= 6 and middle[0] > (first[first|length - 1] + 1)) ? [max((middle[0] - 3), (first[first|length - 1] + 1)) * -1] : [])
|merge(middle)
|merge((middle|length <= 6 and middle[middle|length - 1] < (last[0] - 1)) ? [min((middle[middle|length - 1] + 3), (last[0] - 1)) * -1] : [])
|merge(last) %}
{% endif %}
<nav class="pagination__wrapper text-semibold">
<ul class="pagination align-items-center pb-2">
<li class="page-item pagination__arrow pagination__arrow--prev{% if page is same as(0) %} disabled{% endif %}">
<a class="page-link" href="{{- (route is not empty) ? path(route, params|merge(app.request.query.all)|merge({
(variable): max((page - 1), 0),
})) : '#' -}}"{% if target %} target="{{ target }}"{% endif %}>
<i class="icon-chevron-left"></i>
<span>Prev</span>
</a>
</li>
{% if numbers == true %}
{% for item in sets %}
{% if item < 0 %}
<li class="page-item page-btn">
<a class="page-link" href="{{- (route is not empty) ? url(route, params|merge(app.request.query.all)|merge({
(variable): (item * -1),
})) : '#' -}}"{% if target %} target="{{ target }}"{% endif %}>…</a>
</li>
{% else %}
<li class="page-item page-btn{% if item is same as(page) %} active{% endif %}">
<a class="page-link" href="{{- (route is not empty) ? url(route, params|merge(app.request.query.all)|merge({
(variable): item,
})) : '#' -}}"{% if target %} target="{{ target }}"{% endif %}>
{{ (item + 1) }}
{% if item is same as(page)%}<span class="sr-only">(page)</span>{% endif %}
</a>
</li>
{% endif %}
{% endfor %}
{% endif %}
<li class="page-item pagination__arrow pagination__arrow--next{% if page is same as(pages_max) %} disabled{% endif %}">
<a class="page-link" href="{{- (route is not empty) ? url(route, params|merge(app.request.query.all)|merge({
(variable): min((page + 1), pages_max),
})) : '#' -}}"{% if target %} target="{{ target }}"{% endif %}>
<span>Next</span>
<i class="icon-chevron-right"></i>
</a>
</li>
</ul>
</nav>