Skip to content

Commit c3a7ea8

Browse files
committed
[PRAC/cont] Add show/hide "dropdown" element
Organiz btn content replacement/update (according to li values/options). Worth noting: - adding a "focus" state for dropdown-btn until li/option is selected. core: B-3 / JS-BL
1 parent 3b5c6a0 commit c3a7ea8

File tree

3 files changed

+78
-12
lines changed

3 files changed

+78
-12
lines changed

core-courses/3-js-basic-level/practicum-js-basic-level/sb-crm-client/css/modal-add.css

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -169,17 +169,16 @@
169169
font-size: 12px;
170170
background: transparent;
171171
outline: none;
172-
overflow: hidden;
173172
}
174173

175174
.modal__add-body-add-contact-drop-btn:after {
176175
content: '';
177176
position: absolute;
178177
top: 50%;
179-
right: 6px;
178+
right: 7px;
180179
transform: translateY(-50%);
181-
width: 16px;
182-
height: 16px;
180+
width: 14px;
181+
height: 14px;
183182
background-image: url('../images/drop-arrow-down.svg');
184183
background-repeat: no-repeat;
185184
background-position: center;
@@ -188,14 +187,25 @@
188187
pointer-events: none;
189188
}
190189

191-
.modal__add-body-add-contact-drop-btn:focus-visible:not(:hover) {
190+
.modal__add-body-add-contact-drop-btn:focus-visible,
191+
.modal__add-body-add-contact-drop-btn:focus {
192192
border-color: var(--main-purple);
193193
box-shadow: 0 0 0 .25rem rgba(152, 115, 255, .25);
194-
z-index: 10;
194+
z-index: 5;
195+
}
196+
197+
.modal__add-body-add-contact-drop-btn:not(:focus-visible),
198+
.modal__add-body-add-contact-drop-btn:not(:focus) {
199+
z-index: 3;
200+
}
201+
202+
.modal__add-body-add-contact-drop-btn.arrow-rotate:focus-visible,
203+
.modal__add-body-add-contact-drop-btn.arrow-rotate:focus {
204+
z-index: 6;
195205
}
196206

197-
.modal__add-body-add-contact-drop-btn:not(:focus-visible) {
198-
z-index: 1;
207+
.modal__add-body-add-contact-drop-btn.arrow-rotate:after {
208+
transform: translateY(-50%) rotate(180deg);
199209
}
200210

201211
.modal__add-body-add-contact-list {
@@ -210,6 +220,7 @@
210220
background: var(--option-gray);
211221
overflow: hidden;
212222
list-style-type: none;
223+
z-index: 4;
213224
}
214225

215226
.modal__add-body-add-contact-item {
@@ -218,19 +229,31 @@
218229
padding: 0;
219230
padding: 4px 10px;
220231
font-size: 12px;
232+
outline: none;
221233
cursor: pointer;
234+
transition-property: color, background-color;
235+
transition-duration: var(--short);
236+
transition-timing-function: ease;
222237
}
223238

224239
.modal__add-body-add-contact-item:first-child {
225240
padding-top: 8px;
226241
}
227242

228243
.modal__add-body-add-contact-item:last-child {
229-
padding-bottom: 7px;
244+
padding-bottom: 6px;
230245
}
231246

232-
.modal__add-body-add-contact-item:hover {
233-
background-color: var(--select-gray);
247+
.modal__add-body-add-contact-item:focus-visible:not(:hover) {
248+
color: var(--main-purple);
249+
}
250+
251+
.modal__add-body-add-contact-item:focus-visible:active {
252+
color: var(--text-gray);
253+
}
254+
255+
.modal__add-body-add-contact-item:active {
256+
color: var(--text-gray);
234257
}
235258

236259
.modal__add-btn {
@@ -378,6 +401,10 @@
378401
opacity: 1;
379402
}
380403

404+
.modal__add-body-add-contact-item:hover:not(:active) {
405+
background-color: var(--select-gray);
406+
}
407+
381408
.modal__add-body-save-btn:hover:not(:active) {
382409
background-color: var(--light-purple);
383410
}
Lines changed: 10 additions & 0 deletions
Loading

core-courses/3-js-basic-level/practicum-js-basic-level/sb-crm-client/js/index.js

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -642,7 +642,10 @@
642642
addModalContactDropBtn.classList.add(
643643
'modal__add-body-add-contact-drop-btn'
644644
);
645-
addModalContactList.classList.add('modal__add-body-add-contact-list');
645+
addModalContactList.classList.add(
646+
'modal__add-body-add-contact-list',
647+
'd-none'
648+
);
646649
addModalContactItemExtraPhone.classList.add(
647650
'modal__add-body-add-contact-item',
648651
'add-modal-extra-phone-item'
@@ -676,9 +679,13 @@
676679
addModalContactDropBtn.setAttribute('id', 'add-modal-drop-btn');
677680
addModalContactDropBtn.setAttribute('type', 'button');
678681
addModalContactItemExtraPhone.setAttribute('data-value', 'extra-phone');
682+
addModalContactItemExtraPhone.setAttribute('tabindex', '0');
679683
addModalContactItemEmail.setAttribute('data-value', 'email');
684+
addModalContactItemEmail.setAttribute('tabindex', '0');
680685
addModalContactItemVk.setAttribute('data-value', 'vk');
686+
addModalContactItemVk.setAttribute('tabindex', '0');
681687
addModalContactItemFacebook.setAttribute('data-value', 'facebook');
688+
addModalContactItemFacebook.setAttribute('tabindex', '0');
682689
addModalContactHiddenInput.setAttribute('value', 'phone'); // начальное значение, согласно textContent кнопки
683690
addModalContactHiddenInput.setAttribute('type', 'hidden');
684691
addModalContactHiddenInput.setAttribute('name', 'contact-type');
@@ -741,6 +748,28 @@
741748
addModalBodyAddBtn.disabled = true;
742749
}
743750

751+
// показ/скрытие выпадающего списка вариантов/контактов
752+
addModalContactDropBtn.addEventListener('click', (event) => {
753+
event.currentTarget.focus(); // добавление фокуса кнопке (до момента выбора)
754+
event.currentTarget.classList.toggle('arrow-rotate'); // переключение направления стрелки
755+
addModalContactList.classList.toggle('d-none');
756+
});
757+
758+
const allModalContactsListItems = document.querySelectorAll(
759+
'.modal__add-body-add-contact-item'
760+
);
761+
762+
// замена/обновление содержимого/контента кнопки (согласно значений li/вариантов)
763+
addModalContactList.addEventListener('click', (event) => {
764+
if (event.target.tagName === 'LI') {
765+
const selectedItemValue = event.target.getAttribute('data-value');
766+
addModalContactDropBtn.textContent = event.target.textContent;
767+
addModalContactList.classList.add('d-none'); // скрытие выпадающего списка
768+
addModalContactDropBtn.classList.remove('arrow-rotate'); // возврат направления стрелки
769+
addModalContactHiddenInput.value = selectedItemValue; // обновление данных в "скрытом" input (для последующей отправки на сервер)
770+
}
771+
});
772+
744773
// организация удаления строки контактов
745774
addModalContactXBtn.addEventListener('click', (event) => {
746775
event.stopPropagation(); // исключение не предвиденных событий/поведения

0 commit comments

Comments
 (0)