Added lots of muscles + other fixes.

Commit
cbb109b30c391448f8b129e59ed6a8eb68fa3998
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 68109ad6..a3779476 100644..100644
@@ -36,8 +36,8 @@
36 36 #instVars : [
37 37 'name',
38 38 'sets',
39 Removed: 'primaryGroup',
40 Removed: 'secondaryGroup'
39 Added: 'primaryMuscle',
40 Added: 'secondaryMuscles'
41 41 ],
42 42 #category : #MyFitnessTracker
43 43 }
@@ -48,7 +48,7 @@
48 48 ^ self new
49 49 name: 'cable row';
50 50 primaryMuscle: MFTMuscleGroup back;
51 Removed: secondaryMuscles: MFTMuscle biceps;
51 Added: secondaryMuscles: MFTMuscle bicepsBrachii;
52 52 yourself
53 53 ]
54 54
@@ -70,7 +70,7 @@
70 70 ^ self new
71 71 name: 'decline bench press';
72 72 primaryMuscle: MFTMuscleGroup chest;
73 Removed: secondaryMuscles: MFTMuscle triceps;
73 Added: secondaryMuscles: MFTMuscle tricepsBrachii;
74 74 yourself
75 75 ]
76 76
@@ -91,7 +91,7 @@
91 91
92 92 ^ self new
93 93 name: 'leg curl';
94 Removed: primaryMuscle: MFTMuscle hamstring;
94 Added: primaryMuscle: MFTMuscleGroup leg;
95 95 yourself
96 96 ]
97 97
@@ -132,8 +132,8 @@
132 132 super initialize.
133 133 name := String new.
134 134 sets := OrderedCollection new.
135 Removed: primaryGroup := MFTMuscleGroup new.
136 Removed: secondaryGroup := OrderedCollection new
135 Added: primaryMuscle := MFTMuscleGroup new.
136 Added: secondaryMuscles := OrderedCollection new
137 137 ]
138 138
139 139 { #category : #accessing }
@@ -151,15 +151,21 @@
151 151 { #category : #accessing }
152 152 MFTExercise >> primaryMuscle [
153 153
154 Removed: ^ primaryGroup
154 Added: ^ primaryMuscle
155 155 ]
156 156
157 157 { #category : #accessing }
158 158 MFTExercise >> primaryMuscle: anObject [
159 159
160 Removed: primaryGroup := anObject
160 Added: primaryMuscle := anObject
161 161 ]
162 162
163 Added: { #category : #rendering }
164 Added: MFTExercise >> renderContentOn: html [
165 Added:
166 Added: html text: name
167 Added: ]
168 Added:
163 169 { #category : #'as yet unclassified' }
164 170 MFTExercise >> repsBySet [
165 171
@@ -169,13 +175,13 @@
169 175 { #category : #accessing }
170 176 MFTExercise >> secondaryMuscles [
171 177
172 Removed: ^ secondaryGroup
178 Added: ^ secondaryMuscles
173 179 ]
174 180
175 181 { #category : #accessing }
176 182 MFTExercise >> secondaryMuscles: anObject [
177 183
178 Removed: secondaryGroup := anObject
184 Added: secondaryMuscles := anObject
179 185 ]
180 186
181 187 { #category : #accessing }
src/MyFitnessTracker/MFTExerciseDialog.class.st
index 0016d3c6..cdb20f73 100644..100644
@@ -2,9 +2,10 @@
2 2 #name : #MFTExerciseDialog,
3 3 #superclass : #SBSComponent,
4 4 #instVars : [
5 Added: 'selectedExercise',
6 Added: 'addOrEdit',
5 7 'exercise',
6 Removed: 'sets',
7 Removed: 'addOrEdit'
8 Added: 'sets'
8 9 ],
9 10 #classInstVars : [
10 11 'exercise'
@@ -16,7 +17,8 @@
16 17 MFTExerciseDialog class >> edit: aMFTExercise [
17 18
18 19 ^ self new
19 Removed: exercise: aMFTExercise;
20 Added: selectedExercise: aMFTExercise;
21 Added: sets: aMFTExercise sets;
20 22 addOrEdit: #edit;
21 23 yourself
22 24 ]
@@ -87,9 +89,9 @@
87 89 html label: 'Exercise'.
88 90 html select formControl
89 91 list: MFTUtils allExercises;
90 Removed: selected: exercise;
92 Added: selected: selectedExercise;
91 93 labels: [ :each | each name ];
92 Removed: callback: [ :value | exercise := value ] ]
94 Added: callback: [ :value | selectedExercise := value ] ]
93 95 ]
94 96
95 97 { #category : #rendering }
@@ -112,12 +114,10 @@
112 114 with: 'Duplicate' ] ].
113 115 html tableData: [
114 116 html numberInput
115 Removed: placeholder: 10;
116 117 value: set reps;
117 118 callback: [ :value | value ifNotNil: [ set reps: value ] ] ].
118 119 html tableData: [
119 120 html numberInput
120 Removed: placeholder: 80;
121 121 value: set rpe;
122 122 callback: [ :value | value ifNotNil: [ set rpe: value ] ] ] ] ]
123 123 ]
@@ -130,7 +130,7 @@
130 130 html table
131 131 class: 'table table-hover';
132 132 with: [
133 Removed: sets ifNotEmpty: [ self renderTableHeaderOn: html ].
133 Added: exercise sets ifNotEmpty: [ self renderTableHeaderOn: html ].
134 134 self renderSetsRowsOn: html.
135 135 self renderAddSetRowOn: html ] ]
136 136 ]
@@ -138,8 +138,7 @@
138 138 { #category : #rendering }
139 139 MFTExerciseDialog >> renderSubmitExerciseOn: html [
140 140
141 Removed: html formGroup: [
142 Removed: "html text: (sets collect: #reps).
141 Added: html formGroup: [ "html text: (sets collect: #reps).
143 142 html break.
144 143 html text: (sets collect: #rpe)."
145 144 html buttonGroup: [
@@ -147,9 +146,10 @@
147 146 bePrimary;
148 147 beSubmit;
149 148 callback: [
150 Removed: sets removeAllSuchThat: [ :each |
151 Removed: each reps isNil or: [ each reps = '' ] ].
152 Removed: self answer: (exercise sets: sets) ];
149 Added: sets removeAllSuchThat: [ :set |
150 Added: set reps isNil or: [ set reps = '' ] ].
151 Added: exercise := selectedExercise sets: sets.
152 Added: self answer: exercise ];
153 153 with: 'Submit'.
154 154 html formButton
155 155 beSecondary;
@@ -165,4 +165,28 @@
165 165 tableHeading;
166 166 tableHeading: 'Reps';
167 167 tableHeading: 'RPE' ]
168 Added: ]
169 Added:
170 Added: { #category : #accessing }
171 Added: MFTExerciseDialog >> selectedExercise [
172 Added:
173 Added: ^ selectedExercise
174 Added: ]
175 Added:
176 Added: { #category : #accessing }
177 Added: MFTExerciseDialog >> selectedExercise: anObject [
178 Added:
179 Added: selectedExercise := anObject
180 Added: ]
181 Added:
182 Added: { #category : #accessing }
183 Added: MFTExerciseDialog >> sets [
184 Added:
185 Added: ^ sets
186 Added: ]
187 Added:
188 Added: { #category : #accessing }
189 Added: MFTExerciseDialog >> sets: anObject [
190 Added:
191 Added: sets := anObject
168 192 ]
src/MyFitnessTracker/MFTMuscle.class.st
index bf1c4ed1..e1fb718a 100644..100644
@@ -2,107 +2,294 @@
2 2 #name : #MFTMuscle,
3 3 #superclass : #Object,
4 4 #instVars : [
5 Removed: 'nameEnglish',
6 Removed: 'nameLatin',
5 Added: 'latinName',
6 Added: 'englishName',
7 7 'description'
8 8 ],
9 9 #category : #MyFitnessTracker
10 10 }
11 11
12 Removed: { #category : #'as yet unclassified' }
13 Removed: MFTMuscle class >> biceps [
12 Added: { #category : #muscle }
13 Added: MFTMuscle class >> bicepsBrachii [
14 14
15 Removed: ^ self new
16 Removed: nameEnglish: 'biceps';
17 Removed: nameLatin: 'biceps brachii';
15 Added: ^ self newWithLatinName
16 Added: englishName: 'biceps';
18 17 yourself
19 18 ]
20 19
21 Removed: { #category : #'as yet unclassified' }
20 Added: { #category : #muscle }
21 Added: MFTMuscle class >> brachioRadialis [
22 Added:
23 Added: ^ self newWithLatinName
24 Added: englishName: 'Brachioradialis';
25 Added: description:
26 Added: 'Located in the forearm, it is responsible for flexing the forearm at the elbow joint.';
27 Added: yourself
28 Added: ]
29 Added:
30 Added: { #category : #muscle }
22 31 MFTMuscle class >> deltoidAnterior [
23 32
24 33 ^ self new
25 Removed: nameEnglish: 'deltoid (anterior)';
26 Removed: nameLatin: 'deltoideus';
34 Added: englishName: 'deltoid (anterior)';
35 Added: latinName: 'deltoideus';
27 36 yourself
28 37 ]
29 38
30 Removed: { #category : #'as yet unclassified' }
39 Added: { #category : #muscle }
31 40 MFTMuscle class >> deltoidMedial [
32 41
33 42 ^ self new
34 Removed: nameEnglish: 'deltoid (medial)';
35 Removed: nameLatin: 'deltoideus';
43 Added: englishName: 'deltoid (medial)';
44 Added: latinName: 'deltoideus';
36 45 yourself
37 46 ]
38 47
39 Removed: { #category : #'as yet unclassified' }
48 Added: { #category : #muscle }
40 49 MFTMuscle class >> deltoidPosterior [
41 50
42 51 ^ self new
43 Removed: nameEnglish: 'deltoid (posterior)';
44 Removed: nameLatin: 'deltoideus';
52 Added: englishName: 'deltoid (posterior)';
53 Added: latinName: 'deltoideus';
45 54 yourself
46 55 ]
47 56
48 Removed: { #category : #'as yet unclassified' }
49 Removed: MFTMuscle class >> externalOblique [
57 Added: { #category : #muscle }
58 Added: MFTMuscle class >> erectorSpinae [
50 59
51 Removed: ^ self new
52 Removed: nameEnglish: 'external oblique';
53 Removed: description: 'Located on the front and side of the abdomen.';
60 Added: ^ self newWithLatinName
61 Added: englishName: 'Erector Spinae';
62 Added: description:
63 Added: 'This group of muscles runs along the spine and is responsible for extending the vertebral column and maintaining an upright posture.';
54 64 yourself
55 65 ]
56 66
57 Removed: { #category : #'as yet unclassified' }
67 Added: { #category : #muscle }
68 Added: MFTMuscle class >> extensorCarpiRadialiasBrevis [
69 Added:
70 Added: ^ self newWithLatinName
71 Added: englishName: 'Extensor Carpi Radialis Brevis';
72 Added: description:
73 Added: 'Located in the forearm, it is responsible for extending the wrist and abducting the hand.';
74 Added: yourself
75 Added: ]
76 Added:
77 Added: { #category : #muscle }
78 Added: MFTMuscle class >> extensorCarpiRadialisLongus [
79 Added:
80 Added: ^ self newWithLatinName
81 Added: englishName: 'Extensor Carpi Radialis Longus';
82 Added: description:
83 Added: 'Located in the forearm, it is responsible for extending the wrist and abducting the hand.';
84 Added: yourself
85 Added: ]
86 Added:
87 Added: { #category : #muscle }
88 Added: MFTMuscle class >> extensorCarpiUlnaris [
89 Added:
90 Added: ^ self newWithLatinName
91 Added: englishName: 'Extensor Carpi Ulnaris';
92 Added: description:
93 Added: 'Located in the forearm, it is responsible for extending the wrist and adducting the hand.';
94 Added: yourself
95 Added: ]
96 Added:
97 Added: { #category : #muscle }
98 Added: MFTMuscle class >> flexorCarpiRadialias [
99 Added:
100 Added: ^ self newWithLatinName
101 Added: englishName: 'Flexor Carpi Radialis';
102 Added: description:
103 Added: 'Located in the forearm, it is responsible for flexing the wrist and abducting the hand.';
104 Added: yourself
105 Added: ]
106 Added:
107 Added: { #category : #muscle }
108 Added: MFTMuscle class >> flexorCarpiUlnaris [
109 Added:
110 Added: ^ self newWithLatinName
111 Added: englishName: 'Flexor Carpi Ulnaris';
112 Added: description:
113 Added: 'Located in the forearm, it is responsible for flexing the wrist and adducting the hand.';
114 Added: yourself
115 Added: ]
116 Added:
117 Added: { #category : #muscle }
118 Added: MFTMuscle class >> gastrocnemius [
119 Added:
120 Added: ^ self newWithLatinName
121 Added: englishName: 'calf';
122 Added: description:
123 Added: 'Located in the calf, it is responsible for plantar flexion of the foot (pointing toes).';
124 Added: yourself
125 Added: ]
126 Added:
127 Added: { #category : #muscle }
128 Added: MFTMuscle class >> gluteusMaximus [
129 Added:
130 Added: ^ self newWithLatinName
131 Added: description:
132 Added: 'The largest muscle in the buttocks, responsible for hip extension, outward rotation, and abduction.';
133 Added: yourself
134 Added: ]
135 Added:
136 Added: { #category : #muscle }
137 Added: MFTMuscle class >> gluteusMedius [
138 Added:
139 Added: ^ self newWithLatinName
140 Added: description:
141 Added: 'Located in the buttocks, it plays a role in hip abduction and medial rotation.';
142 Added: yourself
143 Added: ]
144 Added:
145 Added: { #category : #muscle }
146 Added: MFTMuscle class >> gluteusMinimus [
147 Added:
148 Added: ^ self newWithLatinName
149 Added: description:
150 Added: 'Also located in the buttocks, it assists in hip abduction and medial rotation, working with the gluteus medius.';
151 Added: yourself
152 Added: ]
153 Added:
154 Added: { #category : #muscle }
58 155 MFTMuscle class >> hamstring [
59 156
60 Removed: ^ self new
61 Removed: nameEnglish: 'hamstring';
62 Removed: description: '';
157 Added: ^ self newWithLatinName
158 Added: englishName: 'Hamstrings';
159 Added: description:
160 Added: 'This group of muscles includes the biceps femoris, semitendinosus, and semimembranosus. They are located in the back of the thigh and are responsible for knee flexion and hip extension.';
63 161 yourself
64 162 ]
65 163
66 Removed: { #category : #'as yet unclassified' }
67 Removed: MFTMuscle class >> internalOblique [
164 Added: { #category : #muscle }
165 Added: MFTMuscle class >> latissimusDorsi [
68 166
167 Added: ^ self newWithLatinName
168 Added: englishName: 'Lats';
169 Added: description:
170 Added: 'Also known as the "lats," these muscles are located in the upper back and are responsible for shoulder adduction and extension.';
171 Added: yourself
172 Added: ]
173 Added:
174 Added: { #category : #'instance creation' }
175 Added: MFTMuscle class >> newWithLatinName [
176 Added: "I return a MFTMuscle instance for which latinName is set to the calling method selector, as a space-separated string."
177 Added:
178 Added: | muscleNameFromSender |
179 Added: muscleNameFromSender := (thisContext sender selector splitCamelCase
180 Added: collect: [ :word | word asLowercase ])
181 Added: joinUsing: ' '.
69 182 ^ self new
70 Removed: nameEnglish: 'internal oblique';
183 Added: latinName: muscleNameFromSender;
184 Added: yourself
185 Added: ]
186 Added:
187 Added: { #category : #muscle }
188 Added: MFTMuscle class >> obliquusExternusAbdominis [
189 Added:
190 Added: ^ self newWithLatinName
191 Added: englishName: 'external oblique';
71 192 description: 'Located on the front and side of the abdomen.';
72 193 yourself
73 194 ]
74 195
75 Removed: { #category : #'as yet unclassified' }
196 Added: { #category : #muscle }
197 Added: MFTMuscle class >> obliquusInternusAbdominis [
198 Added:
199 Added: ^ self newWithLatinName
200 Added: englishName: 'internal oblique';
201 Added: description: 'Located on the front and side of the abdomen.';
202 Added: yourself
203 Added: ]
204 Added:
205 Added: { #category : #muscle }
206 Added: MFTMuscle class >> pectoralisMajor [
207 Added:
208 Added: ^ self newWithLatinName
209 Added: englishName: 'Pec';
210 Added: description:
211 Added: 'Commonly known as the "pecs," these muscles are in the chest and are responsible for shoulder flexion and adduction.';
212 Added: yourself
213 Added: ]
214 Added:
215 Added: { #category : #muscle }
216 Added: MFTMuscle class >> pectoralisMinor [
217 Added:
218 Added: ^ self newWithLatinName
219 Added: englishName: 'Pec';
220 Added: description:
221 Added: 'Located beneath the pectoralis major, it plays a role in stabilizing the shoulder blade and assisting in deep breathing.';
222 Added: yourself
223 Added: ]
224 Added:
225 Added: { #category : #muscle }
226 Added: MFTMuscle class >> quadricepsFemoris [
227 Added:
228 Added: ^ self newWithLatinName
229 Added: englishName: 'quad';
230 Added: description:
231 Added: 'A group of four muscles on the front of the thigh, responsible for knee extension.';
232 Added: yourself
233 Added: ]
234 Added:
235 Added: { #category : #muscle }
76 236 MFTMuscle class >> rectusAbdominis [
77 237
78 Removed: ^ self new
79 Removed: nameEnglish: 'six-pack';
80 Removed: nameLatin: (thisContext sender selector asString);
238 Added: ^ self newWithLatinName
239 Added: englishName: 'six-pack';
81 240 description:
82 241 'Located along the front of the abdomen. Colloquially known as the "six-pack"';
83 242 yourself
84 243 ]
85 244
86 Removed: { #category : #'as yet unclassified' }
245 Added: { #category : #muscle }
246 Added: MFTMuscle class >> rotatorCuff [
247 Added:
248 Added: ^ self newWithLatinName
249 Added: englishName: 'Rotator Cuff Muscles';
250 Added: description:
251 Added: 'This group includes four muscles: supraspinatus, infraspinatus, teres minor, and subscapularis. They play a crucial role in stabilizing the shoulder joint and facilitating arm rotation.';
252 Added: yourself
253 Added: ]
254 Added:
255 Added: { #category : #muscle }
256 Added: MFTMuscle class >> soleus [
257 Added:
258 Added: ^ self newWithLatinName
259 Added: englishName: 'calf';
260 Added: description:
261 Added: 'Also located in the calf, it assists the gastrocnemius in plantar flexion and helps maintain posture.';
262 Added: yourself
263 Added: ]
264 Added:
265 Added: { #category : #muscle }
87 266 MFTMuscle class >> transversusAbdominis [
88 267
89 268 ^ self new
90 Removed: nameEnglish: 'abs';
91 Removed: nameLatin: 'transversus abdominis';
269 Added: englishName: 'abs';
92 270 description:
93 271 'Deepest abdominal muscle. Wraps around the spine for protection and stability.';
94 272 yourself
95 273 ]
96 274
97 Removed: { #category : #'as yet unclassified' }
98 Removed: MFTMuscle class >> triceps [
275 Added: { #category : #muscle }
276 Added: MFTMuscle class >> trapezius [
99 277
100 Removed: ^ self new
101 Removed: nameEnglish: 'triceps';
102 Removed: nameLatin: 'triceps brachii';
278 Added: ^ self newWithLatinName
279 Added: englishName: 'trap';
280 Added: description:
281 Added: 'The trapezius muscles are located in the upper back and neck. They play a role in moving and stabilizing the shoulder blades.';
103 282 yourself
104 283 ]
105 284
285 Added: { #category : #muscle }
286 Added: MFTMuscle class >> tricepsBrachii [
287 Added:
288 Added: ^ self newWithLatinName
289 Added: englishName: 'triceps';
290 Added: yourself
291 Added: ]
292 Added:
106 293 { #category : #accessing }
107 294 MFTMuscle >> description [
108 295
@@ -115,43 +302,44 @@
115 302 description := aString
116 303 ]
117 304
118 Removed: { #category : #initialization }
119 Removed: MFTMuscle >> initialize [
305 Added: { #category : #accessing }
306 Added: MFTMuscle >> englishName [
120 307
121 Removed: super initialize.
122 Removed: nameEnglish := String new.
123 Removed: nameLatin := String new.
124 Removed: description := String new
308 Added: ^ englishName
125 309 ]
126 310
127 311 { #category : #accessing }
128 Removed: MFTMuscle >> linkTerminologiaAnatomica [
312 Added: MFTMuscle >> englishName: aString [
129 313
130 Removed: ^ 'http://terminologia-anatomica.org/en/Search?query=' , nameLatin
314 Added: englishName := aString
131 315 ]
132 316
133 Removed: { #category : #accessing }
134 Removed: MFTMuscle >> nameEnglish [
317 Added: { #category : #initialization }
318 Added: MFTMuscle >> initialize [
135 319
136 Removed: ^ nameEnglish
320 Added: super initialize.
321 Added: englishName := String new.
322 Added: latinName := String new.
323 Added: description := String new
137 324 ]
138 325
139 326 { #category : #accessing }
140 Removed: MFTMuscle >> nameEnglish: aString [
327 Added: MFTMuscle >> latinName [
141 328
142 Removed: nameEnglish := aString
329 Added: ^ latinName
143 330 ]
144 331
145 332 { #category : #accessing }
146 Removed: MFTMuscle >> nameLatin [
333 Added: MFTMuscle >> latinName: aString [
147 334
148 Removed: ^ nameLatin
335 Added: latinName := aString
149 336 ]
150 337
151 338 { #category : #accessing }
152 Removed: MFTMuscle >> nameLatin: aString [
339 Added: MFTMuscle >> linkTerminologiaAnatomica [
153 340
154 Removed: nameLatin := aString
341 Added: ^ 'http://terminologia-anatomica.org/en/Search?query=' , 'musculus '
342 Added: , latinName
155 343 ]
156 344
157 345 { #category : #rendering }
src/MyFitnessTracker/MFTMuscleGroup.class.st
index 17f88893..2eec8979 100644..100644
@@ -4,86 +4,121 @@
4 4 #instVars : [
5 5 'description',
6 6 'muscles',
7 Removed: 'name'
7 Added: 'englishName',
8 Added: 'latinName'
8 9 ],
9 10 #category : #MyFitnessTracker
10 11 }
11 12
12 Removed: { #category : #'body part creation' }
13 Added: { #category : #'muscle group' }
13 14 MFTMuscleGroup class >> abdominal [
14 15
15 16 ^ self new
16 Removed: name: 'abdominal';
17 Added: englishName: 'abdominal';
17 18 description: 'The abdominal muscles constitute the core.';
18 19 muscles: {
19 20 MFTMuscle rectusAbdominis.
20 Removed: MFTMuscle externalOblique.
21 Removed: MFTMuscle internalOblique.
21 Added: MFTMuscle obliquusExternusAbdominis.
22 Added: MFTMuscle obliquusInternusAbdominis.
22 23 MFTMuscle transversusAbdominis };
23 24 yourself
24 25 ]
25 26
26 Removed: { #category : #'body part creation' }
27 Added: { #category : #'muscle group' }
27 28 MFTMuscleGroup class >> arm [
28 29
29 30 ^ self new
30 Removed: name: 'arm';
31 Added: englishName: 'arm';
32 Added: latinName: 'brachium';
33 Added: muscles: {
34 Added: MFTMuscle bicepsBrachii.
35 Added: MFTMuscle tricepsBrachii };
31 36 yourself
32 37 ]
33 38
34 Removed: { #category : #'body part creation' }
39 Added: { #category : #'muscle group' }
35 40 MFTMuscleGroup class >> back [
36 41
37 42 ^ self new
38 Removed: name: 'back';
43 Added: englishName: 'back';
44 Added: muscles: {
45 Added: MFTMuscle latissimusDorsi.
46 Added: MFTMuscle trapezius.
47 Added: MFTMuscle erectorSpinae };
39 48 yourself
40 49 ]
41 50
42 Removed: { #category : #'body part creation' }
51 Added: { #category : #'muscle group' }
43 52 MFTMuscleGroup class >> calf [
44 53
45 54 ^ self new
46 Removed: name: 'calf';
55 Added: englishName: 'calf';
56 Added: muscles: {
57 Added: MFTMuscle gastrocnemius.
58 Added: MFTMuscle soleus };
47 59 yourself
48 60 ]
49 61
50 Removed: { #category : #'body part creation' }
62 Added: { #category : #'muscle group' }
51 63 MFTMuscleGroup class >> chest [
52 64
53 65 ^ self new
54 Removed: name: 'chest';
66 Added: englishName: 'chest';
67 Added: muscles: {
68 Added: MFTMuscle pectoralisMajor.
69 Added: MFTMuscle pectoralisMinor };
55 70 yourself
56 71 ]
57 72
58 Removed: { #category : #'body part creation' }
73 Added: { #category : #'muscle group' }
59 74 MFTMuscleGroup class >> forearm [
60 75
61 76 ^ self new
62 Removed: name: 'forearm';
77 Added: englishName: 'forearm';
78 Added: latinName: 'antebrachium';
79 Added: muscles: {
80 Added: MFTMuscle brachioRadialis.
81 Added: MFTMuscle flexorCarpiRadialias.
82 Added: MFTMuscle flexorCarpiUlnaris.
83 Added: MFTMuscle extensorCarpiRadialisLongus.
84 Added: MFTMuscle extensorCarpiRadialiasBrevis.
85 Added: MFTMuscle extensorCarpiUlnaris };
63 86 yourself
64 87 ]
65 88
66 Removed: { #category : #'body part creation' }
89 Added: { #category : #'muscle group' }
67 90 MFTMuscleGroup class >> hip [
68 91
69 92 ^ self new
70 Removed: name: 'hip';
93 Added: englishName: 'hip';
94 Added: muscles: {
95 Added: MFTMuscle gluteusMaximus.
96 Added: MFTMuscle gluteusMedius.
97 Added: MFTMuscle gluteusMinimus };
71 98 yourself
72 99 ]
73 100
74 Removed: { #category : #'body part creation' }
101 Added: { #category : #'muscle group' }
75 102 MFTMuscleGroup class >> leg [
76 103
77 104 ^ self new
78 Removed: name: 'leg';
105 Added: englishName: 'leg';
106 Added: muscles: {
107 Added: MFTMuscle quadricepsFemoris.
108 Added: MFTMuscle hamstring };
79 109 yourself
80 110 ]
81 111
82 Removed: { #category : #'body part creation' }
112 Added: { #category : #'muscle group' }
83 113 MFTMuscleGroup class >> shoulder [
84 114
85 115 ^ self new
86 Removed: name: 'shoulder';
116 Added: englishName: 'shoulder';
117 Added: muscles: {
118 Added: MFTMuscle deltoidAnterior.
119 Added: MFTMuscle deltoidMedial.
120 Added: MFTMuscle deltoidPosterior.
121 Added: MFTMuscle rotatorCuff };
87 122 yourself
88 123 ]
89 124
@@ -99,50 +134,56 @@
99 134 description := aString
100 135 ]
101 136
137 Added: { #category : #accessing }
138 Added: MFTMuscleGroup >> englishName [
139 Added:
140 Added: ^ englishName
141 Added: ]
142 Added:
143 Added: { #category : #accessing }
144 Added: MFTMuscleGroup >> englishName: aString [
145 Added:
146 Added: englishName := aString
147 Added: ]
148 Added:
102 149 { #category : #initialization }
103 150 MFTMuscleGroup >> initialize [
104 151
105 152 super initialize.
106 Removed: name := String new.
153 Added: englishName := String new.
107 154 description := String new.
108 155 muscles := OrderedCollection new
109 156 ]
110 157
111 158 { #category : #accessing }
112 Removed: MFTMuscleGroup >> muscles [
159 Added: MFTMuscleGroup >> latinName [
113 160
114 Removed: ^ muscles
161 Added: ^ latinName
115 162 ]
116 163
117 164 { #category : #accessing }
118 Removed: MFTMuscleGroup >> muscles: anObject [
165 Added: MFTMuscleGroup >> latinName: anObject [
119 166
120 Removed: muscles := anObject
167 Added: latinName := anObject
121 168 ]
122 169
123 170 { #category : #accessing }
124 Removed: MFTMuscleGroup >> name [
171 Added: MFTMuscleGroup >> muscles [
125 172
126 Removed: ^ name
173 Added: ^ muscles
127 174 ]
128 175
129 176 { #category : #accessing }
130 Removed: MFTMuscleGroup >> name: aString [
177 Added: MFTMuscleGroup >> muscles: anObject [
131 178
132 Removed: name := aString
179 Added: muscles := anObject
133 180 ]
134 181
135 Removed: { #category : #accessing }
136 Removed: MFTMuscleGroup >> nameEnglish [
137 Removed:
138 Removed: ^ name
139 Removed: ]
140 Removed:
141 182 { #category : #rendering }
142 183 MFTMuscleGroup >> renderContentOn: html [
143 184
144 185 html container: [
145 Removed: html heading level2 with: name capitalized.
186 Added: html heading level2 with: englishName capitalized.
146 187 description ifNotEmpty: [
147 188 html
148 189 text: description;
@@ -153,13 +194,13 @@
153 194 definitionList: [
154 195 muscles do: [ :muscle |
155 196 html definitionTerm: [
156 Removed: html text: muscle nameEnglish capitalized.
157 Removed: muscle nameLatin ifNotEmpty: [
197 Added: html text: muscle englishName capitalized.
198 Added: muscle latinName ifNotEmpty: [
158 199 html space.
159 200 html text: '('.
160 201 html anchor
161 202 url: muscle linkTerminologiaAnatomica;
162 Removed: with: muscle nameLatin.
203 Added: with: muscle latinName.
163 204 html text: ')' ] ].
164 205 html definitionData: muscle description.
165 206 muscle renderContentOn: html ] ] ] ]
src/MyFitnessTracker/MFTMusclesArticle.class.st
index 1308b344..4634837f 100644..100644
@@ -14,10 +14,10 @@
14 14 super initialize.
15 15 title := 'Muscles'.
16 16 methods := MFTMuscleGroup class methodDictionary values select: [
17 Removed: :method | method category = 'body part creation' ].
17 Added: :method | method category = 'muscle group' ].
18 18 instances := methods collect: [ :method |
19 19 MFTMuscleGroup perform: method selector ].
20 Removed: muscleGroups := instances sorted: [ :a :b | a name < b name ]
20 Added: muscleGroups := instances sorted: [ :a :b | a englishName < b englishName ]
21 21 ]
22 22
23 23 { #category : #rendering }
src/MyFitnessTracker/MFTWorkout.class.st
index 73f3eb9a..e038cc28 100644..100644
@@ -104,9 +104,9 @@
104 104 ]
105 105
106 106 { #category : #accessing }
107 Removed: MFTWorkout >> primaryMuscle: aMuscle [
107 Added: MFTWorkout >> primaryMuscle: aMFTMuscle [
108 108
109 Removed: primaryMuscle := aMuscle
109 Added: primaryMuscle := aMFTMuscle
110 110 ]
111 111
112 112 { #category : #initialization }
@@ -160,9 +160,8 @@
160 160
161 161 { #category : #accessing }
162 162 MFTWorkout >> secondaryMuscles [
163 Removed: "TODO: "
164 163
165 Removed: ^ secondaryMuscles do: [ :each | each name ]
164 Added: ^ secondaryMuscles
166 165 ]
167 166
168 167 { #category : #accessing }
src/MyFitnessTracker/MFTWorkoutDialog.class.st
index a8d87668..012ab6e5 100644..100644
@@ -3,6 +3,7 @@
3 3 #superclass : #SBSComponent,
4 4 #instVars : [
5 5 'workout',
6 Added: 'exercises',
6 7 'addOrEdit'
7 8 ],
8 9 #category : #'MyFitnessTracker-Dialogs'
@@ -13,6 +14,7 @@
13 14
14 15 ^ self new
15 16 workout: aMFTWorkout;
17 Added: exercises: aMFTWorkout exercises;
16 18 addOrEdit: #edit;
17 19 yourself
18 20 ]
@@ -22,7 +24,7 @@
22 24
23 25 | exercise |
24 26 exercise := self call: MFTExerciseDialog new.
25 Removed: exercise ifNotNil: [ workout exercises add: exercise ]
27 Added: exercise ifNotNil: [ exercises add: exercise ]
26 28 ]
27 29
28 30 { #category : #accessing }
@@ -38,19 +40,32 @@
38 40 ]
39 41
40 42 { #category : #'as yet unclassified' }
41 Removed: MFTWorkoutDialog >> editExercise: i [
43 Added: MFTWorkoutDialog >> editExerciseAt: i [
42 44
43 45 | oldExercise newExercise |
44 Removed: oldExercise := workout exercises at: i.
46 Added: oldExercise := exercises at: i.
45 47 newExercise := self call: (MFTExerciseDialog edit: oldExercise).
46 Removed: newExercise ifNotNil: [ workout exercises at: i put: newExercise ]
48 Added: newExercise ifNotNil: [ exercises at: i put: newExercise ]
47 49 ]
48 50
51 Added: { #category : #accessing }
52 Added: MFTWorkoutDialog >> exercises [
53 Added:
54 Added: ^ exercises
55 Added: ]
56 Added:
57 Added: { #category : #accessing }
58 Added: MFTWorkoutDialog >> exercises: anObject [
59 Added:
60 Added: exercises := anObject
61 Added: ]
62 Added:
49 63 { #category : #initialization }
50 64 MFTWorkoutDialog >> initialize [
51 65
52 66 super initialize.
53 67 workout := MFTWorkout new.
68 Added: exercises := OrderedCollection new.
54 69 addOrEdit := #add
55 70 ]
56 71
@@ -103,24 +118,24 @@
103 118 html outlineButton
104 119 beSecondary;
105 120 beSmall;
106 Removed: callback: [ workout exercises removeAt: i ];
121 Added: callback: [ exercises removeAt: i ];
107 122 with: 'Delete'.
108 123 html outlineButton
109 124 beSecondary;
110 125 beSmall;
111 Removed: callback: [ self editExercise: i ];
126 Added: callback: [ self editExerciseAt: i ];
112 127 with: 'Edit' ]
113 128 ]
114 129
115 130 { #category : #rendering }
116 131 MFTWorkoutDialog >> renderExercisesRowsOn: html [
117 132
118 Removed: workout exercises doWithIndex: [ :exercise :i |
133 Added: exercises doWithIndex: [ :exercise :i |
119 134 html tableRow: [
120 135 html tableData: [
121 136 self renderExerciseActionsButtonGroupOn: html at: i ].
122 137 html tableData: exercise name.
123 Removed: html tableData: exercise primaryMuscle name.
138 Added: html tableData: exercise primaryMuscle englishName.
124 139 html tableData: exercise repsBySet asCommaString ] ]
125 140 ]
126 141
@@ -132,8 +147,7 @@
132 147 html table
133 148 class: 'table table-hover';
134 149 with: [
135 Removed: workout exercises isNotEmpty ifTrue: [
136 Removed: self renderTableHeaderOn: html ].
150 Added: exercises isNotEmpty ifTrue: [ self renderTableHeaderOn: html ].
137 151 self renderExercisesRowsOn: html.
138 152 self renderAddExerciseRowOn: html ] ]
139 153 ]
@@ -147,7 +161,7 @@
147 161 html select formControl
148 162 list: MFTUtils allMuscleGroups;
149 163 selected: workout primaryMuscle;
150 Removed: labels: [ :muscleGroup | muscleGroup name ];
164 Added: labels: [ :muscleGroup | muscleGroup englishName ];
151 165 callback: [ :group | workout primaryMuscle: group ] ]
152 166 ]
153 167
@@ -159,7 +173,7 @@
159 173 html multiSelect formControl
160 174 list: MFTUtils allMuscleGroups;
161 175 selected: workout secondaryMuscles;
162 Removed: labels: [ :muscleGroup | muscleGroup name ];
176 Added: labels: [ :muscleGroup | muscleGroup englishName ];
163 177 callback: [ :groups | workout secondaryMuscles: groups ] ]
164 178 ]
165 179
@@ -171,7 +185,7 @@
171 185 html formButton
172 186 bePrimary;
173 187 beSubmit;
174 Removed: callback: [ self answer: workout ];
188 Added: callback: [ self answer: (workout exercises: exercises) ];
175 189 with: 'Submit'.
176 190 html formButton
177 191 beSecondary;
@@ -187,8 +201,8 @@
187 201 tableHeading;
188 202 tableHeading: 'Name';
189 203 tableHeading: 'Muscles'.
190 Removed: ((workout exercises collect: #sets) anySatisfy: #isNotEmpty)
191 Removed: ifTrue: [ html tableHeading: 'Sets' ] ]
204 Added: ((exercises collect: #sets) anySatisfy: #isNotEmpty) ifTrue: [
205 Added: html tableHeading: 'Sets' ] ]
192 206 ]
193 207
194 208 { #category : #accessing }
src/MyFitnessTracker/MFTWorkoutsListTab.class.st
index 99c209b2..e8c4f102 100644..100644
@@ -178,9 +178,9 @@
178 178 dataToggle: 'collapse';
179 179 dataTarget: '#collapse' , i asString;
180 180 with:
181 Removed: workout date yyyymmdd , (workout primaryMuscle nameEnglish
181 Added: workout date yyyymmdd , (workout primaryMuscle englishName
182 182 ifNotEmpty: [
183 Removed: ' | ' , workout primaryMuscle name asString ]
183 Added: ' | ' , workout primaryMuscle englishName asString ]
184 184 ifEmpty: [ '' ]) ].
185 185 html accordionCollapse
186 186 id: 'collapse' , i asString;