var userFormEl = document.querySelector('#user-form'); var languageButtonsEl = document.querySelector('#language-buttons'); var nameInputEl = document.querySelector('#username'); var repoContainerEl = document.querySelector('#repos-container'); var repoSearchTerm = document.querySelector('#repo-search-term'); var formSubmitHandler = function (event) { event.preventDefault(); var username = nameInputEl.value.trim(); if (username) { getUserRepos(username); repoContainerEl.textContent = ''; nameInputEl.value = ''; } else { alert('Please enter a GitHub username'); } }; var buttonClickHandler = function (event) { var language = event.target.getAttribute('data-language'); if (language) { getFeaturedRepos(language); repoContainerEl.textContent = ''; } }; var getUserRepos = function (user) { var apiUrl = 'https://api.github.com/users/' + user + '/repos'; fetch(apiUrl) .then(function (response) { if (response.ok) { response.json().then(function (data) { displayRepos(data, user); }); } else { alert('Error: ' + response.statusText); } }) .catch(function (error) { alert('Unable to connect to GitHub'); }); }; var getFeaturedRepos = function (language) { var apiUrl = 'https://api.github.com/search/repositories?q=' + language + '+is:featured&sort=help-wanted-issues'; fetch(apiUrl).then(function (response) { if (response.ok) { response.json().then(function (data) { displayRepos(data.items, language); }); } else { alert('Error: ' + response.statusText); } }); }; var displayRepos = function (repos, searchTerm) { if (repos.length === 0) { repoContainerEl.textContent = 'No repositories found.'; return; } repoSearchTerm.textContent = searchTerm; for (var i = 0; i < repos.length; i++) { var repoName = repos[i].owner.login + '/' + repos[i].name; var repoEl = document.createElement('div'); repoEl.classList = 'list-item flex-row justify-space-between align-center'; var titleEl = document.createElement('span'); titleEl.textContent = repoName; repoEl.appendChild(titleEl); var statusEl = document.createElement('span'); statusEl.classList = 'flex-row align-center'; if (repos[i].open_issues_count > 0) { statusEl.innerHTML = "<i class='fas fa-times status-icon icon-danger'></i>" + repos[i].open_issues_count + ' issue(s)'; } else { statusEl.innerHTML = "<i class='fas fa-check-square status-icon icon-success'></i>"; } repoEl.appendChild(statusEl); repoContainerEl.appendChild(repoEl); } }; userFormEl.addEventListener('submit', formSubmitHandler); languageButtonsEl.addEventListener('click', buttonClickHandler);
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter