diff --git a/frontend/www/exercise.html b/frontend/www/exercise.html index 741bca077b7962809c16c5db83a223f062ffb49b..55720070812e16b922a8b41237307d98d7188e74 100644 --- a/frontend/www/exercise.html +++ b/frontend/www/exercise.html @@ -45,7 +45,15 @@ </div> </form> + <div class="row"> + <div class="col-lg"> + <h3 class="mt-3">Leaderboards</h3> + </div> </div> + <table id="leaderboardstable" class="table table-striped"> + <tr><th class="th-dark">#<th>Name<th>Value + </table> + </div> <script src="scripts/defaults.js"></script> <script src="scripts/scripts.js"></script> <script src="scripts/exercise.js"></script> diff --git a/frontend/www/scripts/exercise.js b/frontend/www/scripts/exercise.js index aa99f0ef40d2eeba7ffe8a7002d7dd808d984a60..0e9dba45cd4689d999916486f261d6347c8bca73 100644 --- a/frontend/www/scripts/exercise.js +++ b/frontend/www/scripts/exercise.js @@ -122,6 +122,49 @@ async function updateExercise(id) { } } +async function fetchLeaderBoards() { + //let response = await sendRequest("GET", `${HOST}/api/exercises/${id}/getLeaderBoards`); + //Placeholder response and status: + let response = [{"name": "Mark", "value": 301, "rank": 1}, + {"name": "Anton", "value": 245, "rank": 2}, + {"name": "John", "value": 112, "rank": 3}, + {"name": "Joe", "value": 84, "rank": 4}, + {"name": "Larry", "value": 80, "rank": 5}, + {"name": "Glaum", "value": 1, "rank": 85}]; + response.ok = true; + + if (response.ok) { + + let table = document.getElementById("leaderboardstable"); + let row, cell; + + //The users own score will always be placed last in the JSON response + let userIndex = response.length - 1; + + for (let i = 0; i < response.length-1; i++) { + row = table.insertRow(); + cell = row.insertCell(); + cell.textContent = response[i].rank; + cell = row.insertCell(); + cell.textContent = response[i].name; + cell = row.insertCell(); + cell.textContent = response[i].value; + } + //If the user is not in top 5, the users score will also be rendered + if(response[userIndex].rank > 5){ + row = table.insertRow(); + cell = row.insertCell(); + cell.textContent = response[userIndex].rank; + cell = row.insertCell(); + cell.textContent = response[userIndex].name; + cell = row.insertCell(); + cell.textContent = response[userIndex].value; + } + } + + return response; +} + window.addEventListener("DOMContentLoaded", async () => { cancelButton = document.querySelector("#btn-cancel-exercise"); okButton = document.querySelector("#btn-ok-exercise"); @@ -151,4 +194,6 @@ window.addEventListener("DOMContentLoaded", async () => { okButton.addEventListener("click", async () => await createExercise()); cancelButton.addEventListener("click", handleCancelButtonDuringCreate); } + + await fetchLeaderBoards(); }); \ No newline at end of file