{% macro pagination(info, name, params, range) %}
    {% if info.page is defined and info.pages > 1 %}
        {% set params = params is iterable ? params : {} %}
        {% set range = range|default(3) %}

        <div class="pagination">
            <div class="pagination__section pagination__section--first">
                {% if info.page <= 1 %}
                    <div class="pagination__link pagination__link--first pagination__link--disabled">
                        <i class="fas fa-angle-double-left"></i>
                    </div>
                    <div class="pagination__link pagination__link--prev pagination__link--disabled">
                        <i class="fas fa-angle-left"></i>
                    </div>
                {% else %}
                    <a href="{{ url(name, params) }}" class="pagination__link pagination__link--first" rel="first">
                        <i class="fas fa-angle-double-left"></i>
                    </a>
                    <a href="{{ url(name, params|merge({'page': info.page - 1})) }}" class="pagination__link pagination__link--prev" rel="prev">
                        <i class="fas fa-angle-left"></i>
                    </a>
                {% endif %}
            </div>

            <div class="pagination__section pagination__section--pages">
                {% set p_start = max(info.page - range, 1) %}
                {% set p_stop = min(info.page + range, info.pages) %}

                {% for i in p_start..p_stop %}
                    <a href="{{ url(name, params|merge({'page': i})) }}" class="pagination__link{{ info.page == i ? ' pagination__link--current' : '' }}">
                        {{ i }}
                    </a>
                {% endfor %}
            </div>

            <div class="pagination__section pagination__section--last">
                {% if info.page >= info.pages %}
                    <div class="pagination__link pagination__link--next pagination__link--disabled">
                        <i class="fas fa-angle-right"></i>
                    </div>
                    <div class="pagination__link pagination__link--last pagination__link--disabled">
                        <i class="fas fa-angle-double-right"></i>
                    </div>
                {% else %}
                    <a href="{{ url(name, params|merge({'page': info.page + 1})) }}" class="pagination__link pagination__link--next" rel="next">
                        <i class="fas fa-angle-right"></i>
                    </a>
                    <a href="{{ url(name, params|merge({'page': info.pages})) }}" class="pagination__link pagination__link--last" rel="last">
                        <i class="fas fa-angle-double-right"></i>
                    </a>
                {% endif %}
            </div>
        </div>
    {% endif %}
{% endmacro %}

{% macro container_title(title, unsafe, url) %}
    {% set has_url = url is not null and url|length > 0 %}

    <div class="container__title">
        <div class="container__title__background"></div>
        {% if has_url %}<a href="{{ url }}" class="container__title__link">{% endif %}
        <div class="container__title__text">
            {% if unsafe %}
                {{ title }}
            {% else %}
                {{ title|raw }}
            {% endif %}
        </div>
        {% if has_url %}</a>{% endif %}
    </div>
{% endmacro %}

{% macro avatar(user_id, resolution, alt_text, attrs) %}
{% apply spaceless %}
    <img src="{{ url('user-avatar', { 'user': user_id, 'res': resolution * 2 }) }}"
        alt="{{ alt_text|default('') }}"
        width="{{ attrs.width|default(resolution) }}"
        height="{{ attrs.height|default(resolution) }}"
        class="avatar{% if attrs.class is defined %} {{ attrs.class }}{% endif %}"
        {% if attrs.id is defined %}
            id="{{ attrs.id }}"
        {% endif %}>
{% endapply %}
{% endmacro %}