misuzu/templates/macros.twig

99 lines
6.6 KiB
Twig
Raw Normal View History

2018-05-18 01:20:27 +00:00
{% macro navigation(links, current, top, fmt, align) %}
2018-03-22 02:56:41 +00:00
{% set top = top|default(false) == true %}
2018-05-18 01:20:27 +00:00
{% set align = align|default('centre') %}
2018-03-22 02:56:41 +00:00
{% set current = current|default(null) %}
{% set fmt = fmt|default('%s') %}
2018-03-22 02:56:41 +00:00
2018-05-18 01:20:27 +00:00
<ul class="navigation{% if top %} navigation--top{% endif %}{% if align != 'centre' %} navigation--{{ align }}{% endif %}">
2018-03-22 02:56:41 +00:00
{% for name, url in links %}
2018-04-16 00:33:54 +00:00
<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>
2018-03-22 02:56:41 +00:00
{% endfor %}
</ul>
{% endmacro %}
2018-04-16 00:33:54 +00:00
2018-05-20 20:12:45 +00:00
{% macro pagination_class(className, classPrefix) %}{{ className }}{% if classPrefix|length > 0 %} {{ classPrefix ~ className }}{% endif %}{% endmacro %}
2018-08-12 13:31:38 +00:00
{% macro pagination(itemCount, itemRange, currentOffset, baseUrl, classPrefix, alwaysRender, offsetParam, useRanges, pageRange) %}
2018-04-16 00:33:54 +00:00
{% set alwaysRender = alwaysRender|default(false) %}
2018-05-16 20:48:33 +00:00
{% if alwaysRender or itemCount > itemRange %}
2018-05-20 20:12:45 +00:00
{% from _self import pagination_class %}
2018-05-16 20:48:33 +00:00
{% set classPrefix = classPrefix|default('') %}
{% set separator = '%3F' in baseUrl|default('')|url_encode ? '&' : '?' %}
2018-05-21 23:05:25 +00:00
{% set originalUrl = baseUrl %}
2018-05-16 20:48:33 +00:00
{% set baseUrl = baseUrl ~ separator %}
{% set pageCount = (itemCount / itemRange)|round(0, 'ceil') %}
{% set currentPage = currentOffset // itemRange %}
{% set useRanges = useRanges|default(true) %}
{% set offsetParam = offsetParam|default(useRanges ? 'o' : 'p') %}
2018-05-16 21:06:14 +00:00
{% set pageRange = pageRange|default(3) %}
2018-04-16 00:33:54 +00:00
2018-05-20 20:12:45 +00:00
<ul class="{{ pagination_class('pagination', classPrefix) }}">
2018-05-16 20:48:33 +00:00
{% if currentPage < 1 %}
2018-05-20 20:12:45 +00:00
<li class="{{ pagination_class('pagination__option', classPrefix) }} {{ pagination_class('pagination__option--first', classPrefix) }} {{ pagination_class('pagination__option--disabled', classPrefix) }}">
<span class="{{ pagination_class('pagination__link', classPrefix) }} {{ pagination_class('pagination__link--first', classPrefix) }}">
2018-04-16 00:33:54 +00:00
&laquo;
</span>
</li>
2018-05-20 20:12:45 +00:00
<li class="{{ pagination_class('pagination__option', classPrefix) }} {{ pagination_class('pagination__option--prev', classPrefix) }} {{ pagination_class('pagination__option--disabled', classPrefix) }}">
<span class="{{ pagination_class('pagination__link', classPrefix) }} {{ pagination_class('pagination__link--prev', classPrefix) }}">
2018-05-16 20:48:33 +00:00
&lsaquo;
</span>
</li>
2018-04-16 00:33:54 +00:00
{% else %}
2018-05-20 20:12:45 +00:00
<li class="{{ pagination_class('pagination__option', classPrefix) }} {{ pagination_class('pagination__option--first', classPrefix) }}">
2018-05-21 23:05:25 +00:00
<a href="{{ originalUrl }}" class="{{ pagination_class('pagination__link', classPrefix) }} {{ pagination_class('pagination__link--first', classPrefix) }}" rel="first">
2018-04-16 00:33:54 +00:00
&laquo;
</a>
</li>
2018-05-20 20:12:45 +00:00
<li class="{{ pagination_class('pagination__option', classPrefix) }} {{ pagination_class('pagination__option--prev', classPrefix) }}">
2018-05-21 23:05:25 +00:00
<a href="{{ currentPage < 2 ? originalUrl : baseUrl ~ offsetParam ~ '=' ~ (useRanges ? ((currentPage - 1) * itemRange) : currentPage) }}" class="{{ pagination_class('pagination__link', classPrefix) }} {{ pagination_class('pagination__link--prev', classPrefix) }}" rel="prev">
2018-05-16 20:48:33 +00:00
&lsaquo;
</a>
</li>
2018-04-16 00:33:54 +00:00
{% endif %}
2018-05-20 20:12:45 +00:00
<li class="{{ pagination_class('pagination__separator', classPrefix) }}"></li>
2018-04-16 00:33:54 +00:00
2018-05-16 21:06:14 +00:00
{% set paginationStart = currentPage - pageRange %}
{% set paginationStop = currentPage + pageRange %}
2018-04-16 00:33:54 +00:00
2018-05-16 20:48:33 +00:00
{% for i in paginationStart..paginationStop %}
{% if i >= 0 and i < pageCount %}
2018-05-20 20:12:45 +00:00
<li class="{{ pagination_class('pagination__option', classPrefix) }}{{ currentPage == i ? ' ' ~ pagination_class('pagination__option--active', classPrefix) : '' }}">
2018-05-21 23:05:25 +00:00
<a href="{{ i == 0 ? originalUrl : baseUrl ~ offsetParam ~ '=' ~ (useRanges ? i * itemRange : i + 1) }}" class="{{ pagination_class('pagination__link', classPrefix) }}{{ currentPage == i ? ' ' ~ pagination_class('pagination__link--active', classPrefix) : '' }}">
2018-05-16 20:48:33 +00:00
{{ i + 1 }}
</a>
</li>
{% endif %}
{% endfor %}
2018-04-16 00:33:54 +00:00
2018-05-20 20:12:45 +00:00
<li class="{{ pagination_class('pagination__separator', classPrefix) }}"></li>
2018-04-16 00:33:54 +00:00
2018-05-16 20:48:33 +00:00
{% if currentPage >= pageCount - 1 %}
2018-05-20 20:12:45 +00:00
<li class="{{ pagination_class('pagination__option', classPrefix) }} {{ pagination_class('pagination__option--next', classPrefix) }} {{ pagination_class('pagination__option--disabled', classPrefix) }}">
<span class="{{ pagination_class('pagination__link', classPrefix) }} {{ pagination_class('pagination__link--next', classPrefix) }}">
2018-05-16 20:48:33 +00:00
&rsaquo;
</span>
</li>
2018-05-20 20:12:45 +00:00
<li class="{{ pagination_class('pagination__option', classPrefix) }} {{ pagination_class('pagination__option--last', classPrefix) }} {{ pagination_class('pagination__option--disabled', classPrefix) }}">
<span class="{{ pagination_class('pagination__link', classPrefix) }} {{ pagination_class('pagination__link--last', classPrefix) }}">
2018-04-16 00:33:54 +00:00
&raquo;
2018-05-16 20:48:33 +00:00
</span>
2018-04-16 00:33:54 +00:00
</li>
{% else %}
2018-05-20 20:12:45 +00:00
<li class="{{ pagination_class('pagination__option', classPrefix) }} {{ pagination_class('pagination__option--next', classPrefix) }}">
<a href="{{ baseUrl ~ offsetParam ~ '=' ~ (useRanges ? ((currentPage + 1) * itemRange) : currentPage + 2) }}" class="{{ pagination_class('pagination__link', classPrefix) }} {{ pagination_class('pagination__link--next', classPrefix) }}" rel="next">
2018-05-16 20:48:33 +00:00
&rsaquo;
</a>
</li>
2018-05-20 20:12:45 +00:00
<li class="{{ pagination_class('pagination__option', classPrefix) }} {{ pagination_class('pagination__option--last', classPrefix) }}">
<a href="{{ baseUrl ~ offsetParam ~ '=' ~ (useRanges ? ((pageCount - 1) * itemRange) : pageCount) }}" class="{{ pagination_class('pagination__link', classPrefix) }} {{ pagination_class('pagination__link--last', classPrefix) }}" rel="last">
2018-04-16 00:33:54 +00:00
&raquo;
2018-05-16 20:48:33 +00:00
</a>
2018-04-16 00:33:54 +00:00
</li>
{% endif %}
</ul>
{% endif %}
{% endmacro %}