vgapp 0.1.5 → 0.1.6
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 +8 -3
- package/app/modules/vgdropdown/scss/vgdropdown.css +47 -47
- package/app/modules/vgformsender/scss/vgformsender.css +13 -13
- package/app/modules/vglawcookie/scss/vglawcookie.css +87 -87
- package/app/modules/vgmodal/scss/vgmodal.css +3824 -3824
- package/app/modules/vgnav/scss/vgnav.css +309 -309
- package/app/modules/vgnotify/scss/vgnotify.css +3 -3
- package/app/modules/vgrollup/scss/vgrollup.css +41 -41
- package/app/modules/vgselect/js/vgselect.js +246 -228
- package/app/modules/vgselect/scss/vgselect.css +256 -256
- package/app/modules/vgsidebar/scss/vgsidebar.css +86 -86
- package/app/utils/scss/default.css +275 -275
- package/build/vgapp.js +1 -1
- package/build/vgapp.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import BaseModule from "../../base-module";
|
|
2
|
-
import {isDisabled, isEmptyObj, mergeDeepObject, noop, transliterate} from "../../../utils/js/functions";
|
|
2
|
+
import {isDisabled, isEmptyObj, mergeDeepObject, noop, normalizeData, transliterate} from "../../../utils/js/functions";
|
|
3
3
|
import {Manipulator} from "../../../utils/js/dom/manipulator";
|
|
4
4
|
import EventHandler from "../../../utils/js/dom/event";
|
|
5
5
|
import Selectors from "../../../utils/js/dom/selectors";
|
|
@@ -23,13 +23,16 @@ const CLASS_NAME_PLACEHOLDER = 'vg-select-current--placeholder';
|
|
|
23
23
|
const CLASS_NAME_SEARCH = 'vg-select-search';
|
|
24
24
|
|
|
25
25
|
const EVENT_KEY_CLICK_DATA_API = `click.${NAME_KEY}.data.api`;
|
|
26
|
+
const EVENT_KEY_UP_DATA_API = `keyup.${NAME_KEY}.data.api`;
|
|
26
27
|
const EVENT_KEY_CHANGE = `${NAME_KEY}.change`;
|
|
27
28
|
const EVENT_KEY_HIDE = `${NAME_KEY}.hide`;
|
|
28
29
|
const EVENT_KEY_HIDDEN = `${NAME_KEY}.hidden`;
|
|
29
30
|
const EVENT_KEY_SHOW = `${NAME_KEY}.show`;
|
|
30
31
|
const EVENT_KEY_SHOWN = `${NAME_KEY}.shown`;
|
|
31
32
|
|
|
32
|
-
const SELECTOR_DATA_TOGGLE
|
|
33
|
+
const SELECTOR_DATA_TOGGLE = '[data-vg-toggle="select"]';
|
|
34
|
+
const SELECTOR_OPTION_TOGGLE = '[data-vg-toggle="select-option"]';
|
|
35
|
+
const SELECTOR_SEARCH_TOGGLE = '[name=vg-select-search]';
|
|
33
36
|
|
|
34
37
|
|
|
35
38
|
let observerTimout;
|
|
@@ -46,6 +49,10 @@ class VGSelect extends BaseModule {
|
|
|
46
49
|
target: '',
|
|
47
50
|
method: 'get',
|
|
48
51
|
loader: false,
|
|
52
|
+
},
|
|
53
|
+
render: {
|
|
54
|
+
option: noop,
|
|
55
|
+
item: noop
|
|
49
56
|
}
|
|
50
57
|
}, params));
|
|
51
58
|
|
|
@@ -60,101 +67,103 @@ class VGSelect extends BaseModule {
|
|
|
60
67
|
return NAME_KEY;
|
|
61
68
|
}
|
|
62
69
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
70
|
+
static buildListOptions(selector, drop) {
|
|
71
|
+
let options = selector.options,
|
|
72
|
+
list = document.createElement('ul');
|
|
66
73
|
|
|
67
|
-
|
|
68
|
-
if (isDisabled(this._element)) return;
|
|
74
|
+
list.classList.add(CLASS_NAME_LIST);
|
|
69
75
|
|
|
70
|
-
|
|
71
|
-
if (showEvent.defaultPrevented) return;
|
|
76
|
+
let optGroup = selector.querySelectorAll('optgroup');
|
|
72
77
|
|
|
73
|
-
if (
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
+
if (optGroup.length) {
|
|
79
|
+
let isSelected = false;
|
|
80
|
+
[...optGroup].forEach(function (el) {
|
|
81
|
+
let olOptGroup = document.createElement('ol');
|
|
82
|
+
olOptGroup.classList.add(CLASS_NAME_OPTGROUP);
|
|
78
83
|
|
|
79
|
-
|
|
84
|
+
let liLabel = document.createElement('li');
|
|
85
|
+
liLabel.innerHTML = el.label.trim();
|
|
86
|
+
liLabel.classList.add(CLASS_NAME_OPTGROUP_TITLE)
|
|
80
87
|
|
|
81
|
-
|
|
82
|
-
this._element.classList.add(CLASS_NAME_ACTIVE);
|
|
83
|
-
EventHandler.trigger(this._element, EVENT_KEY_SHOWN, { relatedTarget });
|
|
84
|
-
}
|
|
88
|
+
olOptGroup.prepend(liLabel)
|
|
85
89
|
|
|
86
|
-
|
|
87
|
-
}
|
|
90
|
+
let optGroupOptions = Selectors.findAll('option', el);
|
|
88
91
|
|
|
89
|
-
|
|
90
|
-
if (isDisabled(this._element) || !this._isShown()) return;
|
|
92
|
+
createLi(optGroupOptions, olOptGroup, isSelected);
|
|
91
93
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
+
list.append(olOptGroup);
|
|
95
|
+
isSelected = true;
|
|
96
|
+
});
|
|
97
|
+
} else {
|
|
98
|
+
let isSelected = false;
|
|
99
|
+
createLi(options, list, isSelected);
|
|
100
|
+
}
|
|
94
101
|
|
|
95
|
-
|
|
96
|
-
const hideEvent = EventHandler.trigger(this._element, EVENT_KEY_HIDE, {})
|
|
97
|
-
if (hideEvent.defaultPrevented) return;
|
|
102
|
+
drop.append(list);
|
|
98
103
|
|
|
99
|
-
|
|
100
|
-
//this._element.setAttribute('aria-expanded', 'false');
|
|
104
|
+
return list;
|
|
101
105
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
}
|
|
106
|
+
function createLi(options, list, isSelected) {
|
|
107
|
+
let i = 0;
|
|
108
|
+
for (const option of options) {
|
|
109
|
+
let li = document.createElement('li');
|
|
107
110
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
}
|
|
112
|
-
this._queueCallback(completeCallback, this._element, true, 10);
|
|
113
|
-
}
|
|
111
|
+
li.innerHTML = option.innerHTML.trim().replace(/<\/[^>]+(>|$)/g, "")
|
|
112
|
+
li.dataset.value = Manipulator.get(option, 'value');
|
|
113
|
+
li.classList.add(CLASS_NAME_OPTION);
|
|
114
114
|
|
|
115
|
-
|
|
116
|
-
return this._element.classList.contains(CLASS_NAME_SHOW);
|
|
117
|
-
}
|
|
115
|
+
Manipulator.set(li, 'data-vg-toggle', 'select-option');
|
|
118
116
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
117
|
+
let liData = Manipulator.get(option);
|
|
118
|
+
if (!isEmptyObj(liData)) {
|
|
119
|
+
for (const key of Object.keys(liData)) {
|
|
120
|
+
Manipulator.set(li, 'data-' + key, liData[key]);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
122
123
|
|
|
123
|
-
|
|
124
|
+
if (i === selector.selectedIndex && !isSelected) {
|
|
125
|
+
li.classList.add('selected');
|
|
126
|
+
}
|
|
124
127
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
} else if (isRebuild) {
|
|
128
|
-
_this.destroy(element);
|
|
129
|
-
}
|
|
128
|
+
if (Manipulator.has(option, 'disabled')) li.classList.add('disabled');
|
|
129
|
+
if (Manipulator.has(option, 'hidden')) li.classList.add('hidden');
|
|
130
130
|
|
|
131
|
-
|
|
131
|
+
list.append(li);
|
|
132
|
+
|
|
133
|
+
i++;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
132
137
|
|
|
138
|
+
static build(selector) {
|
|
133
139
|
let option_selected,
|
|
134
|
-
|
|
140
|
+
placeholder = selector.dataset.placeholder || '',
|
|
141
|
+
isSearch = selector.dataset.search || false;
|
|
135
142
|
|
|
136
|
-
|
|
137
|
-
|
|
143
|
+
selector.parentElement.style.position = 'relative';
|
|
144
|
+
|
|
145
|
+
if (placeholder && selector.selectedIndex === 0) {
|
|
146
|
+
option_selected = '<span class="'+ CLASS_NAME_PLACEHOLDER +'">' + placeholder + '<span>';
|
|
138
147
|
} else {
|
|
139
|
-
option_selected =
|
|
148
|
+
option_selected = selector.options[selector.selectedIndex].innerText;
|
|
140
149
|
}
|
|
141
150
|
|
|
142
151
|
// Создаем основной элемент с классами селекта
|
|
143
|
-
let classes = Manipulator.get(
|
|
144
|
-
|
|
152
|
+
let classes = Manipulator.get(selector,'class'),
|
|
153
|
+
element = document.createElement('div');
|
|
145
154
|
|
|
146
155
|
classes = classes.split(' ');
|
|
147
156
|
|
|
148
157
|
for (const _class of classes) {
|
|
149
|
-
|
|
158
|
+
element.classList.add(_class)
|
|
150
159
|
}
|
|
151
160
|
|
|
152
|
-
if (Manipulator.has(
|
|
161
|
+
if (Manipulator.has(selector, 'disabled')) element.classList.add('disabled');
|
|
153
162
|
|
|
154
|
-
let elData = Manipulator.get(
|
|
163
|
+
let elData = Manipulator.get(selector);
|
|
155
164
|
if (!isEmptyObj(elData)) {
|
|
156
165
|
for (const key of Object.keys(elData)) {
|
|
157
|
-
Manipulator.set(
|
|
166
|
+
Manipulator.set(element,'data-' + key, elData[key]);
|
|
158
167
|
}
|
|
159
168
|
}
|
|
160
169
|
|
|
@@ -164,83 +173,127 @@ class VGSelect extends BaseModule {
|
|
|
164
173
|
Manipulator.set(current, 'data-vg-toggle', 'select');
|
|
165
174
|
Manipulator.set(current, 'aria-expanded', 'false');
|
|
166
175
|
current.innerHTML = option_selected.trim();
|
|
167
|
-
|
|
176
|
+
element.append(current);
|
|
168
177
|
|
|
169
178
|
// Создаем элемент выпадающего списка
|
|
170
179
|
let dropdown = document.createElement('div');
|
|
171
180
|
dropdown.classList.add(CLASS_NAME_DROPDOWN);
|
|
172
|
-
|
|
181
|
+
element.append(dropdown);
|
|
173
182
|
|
|
174
183
|
// Создаем список и варианты селекта
|
|
175
|
-
|
|
176
|
-
list.classList.add(CLASS_NAME_LIST);
|
|
184
|
+
VGSelect.buildListOptions(selector, dropdown);
|
|
177
185
|
|
|
178
|
-
|
|
186
|
+
// Добавляем все созданный контейнер после селекта
|
|
187
|
+
selector.insertAdjacentElement('afterend', element);
|
|
179
188
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
[...optGroup].forEach(function (el) {
|
|
183
|
-
let olOptGroup = document.createElement('ol');
|
|
184
|
-
olOptGroup.classList.add(CLASS_NAME_OPTGROUP);
|
|
189
|
+
// помечаем элемент инициализированным
|
|
190
|
+
selector.dataset.inited = 'true';
|
|
185
191
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
192
|
+
if (isSearch) {
|
|
193
|
+
let search_container = document.createElement('div');
|
|
194
|
+
search_container.classList.add(CLASS_NAME_SEARCH);
|
|
189
195
|
|
|
190
|
-
|
|
196
|
+
let input = document.createElement('input');
|
|
197
|
+
Manipulator.set(input, 'name', 'vg-select-search');
|
|
198
|
+
Manipulator.set(input, 'type', 'text');
|
|
199
|
+
Manipulator.set(input, 'placeholder', 'Поиск...');
|
|
191
200
|
|
|
192
|
-
|
|
201
|
+
search_container.append(input);
|
|
202
|
+
dropdown.prepend(search_container);
|
|
203
|
+
}
|
|
193
204
|
|
|
194
|
-
|
|
205
|
+
return element;
|
|
206
|
+
}
|
|
195
207
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
} else {
|
|
200
|
-
let isSelected = false;
|
|
201
|
-
createLi(options, list, isSelected);
|
|
202
|
-
}
|
|
208
|
+
render(selector, callback) {
|
|
209
|
+
let list = Selectors.find('.' + CLASS_NAME_LIST, this._drop);
|
|
210
|
+
if (list) list.remove();
|
|
203
211
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
for (const option of options) {
|
|
207
|
-
let li = document.createElement('li');
|
|
212
|
+
VGSelect.buildListOptions(selector, this._drop);
|
|
213
|
+
}
|
|
208
214
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
215
|
+
toggle(relatedTarget) {
|
|
216
|
+
return !this._isShown() ? this.show(relatedTarget) : this.hide();
|
|
217
|
+
}
|
|
212
218
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
for (const key of Object.keys(liData)) {
|
|
216
|
-
Manipulator.set(li, 'data-' + key, liData[key]);
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
+
show(relatedTarget) {
|
|
220
|
+
if (isDisabled(this._element)) return;
|
|
219
221
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
}
|
|
222
|
+
const showEvent = EventHandler.trigger(this._element, EVENT_KEY_SHOW, { relatedTarget })
|
|
223
|
+
if (showEvent.defaultPrevented) return;
|
|
223
224
|
|
|
224
|
-
|
|
225
|
-
|
|
225
|
+
if ('ontouchstart' in document.documentElement) {
|
|
226
|
+
for (const element of [].concat(...document.body.children)) {
|
|
227
|
+
EventHandler.on(element, 'mouseover', noop);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
226
230
|
|
|
227
|
-
|
|
231
|
+
// TODO доделать
|
|
232
|
+
/*this._route((status, data) => {
|
|
233
|
+
let response = normalizeData(data.response),
|
|
234
|
+
select = this._element.previousSibling;
|
|
228
235
|
|
|
229
|
-
|
|
236
|
+
if (response.length) {
|
|
237
|
+
Selectors.findAll('option', select).forEach(option => {
|
|
238
|
+
option.remove();
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
response.forEach(el => {
|
|
242
|
+
let option = document.createElement('option');
|
|
243
|
+
option.innerText = el.title;
|
|
244
|
+
Manipulator.set(option, 'value', el.id);
|
|
245
|
+
|
|
246
|
+
select.append(option);
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
this.render(select);
|
|
230
250
|
}
|
|
251
|
+
});*/
|
|
252
|
+
|
|
253
|
+
this._element.classList.add(CLASS_NAME_SHOW);
|
|
254
|
+
|
|
255
|
+
if (this._params.search) {
|
|
256
|
+
let input = Selectors.find('input', this._element);
|
|
257
|
+
if (input) input.focus();
|
|
231
258
|
}
|
|
232
259
|
|
|
233
|
-
|
|
260
|
+
const completeCallBack = () => {
|
|
261
|
+
this._element.classList.add(CLASS_NAME_ACTIVE);
|
|
262
|
+
EventHandler.trigger(this._element, EVENT_KEY_SHOWN, { relatedTarget });
|
|
263
|
+
}
|
|
234
264
|
|
|
235
|
-
|
|
236
|
-
|
|
265
|
+
this._queueCallback(completeCallBack, this._drop, true, 50)
|
|
266
|
+
}
|
|
237
267
|
|
|
238
|
-
|
|
239
|
-
|
|
268
|
+
hide() {
|
|
269
|
+
if (isDisabled(this._element) || !this._isShown()) return;
|
|
270
|
+
|
|
271
|
+
this._completeHide();
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
_completeHide() {
|
|
275
|
+
const hideEvent = EventHandler.trigger(this._element, EVENT_KEY_HIDE, {})
|
|
276
|
+
if (hideEvent.defaultPrevented) return;
|
|
277
|
+
|
|
278
|
+
this._element.classList.remove(CLASS_NAME_ACTIVE);
|
|
279
|
+
let toggle = Selectors.find(SELECTOR_DATA_TOGGLE, this._element);
|
|
280
|
+
Manipulator.set(toggle, 'aria-expanded', 'false');
|
|
240
281
|
|
|
241
|
-
if (
|
|
242
|
-
|
|
282
|
+
if ('ontouchstart' in document.documentElement) {
|
|
283
|
+
for (const element of [].concat(...document.body.children)) {
|
|
284
|
+
EventHandler.off(element, 'mouseover', noop);
|
|
285
|
+
}
|
|
243
286
|
}
|
|
287
|
+
|
|
288
|
+
const completeCallback = () => {
|
|
289
|
+
this._element.classList.remove(CLASS_NAME_SHOW);
|
|
290
|
+
EventHandler.trigger(this._element, EVENT_KEY_HIDDEN, {});
|
|
291
|
+
}
|
|
292
|
+
this._queueCallback(completeCallback, this._element, true, 10);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
_isShown() {
|
|
296
|
+
return this._element.classList.contains(CLASS_NAME_SHOW);
|
|
244
297
|
}
|
|
245
298
|
|
|
246
299
|
destroy(select) {
|
|
@@ -279,131 +332,45 @@ class VGSelect extends BaseModule {
|
|
|
279
332
|
}
|
|
280
333
|
|
|
281
334
|
search(select) {
|
|
282
|
-
let dropdown = select.querySelector('.' + CLASS_NAME_DROPDOWN);
|
|
283
|
-
|
|
284
|
-
let search_container = document.createElement('div');
|
|
285
|
-
search_container.classList.add(CLASS_NAME_SEARCH);
|
|
286
|
-
|
|
287
|
-
let input = document.createElement('input');
|
|
288
|
-
input.setAttribute('name', 'vg-select-search');
|
|
289
|
-
input.setAttribute('type', 'text');
|
|
290
|
-
input.setAttribute('placeholder', 'Поиск...');
|
|
291
|
-
|
|
292
|
-
search_container.append(input);
|
|
293
|
-
dropdown.prepend(search_container);
|
|
294
|
-
|
|
295
|
-
search_container.querySelector('[name=vg-select-search]').addEventListener('keyup', (e) => {
|
|
296
|
-
e.preventDefault();
|
|
297
|
-
|
|
298
|
-
let el = e.target;
|
|
299
335
|
|
|
300
|
-
let selectList = el?.closest('.' + CLASS_NAME_DROPDOWN).querySelector('.' + CLASS_NAME_LIST);
|
|
301
|
-
if (selectList) {
|
|
302
|
-
let options = [...selectList.querySelectorAll('.' + CLASS_NAME_OPTION)],
|
|
303
|
-
optionsGroup = [...selectList.querySelectorAll('.' + CLASS_NAME_OPTGROUP)],
|
|
304
|
-
value = el?.value;
|
|
305
|
-
|
|
306
|
-
options = options.concat(optionsGroup);
|
|
307
|
-
|
|
308
|
-
for (const option of options) {
|
|
309
|
-
Manipulator.show(option);
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
if (value.length) {
|
|
313
|
-
value = value.trim();
|
|
314
|
-
value = value.toLowerCase();
|
|
315
|
-
value = transliterate(value, true);
|
|
316
|
-
|
|
317
|
-
for (const option of options) {
|
|
318
|
-
let text = option.innerText.toLowerCase();
|
|
319
|
-
|
|
320
|
-
if (text.indexOf(value) === -1) Manipulator.hide(option);
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
});
|
|
325
336
|
}
|
|
326
337
|
|
|
327
338
|
dispose() {
|
|
328
339
|
super.dispose();
|
|
329
340
|
}
|
|
330
341
|
|
|
331
|
-
|
|
332
|
-
const
|
|
342
|
+
static hideOpenToggles(event) {
|
|
343
|
+
const openToggles = Selectors.findAll('.vg-select:not(.disabled):not(:disabled).show');
|
|
333
344
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
345
|
+
for (const toggle of openToggles) {
|
|
346
|
+
const context = VGSelect.getInstance(toggle);
|
|
347
|
+
if (!context) continue;
|
|
337
348
|
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
for (const els of selects) {
|
|
341
|
-
if (els !== container) {
|
|
342
|
-
els?.classList.remove('show');
|
|
343
|
-
}
|
|
344
|
-
}
|
|
349
|
+
if (event.target.closest('.' + CLASS_NAME_CONTAINER) === context._element) {
|
|
350
|
+
return;
|
|
345
351
|
}
|
|
346
352
|
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
container.classList.add('show');
|
|
351
|
-
|
|
352
|
-
if (_this._params.search) {
|
|
353
|
-
let input = container.querySelector('input');
|
|
354
|
-
if (input) input.focus();
|
|
355
|
-
}
|
|
353
|
+
const composedPath = event.composedPath();
|
|
354
|
+
if (composedPath.includes(context._element)) {
|
|
355
|
+
continue
|
|
356
356
|
}
|
|
357
357
|
|
|
358
|
-
|
|
359
|
-
}
|
|
358
|
+
const relatedTarget = { relatedTarget: context._element }
|
|
360
359
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
let el = e.target;
|
|
366
|
-
|
|
367
|
-
if (!el.classList.contains('disabled')) {
|
|
368
|
-
let container = el.closest('.' + CLASS_NAME_CONTAINER),
|
|
369
|
-
options = container.querySelectorAll('.' + CLASS_NAME_OPTION);
|
|
370
|
-
|
|
371
|
-
if (options.length) {
|
|
372
|
-
for (const option of options) {
|
|
373
|
-
option.classList.remove('selected');
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
el.classList.add('selected');
|
|
378
|
-
|
|
379
|
-
container.querySelector('.' + CLASS_NAME_CURRENT).innerText = el.innerText;
|
|
380
|
-
container.classList.remove('show');
|
|
360
|
+
if (event.type === 'click') {
|
|
361
|
+
relatedTarget.clickEvent = event
|
|
362
|
+
}
|
|
381
363
|
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
}
|
|
386
|
-
});
|
|
387
|
-
});
|
|
364
|
+
context._completeHide(relatedTarget)
|
|
365
|
+
}
|
|
366
|
+
}
|
|
388
367
|
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
for (const el of selects) {
|
|
394
|
-
el?.classList.remove('show');
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
}
|
|
398
|
-
});
|
|
368
|
+
static clearDrops(event) {
|
|
369
|
+
if (event.button === 2 || (event.type === 'keyup' && event.key !== 'Tab')) {
|
|
370
|
+
return
|
|
371
|
+
}
|
|
399
372
|
|
|
400
|
-
|
|
401
|
-
form.addEventListener("reset", function () {
|
|
402
|
-
form.querySelectorAll('select.vg-select').forEach(function (select) {
|
|
403
|
-
VGSelect.init(select, {}, true)
|
|
404
|
-
})
|
|
405
|
-
});
|
|
406
|
-
});
|
|
373
|
+
VGSelect.hideOpenToggles(event)
|
|
407
374
|
}
|
|
408
375
|
|
|
409
376
|
/**
|
|
@@ -413,20 +380,18 @@ class VGSelect extends BaseModule {
|
|
|
413
380
|
* @param isRebuild
|
|
414
381
|
*/
|
|
415
382
|
static init(element, params = {}, isRebuild = false) {
|
|
416
|
-
|
|
417
|
-
|
|
383
|
+
let elm = VGSelect.build(element);
|
|
384
|
+
VGSelect.getOrCreateInstance(elm, params);
|
|
418
385
|
}
|
|
419
386
|
}
|
|
420
387
|
|
|
388
|
+
EventHandler.on(document, EVENT_KEY_CLICK_DATA_API, VGSelect.clearDrops);
|
|
389
|
+
|
|
421
390
|
EventHandler.on(document, EVENT_KEY_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function () {
|
|
422
391
|
const target = this.closest('.' + CLASS_NAME_CONTAINER);
|
|
423
392
|
|
|
424
393
|
Manipulator.set(this, 'aria-expanded', true);
|
|
425
394
|
|
|
426
|
-
EventHandler.one(target, EVENT_KEY_HIDDEN, () => {
|
|
427
|
-
Manipulator.set(this, 'aria-expanded', false);
|
|
428
|
-
})
|
|
429
|
-
|
|
430
395
|
const alreadyOpen = Selectors.find('.vg-select.show')
|
|
431
396
|
if (alreadyOpen && alreadyOpen !== target) {
|
|
432
397
|
VGSelect.getInstance(alreadyOpen).hide();
|
|
@@ -436,5 +401,58 @@ EventHandler.on(document, EVENT_KEY_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, functi
|
|
|
436
401
|
instance.toggle(this);
|
|
437
402
|
});
|
|
438
403
|
|
|
404
|
+
EventHandler.on(document, EVENT_KEY_CLICK_DATA_API, SELECTOR_OPTION_TOGGLE, function (e) {
|
|
405
|
+
let el = e.target;
|
|
406
|
+
|
|
407
|
+
if (!el.classList.contains('disabled')) {
|
|
408
|
+
let container = el.closest('.' + CLASS_NAME_CONTAINER),
|
|
409
|
+
options = container.querySelectorAll('.' + CLASS_NAME_OPTION);
|
|
410
|
+
|
|
411
|
+
if (options.length) {
|
|
412
|
+
for (const option of options) {
|
|
413
|
+
option.classList.remove('selected');
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
el.classList.add('selected');
|
|
418
|
+
|
|
419
|
+
container.querySelector('.' + CLASS_NAME_CURRENT).innerText = el.innerText;
|
|
420
|
+
container.classList.remove('show');
|
|
421
|
+
|
|
422
|
+
let select = container.previousSibling;
|
|
423
|
+
select.value = el.dataset.value;
|
|
424
|
+
EventHandler.trigger(select, EVENT_KEY_CHANGE, {value: el.dataset.value});
|
|
425
|
+
}
|
|
426
|
+
});
|
|
427
|
+
|
|
428
|
+
EventHandler.on(document, EVENT_KEY_UP_DATA_API, SELECTOR_SEARCH_TOGGLE, function (e) {
|
|
429
|
+
let el = this;
|
|
430
|
+
|
|
431
|
+
let selectList = el?.closest('.' + CLASS_NAME_DROPDOWN).querySelector('.' + CLASS_NAME_LIST);
|
|
432
|
+
if (selectList) {
|
|
433
|
+
let options = [...selectList.querySelectorAll('.' + CLASS_NAME_OPTION)],
|
|
434
|
+
optionsGroup = [...selectList.querySelectorAll('.' + CLASS_NAME_OPTGROUP)],
|
|
435
|
+
value = el?.value;
|
|
436
|
+
|
|
437
|
+
options = options.concat(optionsGroup);
|
|
438
|
+
|
|
439
|
+
for (const option of options) {
|
|
440
|
+
Manipulator.show(option);
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
if (value.length) {
|
|
444
|
+
value = value.trim();
|
|
445
|
+
value = value.toLowerCase();
|
|
446
|
+
value = transliterate(value, true);
|
|
447
|
+
|
|
448
|
+
for (const option of options) {
|
|
449
|
+
let text = option.innerText.toLowerCase();
|
|
450
|
+
|
|
451
|
+
if (text.indexOf(value) === -1) Manipulator.hide(option);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
});
|
|
456
|
+
|
|
439
457
|
|
|
440
458
|
export default VGSelect;
|