|
1102 | 1102 | // остановка мониторинга (если более не требуется) |
1103 | 1103 | // observer.disconnect(); |
1104 | 1104 |
|
1105 | | - // ** динамическое добавление строки контактов в add-модальном окне (по нажатию "Добавить контакт" кнопки) |
| 1105 | + // ** динамическое добавление строки контактов в add-модальном окне (по нажатию "Добавить контакт" кнопки, объёмная логика.. ряд "внутренних" функций) |
1106 | 1106 | const addModalContactsArr = []; |
1107 | 1107 |
|
1108 | 1108 | function createAddModalContactsElement() { |
|
1325 | 1325 | nowClickedDropBtn.classList.toggle('arrow-rotate'); // переключение направления стрелки |
1326 | 1326 | nowShowedDropList.classList.toggle('d-none'); // переключение видимости текущего списка |
1327 | 1327 |
|
1328 | | - // переключение видимости |
| 1328 | + // переключение видимости у/для списков |
1329 | 1329 | if (nowShowedDropList.classList.contains('d-none')) { |
1330 | 1330 | nowClickedDropBtn.classList.remove('drop-open'); |
1331 | 1331 | } else { |
|
1411 | 1411 | addModalContactDropBtn.blur(); // снятие фокуса с кнопки (после выбора) |
1412 | 1412 | } |
1413 | 1413 |
|
| 1414 | + // автоматическое закрытие/скрытие развёрнутого выпадающего drop-списка (при работе НЕ с ним) |
| 1415 | + document.addEventListener('click', (event) => { |
| 1416 | + const openDropdown = document.querySelector('.drop-open'); |
| 1417 | + if (openDropdown) { |
| 1418 | + const dropdownList = openDropdown.nextElementSibling; |
| 1419 | + |
| 1420 | + // закрытие/скрытие выпадающего списка (если последующий "клик" не по нему, не по drop-кнопке) |
| 1421 | + if ( |
| 1422 | + !openDropdown.contains(event.target) && |
| 1423 | + !dropdownList.contains(event.target) |
| 1424 | + ) { |
| 1425 | + closeBtnDropdown(); // вызов соответствующей функции |
| 1426 | + } |
| 1427 | + } |
| 1428 | + }); |
| 1429 | + |
| 1430 | + addModalWrap.addEventListener('focusout', (event) => { |
| 1431 | + const openDropdown = document.querySelector('.drop-open'); |
| 1432 | + if (openDropdown) { |
| 1433 | + const dropdownList = openDropdown.nextElementSibling; |
| 1434 | + |
| 1435 | + // закрытие/скрытие выпадающего списка (если "фокус" перешёл на другой элемент, в другое место) |
| 1436 | + if ( |
| 1437 | + !openDropdown.contains(event.relatedTarget) && |
| 1438 | + !dropdownList.contains(event.relatedTarget) |
| 1439 | + ) { |
| 1440 | + closeBtnDropdown(); // вызов соответствующей функции |
| 1441 | + } |
| 1442 | + } |
| 1443 | + }); |
| 1444 | + |
| 1445 | + // исключение закрытия выпадающего списка (при работе с ним) |
| 1446 | + addModalContactList.addEventListener('click', (event) => { |
| 1447 | + event.stopPropagation(); |
| 1448 | + }); |
| 1449 | + |
1414 | 1450 | // вызов/инициализация tooltips для "X" кнопки (для кнопки удаления строки контактов) |
1415 | 1451 | initTippy('.modal__add-body-add-x-btn', 'удалить контакт', 'top'); |
1416 | 1452 |
|
|
1461 | 1497 |
|
1462 | 1498 | addModalWrap.addEventListener('hide.bs.modal', checkEmptyRowContacts); // запуск проверки на "пустые" контакты (перед закрытием add-модального окна) |
1463 | 1499 |
|
1464 | | - // ** организация закрытия развёрнутого/раскрытого выпадающего списка row-контактов (при закрытии модального окна) |
1465 | | - function closeRowDropdown() { |
1466 | | - const openRowDropdownBtn = document.querySelector('.drop-open'); |
1467 | | - if (openRowDropdownBtn) { |
1468 | | - const dropdownList = openRowDropdownBtn.nextElementSibling; // определение следом идущего списка |
1469 | | - if ( |
1470 | | - dropdownList && |
1471 | | - dropdownList.classList.contains('modal-contact-list') |
1472 | | - ) { |
1473 | | - dropdownList.classList.add('d-none'); // закрытие списка |
1474 | | - openRowDropdownBtn.classList.remove('arrow-rotate', 'drop-open'); // корректировка кнопки |
1475 | | - } |
1476 | | - } |
1477 | | - } |
1478 | | - |
1479 | | - addModalWrap.addEventListener('hidden.bs.modal', closeRowDropdown); // закрытие "возможно" раскрытого выпадающего списка контактов (при закрытие add-модального окна) |
1480 | | - |
1481 | 1500 | // ** удаление/очистка от невалидных row-контактов (при закрытии модального окна) |
1482 | 1501 | function removeInvalidRowContacts() { |
1483 | 1502 | const invalidContactRows = document.querySelectorAll( |
|
0 commit comments