workoutMenu.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  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 remove = document.createElement("button");
  31. remove.classList.add("button");
  32. remove.textContent = "Delete Workout";
  33. remove.addEventListener("click", ()=>{this.showDeleteModal(workout)});
  34. container.appendChild(remove);
  35. const back = document.createElement("button");
  36. back.classList.add("button");
  37. back.textContent = "Back";
  38. back.addEventListener("click", ()=>{changePage("home")});
  39. container.appendChild(back);
  40. },
  41. addResumeButtons: function(container, workout){
  42. const buttons = container.querySelectorAll("button");
  43. for(let i = 0; i < buttons.length; i++){
  44. buttons[i].parentElement.removeChild(buttons[i]);
  45. }
  46. const finish = document.createElement("button");
  47. finish.classList.add("button");
  48. finish.textContent = "Save Previous and Start New";
  49. finish.addEventListener("click", ()=>{this.finish(workout)});
  50. container.appendChild(finish);
  51. const discard = document.createElement("button");
  52. discard.classList.add("button");
  53. discard.textContent = "Discard Previous and Start New";
  54. discard.addEventListener("click", ()=>{this.discard(workout)});
  55. container.appendChild(discard);
  56. const resume = document.createElement("button");
  57. resume.classList.add("button");
  58. resume.textContent = "Resume Previous Workout";
  59. resume.addEventListener("click", ()=>{this.resume(workout)});
  60. container.appendChild(resume);
  61. const cancel = document.createElement("button");
  62. cancel.classList.add("button");
  63. cancel.textContent = "Cancel";
  64. cancel.addEventListener("click", this.cancel);
  65. container.appendChild(cancel);
  66. },
  67. finish: function(workout){
  68. const session = JSON.parse(localStorage.getItem(workout.id));
  69. session.end = new Date();
  70. fetch("/session", {
  71. method: "POST",
  72. headers: {
  73. "Content-Type": "application/json"
  74. },
  75. body: JSON.stringify(session)
  76. })
  77. .then(r=>r.json())
  78. .then((response)=>{
  79. if(response.error){
  80. notify("error", response.error.message);
  81. }else{
  82. notify("success", "Workout saved");
  83. }
  84. localStorage.removeItem(workout.id);
  85. document.getElementById("resumeWorkoutContainer").style.display = "none";
  86. changePage("session", workout);
  87. })
  88. .catch((err)=>{
  89. notify("error", "ERROR: unable to start workout");
  90. });
  91. },
  92. discard: function(workout){
  93. localStorage.removeItem(workout.id);
  94. document.getElementById("resumeWorkoutContainer").style.display = "none";
  95. changePage("session", workout);
  96. },
  97. resume: function(workout){
  98. document.getElementById("resumeWorkoutContainer").style.display = "none";
  99. changePage("session", workout);
  100. },
  101. cancel: function(){
  102. document.getElementById("resumeWorkoutContainer").style.display = "none";
  103. },
  104. showDeleteModal: function(workout){
  105. const modal = document.getElementById("deleteWorkoutModal");
  106. const buttons = modal.querySelectorAll("button");
  107. for(let i = 0; i < buttons.length; i++){
  108. buttons[i].parentElement.removeChild(buttons[i]);
  109. }
  110. const cancel = document.createElement("button");
  111. cancel.classList.add("button");
  112. cancel.textContent = "Cancel";
  113. cancel.addEventListener("click", ()=>{modal.style.display = "none"});
  114. modal.appendChild(cancel);
  115. const confirm = document.createElement("button");
  116. confirm.classList.add("dangerButton");
  117. confirm.textContent = "Delete Workout";
  118. confirm.addEventListener("click", ()=>{this.delete(workout)});
  119. modal.appendChild(confirm);
  120. modal.style.display = "flex";
  121. }
  122. }