Design and logic for user-facing site https://exmods.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
2.3KB

  1. let load_url = "https://exmods.org/load?board=test1&count=10&start=0";
  2. function build_board() {
  3. let leaderboard = document.getElementById("leaderboard")
  4. let leaderboard_container = document.getElementById("leaderboard-container")
  5. let tmpEntry = {ID: -42, Rank:"?", PlayerURL: "#", PlayerName: "Loading...", Score:">9000"}
  6. let errEntry = build_entry(tmpEntry)
  7. leaderboard.appendChild(errEntry)
  8. setTimeout(() => {document.getElementById("nameAnchor-42").innerText = "Something went wrong :(";}, 4000) // 5s
  9. fetch(load_url).then(
  10. (response) => {
  11. if (!response.ok || (response.status) != 200) {
  12. document.getElementById("nameAnchor-42").innerText = "Something went wrong :("
  13. return
  14. }
  15. errEntry.style.display = "none"
  16. response.json().then(
  17. (result) => {
  18. leaderboard.removeChild(errEntry)
  19. for (entry of result.Items) {
  20. let newEntry = build_entry(entry)
  21. // end
  22. leaderboard.appendChild(newEntry)
  23. }
  24. }
  25. )
  26. }
  27. )
  28. }
  29. function build_entry(entry) {
  30. let newEntry = document.createElement("div")
  31. newEntry.setAttribute("id", "entry"+entry.ID)
  32. newEntry.classList.add("board-entry")
  33. // rank
  34. let rankEntry = document.createElement("span")
  35. rankEntry.setAttribute("id", "rank"+entry.ID)
  36. rankEntry.innerText = entry.Rank
  37. rankEntry.classList.add("board-rank")
  38. newEntry.appendChild(rankEntry)
  39. // name
  40. let nameElem = document.createElement("span")
  41. nameElem.setAttribute("id", "name"+entry.ID)
  42. nameElem.classList.add("board-name")
  43. let nameAElem = document.createElement("a")
  44. nameAElem.setAttribute("id", "nameAnchor"+entry.ID)
  45. nameAElem.classList.add("board-name-a")
  46. nameAElem.href = entry.PlayerURL
  47. nameAElem.innerText = entry.PlayerName
  48. nameElem.appendChild(nameAElem)
  49. newEntry.appendChild(nameElem)
  50. // score
  51. let scoreElem = document.createElement("span")
  52. scoreElem.setAttribute("id", "score"+entry.ID)
  53. scoreElem.classList.add("board-score")
  54. scoreElem.innerText = entry.Score
  55. newEntry.appendChild(scoreElem)
  56. return newEntry
  57. }