[Pharo] Personal fitness tracker web app.
Added lots of muscles + other fixes.
Changed files
- src/MyFitnessTracker/MFTExercise.class.st
- src/MyFitnessTracker/MFTExerciseDialog.class.st
- src/MyFitnessTracker/MFTMuscle.class.st
- src/MyFitnessTracker/MFTMuscleGroup.class.st
- src/MyFitnessTracker/MFTMusclesArticle.class.st
- src/MyFitnessTracker/MFTWorkout.class.st
- src/MyFitnessTracker/MFTWorkoutDialog.class.st
- src/MyFitnessTracker/MFTWorkoutsListTab.class.st
src/MyFitnessTracker/MFTExercise.class.st
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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;