-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
136 lines (121 loc) · 4.52 KB
/
app.js
File metadata and controls
136 lines (121 loc) · 4.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
// HTML elements
const searchInput = document.querySelector(".search__input");
const searchButton = document.querySelector(".search__button");
const mainSection = document.querySelector(".main__section");
const user = document.querySelector(".user");
const searchError = document.querySelector(".error");
const githubImage = document.querySelector(".github__image");
const userName = document.querySelector(".user__name");
const userName2 = document.querySelector(".user__name2");
const userBio = document.querySelector(".user__bio");
const userLocation = document.querySelector(".user__location");
const userWebsite = document.querySelector(".user__website");
const firstStatNumber = document.querySelector(".firstStatNumber");
const firstStatTitle = document.querySelector(".firstStatTitle");
const secondStatNumber = document.querySelector(".secondStatNumber");
const secondStatTitle = document.querySelector(".secondStatTitle");
const thirdStatNumber = document.querySelector(".thirdStatNumber");
const thirdStatTitle = document.querySelector(".thirdStatTitle");
const userRepositories = document.querySelector(".user__repositories");
const userFollowers = document.querySelector(".user__followers");
const fetchUserData = async (userName) => {
try {
const response = await fetch(`https://api.github.com/users/${userName}`);
const data = await response.json();
if (data.login !== undefined) {
renderProfile(data);
renderUserRepositories(userName);
renderUserFollowers(userName);
} else {
userNotFound();
}
} catch (error) {
console.log(error);
}
};
const renderProfile = (userData) => {
user.style.display = "flex";
searchError.style.display = "none";
githubImage.src = userData.avatar_url;
userName.textContent = userData.name;
userName2.textContent = `@${userData.login}`;
userName2.setAttribute("href", userData.html_url);
userBio.textContent = userData.bio;
userLocation.innerHTML = `
<i class="fa-solid fa-location-dot"></i>
<p>${userData.location}</p>
`;
userWebsite.innerHTML = `
<i class="fa-solid fa-link"></i>
<a href="${userData.blog}" class="website__link" target="_blank">${userData.blog}</a>
`;
firstStatTitle.textContent = "Followers";
firstStatNumber.textContent = userData.followers;
secondStatTitle.textContent = "Following";
secondStatNumber.textContent = userData.following;
thirdStatTitle.textContent = "Repositories";
thirdStatNumber.textContent = userData.public_repos;
};
const renderUserRepositories = async (userName) => {
try {
const response = await fetch(`https://api.github.com/users/${userName}/repos`);
const repositories = await response.json();
let HTMLContentToAppend = "";
for (const repository of repositories) {
HTMLContentToAppend += `
<div class="repository">
<a href="${repository.html_url}" class="repository__name" target="_blank">${repository.name}</a>
<p class="repository__description">${repository.description}</p>
<div class="repository__info">
<p class="repository__languages">${repository.language}</p>
<p class="repository__lastUpdate">Last Update: ${String(repository.updated_at).substring(0, 10)}</p>
</div>
</div>
`;
}
userRepositories.innerHTML = `
<h1 class="user__repositories__title">Repositories</h1>
${HTMLContentToAppend}
`;
} catch (error) {
console.log(error);
}
};
const renderUserFollowers = async (userName) => {
try {
const response = await fetch(`https://api.github.com/users/${userName}/followers`);
const followers = await response.json();
let HTMLContentToAppend = "";
for (const follower of followers) {
HTMLContentToAppend += `
<a href="${follower.html_url}" class="follower" target="_blank">
<div class="follower__img">
<img src="${follower.avatar_url}" alt="${follower.login}" />
</div>
<p class="follower__username">${follower.login}</p>
</a>
`;
}
userFollowers.innerHTML = `
<h1 class="user__followers__title">Followers</h1>
${HTMLContentToAppend}
`;
} catch (error) {
console.log(error);
}
};
const userNotFound = () => {
user.style.display = "none";
searchError.style.display = "block";
userRepositories.innerHTML = "";
userFollowers.innerHTML = "";
};
// Event Listeners
searchButton.addEventListener("click", () => {
fetchUserData(searchInput.value);
});
searchInput.addEventListener("keypress", (event) => {
if (event.key === "Enter") {
fetchUserData(searchInput.value);
}
});