const userAvatarElem = document.querySelector('.user_avatar'); const userNameElem = document.querySelector('.user_name'); const userInfo = document.querySelector('.user_info'); const userRepos = document.querySelector('.user_repos'); const defaultAvatar = 'default-avatar.png'; userAvatarElem.src = defaultAvatar; // handler function that throws any encountered error const handleError = response => { if (!response.ok) { userInfo.hidden = true; userAvatarElem.src = '404.png'; showUserInputElem.value = ""; throw Error(response.statusText); } else { return response.json(); } }; const clearReposList = () => userRepos.innerHTML = ""; const fetchUserData = userName => { return fetch(`https://api.github.com/users/${userName}`) .then(handleError) // skips to .catch if error is thrown .catch(console.log) // catches the error and logs it }; const fetchUserRepos = url => { return fetch(url) .then(handleError) // skips to .catch if error is thrown .catch(console.log) // catches the error and logs it } const renderUserData = userData => { const { avatar_url, name, html_url, login } = userData; userAvatarElem.src = avatar_url; userNameElem.textContent = name ? name : login; userNameElem.href = html_url; userInfo.hidden = false; }; const sortUserRepos = userRepos => { const REPOS_MAX = 5; let sortedRepos = []; const addRepos = (repo) => { if (sortedRepos.length < REPOS_MAX && !sortedRepos.includes(repo)) { sortedRepos.push(repo); } } const maxStars = (function(a, b) { return b.stargazers_count - a.stargazers_count; }); userRepos.filter(repo => repo.stargazers_count > 0).sort(maxStars).map(addRepos); userRepos.map(addRepos); return sortedRepos; } const renderUserRepos = userReposData => { userReposData.map(repo => { let userRepo = ""; if (repo.stargazers_count) { userRepo = `