/ assets / javascript / stats.js
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  });