Pager
Why and how to use this component
A pager enables a user to navigate in a list divided into different pages in order to see additional results in that list.
When to use this component
- to be used when the filter component is used and there are more than 20 results (i.e. ‘Announcements’)
Do not use this component
- when it’s useful to see all results (i.e. ‘Departments’, ‘Policies’) - in this case, show all results
{#
- "current_page" (int): page currently displayed (default: 1)
- "max_page" (int): total number of pages (default: 0)
- "fragment_url" (string): url parameter to identify current page (default: '/page')
- "title_previous" (string): helper when hovering previous page button (default: 'Go to previous page')
- "title_page" (string): helper when hovering a page button (default: 'Go to page')
- "title_next" (string): helper when hovering next page button (default: 'Go to next page')
- "label_previous" (string): previous button label (default: '‹ Previous')
- "label_page" (string): page label displayed on small screens (default: 'Page')
- "label_next" (string): next button label (default: 'Next ›')
- "extra_classes" (string): extra CSS classes to be added
- "extra_attributes" (array): extra attributes classes (optional, format: [{ 'name': 'name_of_the_attribute', 'value': 'value_of_the_attribute'}])
#}
{% set current_page = current_page|default(1) %}
{% set max_page = max_page|default(0) %}
{% set fragment_url = fragment_url|default('/page') %}
{% set title_previous = title_previous|default('Go to previous page') %}
{% set title_page = title_page|default('Go to page') %}
{% set title_next = title_next|default('Go to next page') %}
{% set label_previous = label_previous|default('‹ Previous') %}
{% set label_page = label_page|default('Page') %}
{% set label_next = label_next|default('Next ›') %}
{# Internal properties #}
{% set _css_class = 'ecl-pager' %}
{% set _extra_attributes = '' %}
{# Internal logic - Process properties #}
{% if extra_class is defined %}
{% set _css_class = _css_class ~ ' ' ~ extra_class %}
{% endif %}
{% if extra_attributes is defined %}
{% for attr in extra_attributes %}
{% set _extra_attributes = _extra_attributes ~ ' ' ~ attr.name ~ '="' ~ attr.value ~'"' %}
{% endfor %}
{% endif %}
{# Print the result #}
<nav class="ecl-pager__wrapper" aria-label="pagination">
<ul class="{{ _css_class }}" {{ _extra_attributes|raw }}>
{% if current_page > 1 %}
<li class="ecl-pager__item ecl-pager__item--previous">
<a class="ecl-pager__link" title="{{ title_previous }}" href="{{ fragment_url }}={{ current_page - 1 }}">{{ label_previous }}</a>
</li>
{% endif %}
{% if current_page > 1 %}
<li class="ecl-pager__item ecl-pager__item--first">
<a class="ecl-pager__link" title="{{ title_page }} 1" href="{{ fragment_url }}=1">
<span class="ecl-u-sr-only" >{{ label_page }} </span>1
</a>
</li>
{% endif %}
{% if current_page > 4 %}
<li class="ecl-pager__item ecl-pager__item--ellipsis">…</li>
{% endif %}
{% if current_page > 3 %}
<li class="ecl-pager__item">
<a class="ecl-pager__link" title="{{ title_page }} {{ current_page - 2 }}" href="{{ fragment_url }}={{ current_page - 2 }}">
<span class="ecl-u-sr-only" >{{ label_page }} </span>{{ current_page - 2 }}
</a>
</li>
{% endif %}
{% if current_page > 2 %}
<li class="ecl-pager__item">
<a class="ecl-pager__link" title="{{ title_page }} {{ current_page - 1 }}" href="{{ fragment_url }}={{ current_page - 1 }}">
<span class="ecl-u-sr-only" >{{ label_page }} </span>{{ current_page - 1 }}
</a>
</li>
{% endif %}
<li class="ecl-pager__item ecl-pager__item--current" aria-current="page">
<span class="ecl-pager__item-text" >{{ label_page }}</span> {{ current_page }}
</li>
{% if max_page - current_page > 1 %}
<li class="ecl-pager__item">
<a class="ecl-pager__link" title="{{ title_page }} {{ current_page + 1 }}" href="{{ fragment_url }}={{ current_page + 1 }}">
<span class="ecl-u-sr-only" >{{ label_page }} </span>{{ current_page + 1 }}
</a>
</li>
{% endif %}
{% if max_page - current_page > 2 %}
<li class="ecl-pager__item">
<a class="ecl-pager__link" title="{{ title_page }} {{ current_page + 2 }}" href="{{ fragment_url }}={{ current_page + 2 }}">
<span class="ecl-u-sr-only" >{{ label_page }} </span>{{ current_page + 2 }}
</a>
</li>
{% endif %}
{% if max_page - current_page > 3 %}
<li class="ecl-pager__item ecl-pager__item--ellipsis">…</li>
{% endif %}
{% if current_page != max_page %}
<li class="ecl-pager__item ecl-pager__item--last">
<a class="ecl-pager__link" title="{{ title_page }} {{ max_page }}" href="{{ fragment_url }}={{ max_page }}">
<span class="ecl-u-sr-only" >{{ label_page }} </span>{{ max_page }}
</a>
</li>
{% endif %}
{% if current_page != max_page %}
<li class="ecl-pager__item ecl-pager__item--next">
<a class="ecl-pager__link" title="{{ title_next }}" href="{{ fragment_url }}={{ current_page + 1 }}">{{ label_next }}</a>
</li>
{% endif %}
</ul>
</nav>
{
"current_page": 7,
"max_page": 20
}
<nav class="ecl-pager__wrapper" aria-label="pagination">
<ul class="ecl-pager">
<li class="ecl-pager__item ecl-pager__item--previous">
<a class="ecl-pager__link" title="Go to previous page" href="/page=6">‹ Previous</a>
</li>
<li class="ecl-pager__item ecl-pager__item--first">
<a class="ecl-pager__link" title="Go to page 1" href="/page=1">
<span class="ecl-u-sr-only" >Page </span>1
</a>
</li>
<li class="ecl-pager__item ecl-pager__item--ellipsis">…</li>
<li class="ecl-pager__item">
<a class="ecl-pager__link" title="Go to page 5" href="/page=5">
<span class="ecl-u-sr-only" >Page </span>5
</a>
</li>
<li class="ecl-pager__item">
<a class="ecl-pager__link" title="Go to page 6" href="/page=6">
<span class="ecl-u-sr-only" >Page </span>6
</a>
</li>
<li class="ecl-pager__item ecl-pager__item--current" aria-current="page">
<span class="ecl-pager__item-text">Page</span> 7
</li>
<li class="ecl-pager__item">
<a class="ecl-pager__link" title="Go to page 8" href="/page=8">
<span class="ecl-u-sr-only" >Page </span>8
</a>
</li>
<li class="ecl-pager__item">
<a class="ecl-pager__link" title="Go to page 9" href="/page=9">
<span class="ecl-u-sr-only" >Page </span>9
</a>
</li>
<li class="ecl-pager__item ecl-pager__item--ellipsis">…</li>
<li class="ecl-pager__item ecl-pager__item--last">
<a class="ecl-pager__link" title="Go to page 20" href="/page=20">
<span class="ecl-u-sr-only" >Page </span>20
</a>
</li>
<li class="ecl-pager__item ecl-pager__item--next">
<a class="ecl-pager__link" title="Go to next page" href="/page=8">Next ›</a>
</li>
</ul>
</nav>
-
Content:
/** * ECL Pager * @define pager */ .ecl-pager__wrapper { border-top: 2px solid #000; margin: 0; text-align: center; } .ecl-pager { align-items: center; display: inline-flex; justify-content: center; margin: map-get($ecl-spacing, 's') 0; padding-left: 0; width: 100%; } .ecl-pager__item { border: 2px solid transparent; box-sizing: content-box; color: #000; display: none; list-style: none; margin: 0 map-get($ecl-spacing, 'xxxs'); } .ecl-pager__link { color: map-get($ecl-colors, 'blue-100'); display: block; font-size: map-get($ecl-font-size, 's'); font-weight: 500; min-width: map-get($ecl-spacing, 's'); padding: map-get($ecl-spacing, 'xxxs'); text-decoration: none; &:hover { color: #000; text-decoration: underline; } } .ecl-pager__item--previous, .ecl-pager__item--next { display: block; .ecl-pager__link { font-weight: 600; } } .ecl-pager__item--ellipsis { font-size: map-get($ecl-font-size, 's'); font-weight: 400; min-width: map-get($ecl-spacing, 's'); padding: map-get($ecl-spacing, 'xxxs'); } .ecl-pager__item--current { border-radius: 50%; display: block; flex-grow: 1; font-size: map-get($ecl-font-size, 's'); font-weight: 600; min-width: map-get($ecl-spacing, 's'); padding: map-get($ecl-spacing, 'xxxs'); } @include ecl-media-breakpoint-up(md) { .ecl-pager { width: auto; } .ecl-pager__item { display: block; } .ecl-pager__item--current { border: 2px solid #000; flex-grow: 0; } .ecl-pager__item-text { display: none; } }
- URL: /components/raw/ecl-pagers/ecl-pagers.scss
- Filesystem Path: framework/components/ecl-pagers/ecl-pagers.scss
- Size: 1.6 KB
- Handle: @ec-europa/ecl-pagers
- Tags: molecule
- Preview:
- Filesystem Path: framework/components/ecl-pagers/ecl-pagers.twig