87 lines
4.1 KiB
Twig
87 lines
4.1 KiB
Twig
{% macro link(url, content, class) %}
|
|
{% spaceless %}
|
|
<a href="{{ url }}" {% if '://' in url %} target="_blank" rel="noreferrer noopener"{% endif %} {% if class is defined %}class="{{ class }}"{% endif %}>{{ content|raw }}</a>
|
|
{% endspaceless %}
|
|
{% endmacro %}
|
|
|
|
{% macro navigation(links, current, top, fmt) %}
|
|
{% set top = top|default(false) == true %}
|
|
{% set current = current|default(null) %}
|
|
{% set fmt = fmt|default('%s') %}
|
|
|
|
<ul class="navigation{% if top %} navigation--top{% endif %}">
|
|
{% for name, url in links %}
|
|
<li class="navigation__option{% if url == current or name == current %} navigation__option--selected{% endif %}"><a href="{{ fmt|format(url) }}" class="navigation__link">{{ name }}</a></li>
|
|
{% endfor %}
|
|
</ul>
|
|
{% endmacro %}
|
|
|
|
{% macro pagination_segment(url_window, base_url, currentPage, classPrefix) %}
|
|
{% for page, url in url_window %}
|
|
<li class="{{ classPrefix }}pagination__option{{ currentPage == page ? ' ' ~ classPrefix ~ 'pagination__option--active' : '' }}">
|
|
<a href="{{ base_url ~ url|slice(2) }}" class="{{ classPrefix }}pagination__link{{ currentPage == page ? ' ' ~ classPrefix ~ 'pagination__link--active' : '' }}">
|
|
{{ page }}
|
|
</a>
|
|
</li>
|
|
{% endfor %}
|
|
{% endmacro %}
|
|
|
|
{% macro paginate(paginator, base_url, classPrefix, alwaysRender) %}
|
|
{% set alwaysRender = alwaysRender|default(false) %}
|
|
|
|
{% if alwaysRender or paginator.lastPage > 1 %}
|
|
{% set classPrefix = classPrefix|default('') %}
|
|
{% set separator = '%3F' in base_url|default('')|url_encode ? '&' : '?' %}
|
|
{% set base_url = base_url ~ separator %}
|
|
|
|
<ul class="{{ classPrefix }}pagination">
|
|
{% if paginator.onFirstPage %}
|
|
<li class="{{ classPrefix }}pagination__option {{ classPrefix }}pagination__option--prev">
|
|
<span class="{{ classPrefix }}pagination__link {{ classPrefix }}pagination__link--prev">
|
|
«
|
|
</span>
|
|
</li>
|
|
{% else %}
|
|
<li class="{{ classPrefix }}pagination__option {{ classPrefix }}pagination__option--prev">
|
|
<a href="{{ base_url ~ paginator.previousPageUrl|slice(2) }}" class="{{ classPrefix }}pagination__link {{ classPrefix }}pagination__link--prev" rel="prev">
|
|
«
|
|
</a>
|
|
</li>
|
|
{% endif %}
|
|
|
|
<li class="{{ classPrefix }}pagination__separator"></li>
|
|
|
|
{% from _self import pagination_segment %}
|
|
{% set url_window = paginator|create_pagination %}
|
|
|
|
{% if url_window.first is iterable %}
|
|
{{ pagination_segment(url_window.first, base_url, paginator.currentPage, classPrefix) }}
|
|
<li class="{{ classPrefix }}pagination__separator"></li>
|
|
{% endif %}
|
|
|
|
{% if url_window.slider is iterable %}
|
|
{{ pagination_segment(url_window.slider, base_url, paginator.currentPage, classPrefix) }}
|
|
<li class="{{ classPrefix }}pagination__separator"></li>
|
|
{% endif %}
|
|
|
|
{% if url_window.last is iterable %}
|
|
{{ pagination_segment(url_window.last, base_url, paginator.currentPage, classPrefix) }}
|
|
<li class="{{ classPrefix }}pagination__separator"></li>
|
|
{% endif %}
|
|
|
|
{% if paginator.hasMorePages %}
|
|
<li class="{{ classPrefix }}pagination__option {{ classPrefix }}pagination__option--next">
|
|
<a href="{{ base_url ~ paginator.nextPageUrl|slice(2) }}" class="{{ classPrefix }}pagination__link {{ classPrefix }}pagination__link--next" rel="next">
|
|
»
|
|
</a>
|
|
</li>
|
|
{% else %}
|
|
<li class="{{ classPrefix }}pagination__option {{ classPrefix }}pagination__option--next">
|
|
<span class="{{ classPrefix }}pagination__link {{ classPrefix }}pagination__link--next">
|
|
»
|
|
</span>
|
|
</li>
|
|
{% endif %}
|
|
</ul>
|
|
{% endif %}
|
|
{% endmacro %}
|