workout-basic/main.js
Jesko Dujmovic 4da5ca8dbf
All checks were successful
continuous-integration/drone/push Build is passing
change
2021-10-22 19:04:56 +02:00

214 lines
9.0 KiB
JavaScript

// for debug purposes
const t = today();
var exercises = {};
const exercisesString = localStorage.getItem("exercises");
if (exercisesString != null) {
exercises = JSON.parse(exercisesString);
}
if (exercises[t] == null) {
exercises[t] = [];
}
function updateExercises() {
var exerciseList = document.querySelectorAll("#exercise-list > li");
exercises[t] = [];
for (const element of exerciseList) {
exercises[t].push({
exerciseType: element.childNodes[1].childNodes[1].value,
repetitionType: element.childNodes[1].childNodes[2].value,
reps: element.childNodes[2].childNodes[1].value,
weight: element.childNodes[3].childNodes[1].value
});
}
if (exercisesEdited(exercises[t])) {
var workoutSelectionArea = document.getElementById("workout-selection-area");
workoutSelectionArea.innerHTML = '';
}
localStorage.setItem("exercises", JSON.stringify(exercises));
}
function swap_right(i) {
if (0 <= i && i < exercises[t].length && 0 <= i + 1 && i + 1 < exercises[t].length) {
[exercises[t][i], exercises[t][i + 1]] = [exercises[t][i + 1], exercises[t][i]]
}
}
var exerciseList = document.getElementById("exercise-list");
function setExercises() {
exerciseList.innerHTML = ''
for (let i = 0; i < exercises[t].length; i++) {
var li = document.createElement("li");
var upDownDiv = document.createElement("div");
// Up Button
var upButton = document.createElement("button");
upButton.textContent = "▲"
upButton.id = "up";
upButton.onclick = () => {
swap_right(i - 1);
setExercises(exercises[t]);
localStorage.setItem("exercises", JSON.stringify(exercises));
};
upDownDiv.appendChild(upButton);
// Down Button
var downButton = document.createElement("button");
downButton.textContent = "▼"
downButton.id = "down";
downButton.onclick = () => {
swap_right(i);
setExercises(exercises[t]);
localStorage.setItem("exercises", JSON.stringify(exercises));
};
upDownDiv.appendChild(downButton);
li.appendChild(upDownDiv);
var exerciseSelectorDiv = document.createElement("div");
exerciseSelectorDiv.appendChild(document.createTextNode("Exercise "));
// Select Exercise Type
var exType = document.createElement("select");
exType.onchange = updateExercises;
exerciseTypes.forEach(exercise => {
exType.add(new Option(exercise.name, exercise.name));
});
exType.value = exercises[t][i].exerciseType
exerciseSelectorDiv.appendChild(exType);
// Select Repetition Type
var repType = document.createElement("select");
repetitionTypes.forEach(repetitionType => {
repType.add(new Option(repetitionType, repetitionType));
});
repType.onchange = updateExercises;
repType.value = exercises[t][i].repetitionType
exerciseSelectorDiv.appendChild(repType);
li.appendChild(exerciseSelectorDiv);
var repDiv = document.createElement("div");
repDiv.appendChild(document.createTextNode("Reps done: "));
var reps = document.createElement("input");
reps.setAttribute("type", "number");
reps.value = exercises[t][i].reps;
reps.onchange = updateExercises;
repDiv.appendChild(reps);
li.appendChild(repDiv);
var weightDiv = document.createElement("div");
weightDiv.appendChild(document.createTextNode("Weight done: "));
var weight = document.createElement("input");
weight.setAttribute("type", "number");
weight.value = exercises[t][i].weight;
weight.onchange = updateExercises;
weightDiv.appendChild(weight);
li.appendChild(weightDiv);
// Delete Button
var deleteButton = document.createElement("button");
deleteButton.textContent = "Delete"
deleteButton.id = "delete-button";
deleteButton.onclick = () => {
exercises[t].splice(i, 1);
setExercises(exercises[t]);
localStorage.setItem("exercises", JSON.stringify(exercises));
}
li.appendChild(deleteButton);
exerciseList.appendChild(li);
}
}
function exercisesEdited(exercises) {
for (const element of exercises) {
if (element.reps != "" && element.reps != null) {
return true;
}
if (element.weight != "" && element.weight != null) {
return true;
}
};
return false;
}
function today() {
d = new Date;
return d.toISOString().split('T')[0];
}
var addExerciseButton = document.getElementById("add-exercise");
addExerciseButton.onclick = () => {
exercises[t].push({ exerciseType: exerciseTypes[0].name, repetitionType: repetitionTypes[0], reps: "", weight: "" });
setExercises(exercises);
}
function loadPredefinedWorkouts(workoutType) {
if (!exercisesEdited(exercises[t])) {
switch (workoutType) {
case ("load-leg-strength"):
exercises[t] = [
{ exerciseType: "Squat", repetitionType: "2-4", reps: "", weight: "" },
{ exerciseType: "Leg Press", repetitionType: "2-4", reps: "", weight: "" },
{ exerciseType: "Deadlift", repetitionType: "2-4", reps: "", weight: "" }
];
break;
case ("load-back-hyp"):
exercises[t] = [
{ exerciseType: "One Arm Dumbbell Row", repetitionType: "3-5", reps: "", weight: "" },
{ exerciseType: "Lat Pulldown Wide", repetitionType: "2-4", reps: "", weight: "" },
{ exerciseType: "Lat Pulldown Narrow", repetitionType: "2-4", reps: "", weight: "" },
{ exerciseType: "Cable Row w/ Wide Neutral Grip", repetitionType: "2-4", reps: "", weight: "" },
{ exerciseType: "Rear Deltoid Machine", repetitionType: "2-4", reps: "", weight: "" },
{ exerciseType: "Biceps Curl", repetitionType: "Pyramid", reps: "", weight: "" }
];
break;
case ("load-body-strength"):
exercises[t] = [
{ exerciseType: "Bench Press", repetitionType: "2-4", reps: "", weight: "" },
{ exerciseType: "Cable Row w/ Over Grip", repetitionType: "2-4", reps: "", weight: "" },
{ exerciseType: "Dips", repetitionType: "3-5", reps: "", weight: "" },
{ exerciseType: "Under Grip Pull Up", repetitionType: "3-5", reps: "", weight: "" },
{ exerciseType: "Hammer Curl", repetitionType: "3-5", reps: "", weight: "" },
{ exerciseType: "Supported Biceps Curl", repetitionType: "3-5", reps: "", weight: "" }
];
break;
case ("load-leg-hyp"):
exercises[t] = [
{ exerciseType: "Leg Press", repetitionType: "5-8", reps: "", weight: "" },
{ exerciseType: "Squat", repetitionType: "8-12", reps: "", weight: "" },
{ exerciseType: "Leg Extension", repetitionType: "12-15", reps: "", weight: "" },
{ exerciseType: "Leg Curl", repetitionType: "15-20", reps: "", weight: "" },
{ exerciseType: "Standing Calf Raises", repetitionType: "8-12", reps: "", weight: "" }
];
break;
case ("load-chest-hyp"):
exercises[t] = [
{ exerciseType: "Bench Press", repetitionType: "3-5", reps: "", weight: "" },
{ exerciseType: "Incline Bench Press", repetitionType: "5-8", reps: "", weight: "" },
{ exerciseType: "Machine Shoulder Press", repetitionType: "8-12", reps: "", weight: "" },
{ exerciseType: "Butterfly", repetitionType: "12-15", reps: "", weight: "" },
{ exerciseType: "Side Lateral Raise", repetitionType: "5-8", reps: "", weight: "" },
{ exerciseType: "Cable Triceps", repetitionType: "3-5", reps: "", weight: "" }
];
break;
default:
exercises[t] = [];
break;
}
setExercises(exercises[t]);
}
}
var predefinedWorkoutButtons = document.querySelectorAll("button.loadPredefinedWorkout");
for (let button of predefinedWorkoutButtons) {
button.onclick = () => { loadPredefinedWorkouts(button.id); }
}
setExercises(exercises[t]);
var body = document.querySelector("body");
var pre = document.createElement("pre");
const jsn = JSON.parse(localStorage.getItem("exercises"));
if (jsn != null) {
var s = "";
for (let [date, value] of Object.entries(jsn).sort().reverse()) {
s += date + "\n";
for (let exercise of value) {
s += " " + exercise.exerciseType + ": " + exercise.weight + "kg x " + exercise.reps + " of " + exercise.repetitionType + "\n";
}
}
pre.textContent = s;
body.appendChild(pre);
}