-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
180 lines (153 loc) · 5.96 KB
/
script.js
File metadata and controls
180 lines (153 loc) · 5.96 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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
const modeContainer = document.querySelector('#mode-container')
const ModeSwitch = document.querySelector('[data-Mode]')
const sunImg = document.querySelector('.SunImg')
const moonImg = document.querySelector('.MoonImg')
const wrapper = document.querySelector('.wrapper')
const formContainer = document.querySelector('.form-container')
const InputSection = document.querySelector('.InputSection')
const InputDelete = document.querySelector('.InputDelete')
let InformationSection = document.querySelector('.Information-container')
const searchBtn = document.querySelector('#SearchBtn')
const info_img = document.querySelector('#info-img')
const info_name = document.querySelector('#info-name')
const github_link = document.querySelector('#github-link')
const joinedDate = document.querySelector('#info-joined')
const info_desc = document.querySelector('#info-desc')
const more_info = document.querySelector('.more-info')
const repo_num = document.querySelector('#repo-num')
const followers_num = document.querySelector('#follower-num')
const following_num = document.querySelector('#following-num')
const info_location = document.querySelector('#info-location')
const blog_link = document.querySelector('#blog-link')
const blog_link_text = document.querySelector('#blog-link span')
const twitter_link = document.querySelector('#twitter-link')
const twitter_username = document.querySelector('#twitter-link span')
const company_name = document.querySelector('#info-company span')
const info_grid = document.querySelector('.grid')
let Information = document.querySelector('.Information')
let errorMsg = document.querySelector('.errorMsg')
// dark mode features
moonImg.classList.add("active")
ModeSwitch.innerText = "Dark"
modeContainer.addEventListener('click', () => {
if(ModeSwitch.innerText == "Dark") { // for dark mode
ActivateDarkMode()
}
else if(ModeSwitch.innerText == "Light"){ // for ligth mode
ActivateLightMode()
}
})
function ActivateDarkMode() {
sunImg.classList.add("active")
moonImg.classList.remove("active")
ModeSwitch.innerText = "Light"
wrapper.style.background = '#141d2f' // black background
wrapper.classList.add("dark")
formContainer.classList.add("dark")
InputSection.classList.add("dark")
InformationSection.classList.add("dark")
blog_link.classList.add("dark")
twitter_link.classList.add("dark")
more_info.classList.add("dark")
}
function ActivateLightMode() {
sunImg.classList.remove("active")
moonImg.classList.add("active")
ModeSwitch.innerText = "Dark"
wrapper.style.background = '#f6f8ff' // white background
wrapper.classList.remove("dark")
formContainer.classList.remove("dark")
InputSection.classList.remove("dark")
InformationSection.classList.remove("dark")
blog_link.classList.remove("dark")
twitter_link.classList.remove("dark")
more_info.classList.remove("dark")
}
// input section
InputSection.addEventListener('input', function() {
if (InputSection.value !== '') {
InputDelete.classList.add("active")
} else if(InputSection.value == ""){
InputDelete.classList.remove("active")
}
});
// when clicked on X
InputDelete.addEventListener('click', function() {
InputSection.value = '';
InputDelete.classList.remove("active")
});
let InputName = "theyashsolanki"
// fetch github api and display info
async function fetchInfo(name) {
if(name) {
InputName = name
let response = await fetch(`https://api.github.com/users/${name}`)
if(response.ok) {
data = await response.json()
DisplayData(data)
}
else {
errorMsg.classList.add("active")
Information.classList.remove("active")
}
}
}
function DisplayData() {
errorMsg.classList.remove("active")
Information.classList.add("active")
console.log(data)
info_img.setAttribute('src', `${data.avatar_url}`)
info_name.innerText = data.name
github_link.setAttribute('href', `${data.html_url}`)
github_link.innerText = `@${data.login}`
joinedDate.innerText = `Joined ${formatDate(data.created_at)}`
info_desc.innerText = `${data.bio}`
more_info.classList.add("active")
info_grid.classList.add("active")
repo_num.innerText = data.public_repos
followers_num.innerText = data.followers
following_num.innerText = data.following
if(data.location) info_location.innerText = data.location
else info_location.innerText = "Not Available"
if(data.blog) {
blog_link.setAttribute('href', data.blog)
blog_link_text.innerText = data.blog
} else {
blog_link_text.innerText = "Not Available"
blog_link.removeAttribute('href')
}
if(data.twitter_username) {
twitter_link.setAttribute('href', `https://twitter.com/${data.twitter_username}`)
twitter_username.innerText = data.twitter_username
} else {
twitter_username.innerText = "Not Available"
twitter_link.removeAttribute('href')
}
if(data.company) {
company_name.innerText = data.company
} else company_name.innerText = "Not Available"
}
// default
fetchInfo(InputName)
// date formatter
function formatDate(dateString) {
const months = [
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
];
const date = new Date(dateString);
const day = date.getDate();
const monthIndex = date.getMonth();
const year = date.getFullYear();
const formattedDate = `${day} ${months[monthIndex]} ${year}`;
return formattedDate;
}
// search
searchBtn.addEventListener('click', (e) => {
e.preventDefault()
let name = InputSection.value
name = name.replace(/\s+/g, ""); // remove spaces
if(name !== InputName) { // if not already loaded
fetchInfo(name)
}
})