|
21 | 21 | parent.appendChild(elem); |
22 | 22 | Object.entries(options).forEach(([key, value]) => { |
23 | 23 | if (key === 'Repository' || key === 'Description' || key === 'Forks' || key === 'Updated') { |
24 | | - elem.innerHTML += `<strong>${key}:</strong> ${value} <br>`; |
25 | | - } else { |
| 24 | + elem.innerHTML += `<strong>${key}:</strong> ${value} <br> `; |
| 25 | + } |
| 26 | + else if (key === 'foto') { |
| 27 | + elem.innerHTML += `<img src="${value}"></img>` |
| 28 | + } |
| 29 | + else if (key === 'name') { |
| 30 | + elem.innerHTML += `<span>${value}</span>` |
| 31 | + } |
| 32 | + else if (key === 'count') { |
| 33 | + elem.innerHTML += `<span>${value}</span>` |
| 34 | + } |
| 35 | + else { |
26 | 36 | elem.setAttribute(key, value); |
27 | 37 | } |
28 | 38 | }); |
29 | 39 | return elem; |
30 | 40 | } |
31 | | - function renderRepoDetails(repo, ul) { |
32 | | - createAndAppend('li', ul, { Repository: repo.name, Description: repo.description, Forks: repo.forks, Updated: repo.updated_at }); |
33 | | - } |
34 | 41 |
|
35 | 42 | function main(url) { |
| 43 | + const header = document.createElement('header'); |
36 | 44 | const heading = document.createElement('h1'); |
37 | 45 | heading.innerText = 'HYF Repositories'; |
38 | | - document.body.prepend(heading); |
| 46 | + header.prepend(heading); |
| 47 | + const selectBox = document.createElement('select'); |
| 48 | + var firstOption = document.createElement("option"); |
| 49 | + firstOption.setAttribute("value", 0); |
| 50 | + var firstOptionContent = document.createTextNode('Choose a Repository...'); |
| 51 | + firstOption.appendChild(firstOptionContent); |
| 52 | + selectBox.appendChild(firstOption); |
| 53 | + header.appendChild(selectBox); |
| 54 | + document.body.prepend(header); |
39 | 55 | fetchJSON(url, (err, repos) => { |
40 | 56 | const root = document.getElementById('root'); |
41 | 57 | if (err) { |
|
45 | 61 | }); |
46 | 62 | return; |
47 | 63 | } |
48 | | - const ul = createAndAppend('ul', root); |
| 64 | + const repoDetails = createAndAppend('ul', root); |
| 65 | + const repoContributions = createAndAppend('ul', root); |
49 | 66 | repos.sort((a, b) => a.name.localeCompare(b.name, 'en', { sensitivity: 'base' })); |
50 | | - // repos.slice(0, 10); |
51 | | - repos.forEach(repo => renderRepoDetails(repo, ul)); |
| 67 | + repos.forEach(repo => { |
| 68 | + const repoOptions = document.createElement("option"); |
| 69 | + repoOptions.setAttribute("value", repo.id); |
| 70 | + const repoOptionsContent = document.createTextNode(repo.name); |
| 71 | + repoOptions.appendChild(repoOptionsContent); |
| 72 | + selectBox.appendChild(repoOptions); |
| 73 | + }); |
| 74 | + if (selectBox.value === '0') { |
| 75 | + repoDetails.textContent = ''; |
| 76 | + } |
| 77 | + selectBox.addEventListener('change', () => { |
| 78 | + repoDetails.textContent = ''; |
| 79 | + repoContributions.textContent = ''; |
| 80 | + const selectedRepo = selectBox.options[selectBox.selectedIndex].value; |
| 81 | + const filteredRepo = repos.filter(a => a.id == selectedRepo); |
| 82 | + createAndAppend('li', repoDetails, { Repository: filteredRepo[0].name, Description: filteredRepo[0].description, Forks: filteredRepo[0].forks, Updated: filteredRepo[0].updated_at }) |
| 83 | + fetchJSON(filteredRepo[0].contributors_url, (err, reposContributors) => { |
| 84 | + if (err) { |
| 85 | + createAndAppend('div', root, { |
| 86 | + text: err.message, |
| 87 | + class: 'alert-error', |
| 88 | + }); |
| 89 | + return; |
| 90 | + } |
| 91 | + reposContributors.forEach(contributors => { |
| 92 | + createAndAppend('li', repoContributions, { foto: contributors.avatar_url, name: contributors.login, count: contributors.contributions }) |
| 93 | + }); |
| 94 | + }); |
| 95 | + }); |
52 | 96 | }); |
53 | 97 | } |
54 | 98 |
|
55 | 99 | const HYF_REPOS_URL = |
56 | 100 | 'https://api.github.com/orgs/HackYourFuture/repos?per_page=100'; |
| 101 | + |
57 | 102 | window.onload = () => main(HYF_REPOS_URL); |
58 | 103 | } |
0 commit comments