Added a bunch of new exercises.

Commit
e03df2fbc03919b5dfee288a539d2f96d006a787
Author
Marius Peter <marius.peter@tutanota.com>
Author date
Committer
Marius Peter <marius.peter@tutanota.com>
Committer date
Changed files
src/MyFitnessTracker/MFTExercise.class.st
index 8dfed07c..63e8b33a 100644..100644
@@ -43,42 +43,69 @@
43 43 }
44 44
45 45 { #category : #exercise }
46 Added: MFTExercise class >> benchPress [
47 Added:
48 Added: ^ self newWithEnglishName
49 Added: primaryMuscle: MFTMuscle pectoralisMajor;
50 Added: secondaryMuscles: {
51 Added: MFTMuscle tricepsBrachii.
52 Added: MFTMuscleGroup shoulder };
53 Added: yourself
54 Added: ]
55 Added:
56 Added: { #category : #exercise }
57 Added: MFTExercise class >> bicepCurl [
58 Added:
59 Added: ^ self newWithEnglishName
60 Added: primaryMuscle: MFTMuscle bicepsBrachii;
61 Added: secondaryMuscles: { MFTMuscleGroup forearm };
62 Added: yourself
63 Added: ]
64 Added:
65 Added: { #category : #exercise }
46 66 MFTExercise class >> cableRow [
47 67
48 Removed: ^ self new
49 Removed: name: 'cable row';
68 Added: ^ self newWithEnglishName
50 69 primaryMuscle: MFTMuscleGroup back;
51 70 secondaryMuscles: MFTMuscle bicepsBrachii;
52 71 yourself
53 72 ]
54 73
55 Removed: { #category : #'as yet unclassified' }
74 Added: { #category : #exercise }
75 Added: MFTExercise class >> cleanAndJerk [
76 Added:
77 Added: ^ self newWithEnglishName
78 Added: primaryMuscle: MFTMuscle quadricepsFemoris;
79 Added: secondaryMuscles: {
80 Added: MFTMuscleGroup shoulder.
81 Added: MFTMuscle trapezius };
82 Added: yourself
83 Added: ]
84 Added:
85 Added: { #category : #exercise }
56 86 MFTExercise class >> deadlift [
57 87
58 Removed: ^ self new
59 Removed: name: 'deadlift';
60 Removed: primaryMuscle: MFTMuscleGroup leg;
88 Added: ^ self newWithEnglishName
89 Added: primaryMuscle: MFTMuscle hamstring;
61 90 secondaryMuscles: {
62 Removed: MFTMuscleGroup abdominal.
63 Removed: MFTMuscleGroup back };
91 Added: MFTMuscleGroup back.
92 Added: MFTMuscleGroup hip };
64 93 yourself
65 94 ]
66 95
67 96 { #category : #exercise }
68 97 MFTExercise class >> declineBenchPress [
69 98
70 Removed: ^ self new
71 Removed: name: 'decline bench press';
99 Added: ^ self newWithEnglishName
72 100 primaryMuscle: MFTMuscleGroup chest;
73 101 secondaryMuscles: MFTMuscle tricepsBrachii;
74 102 yourself
75 103 ]
76 104
77 Removed: { #category : #'as yet unclassified' }
105 Added: { #category : #exercise }
78 106 MFTExercise class >> gobletSquat [
79 107
80 Removed: ^ self new
81 Removed: name: 'goblet squat';
108 Added: ^ self newWithEnglishName
82 109 primaryMuscle: MFTMuscleGroup leg;
83 110 secondaryMuscles: {
84 111 MFTMuscleGroup abdominal.
@@ -86,24 +113,46 @@
86 113 yourself
87 114 ]
88 115
89 Removed: { #category : #'as yet unclassified' }
116 Added: { #category : #exercise }
117 Added: MFTExercise class >> latPulldown [
118 Added:
119 Added: ^ self newWithEnglishName
120 Added: primaryMuscle: MFTMuscle latissimusDorsi;
121 Added: secondaryMuscles: {
122 Added: MFTMuscle bicepsBrachii.
123 Added: MFTMuscleGroup shoulder };
124 Added: yourself
125 Added: ]
126 Added:
127 Added: { #category : #exercise }
90 128 MFTExercise class >> legCurl [
91 129
92 Removed: ^ self new
93 Removed: name: 'leg curl';
130 Added: ^ self newWithEnglishName
94 131 primaryMuscle: MFTMuscleGroup leg;
95 132 yourself
96 133 ]
97 134
98 Removed: { #category : #'as yet unclassified' }
135 Added: { #category : #exercise }
99 136 MFTExercise class >> legExtension [
100 137
101 Removed: ^ self new
102 Removed: name: 'leg extension';
138 Added: ^ self newWithEnglishName
103 139 primaryMuscle: MFTMuscleGroup leg;
104 140 yourself
105 141 ]
106 142
143 Added: { #category : #'instance creation' }
144 Added: MFTExercise class >> newWithEnglishName [
145 Added: "I return a MFTMuscle instance for which latinName is set to the calling method selector, as a space-separated string."
146 Added:
147 Added: | exerciseNameFromSender |
148 Added: exerciseNameFromSender := (thisContext sender selector splitCamelCase
149 Added: collect: [ :word | word asLowercase ])
150 Added: joinUsing: ' '.
151 Added: ^ self new
152 Added: englishName: exerciseNameFromSender;
153 Added: yourself
154 Added: ]
155 Added:
107 156 { #category : #exercise }
108 157 MFTExercise class >> shoulderPressDumbell [
109 158
@@ -114,15 +163,34 @@
114 163 yourself
115 164 ]
116 165
117 Removed: { #category : #'as yet unclassified' }
166 Added: { #category : #exercise }
167 Added: MFTExercise class >> snatch [
168 Added:
169 Added: ^ self newWithEnglishName
170 Added: primaryMuscle: MFTMuscle quadricepsFemoris;
171 Added: secondaryMuscles: {
172 Added: MFTMuscleGroup shoulder.
173 Added: MFTMuscle trapezius };
174 Added: yourself
175 Added: ]
176 Added:
177 Added: { #category : #exercise }
118 178 MFTExercise class >> squat [
119 179
120 Removed: ^ self new
121 Removed: name: 'squat';
180 Added: ^ self newWithEnglishName
122 181 primaryMuscle: MFTMuscleGroup leg;
123 182 secondaryMuscles: {
124 183 MFTMuscleGroup abdominal.
125 184 MFTMuscleGroup back };
185 Added: yourself
186 Added: ]
187 Added:
188 Added: { #category : #exercise }
189 Added: MFTExercise class >> tricepExtension [
190 Added:
191 Added: ^ self newWithEnglishName
192 Added: primaryMuscle: MFTMuscle tricepsBrachii;
193 Added: secondaryMuscles: { };
126 194 yourself
127 195 ]
128 196
src/MyFitnessTracker/MFTExerciseDialog.class.st
index cdb20f73..414827af 100644..100644
@@ -3,6 +3,8 @@
3 3 #superclass : #SBSComponent,
4 4 #instVars : [
5 5 'selectedExercise',
6 Added: 'currentFilter',
7 Added: 'allExercises',
6 8 'addOrEdit',
7 9 'exercise',
8 10 'sets'
@@ -47,11 +49,23 @@
47 49 exercise := aMFTExercise
48 50 ]
49 51
52 Added: { #category : #rendering }
53 Added: MFTExerciseDialog >> filteredExercises [
54 Added:
55 Added: ^ currentFilter isEmpty
56 Added: ifTrue: [ allExercises ]
57 Added: ifFalse: [
58 Added: allExercises select: [ :each |
59 Added: each englishName asLowercase includesSubstring:
60 Added: currentFilter asLowercase ] ]
61 Added: ]
62 Added:
50 63 { #category : #initialization }
51 64 MFTExerciseDialog >> initialize [
52 65
53 66 super initialize.
54 67 exercise := MFTExercise new.
68 Added: allExercises := MFTUtils allExercises.
55 69 sets := OrderedCollection new.
56 70 addOrEdit := #add
57 71 ]
@@ -87,14 +101,30 @@
87 101
88 102 html formGroup: [
89 103 html label: 'Exercise'.
90 Removed: html select formControl
91 Removed: list: MFTUtils allExercises;
92 Removed: selected: selectedExercise;
93 Removed: labels: [ :each | each name ];
94 Removed: callback: [ :value | selectedExercise := value ] ]
104 Added: html formGroup: [ "html label: 'Filter exercises'.
105 Added: html textInput
106 Added: class: 'form-control';
107 Added: placeholder: 'Type to search...';
108 Added: callback: [ :value | currentFilter := value ];
109 Added: onKeyUp:
110 Added: (html jQuery this load html: [ :h |
111 Added: self renderFilteredExercisesOn: h ]) "
112 Added: html select formControl
113 Added: list: MFTUtils allExercises;
114 Added: selected: selectedExercise;
115 Added: labels: [ :each | each englishName ];
116 Added: callback: [ :value | selectedExercise := value ] ] ]
95 117 ]
96 118
97 119 { #category : #rendering }
120 Added: MFTExerciseDialog >> renderFilteredExercisesOn: html [
121 Added:
122 Added: html unorderedList: [
123 Added: self filteredExercises do: [ :eachExercise |
124 Added: html listItem: eachExercise englishName ] ]
125 Added: ]
126 Added:
127 Added: { #category : #rendering }
98 128 MFTExerciseDialog >> renderSetsRowsOn: html [
99 129 "TODO: something fishy is going on here. Why are reps and rpe instantiated as nil, but become the empty string after adding additional empty sets?"
100 130
@@ -130,7 +160,7 @@
130 160 html table
131 161 class: 'table table-hover';
132 162 with: [
133 Removed: exercise sets ifNotEmpty: [ self renderTableHeaderOn: html ].
163 Added: sets ifNotEmpty: [ self renderTableHeaderOn: html ].
134 164 self renderSetsRowsOn: html.
135 165 self renderAddSetRowOn: html ] ]
136 166 ]
@@ -174,9 +204,9 @@
174 204 ]
175 205
176 206 { #category : #accessing }
177 Removed: MFTExerciseDialog >> selectedExercise: anObject [
207 Added: MFTExerciseDialog >> selectedExercise: aMFTExercise [
178 208
179 Removed: selectedExercise := anObject
209 Added: selectedExercise := aMFTExercise
180 210 ]
181 211
182 212 { #category : #accessing }
src/MyFitnessTracker/MFTSet.class.st
index 403373d2..ebb5ed22 100644..100644
@@ -41,7 +41,7 @@
41 41 { #category : #accessing }
42 42 MFTSet >> reps [
43 43
44 Removed: ^ reps
44 Added: ^ reps asInteger
45 45 ]
46 46
47 47 { #category : #accessing }
@@ -53,7 +53,7 @@
53 53 { #category : #accessing }
54 54 MFTSet >> rpe [
55 55
56 Removed: ^ rpe
56 Added: ^ rpe asInteger
57 57 ]
58 58
59 59 { #category : #accessing }
src/MyFitnessTracker/MFTUtils.class.st
index 7195ce7f..7e395fae 100644..100644
@@ -11,7 +11,8 @@
11 11 exercises := self
12 12 allInstancesOfClass: MFTExercise
13 13 matchingProtocol: 'exercise'.
14 Removed: exercises := exercises sorted: [ :a :b | a name < b name ].
14 Added: exercises := exercises sorted: [ :a :b |
15 Added: a englishName < b englishName ].
15 16 ^ exercises
16 17 ]
17 18
@@ -33,8 +34,8 @@
33 34 | groups |
34 35 groups := self
35 36 allInstancesOfClass: MFTMuscleGroup
36 Removed: matchingProtocol: 'body part creation'.
37 Removed: groups := groups sorted: [ :a :b | a name < b name ].
37 Added: matchingProtocol: 'muscle group'.
38 Added: groups := groups sorted: [ :a :b | a englishName < b englishName ].
38 39 ^ groups
39 40 ]
40 41
src/MyFitnessTracker/MFTWorkout.class.st
index 5aa50eb9..0d7cd117 100644..100644
@@ -11,18 +11,18 @@
11 11 }
12 12
13 13 { #category : #accessing }
14 Removed: MFTWorkout class >> primaryMuscle: aMuscle [
14 Added: MFTWorkout class >> primaryMuscle: aMFTMuscle [
15 15
16 16 ^ self new
17 Removed: primaryMuscle: aMuscle;
17 Added: primaryMuscle: aMFTMuscle;
18 18 yourself
19 19 ]
20 20
21 21 { #category : #accessing }
22 Removed: MFTWorkout class >> primaryMuscle: aMuscle1 secondaryMuscles: aMuscle2 [
22 Added: MFTWorkout class >> primaryMuscle: aMFTMuscle1 secondaryMuscles: aMFTMuscle2 [
23 23 ^ self new
24 Removed: primaryMuscle: aMuscle1;
25 Removed: secondaryMuscles: aMuscle2;
24 Added: primaryMuscle: aMFTMuscle1;
25 Added: secondaryMuscles: aMFTMuscle2;
26 26 yourself
27 27 ]
28 28
src/MyFitnessTracker/MFTWorkoutDialog.class.st
index 012ab6e5..fef996c0 100644..100644
@@ -134,7 +134,7 @@
134 134 html tableRow: [
135 135 html tableData: [
136 136 self renderExerciseActionsButtonGroupOn: html at: i ].
137 Removed: html tableData: exercise name.
137 Added: html tableData: exercise englishName.
138 138 html tableData: exercise primaryMuscle englishName.
139 139 html tableData: exercise repsBySet asCommaString ] ]
140 140 ]