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