index.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import registerPage from "./js/pages/register.js";
  2. import loginPage from "./js/pages/login.js";
  3. import homePage from "./js/pages/home.js";
  4. import workoutMenuPage from "./js/pages/workoutMenu.js";
  5. import newWorkoutPage from "./js/pages/newWorkout.js";
  6. import sessionPage from "./js/pages/session.js";
  7. import editWorkoutPage from "./js/pages/editWorkout.js";
  8. const notifier = document.getElementById("notifier");
  9. const pageElements = document.querySelectorAll(".page");
  10. window.notify = (type, message)=>{
  11. notifier.className = "";
  12. notifier.classList.add(type);
  13. notifier.textContent = message;
  14. notifier.style.display = "flex";
  15. setTimeout(()=>{
  16. notifier.style.display = "none";
  17. }, 7500);
  18. }
  19. window.changePage = (page, data)=>{
  20. for(let i = 0; i < pageElements.length; i++){
  21. pageElements[i].style.display = "none";
  22. }
  23. document.getElementById(`${page}Page`).style.display = "flex";
  24. switch(page){
  25. case "login": loginPage.render(); break;
  26. case "register": registerPage.render(); break;
  27. case "home": homePage.render(data); break;
  28. case "newWorkout": newWorkoutPage.render();
  29. case "session": sessionPage.render(data); break;
  30. case "workoutMenu": workoutMenuPage.render(data); break;
  31. case "editWorkout": editWorkoutPage.render(data); break;
  32. }
  33. }
  34. fetch("/user", {
  35. method: "GET",
  36. header: {
  37. "Content-Type": "application/json"
  38. }
  39. })
  40. .then(r=>r.json())
  41. .then((response)=>{
  42. if(response.error){
  43. changePage("login");
  44. }else{
  45. changePage("home");
  46. }
  47. })
  48. .catch((err)=>{
  49. changePage("login");
  50. });
  51. if("serviceWorker" in navigator){
  52. window.addEventListener("load", ()=>{
  53. navigator.serviceWorker.register("/serviceWorker.js")
  54. .then(reg => null)
  55. .catch(err => null);
  56. });
  57. }
  58. let deferredPrompt;
  59. const installBtn = document.getElementById("installPwa");
  60. let isPwaInstalled = ()=>{
  61. return window.matchMedia("(display-mode: standalone)").matches || window.navigator.standalone === true;
  62. }
  63. if(isPwaInstalled()){
  64. installBtn.style.display = "none";
  65. }
  66. window.addEventListener("beforeinstallprompt", (e)=>{
  67. e.preventDefault();
  68. deferredPrompt = e;
  69. });
  70. installBtn.addEventListener("click", async ()=>{
  71. if(deferredPrompt){
  72. deferredPrompt.prompt();
  73. const {outcome} = await deferredPrompt.userChoice;
  74. deferredPrompt = null;
  75. if(outcome === "accepted") installBtn.style.display = "none";
  76. }
  77. });