vgapp 0.8.1 → 0.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/app/langs/en/buttons.json +8 -0
- package/app/langs/en/messages.json +3 -0
- package/app/langs/en/titles.json +3 -0
- package/app/langs/ru/buttons.json +8 -0
- package/app/langs/ru/messages.json +3 -0
- package/app/langs/ru/titles.json +3 -0
- package/app/modules/vgloadmore/js/vgloadmore.js +159 -8
- package/app/modules/vgrollup/js/vgrollup.js +328 -160
- package/app/modules/vgrollup/readme.md +196 -0
- package/app/modules/vgselect/js/handlers.js +220 -0
- package/app/modules/vgselect/js/vgselect.js +783 -298
- package/app/modules/vgselect/readme.md +180 -0
- package/app/modules/vgselect/scss/_variables.scss +20 -0
- package/app/modules/vgselect/scss/vgselect.scss +42 -2
- package/app/modules/vgsidebar/js/vgsidebar.js +194 -84
- package/app/modules/vgsidebar/readme.md +157 -0
- package/app/modules/vgspy/js/vgspy.js +236 -132
- package/app/modules/vgspy/readme.md +105 -0
- package/app/modules/vgtabs/js/vgtabs.js +290 -182
- package/app/modules/vgtabs/readme.md +156 -0
- package/app/modules/vgtoast/js/vgtoast.js +260 -156
- package/app/modules/vgtoast/readme.md +145 -0
- package/app/utils/js/components/backdrop.js +4 -1
- package/build/vgapp.css +1 -1
- package/build/vgapp.css.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# VGTabs — Модуль вкладок (Tabs)
|
|
2
|
+
|
|
3
|
+
`VGTabs` — это модуль на чистом JavaScript, реализующий интерактивные вкладки с поддержкой клавиатуры, хеш-роутинга, AJAX-загрузки контента, анимации и визуального индикатора (слайдер).
|
|
4
|
+
|
|
5
|
+
Модуль расширяет `BaseModule`, что позволяет легко интегрировать его в компонентную архитектуру, а также использовать настройки через `data-*` атрибуты или JavaScript API.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 🔧 Возможности
|
|
10
|
+
|
|
11
|
+
- ✅ Переключение вкладок по клику
|
|
12
|
+
- ✅ Поддержка горячих клавиш: `←`, `→`, `↑`, `↓`, `Home`, `End`
|
|
13
|
+
- ✅ Хеш-роутинг: активация вкладки по `#id`
|
|
14
|
+
- ✅ Поддержка анимации (`fade`, `show`)
|
|
15
|
+
- ✅ AJAX-загрузка контента (реализована в `BaseModule`)
|
|
16
|
+
- ✅ Слайдер-индикатор под активной вкладкой
|
|
17
|
+
- ✅ Полная ARIA-совместимость (доступность)
|
|
18
|
+
- ✅ Поддержка выпадающих меню (`dropdown`)
|
|
19
|
+
- ✅ Простое подключение через `data-vg-toggle="tab"`
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 📦 Структура HTML
|
|
24
|
+
|
|
25
|
+
```html
|
|
26
|
+
<div class="vg-tabs">
|
|
27
|
+
<ul class="vg-tabs-panel" id="myTab" role="tablist">
|
|
28
|
+
<li class="vg-tabs-item" role="presentation">
|
|
29
|
+
<button class="vg-tabs-link active" id="home-tab" data-vg-toggle="tab" data-vg-target="#home-tab-pane" type="button" role="tab" aria-controls="home-tab-pane" aria-selected="true">Home</button>
|
|
30
|
+
</li>
|
|
31
|
+
<li class="vg-tabs-item" role="presentation">
|
|
32
|
+
<button class="vg-tabs-link" id="profile-tab" data-vg-toggle="tab" data-vg-target="#profile-tab-pane" type="button" role="tab" aria-controls="profile-tab-pane" aria-selected="false">Profile</button>
|
|
33
|
+
</li>
|
|
34
|
+
<li class="vg-tabs-item" role="presentation">
|
|
35
|
+
<button class="vg-tabs-link" id="contact-tab" data-vg-toggle="tab" data-vg-target="#contact-tab-pane" type="button" role="tab" aria-controls="contact-tab-pane" aria-selected="false">Contact</button>
|
|
36
|
+
</li>
|
|
37
|
+
<li class="vg-tabs-item" role="presentation">
|
|
38
|
+
<button class="vg-tabs-link" id="disabled-tab" data-vg-toggle="tab" data-vg-target="#disabled-tab-pane" type="button" role="tab" aria-controls="disabled-tab-pane" aria-selected="false" disabled>Disabled</button>
|
|
39
|
+
</li>
|
|
40
|
+
</ul>
|
|
41
|
+
</div>
|
|
42
|
+
|
|
43
|
+
<div class="vg-tabs-content mt-4" id="myTabContent">
|
|
44
|
+
<div class="vg-tabs-pane fade show active" id="home-tab-pane" role="tabpanel" aria-labelledby="home-tab" tabindex="0">
|
|
45
|
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus deserunt magni numquam omnis tenetur unde.
|
|
46
|
+
</div>
|
|
47
|
+
<div class="vg-tabs-pane fade" id="profile-tab-pane" role="tabpanel" aria-labelledby="profile-tab" tabindex="0">
|
|
48
|
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquid debitis eum ipsam maiores minima minus natus qui sunt! Architecto asperiores cum eaque exercitationem fugiat in labore nemo nostrum ullam voluptatum.
|
|
49
|
+
</div>
|
|
50
|
+
<div class="vg-tabs-pane fade" id="contact-tab-pane" role="tabpanel" aria-labelledby="contact-tab" tabindex="0">
|
|
51
|
+
Lorem ipsum dolor sit amet.
|
|
52
|
+
</div>
|
|
53
|
+
<div class="vg-tabs-pane fade" id="disabled-tab-pane" role="tabpanel" aria-labelledby="disabled-tab" tabindex="0">
|
|
54
|
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aspernatur dolorum excepturi hic laudantium nulla. Eos ipsa quos vero voluptates. Dolorem.
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## ⚙️ Настройки (параметры)
|
|
62
|
+
|
|
63
|
+
Настройки можно задать через JavaScript при инициализации или через `data-vg-tabs='{}'`.
|
|
64
|
+
|
|
65
|
+
| Параметр | Тип | По умолчанию | Описание |
|
|
66
|
+
|----------------|---------|--------------|---------|
|
|
67
|
+
| `slide` | boolean | `false` | Показывать слайдер-индикатор под вкладками |
|
|
68
|
+
| `hash` | boolean | `false` | Активировать вкладку по хешу в URL (`#id`) |
|
|
69
|
+
| `ajax.route` | string | `''` | URL для AJAX-запроса |
|
|
70
|
+
| `ajax.target` | string | `''` | CSS-селектор, куда вставлять ответ |
|
|
71
|
+
| `ajax.method` | string | `'get'` | HTTP-метод (`get`, `post`) |
|
|
72
|
+
| `ajax.once` | boolean | `true` | Загружать контент один раз |
|
|
73
|
+
| `ajax.output` | boolean | `true` | Выводить ответ в DOM |
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 🎯 События
|
|
78
|
+
|
|
79
|
+
Модуль генерирует события до и после переключения вкладок.
|
|
80
|
+
|
|
81
|
+
| Событие | Описание |
|
|
82
|
+
|-----------------|--------|
|
|
83
|
+
| `vg.tabs.show` | Перед активацией вкладки |
|
|
84
|
+
| `vg.tabs.shown` | После активации вкладки |
|
|
85
|
+
| `vg.tabs.hide` | Перед деактивацией вкладки |
|
|
86
|
+
| `vg.tabs.hidden`| После деактивации вкладки |
|
|
87
|
+
| `vg.tabs.loaded`| После AJAX-загрузки контента |
|
|
88
|
+
|
|
89
|
+
Пример прослушивания:
|
|
90
|
+
|
|
91
|
+
```js
|
|
92
|
+
document.addEventListener('vg.tabs.shown', function (e) {
|
|
93
|
+
console.log('Активирована вкладка:', e.target);
|
|
94
|
+
console.log('Предыдущая вкладка:', e.relatedTarget);
|
|
95
|
+
});
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## 🖱️ Управление с клавиатуры
|
|
101
|
+
|
|
102
|
+
- `→ / ↓` — следующая вкладка
|
|
103
|
+
- `← / ↑` — предыдущая вкладка
|
|
104
|
+
- `Home` — первая вкладка
|
|
105
|
+
- `End` — последняя вкладка
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## 🛠️ AJAX-загрузка
|
|
110
|
+
|
|
111
|
+
Если указаны параметры `ajax.route` и `ajax.target`, контент будет подгружен при первом открытии вкладки (если `ajax.once = true`).
|
|
112
|
+
|
|
113
|
+
После загрузки срабатывает событие `vg.tabs.loaded`.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 🌈 Слайдер-индикатор
|
|
118
|
+
|
|
119
|
+
При включённой опции `slide: true` под вкладками появляется плавающий индикатор, который перемещается при наведении и переключении.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## 📐 Поддерживаемые селекторы
|
|
124
|
+
|
|
125
|
+
Модуль поддерживает различные структуры:
|
|
126
|
+
- `.vg-tabs-link`
|
|
127
|
+
- `.list-group-item`
|
|
128
|
+
- Элементы с `role="tab"`
|
|
129
|
+
- Работает с `dropdown` и `data-vg-toggle="dropdown"`
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## 🚀 Инициализация
|
|
134
|
+
|
|
135
|
+
Модуль инициализируется автоматически при загрузке страницы для всех элементов с `data-vg-toggle="tab"`.
|
|
136
|
+
|
|
137
|
+
Также можно создать вручную:
|
|
138
|
+
|
|
139
|
+
```js
|
|
140
|
+
import VGTabs from 'app/modules/vgtabs/js/vgtabs';
|
|
141
|
+
const tab = new VGTabs(document.querySelector('[data-vg-toggle="tab"]'), {
|
|
142
|
+
slide: true,
|
|
143
|
+
hash: true
|
|
144
|
+
});
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
## 📝 Лицензия
|
|
149
|
+
|
|
150
|
+
MIT. Свободно использовать и модифицировать.
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
📌 *Разработано в рамках фронтенд-системы VG Modules.*
|
|
155
|
+
> 🚀 Автор: VEGAS STUDIO (vegas-dev.com)
|
|
156
|
+
> 📍 Поддерживается в проектах VEGAS
|