const username = '2KAbhishek';
const maxPages = 2;
const hideForks = true;
const repoList = document.querySelector('.repo-list');
const reposSection = document.querySelector('.repos');
const filterInput = document.querySelector('.filter-repos');
// get information from github profile
const getProfile = async () => {
const res = await fetch(
`https://api.github.com/users/${username}`
// {
// headers: {
// Accept: 'application/vnd.github+json',
// Authorization: 'token your-personal-access-token-here'
// }
// }
);
const profile = await res.json();
displayProfile(profile);
};
getProfile();
// display infomation from github profile
const displayProfile = (profile) => {
const userInfo = document.querySelector('.user-info');
userInfo.innerHTML = `
${profile.bio}
Location: ${profile.location}
@${profile.login}
Repos: ${profile.public_repos}
Gists: ${profile.public_gists}
`;
};
// get list of user's public repos
const getRepos = async () => {
let repos = [];
let res;
for (let i = 1; i <= maxPages; i++) {
res = await fetch(
`https://api.github.com/users/${username}/repos?&sort=pushed&per_page=100&page=${i}`
// {
// headers: {
// Accept: 'application/vnd.github+json',
// Authorization:
// 'token your-personal-access-token-here'
// }
// }
);
let data = await res.json();
repos = repos.concat(data);
}
repos.sort((a, b) => b.forks_count - a.forks_count);
repos.sort((a, b) => b.stargazers_count - a.stargazers_count);
displayRepos(repos);
};
getRepos();
// display list of all user's public repos
const displayRepos = (repos) => {
const userHome = `https://github.com/${username}`
filterInput.classList.remove('hide');
for (const repo of repos) {
if (repo.fork && hideForks) {
continue;
}
const langUrl = `${userHome}?tab=repositories&q=&language=${repo.language}`
const starsUrl = `${userHome}/${repo.name}/stargazers`
const forksUrl = `${userHome}/${repo.name}/network/members`
let listItem = document.createElement('li');
listItem.classList.add('repo');
listItem.innerHTML = `
${repo.name}
${repo.description}
`
if (repo.stargazers_count > 0) {
listItem.innerHTML += `
⭐ ${repo.stargazers_count}`
}
if (repo.language) {
listItem.innerHTML += `
${devicons[repo.language]}`
}
if (repo.forks_count > 0) {
listItem.innerHTML += `
${devicons["Git"]} ${repo.forks_count}`
}
if (repo.homepage && repo.homepage !== "") {
listItem.innerHTML += `
Code ${devicons["Github"]}
Live ${devicons["Chrome"]}
`;
} else {
listItem.innerHTML += `
View Project ${devicons["Github"]}
`;
}
repoList.append(listItem);
}
};
// dynamic search
filterInput.addEventListener('input', (e) => {
const search = e.target.value;
const repos = document.querySelectorAll('.repo');
const searchLowerText = search.toLowerCase();
for (const repo of repos) {
const lowerText = repo.innerText.toLowerCase();
if (lowerText.includes(searchLowerText)) {
repo.classList.remove('hide');
} else {
repo.classList.add('hide');
}
}
});
// for programming language icons
const devicons = {
Git: '',
Github: '',
Chrome: '',
Assembly: ' Assembly',
'C#': ' C#',
'C++': ' C++',
C: ' C',
Clojure: ' C',
CoffeeScript:
' CoffeeScript',
Crystal: ' Crystal',
CSS: ' CSS',
Dart: ' Dart',
Dockerfile: ' Docker',
Elixir: ' Elixir',
Elm: ' Elm',
Erlang: ' Erlang',
'F#': ' F#',
Go: ' Go',
Groovy: ' Groovy',
HTML: ' HTML',
Haskell: ' Haskell',
Java: ' Java',
JavaScript: ' JavaScript',
Julia: ' Julia',
'Jupyter Notebook': ' Jupyter',
Kotlin: ' Kotlin',
Latex: ' Latex',
Lua: ' Lua',
Matlab: ' Matlab',
Nim: ' Nim',
Nix: ' Nix',
ObjectiveC: ' ObjectiveC',
OCaml: ' OCaml',
Perl: ' Perl',
PHP: ' PHP',
PLSQL: ' PLSQL',
Processing:
' Processing',
Python: ' Python',
R: ' R',
Ruby: ' Ruby',
Rust: ' Rust',
Sass: ' Sass',
Scala: ' Scala',
Shell: ' Shell',
Solidity: ' Solidity',
Stylus: ' Stylus',
Svelte: ' Svelte',
Swift: ' Swift',
Terraform: ' Terraform',
TypeScript: ' TypeScript',
'Vim Script': ' Vim Script',
Vue: ' Vue',
};