home.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. var intervalId;
  2. var apiURL;
  3. /**
  4. * Generates a srcset atribute from a src attribute.
  5. *
  6. * @param src The original src.
  7. * @return The generated srcset attribute.
  8. */
  9. function generateSrcset(src){
  10. var srcset = "";
  11. for (let i = 100; i <= 1000; i += 100) srcset += src + "?w=" + i + " " + i + "w, ";
  12. srcset.substring(0, srcset.length - 1);
  13. return srcset;
  14. }
  15. /**
  16. * Delays execution when called asynchronously.
  17. *
  18. * @param ms Milliseconds to wait.
  19. */
  20. function delay(ms){ return new Promise(resolve => setTimeout(resolve, ms)); }
  21. /**
  22. * Swaps an imaga in the homepage
  23. *
  24. * @param id Id of the project which image must be swapped.
  25. * @param apiURL The api URL (host only).
  26. * @param image Retrieved image data.
  27. */
  28. async function swapImage(id, apiURL, image){
  29. var img = document.getElementById("img-project-" + id);
  30. var imgAlt = document.getElementById("img-project-" + id + "-alt");
  31. imgAlt.setAttribute("src", apiURL + image.path);
  32. imgAlt.setAttribute("srcset", generateSrcset(apiURL + image.path));
  33. await delay(1000);
  34. while (imgAlt.complete == false) await this.delay(100);
  35. img.style.opacity = '0';
  36. await delay(1000);
  37. img.setAttribute("src", "" + imgAlt.getAttribute("src"));
  38. img.setAttribute("srcset", "" + imgAlt.getAttribute("srcset"));
  39. while (img.complete == false) await this.delay(100);
  40. img.style.opacity = '1';
  41. await delay(1000);
  42. imgAlt.removeAttribute("src");
  43. imgAlt.removeAttribute("srcset");
  44. }
  45. /**
  46. * Starts the interval for image swapping in the home page.
  47. */
  48. async function startInterval(){
  49. while (document.getElementById("apiURL") == undefined) await delay(500);
  50. apiURL = document.getElementById("apiURL").value;
  51. intervalId = setInterval(() => {
  52. const projects = document.getElementsByClassName('project');
  53. const id = projects[Math.floor(Math.random() * (projects.length - 1))].id.substring(8);
  54. // TODO: ADD lang
  55. fetch(apiURL + "/projects/" + id + "/images/random")
  56. .then(response => response.json())
  57. .then(data => swapImage(id, apiURL, data))
  58. .catch(error => console.error(
  59. 'Error rerieving image from ' + apiURL + "/projects/" + id + "/images/random : " , error
  60. ));
  61. }, 2000);
  62. }
  63. startInterval();