my ui js class:
constructor(){ this.profile=document.getElementById("profile"); } showRepoInfo(repos){ this.profile.innerHTML= ""; repos.forEach(repo => { this.profile.innerHTML += ` <div id="languages" class="lang"> <span class="badge" id="repoStar">${repo.language}</span> <span class="badgee" id="repoSize">${repo.size} KB</span> </div> `; }); }
how can I print the languages the user is using in their repo and the percentiles of the languages? (i printed the username, name, surname, and repo names I got from the user)
my github js class :
class Github{ constructor(){ this.url = "https://api.github.com/users/"; } async getGithubData(username){ const responseUser = await fetch(this.url+username); const responseRepo = await fetch(this.url+username + "/repos"); const userData = await responseUser.json(); const repoData = await responseRepo.json(); return{ user:userData, repo:repoData } }
Advertisement
Answer
I added a new function in your github class and now you can get the language percentage using ${repo.languagesPercentage}
in html.
Note -> 1. This will be an array so you need to add a forEach or convert it into string using toString().
2. It will increase the number of APIs call in case of large repos and it can be optimised by giving a button in html named fetch language %.
class Github { constructor() { this.url = "https://api.github.com/users/"; this.repoUrl = "https://api.github.com/repos/"; } async getGithubData(username) { const responseUser = await fetch(this.url + username); const responseRepo = await fetch(this.url + username + "/repos"); const userData = await responseUser.json(); const repoData = await responseRepo.json(); // set language percentage of each repo for (let i in repoData) { // get language percentage of repo repoData[i].languagesPercentage = await this.getRepoLanguagePercentage( username, repoData[i].name ); } return { user: userData, repo: repoData, }; } async getRepoLanguagePercentage(username, reponame) { const ls = await fetch( this.repoUrl + username + "/" + reponame + "/languages" ); const languageStats = await ls.json(); const totalPtsArr = Object.values(languageStats); var sumTotalPts = 0; totalPtsArr.forEach((pts) => { sumTotalPts += pts; }); const languagesPercentage = {}; Object.keys(languageStats).forEach((lang) => { languagesPercentage[lang] = (languageStats[lang] * 100) / sumTotalPts; }); return languagesPercentage; } }