stats.js
1 document.addEventListener('DOMContentLoaded', function() { 2 async function getBoardStats() { 3 let response = await fetch('https://api.github.com/repos/adafruit/circuitpython/releases'); 4 let data = await response.json(); 5 return data; 6 } 7 8 function buildBoardStats(data) { 9 let boards = []; 10 11 clearLoadingIndicator(); 12 13 data.forEach(function(release) { 14 displayBoardHeader(release); 15 16 release.assets.forEach(function(asset) { 17 let board_name = asset.name.split('-')[2]; 18 let index = boards.findIndex(board => board.name === board_name); 19 20 if (index === -1) { 21 boards.push({name: board_name, downloads: asset.download_count}); 22 } else { 23 boards[index].downloads += asset.download_count; 24 } 25 }); 26 27 boards.sort(function(a, b) { 28 return b.downloads - a.downloads; 29 }); 30 31 displayBoardStats(boards); 32 }); 33 } 34 35 function clearLoadingIndicator() { 36 let contentElement = document.querySelector('.stats-wrapper'); 37 contentElement.innerHTML = ""; 38 } 39 40 function displayBoardHeader(release) { 41 let contentElement = document.querySelector('.stats-wrapper'); 42 let h2Element = document.createElement('h2'); 43 let nameContent = document.createTextNode(release.name); 44 h2Element.appendChild(nameContent); 45 contentElement.appendChild(h2Element); 46 } 47 48 function displayBoardStats(boards) { 49 let contentElement = document.querySelector('.stats-wrapper'); 50 let table = document.createElement('table'); 51 52 //header row 53 let thead = table.createTHead(); 54 let tr = thead.insertRow(); 55 tr.insertCell().appendChild(document.createTextNode("Board")); 56 tr.insertCell().appendChild(document.createTextNode("Downloads")); 57 58 let tbody = table.createTBody(); 59 60 boards.forEach(function(board) { 61 let tr = tbody.insertRow(); 62 let name = document.createTextNode(board.name); 63 let downloads = document.createTextNode(board.downloads); 64 tr.insertCell().appendChild(name); 65 tr.insertCell().appendChild(downloads); 66 }); 67 68 contentElement.appendChild(table); 69 } 70 71 getBoardStats().then(buildBoardStats); 72 });