> For the complete documentation index, see [llms.txt](https://v2-0-0.pipui.ru/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://v2-0-0.pipui.ru/components/pagination.md).

# Постраничная навигация

## Общая информация <a href="#general-information" id="general-information"></a>

Блок постраничной навигации состоит из панели пронумерованных страниц.

Для работы стилей постраничной навигации, контейнеру списка необходимо\
задать класс <mark style="color:orange;">`.pagination`</mark> а всем его элементам, класс <mark style="color:orange;">`.pagination-page`</mark>

```html
<ul class="pagination">
    <li class="pagination-page disabled"><a href="#" rel="nofollow"><i class="fa-solid fa-angles-left"></i></a></li>
    <li class="pagination-page disabled"><a href="#" rel="nofollow"><i class="fa-solid fa-angle-left"></i></a></li>
    <li class="pagination-page"><a href="#" rel="nofollow">1</a></li>
    <li class="pagination-page"><a href="#" rel="nofollow">2</a></li>
    <li class="pagination-page page-selector"><a href="#" rel="nofollow">...</a></li>
    <li class="pagination-page"><a href="#" rel="nofollow">39</a></li>
    <li class="pagination-page active"><a href="#" rel="nofollow">40</a></li>
    <li class="pagination-page"><a href="#" rel="nofollow">41</a></li>
    <li class="pagination-page page-selector"><a href="#" rel="nofollow">...</a></li>
    <li class="pagination-page"><a href="#" rel="nofollow">99</a></li>
    <li class="pagination-page"><a href="#" rel="nofollow">100</a></li>
    <li class="pagination-page"><a href="#" rel="nofollow"><i class="fa-solid fa-angle-right"></i></a></li>
    <li class="pagination-page"><a href="#" rel="nofollow"><i class="fa-solid fa-angles-right"></i></a></li>
</ul>

<br><br>

<ul class="pagination">
    <li class="pagination-page"><a href="#">← Назад</a></li>
    <li class="pagination-page"><a href="#">Вперед →</a></li>
</ul>
```

{% embed url="<https://codepen.io/pipui/pen/QWBQxJg>" %}
Пример работы кода выше
{% endembed %}

Класс <mark style="color:orange;">`.disabled`</mark> элемента списка служит для отключения переключателя.

## Javascript

Блок постраничной навигации можно создать при помощи Javascript. В этом случае у вас откроется больше возможность без перезагрузки страницы.

Для этого вам необходимо создать экземпляр класса <mark style="color:orange;">`PipUI.Pagination`</mark> и передать в него необходимые параметры.

Данный класс имеет в себе два параметра

1. HTMLElement - элемент или строковая ссылка на элемент
2. Object - объект с набором опций

### Пример <a href="#example" id="example"></a>

```html
<div id="pagination1"></div>

<script>
    let pagination1 = new PipUI.Pagination('#pagination1', {records: 100});
</script>
```

### Опции <a href="#options" id="options"></a>

Второй параметр объекта PipUI.Pagination поддерживает следующие параметры

```
// Выводить в консоль отладку
debug: false

// Шаблон адреса URL страницы. На место {NUM} будет подставлен номер страницы 
url: '/page-{NUM}'

// Что должно произойти после нажатия на селектор
// Поддерживаемые значения:
// redirect - произойдет переход на страницу, указанную в ссылке селектора
// location - URL страницы изменится, но перехода не произойдет
// none - отсутствие действия
// Во всех случаях визуальная составляющая будет обновлена
method: 'redirect'

// Тип метода генерации шаблона постраничной навигации.
// Поддерживаемые значения по умолчанию от 1 до 4
// Вы можете передать свое значение, но перед этим необходимо создать свой метод, добавив его через опцию types
type: 1

// Кол-во записей
records: 0

// Текущий номер страницы
current: 1

// Максимальное кол-во элементо вна страницу
max: 10

// Функция обратного вызова, которая будет выполнена при изменении страницы
changePageCallback: undefined

// Функция обратного вызова, которая будет выполнена при рендере
updateCallback: undefined

// Типы методов генерации шаблона постраничной навигации
types: {...}
```

### Методы <a href="#methods" id="methods"></a>

```javascript
let pagination = new PipUI.Pagination('#pagination');

pagination.getID() // Вернет уникальный идентификатор

pagination.setOptions(object) // Изменить опции. DOM не будет изменен
// до вызова метода pagination.update()

pagination.getOptions() // Получить опции

pagination.update() // Отрендерить содержимое заново

pagination.getPages() // Вернуть общее кол-во страниц

pagination.getPrev() // Вернуть номер предыдущей страницы

pagination.getNext() // Вернуть номер следующей страницы

pagination.setPage(int) // Установить новую страницы. Содержимое будет обновлено

pagination.getType() // Получить объект типа метода генерации
```

### Новые типы генерации <a href="#custom-generation-types" id="custom-generation-types"></a>

Для создания или изменения текущего типа генерации, необходимо передать в опции параметр types со своими значениями.

{% hint style="info" %}
Объект должен содержать в себе метод render, который принимает параметр\
self - реферальная переменная от текущего экземпляра класса (this).

Данный метод должен возвращать новый список страниц в виде строки HTML
{% endhint %}

#### Пример нового типа <a href="#example-generation-type" id="example-generation-type"></a>

```
let pagination = new PipUI.Pagination('#pagination', {
    records: 100,
    types: {
        5: {
            render: function(self){
                return '<li class="pagination-page"><a data-pagination-page="1" href="#">1</a></li>';
            }
        }
    }
});
```

### События

| Триггер                 | Описание                           | Инициатор   |
| ----------------------- | ---------------------------------- | ----------- |
| change-pagination-pipui | Срабатывает при изменении страницы | .pagination |
| update-pagination-pipui | Срабатывает при обновлении списка  | .pagination |
|                         |                                    |             |
