vgapp 0.7.7 → 0.7.9
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 +20 -4
- package/LICENSE +22 -0
- package/app/modules/base-module.js +62 -17
- package/app/modules/module-fn.js +10 -100
- package/app/modules/vgalert/js/vgalert.js +356 -214
- package/app/modules/vgalert/readme.md +242 -0
- package/app/modules/vgcollapse/js/vgcollapse.js +216 -62
- package/app/modules/vgcollapse/readme.md +56 -0
- package/app/modules/vgcollapse/scss/_variables.scss +5 -0
- package/app/modules/vgcollapse/scss/vgcollapse.scss +41 -0
- package/app/modules/vgdropdown/js/vgdropdown.js +104 -118
- package/app/modules/vgdropdown/scss/vgdropdown.scss +1 -2
- package/app/modules/vgformsender/js/hideshowpass.js +7 -4
- package/app/modules/vgformsender/js/vgformsender.js +343 -160
- package/app/modules/vgformsender/readme.md +250 -0
- package/app/modules/vgformsender/scss/vgformsender.scss +11 -3
- package/app/modules/vgnav/js/vgnav.js +98 -26
- package/app/modules/vgnav/scss/_placement.scss +8 -93
- package/app/modules/vgnav/scss/vgnav.scss +0 -1
- package/app/utils/js/components/ajax.js +237 -0
- package/app/utils/js/components/lang.js +108 -0
- package/app/utils/js/components/params.js +5 -0
- package/app/utils/js/components/placement.js +111 -108
- package/app/utils/js/components/templater.js +365 -33
- package/app/utils/js/functions.js +275 -143
- package/app/utils/scss/default.scss +1 -0
- package/app/utils/scss/placement.scss +72 -0
- package/app/utils/scss/variables.scss +10 -5
- package/build/vgapp.css +1 -1
- package/build/vgapp.css.map +1 -1
- package/index.scss +3 -0
- package/package.json +1 -1
- package/app/utils/js/components/alert.js +0 -8
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# VGCollapse
|
|
2
|
+
|
|
3
|
+
**VGCollapse** — это легковесный и гибкий JavaScript-модуль для создания анимированных блоков с возможностью сворачивания/разворачивания содержимого. Подходит для аккордеонов, скрытых форм, FAQ-секций и других интерактивных элементов, где нужно управлять видимостью контента.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## ✅ Возможности
|
|
8
|
+
|
|
9
|
+
- Плавная анимация открытия/закрытия (через `height` и `overflow`)
|
|
10
|
+
- Поддержка нескольких экземпляров на одной странице
|
|
11
|
+
- Работа без jQuery — чистый ES6+
|
|
12
|
+
- Возможность инициализации вручную или через data-атрибуты
|
|
13
|
+
- Совместимость с динамически добавленным контентом
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 📦 Установка
|
|
18
|
+
|
|
19
|
+
Подключите JS-файл в проект:
|
|
20
|
+
|
|
21
|
+
```js
|
|
22
|
+
import VGCollapse from './path/to/vgcollapse.js';
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 🧱 HTML Структура
|
|
28
|
+
|
|
29
|
+
```html
|
|
30
|
+
<a href="#example-simple" data-vg-toggle="collapse" aria-expanded="true" class="btn btn-primary" data-hide-text="Скрыть контент" data-show-text="Показать контент">Скрыть контент</a>
|
|
31
|
+
<div class="vg-collapse show" id="example-simple">
|
|
32
|
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Adipisci eligendi magnam
|
|
33
|
+
minus nihil quaerat.
|
|
34
|
+
</div>
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## ⚙️ Инициализация
|
|
40
|
+
|
|
41
|
+
### 1. Через data-атрибуты (авто-инициализация)
|
|
42
|
+
|
|
43
|
+
Добавьте `data-vg-collapse` — модуль автоматически найдёт и инициализирует все блоки.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 📝 Заметки
|
|
48
|
+
|
|
49
|
+
- Контент должен быть видим при инициализации, чтобы корректно рассчитать высоту.
|
|
50
|
+
- Не используйте `display: none` на контейнере при инициализации.
|
|
51
|
+
- Поддерживает современные браузеры (включая Edge, не поддерживает IE11).
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
> 🚀 Автор: VEGAS STUDIO (vegas-dev.com)
|
|
56
|
+
> 📍 Поддерживается в проектах на VEGAS
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*--------------------------------------------------------------------------
|
|
3
|
+
* Модуль: VGCollapse, реализация vg-accordion
|
|
4
|
+
* Автор: Vegas DEV
|
|
5
|
+
* Лицензия: смотри LICENSE
|
|
6
|
+
*--------------------------------------------------------------------------
|
|
7
|
+
**/
|
|
8
|
+
|
|
9
|
+
@import "../../../utils/scss/functions";
|
|
10
|
+
@import "../../../utils/scss/mixin";
|
|
11
|
+
@import "../../../utils/scss/variables";
|
|
12
|
+
@import "variables";
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
.vg-accordion {
|
|
16
|
+
@include mix-vars('accordion', $collapse-accordion-map);
|
|
17
|
+
position: relative;
|
|
18
|
+
border: var(--vg-accordion-border);
|
|
19
|
+
border-radius: var(--vg-accordion-border-radius);
|
|
20
|
+
|
|
21
|
+
&-item {
|
|
22
|
+
border-top: 0;
|
|
23
|
+
border-left: 0;
|
|
24
|
+
border-right: 0;
|
|
25
|
+
border-bottom: var(--vg-accordion-border);
|
|
26
|
+
|
|
27
|
+
&:last-child {
|
|
28
|
+
border: none;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
&-button {
|
|
33
|
+
display: block;
|
|
34
|
+
padding: var(--vg-accordion-padding);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
&-content {
|
|
38
|
+
display: block;
|
|
39
|
+
padding: var(--vg-accordion-padding);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -6,7 +6,6 @@ import Placement from "../../../utils/js/components/placement";
|
|
|
6
6
|
import Overflow from "../../../utils/js/components/overflow";
|
|
7
7
|
import Backdrop from "../../../utils/js/components/backdrop";
|
|
8
8
|
import {dismissTrigger} from "../../module-fn";
|
|
9
|
-
import VGSidebar from "../../vgsidebar";
|
|
10
9
|
|
|
11
10
|
const NAME = 'dropdown';
|
|
12
11
|
const NAME_KEY = 'vg.dropdown';
|
|
@@ -33,12 +32,11 @@ class VGDropdown extends BaseModule {
|
|
|
33
32
|
super(element, params);
|
|
34
33
|
|
|
35
34
|
let defaultParams = {
|
|
36
|
-
offset: [0, 2],
|
|
37
35
|
backdrop: false,
|
|
38
36
|
overflow: false,
|
|
39
37
|
keyboard: false,
|
|
40
|
-
placement: 'bottom',
|
|
41
38
|
timeoutAnimation: 10,
|
|
39
|
+
placement: 'auto',
|
|
42
40
|
hover: false,
|
|
43
41
|
ajax: {
|
|
44
42
|
route: '',
|
|
@@ -49,30 +47,27 @@ class VGDropdown extends BaseModule {
|
|
|
49
47
|
output: true,
|
|
50
48
|
},
|
|
51
49
|
animation: {
|
|
52
|
-
fade:
|
|
50
|
+
fade: true,
|
|
53
51
|
enable: false,
|
|
54
52
|
in: 'animate__flipInY',
|
|
55
53
|
out: 'animate__flipOutY',
|
|
56
|
-
delay:
|
|
54
|
+
delay: 300,
|
|
57
55
|
},
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
if ('offset' in params && Array.isArray(params.offset)) {
|
|
61
|
-
defaultParams.offset = params.offset;
|
|
62
|
-
}
|
|
56
|
+
};
|
|
63
57
|
|
|
64
58
|
this._params = this._getParams(element, mergeDeepObject(defaultParams, params));
|
|
65
59
|
|
|
66
60
|
const target = Selectors.getElementFromSelector(this._element);
|
|
67
|
-
|
|
68
61
|
this._parent = this._element.parentNode;
|
|
69
|
-
this._drop = target || Selectors.find(
|
|
70
|
-
|
|
62
|
+
this._drop = target || Selectors.find(`.${TARGET_CONTAINER}`, this._parent);
|
|
63
|
+
|
|
64
|
+
if (!this._drop) return;
|
|
71
65
|
|
|
72
|
-
this.
|
|
66
|
+
this._isPlacement = false;
|
|
67
|
+
this.isFade = this._params.animation.fade;
|
|
73
68
|
this.isAnimation = this._params.animation.enable;
|
|
74
69
|
|
|
75
|
-
this._params.animation.delay =
|
|
70
|
+
this._params.animation.delay = this.isAnimation ? this._params.animation.delay : 0;
|
|
76
71
|
this._animation(this._drop, VGDropdown.NAME_KEY, this._params.animation);
|
|
77
72
|
}
|
|
78
73
|
|
|
@@ -91,25 +86,22 @@ class VGDropdown extends BaseModule {
|
|
|
91
86
|
show() {
|
|
92
87
|
if (isDisabled(this._element) || this._isShown()) return;
|
|
93
88
|
|
|
94
|
-
const relatedTarget = {
|
|
95
|
-
relatedTarget: this._element
|
|
96
|
-
}
|
|
89
|
+
const relatedTarget = { relatedTarget: this._element };
|
|
97
90
|
|
|
98
|
-
const showEvent = EventHandler.trigger(this._drop, EVENT_KEY_SHOW, relatedTarget)
|
|
91
|
+
const showEvent = EventHandler.trigger(this._drop, EVENT_KEY_SHOW, relatedTarget);
|
|
99
92
|
if (showEvent.defaultPrevented) return;
|
|
100
93
|
|
|
101
94
|
if ('ontouchstart' in document.documentElement) {
|
|
102
|
-
|
|
103
|
-
EventHandler.on(
|
|
104
|
-
}
|
|
95
|
+
[].concat(...document.body.children).forEach(el => {
|
|
96
|
+
EventHandler.on(el, 'mouseover', noop);
|
|
97
|
+
});
|
|
105
98
|
}
|
|
106
99
|
|
|
107
|
-
this.
|
|
108
|
-
|
|
109
|
-
this._element.setAttribute('aria-expanded', true);
|
|
100
|
+
this._element.setAttribute('aria-expanded', 'true');
|
|
110
101
|
this._element.classList.add(CLASS_NAME_SHOW);
|
|
111
102
|
this._drop.classList.add(CLASS_NAME_SHOW);
|
|
112
103
|
this._setPlacement();
|
|
104
|
+
this._route();
|
|
113
105
|
|
|
114
106
|
if (this._params.backdrop && !this._params.hover) {
|
|
115
107
|
Backdrop.show();
|
|
@@ -117,36 +109,28 @@ class VGDropdown extends BaseModule {
|
|
|
117
109
|
|
|
118
110
|
if (this._params.overflow) {
|
|
119
111
|
Overflow.append();
|
|
120
|
-
document.body.classList.add('dropdown-open')
|
|
112
|
+
document.body.classList.add('dropdown-open');
|
|
121
113
|
}
|
|
122
114
|
|
|
123
|
-
const
|
|
115
|
+
const completeCallback = () => {
|
|
124
116
|
if (this.isFade) {
|
|
125
117
|
this._drop.classList.add(CLASS_NAME_FADE);
|
|
126
|
-
} else if(!this.isAnimation) {
|
|
118
|
+
} else if (!this.isAnimation) {
|
|
127
119
|
this._drop.classList.add(CLASS_NAME_OPEN);
|
|
128
120
|
}
|
|
121
|
+
EventHandler.trigger(this._drop, EVENT_KEY_SHOWN, relatedTarget);
|
|
122
|
+
};
|
|
129
123
|
|
|
130
|
-
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
this._queueCallback(completeCallBack, this._drop, this.isAnimation || this.isFade, 50);
|
|
124
|
+
this._queueCallback(completeCallback, this._drop, this.isAnimation || this.isFade, 50);
|
|
134
125
|
}
|
|
135
126
|
|
|
136
127
|
hide() {
|
|
137
|
-
if (isDisabled(this._element) || !this._isShown())
|
|
138
|
-
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
const relatedTarget = {
|
|
142
|
-
relatedTarget: this._element
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
this._completeHide(relatedTarget);
|
|
128
|
+
if (isDisabled(this._element) || !this._isShown()) return;
|
|
129
|
+
this._completeHide({ relatedTarget: this._element });
|
|
146
130
|
}
|
|
147
131
|
|
|
148
132
|
dispose() {
|
|
149
|
-
|
|
133
|
+
super.dispose();
|
|
150
134
|
}
|
|
151
135
|
|
|
152
136
|
_isShown() {
|
|
@@ -154,30 +138,27 @@ class VGDropdown extends BaseModule {
|
|
|
154
138
|
}
|
|
155
139
|
|
|
156
140
|
_completeHide(relatedTarget) {
|
|
157
|
-
const hideEvent = EventHandler.trigger(this._drop, EVENT_KEY_HIDE, relatedTarget)
|
|
158
|
-
if (hideEvent.defaultPrevented)
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
141
|
+
const hideEvent = EventHandler.trigger(this._drop, EVENT_KEY_HIDE, relatedTarget);
|
|
142
|
+
if (hideEvent.defaultPrevented) return;
|
|
161
143
|
|
|
162
144
|
if ('ontouchstart' in document.documentElement) {
|
|
163
|
-
|
|
164
|
-
EventHandler.off(
|
|
165
|
-
}
|
|
145
|
+
[].concat(...document.body.children).forEach(el => {
|
|
146
|
+
EventHandler.off(el, 'mouseover', noop);
|
|
147
|
+
});
|
|
166
148
|
}
|
|
167
149
|
|
|
150
|
+
this._element.classList.remove(CLASS_NAME_SHOW);
|
|
151
|
+
this._element.setAttribute('aria-expanded', 'false');
|
|
152
|
+
|
|
168
153
|
if (this.isFade) {
|
|
169
154
|
this._drop.classList.remove(CLASS_NAME_FADE);
|
|
170
|
-
} else if(!this.isAnimation) {
|
|
155
|
+
} else if (!this.isAnimation) {
|
|
171
156
|
this._drop.classList.remove(CLASS_NAME_OPEN);
|
|
172
157
|
}
|
|
173
158
|
|
|
174
|
-
this._element.classList.remove(CLASS_NAME_SHOW);
|
|
175
|
-
this._element.setAttribute('aria-expanded', 'false');
|
|
176
|
-
|
|
177
159
|
if (this._params.backdrop && !this._params.hover) {
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
if (_this._params.overflow) {
|
|
160
|
+
Backdrop.hide(() => {
|
|
161
|
+
if (this._params.overflow) {
|
|
181
162
|
Overflow.destroy();
|
|
182
163
|
}
|
|
183
164
|
});
|
|
@@ -192,29 +173,40 @@ class VGDropdown extends BaseModule {
|
|
|
192
173
|
const completeCallback = () => {
|
|
193
174
|
this._drop.classList.remove(CLASS_NAME_SHOW);
|
|
194
175
|
EventHandler.trigger(this._drop, EVENT_KEY_HIDDEN, relatedTarget);
|
|
195
|
-
}
|
|
176
|
+
};
|
|
196
177
|
this._queueCallback(completeCallback, this._drop, this.isAnimation || this.isFade);
|
|
197
178
|
}, this._params.animation.delay);
|
|
198
179
|
}
|
|
199
180
|
|
|
200
|
-
// TODO class Placement isn't done
|
|
201
181
|
_setPlacement() {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
if (!
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
182
|
+
if (!this._drop) return;
|
|
183
|
+
|
|
184
|
+
if (!this._isPlacement) {
|
|
185
|
+
let placementDefault = 'bottom-start',
|
|
186
|
+
autoFlip = false,
|
|
187
|
+
overflowProtection = false;
|
|
188
|
+
|
|
189
|
+
if (this._params.placement === 'auto') {
|
|
190
|
+
autoFlip = true;
|
|
191
|
+
overflowProtection = true;
|
|
192
|
+
} else {
|
|
193
|
+
placementDefault = this._params.placement
|
|
194
|
+
}
|
|
208
195
|
|
|
209
|
-
|
|
210
|
-
|
|
196
|
+
const placement = new Placement({
|
|
197
|
+
reference: this._element,
|
|
198
|
+
drop: this._drop,
|
|
199
|
+
placement: placementDefault,
|
|
200
|
+
boundary: 'clippingParents',
|
|
201
|
+
autoFlip: autoFlip,
|
|
202
|
+
overflowProtection: overflowProtection,
|
|
203
|
+
fallbackPlacements: ['top-start', 'bottom-end', 'top-end'],
|
|
204
|
+
});
|
|
211
205
|
|
|
212
|
-
|
|
213
|
-
_this._drop.style.paddingTop = _this._params.offset[1] + 'px';
|
|
214
|
-
_this._drop.style.paddingRight = _this._params.offset[0] + 'px';
|
|
206
|
+
placement._setPlacement(); // позиционируем
|
|
215
207
|
}
|
|
216
208
|
|
|
217
|
-
|
|
209
|
+
this._isPlacement = true;
|
|
218
210
|
}
|
|
219
211
|
|
|
220
212
|
static init(element, params = {}) {
|
|
@@ -223,109 +215,103 @@ class VGDropdown extends BaseModule {
|
|
|
223
215
|
if (instance._params.hover && !instance.isMobileDevice()) {
|
|
224
216
|
let currentElem = null;
|
|
225
217
|
|
|
226
|
-
EventHandler.on(instance._parent, EVENT_MOUSEOVER_DATA_API,
|
|
218
|
+
EventHandler.on(instance._parent, EVENT_MOUSEOVER_DATA_API, (event) => {
|
|
227
219
|
if (currentElem) return;
|
|
220
|
+
|
|
228
221
|
VGDropdown.hideOpenToggles(event);
|
|
229
222
|
|
|
230
|
-
|
|
231
|
-
if (!target) return;
|
|
223
|
+
const target = event.target.closest(`.${PARENT_CONTAINER}`);
|
|
224
|
+
if (!target || !instance._parent.contains(target)) return;
|
|
232
225
|
|
|
233
|
-
if (!instance._parent.contains(target)) return;
|
|
234
226
|
currentElem = target;
|
|
235
227
|
instance.show();
|
|
236
228
|
});
|
|
237
229
|
|
|
238
|
-
EventHandler.on(instance._parent, EVENT_MOUSEOUT_DATA_API,
|
|
230
|
+
EventHandler.on(instance._parent, EVENT_MOUSEOUT_DATA_API, (event) => {
|
|
239
231
|
if (!currentElem) return;
|
|
240
232
|
|
|
241
233
|
let relatedTarget = event.relatedTarget;
|
|
242
|
-
|
|
243
|
-
while (relatedTarget) {
|
|
244
|
-
if (relatedTarget === currentElem) return;
|
|
234
|
+
while (relatedTarget && relatedTarget !== currentElem) {
|
|
245
235
|
relatedTarget = relatedTarget.parentNode;
|
|
246
236
|
}
|
|
247
237
|
|
|
238
|
+
if (relatedTarget === currentElem) return;
|
|
239
|
+
|
|
248
240
|
currentElem = null;
|
|
249
|
-
instance._completeHide({relatedTarget: instance._element});
|
|
250
|
-
})
|
|
241
|
+
instance._completeHide({ relatedTarget: instance._element });
|
|
242
|
+
});
|
|
251
243
|
}
|
|
252
244
|
|
|
245
|
+
// Клавиатурные события
|
|
253
246
|
EventHandler.on(document, EVENT_KEYUP_DATA_API, SELECTOR_DATA_TOGGLE, VGDropdown.keydownHandler);
|
|
254
|
-
EventHandler.on(document, EVENT_KEYDOWN_DATA_API,
|
|
247
|
+
EventHandler.on(document, EVENT_KEYDOWN_DATA_API, `.${TARGET_CONTAINER}`, VGDropdown.keydownHandler);
|
|
255
248
|
EventHandler.on(document, EVENT_KEYUP_DATA_API, VGDropdown.clearDrops);
|
|
256
249
|
EventHandler.on(document, EVENT_CLICK_DATA_API, VGDropdown.clearDrops);
|
|
257
|
-
|
|
250
|
+
|
|
251
|
+
// Клик по тоглу
|
|
252
|
+
EventHandler.on(element, EVENT_CLICK_DATA_API, (event) => {
|
|
258
253
|
event.preventDefault();
|
|
259
254
|
instance.toggle();
|
|
260
255
|
});
|
|
261
256
|
}
|
|
262
257
|
|
|
263
258
|
static hideOpenToggles(event) {
|
|
264
|
-
const openToggles = Selectors.findAll(
|
|
259
|
+
const openToggles = Selectors.findAll(`${SELECTOR_DATA_TOGGLE}:not(.disabled):not(:disabled).${CLASS_NAME_SHOW}`);
|
|
265
260
|
for (const toggle of openToggles) {
|
|
266
261
|
const context = VGDropdown.getInstance(toggle);
|
|
267
|
-
if (!context)
|
|
268
|
-
continue;
|
|
269
|
-
}
|
|
262
|
+
if (!context) continue;
|
|
270
263
|
|
|
271
|
-
if (event.target.closest(
|
|
264
|
+
if (event.target.closest(`.${TARGET_CONTAINER}`) === context._drop) {
|
|
272
265
|
return;
|
|
273
266
|
}
|
|
274
267
|
|
|
275
|
-
const composedPath = event.composedPath();
|
|
268
|
+
const composedPath = event.composedPath?.() || [];
|
|
276
269
|
if (composedPath.includes(context._element)) {
|
|
277
|
-
continue
|
|
270
|
+
continue;
|
|
278
271
|
}
|
|
279
272
|
|
|
280
|
-
const relatedTarget = { relatedTarget: context._element }
|
|
281
|
-
|
|
273
|
+
const relatedTarget = { relatedTarget: context._element };
|
|
282
274
|
if (event.type === 'click') {
|
|
283
|
-
relatedTarget.clickEvent = event
|
|
275
|
+
relatedTarget.clickEvent = event;
|
|
284
276
|
}
|
|
285
277
|
|
|
286
|
-
context._completeHide(relatedTarget)
|
|
278
|
+
context._completeHide(relatedTarget);
|
|
287
279
|
}
|
|
288
280
|
}
|
|
289
281
|
|
|
290
282
|
static keydownHandler(event) {
|
|
291
|
-
const isInput = /input|textarea/i.test(event.target.tagName)
|
|
292
|
-
const isEscapeEvent = event.key === 'Escape'
|
|
293
|
-
const isUpOrDownEvent = ['ArrowUp', 'ArrowDown'].includes(event.key)
|
|
283
|
+
const isInput = /input|textarea/i.test(event.target.tagName);
|
|
284
|
+
const isEscapeEvent = event.key === 'Escape';
|
|
285
|
+
const isUpOrDownEvent = ['ArrowUp', 'ArrowDown'].includes(event.key);
|
|
294
286
|
|
|
295
|
-
if (!isUpOrDownEvent && !isEscapeEvent)
|
|
296
|
-
|
|
297
|
-
}
|
|
287
|
+
if (!isUpOrDownEvent && !isEscapeEvent) return;
|
|
288
|
+
if (isInput && !isEscapeEvent) return;
|
|
298
289
|
|
|
299
|
-
|
|
300
|
-
return
|
|
301
|
-
}
|
|
290
|
+
event.preventDefault();
|
|
302
291
|
|
|
303
|
-
|
|
292
|
+
const toggle = this.matches(SELECTOR_DATA_TOGGLE)
|
|
293
|
+
? this
|
|
294
|
+
: Selectors.find(SELECTOR_DATA_TOGGLE, event.delegateTarget?.parentNode);
|
|
304
295
|
|
|
305
|
-
|
|
306
|
-
this : (Selectors.find(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))
|
|
296
|
+
if (!toggle) return;
|
|
307
297
|
|
|
308
|
-
const instance = VGDropdown.getOrCreateInstance(
|
|
298
|
+
const instance = VGDropdown.getOrCreateInstance(toggle);
|
|
309
299
|
|
|
310
300
|
if (isUpOrDownEvent) {
|
|
311
|
-
event.stopPropagation()
|
|
312
|
-
instance.show()
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
event.stopPropagation()
|
|
318
|
-
instance.hide()
|
|
319
|
-
getToggleButton.focus()
|
|
301
|
+
event.stopPropagation();
|
|
302
|
+
instance.show();
|
|
303
|
+
} else if (instance._isShown()) {
|
|
304
|
+
event.stopPropagation();
|
|
305
|
+
instance.hide();
|
|
306
|
+
toggle.focus();
|
|
320
307
|
}
|
|
321
308
|
}
|
|
322
309
|
|
|
323
310
|
static clearDrops(event) {
|
|
324
311
|
if (event.button === 2 || (event.type === 'keyup' && event.key !== 'Tab')) {
|
|
325
|
-
return
|
|
312
|
+
return;
|
|
326
313
|
}
|
|
327
|
-
|
|
328
|
-
VGDropdown.hideOpenToggles(event)
|
|
314
|
+
VGDropdown.hideOpenToggles(event);
|
|
329
315
|
}
|
|
330
316
|
}
|
|
331
317
|
|
|
@@ -2,8 +2,8 @@ import BaseModule from "../../base-module";
|
|
|
2
2
|
import EventHandler from "../../../utils/js/dom/event";
|
|
3
3
|
import Selectors from "../../../utils/js/dom/selectors";
|
|
4
4
|
import {isDisabled, mergeDeepObject} from "../../../utils/js/functions";
|
|
5
|
-
import Templater from "../../../utils/js/components/templater";
|
|
6
5
|
import {Manipulator} from "../../../utils/js/dom/manipulator";
|
|
6
|
+
import Html from "../../../utils/js/components/templater";
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Constants
|
|
@@ -61,13 +61,16 @@ class VGHideShowPass extends BaseModule{
|
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
build(isShow = false) {
|
|
64
|
+
let classes = this._params.classes.join(' '), elm = '';
|
|
65
|
+
const HTML = Html('string');
|
|
66
|
+
|
|
64
67
|
if (!isShow) {
|
|
65
|
-
|
|
68
|
+
elm = HTML.component('eye', {class: classes});
|
|
66
69
|
} else {
|
|
67
|
-
|
|
70
|
+
elm = HTML.component('eye', {class: classes, type: 'hide'});
|
|
68
71
|
}
|
|
69
72
|
|
|
70
|
-
|
|
73
|
+
this._element.insertAdjacentHTML(this._params.insert, elm);
|
|
71
74
|
}
|
|
72
75
|
}
|
|
73
76
|
|