Помогите разобрать работу кода
Вот мой гитхаб. Работа кода состоит в следующем: Автокомплит должен запрашивать данные о репозиториях через API GitHub, каждый раз, когда пользователь обновляет значение поля ввода и выводить их в выпадающем меню прямо под собой. В выпадающем меню должно быть перечислено 5 названий первых репозиториев, полученных с помощью запроса поиска репозиториев по ключевым словам API GitHub с введенным пользователем в поле ввода поисковым запросом. При клике на любой из репозиториев соответствующий репозиторий должен быть представлен в списке добавленных репозиториев, расположенном ниже. Список репозиториев отображает добавленные с помощью автокомплита репозитории. Для каждого добавленного в список репозитория должно быть отображено его название, его владелец и количество звезд на этом репозитории. Кроме того, возле каждого пункта списка добавленных репозиториев должна быть кнопка удаления, которая, соответственно, удаляет репозиторий из списка.
Вот код:
const inputSearch = document.querySelector("input");
const inputList = document.querySelector(".dropdown__list");
const users = document.querySelector(".dropdown__users");
//удаление фиолетового блока при нажатии на крестик
users.addEventListener("click", function (event) {
let target = event.target;
if (!target.classList.contains("btn-close")) {
return; //если нет кнопки закрытия (красный крестик на фиолетовом блоке) выход из функции (???)
}
target.parentElement.remove(); //удаляет фиолетовый блок из DOM-дерева (???)
});
//при клике на элемент из выпадающего списка создает фиолетовый блок (addChosen)
inputList.addEventListener("click", function (event) {
let target = event.target;
if (!target.classList.contains("dropdown-content")) {
return; //если нет класса "dropdown-content" выход из функции (???)
}
addChosen(target);
inputSearch.value = ""; ///???
removePredictions(); //убирает выпадающий список после клика на элемент из выпадающего списка
});
//функция убирает выпадающий список после клика на один из его элементов
function removePredictions() {
inputList.innerHTML = "";
}
//функция показывает всплывающий список
function showPredictions(repositories) {
//let dropdownPredictions = document.querySelectorAll(".dropdown-content");
for (let repositoriesIndex = 0; repositoriesIndex < 5; repositoriesIndex++) {
//позволяет показать только 5 элементов в списке
let name = repositories.items[repositoriesIndex].name; //берем данные из API
let owner = repositories.items[repositoriesIndex].owner.login; //берем данные из API
let stars = repositories.items[repositoriesIndex].stargazers_count; //берем данные из API
let dropdownContent = `<div class="dropdown-content" data-owner="${owner}" data-stars="${stars}">${name}</div>`;
inputList.innerHTML += dropdownContent; //создаем переменную, туда кладем созданный класс и добавляем его как список всплывающего меню
}
}
//функция создает фиолетовый блок с данными из API
function addChosen(target) {
let name = target.textContent;
let owner = target.dataset.owner;
let stars = target.dataset.stars;
users.innerHTML += `<div class="chosen">Name: ${name}<br>Owner: ${owner}<br>Stars: ${stars}<button class="btn-close"></button></div>`;
//внутрь класса "dropdown__users" создаем класс(ы) chosen с полученными данными
}
//??
async function getPredictions() {
const urlSearchRepo = new URL("https://api.github.com/search/repositories");
let repoPart = inputSearch.value; //что за value? не могу понять
if (repoPart == "") {
removePredictions();
return;
}
urlSearchRepo.searchParams.append("q", repoPart); //почему здесь стоит q?
try {
let response = await fetch(urlSearchRepo);
if (response.ok) {
let repo = await response.json();
showPredictions(repo);
} else {
return null
};
} catch (error) {
console.log(error);
}
}
//??
function debounce(fn, timeout) {
let timer = null;
return (...args) => {
clearTimeout(timer);
return new Promise((resolve) => {
timer = setTimeout(() => resolve(fn(...args)), timeout);
});
};
}
//??
const getPredictionsDebounce = debounce(getPredictions, 500);
inputSearch.addEventListener("input", getPredictionsDebounce);
console.log("works!");
Я добавил комментарии, с помощью которых описал, что функции или какой-то кусок кода делают (как сам понял). Проверьте, пожалуйста, эти комментарии на соответствие и укажите на ошибки. Там, где стоят вопросительные знаки - я не понял, также прошу помощи