workoutMenu.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. export default {
  2. render: function(workout){
  3. document.getElementById("workoutMenuTitle").textContent = workout.name;
  4. this.buttons(workout);
  5. },
  6. buttons: function(workout){
  7. const container = document.getElementById("workoutMenuButtons");
  8. while(container.children.length > 0){
  9. container.removeChild(container.firstChild);
  10. }
  11. const start = document.createElement("button");
  12. start.classList.add("button");
  13. start.textContent = "Start Workout";
  14. start.addEventListener("click", ()=>{
  15. const existingWorkout = localStorage.getItem(workout.id);
  16. if(existingWorkout === null){
  17. changePage("session", workout);
  18. }else{
  19. const container = document.getElementById("resumeWorkoutContainer");
  20. container.style.display = "flex";
  21. this.addResumeButtons(container, workout);
  22. }
  23. });
  24. container.appendChild(start);
  25. const edit = document.createElement("button");
  26. edit.classList.add("button");
  27. edit.textContent = "Edit Workout";
  28. edit.addEventListener("click", ()=>{changePage("editWorkout", workout)});
  29. container.appendChild(edit);
  30. const back = document.createElement("button");
  31. back.classList.add("button");
  32. back.textContent = "Back";
  33. back.addEventListener("click", ()=>{changePage("home")});
  34. container.appendChild(back);
  35. },
  36. addResumeButtons: function(container, workout){
  37. const buttons = container.querySelectorAll("button");
  38. for(let i = 0; i < buttons.length; i++){
  39. buttons[i].parentElement.removeChild(buttons[i]);
  40. }
  41. const finish = document.createElement("button");
  42. finish.classList.add("button");
  43. finish.textContent = "Save Previous and Start New";
  44. finish.addEventListener("click", ()=>{this.finish(workout)});
  45. container.appendChild(finish);
  46. const discard = document.createElement("button");
  47. discard.classList.add("button");
  48. discard.textContent = "Discard Previous and Start New";
  49. discard.addEventListener("click", ()=>{this.discard(workout)});
  50. container.appendChild(discard);
  51. const resume = document.createElement("button");
  52. resume.classList.add("button");
  53. resume.textContent = "Resume Previous Workout";
  54. resume.addEventListener("click", ()=>{this.resume(workout)});
  55. container.appendChild(resume);
  56. const cancel = document.createElement("button");
  57. cancel.classList.add("button");
  58. cancel.textContent = "Cancel";
  59. cancel.addEventListener("click", this.cancel);
  60. container.appendChild(cancel);
  61. },
  62. finish: function(workout){
  63. const session = JSON.parse(localStorage.getItem(workout.id));
  64. session.end = new Date();
  65. fetch("/session", {
  66. method: "POST",
  67. headers: {
  68. "Content-Type": "application/json"
  69. },
  70. body: JSON.stringify(session)
  71. })
  72. .then(r=>r.json())
  73. .then((response)=>{
  74. if(response.error){
  75. notify("error", response.error.message);
  76. }else{
  77. notify("success", "Workout saved");
  78. }
  79. localStorage.removeItem(workout.id);
  80. document.getElementById("resumeWorkoutContainer").style.display = "none";
  81. changePage("session", workout);
  82. })
  83. .catch((err)=>{
  84. notify("error", "ERROR: unable to start workout");
  85. });
  86. },
  87. discard: function(workout){
  88. localStorage.removeItem(workout.id);
  89. document.getElementById("resumeWorkoutContainer").style.display = "none";
  90. changePage("session", workout);
  91. },
  92. resume: function(workout){
  93. document.getElementById("resumeWorkoutContainer").style.display = "none";
  94. changePage("session", workout);
  95. },
  96. cancel: function(){
  97. document.getElementById("resumeWorkoutContainer").style.display = "none";
  98. }
  99. }