home.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. img.style.opacity = '0';
  35. await delay(1000);
  36. img.setAttribute("src", "" + imgAlt.getAttribute("src"));
  37. img.setAttribute("srcset", "" + imgAlt.getAttribute("srcset"));
  38. img.style.opacity = '1';
  39. await delay(1000);
  40. imgAlt.removeAttribute("src");
  41. imgAlt.removeAttribute("srcset");
  42. }
  43. /**
  44. * Starts the interval for image swapping in the home page.
  45. */
  46. async function startInterval(){
  47. while (document.getElementById("apiURL") == undefined) await delay(500);
  48. apiURL = document.getElementById("apiURL").value;
  49. intervalId = setInterval(() => {
  50. const projects = document.getElementsByClassName('project');
  51. const id = projects[Math.floor(Math.random() * projects.length)].id.substring(8);
  52. // TODO: ADD lang
  53. fetch(apiURL + "/projects/" + id + "/images/random")
  54. .then(response => response.json())
  55. .then(data => swapImage(id, apiURL, data))
  56. .catch(error => console.error(
  57. 'Error rerieving image from ' + apiURL + "/projects/" + id + "/images/random : " , error
  58. ));
  59. }, 2000);
  60. }
  61. startInterval();