[Pharo] Personal fitness tracker web app.
MFTExercises and MFTExercise classes are hopelessly broken. Clean slate!
Changed files
src/MyFitnessTracker/MFTExerciseDialog.class.st
@@ -1,180 +0,0 @@
1
Removed:
"
2
Removed:
I represent a dialog for a single exercise.
3
Removed:
"
4
Removed:
Class {
5
Removed:
#name : #MFTExerciseDialog,
6
Removed:
#superclass : #MFTDialog,
7
Removed:
#instVars : [
8
Removed:
'exercise',
9
Removed:
'sets'
10
Removed:
],
11
Removed:
#category : #'MyFitnessTracker-Dialog'
12
Removed:
}
13
Removed:
14
Removed:
{ #category : #actions }
15
Removed:
MFTExerciseDialog class >> edit: aMFTExercise [
16
Removed:
17
Removed:
^ self new
18
Removed:
exercise: aMFTExercise;
19
Removed:
sets: aMFTExercise sets;
20
Removed:
action: #edit;
21
Removed:
yourself
22
Removed:
]
23
Removed:
24
Removed:
{ #category : #accessing }
25
Removed:
MFTExerciseDialog >> exercise [
26
Removed:
27
Removed:
^ exercise
28
Removed:
]
29
Removed:
30
Removed:
{ #category : #accessing }
31
Removed:
MFTExerciseDialog >> exercise: anObject [
32
Removed:
33
Removed:
exercise := anObject
34
Removed:
]
35
Removed:
36
Removed:
{ #category : #initialization }
37
Removed:
MFTExerciseDialog >> initialize [
38
Removed:
39
Removed:
super initialize.
40
Removed:
exercise := MFTExercise new.
41
Removed:
sets := OrderedCollection new
42
Removed:
]
43
Removed:
44
Removed:
{ #category : #testing }
45
Removed:
MFTExerciseDialog >> isDeprecated [
46
Removed:
"Use MFTSetDialog instead."
47
Removed:
48
Removed:
^ true
49
Removed:
]
50
Removed:
51
Removed:
{ #category : #rendering }
52
Removed:
MFTExerciseDialog >> renderAddSetRowOn: html [
53
Removed:
54
Removed:
html tableRow: [
55
Removed:
html tableData: [
56
Removed:
html outlineButton
57
Removed:
bePrimary;
58
Removed:
beSmall;
59
Removed:
callback: [ sets add: MFTSet new ];
60
Removed:
with: 'Add' ].
61
Removed:
html
62
Removed:
tableData;
63
Removed:
tableData;
64
Removed:
tableData ]
65
Removed:
]
66
Removed:
67
Removed:
{ #category : #rendering }
68
Removed:
MFTExerciseDialog >> renderContentOn: html [
69
Removed:
70
Removed:
self renderDialogOn: html with: [
71
Removed:
self renderExerciseSelectOn: html.
72
Removed:
self renderSetsTableOn: html ]
73
Removed:
]
74
Removed:
75
Removed:
{ #category : #rendering }
76
Removed:
MFTExerciseDialog >> renderExerciseSelectOn: html [
77
Removed:
78
Removed:
| allExercises selectedExercise |
79
Removed:
allExercises := MFTUtils allExercises.
80
Removed:
selectedExercise := allExercises
81
Removed:
detect: [ :each |
82
Removed:
each englishName = exercise englishName ]
83
Removed:
ifNone: [ nil ].
84
Removed:
html formGroup: [
85
Removed:
html label: 'Exercise'.
86
Removed:
html select formControl
87
Removed:
list: allExercises;
88
Removed:
selected: selectedExercise;
89
Removed:
callback: [ :value | exercise := value ];
90
Removed:
labels: [ :each | each englishName ] ]
91
Removed:
]
92
Removed:
93
Removed:
{ #category : #rendering }
94
Removed:
MFTExerciseDialog >> renderSetsRowsOn: html [
95
Removed:
"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?"
96
Removed:
97
Removed:
sets doWithIndex: [ :set :i |
98
Removed:
html tableRow: [
99
Removed:
html tableData: [
100
Removed:
html buttonGroup: [
101
Removed:
html outlineButton
102
Removed:
beDanger;
103
Removed:
beSmall;
104
Removed:
callback: [ sets removeAt: i ];
105
Removed:
with: 'Remove'.
106
Removed:
html outlineButton
107
Removed:
beSecondary;
108
Removed:
beSmall;
109
Removed:
callback: [ sets add: set copy afterIndex: i ];
110
Removed:
with: 'Duplicate' ] ].
111
Removed:
html tableData: [
112
Removed:
html numberInput formControl
113
Removed:
value: set reps;
114
Removed:
callback: [ :value | set reps: value asInteger ] ].
115
Removed:
html tableData: [
116
Removed:
html numberInput formControl
117
Removed:
value: set weight;
118
Removed:
callback: [ :value |
119
Removed:
value
120
Removed:
ifNotEmpty: [ set weight: value asNumber ]
121
Removed:
ifEmpty: [ set weight: nil ] ] ].
122
Removed:
html tableData: [
123
Removed:
html numberInput formControl
124
Removed:
value: set rpe;
125
Removed:
callback: [ :value |
126
Removed:
value
127
Removed:
ifNotEmpty: [ set rpe: value asInteger ]
128
Removed:
ifEmpty: [ set rpe: nil ] ] ] ] ]
129
Removed:
]
130
Removed:
131
Removed:
{ #category : #rendering }
132
Removed:
MFTExerciseDialog >> renderSetsTableOn: html [
133
Removed:
134
Removed:
html formGroup: [
135
Removed:
html label: 'Sets'.
136
Removed:
html table
137
Removed:
class: 'table table-hover';
138
Removed:
with: [
139
Removed:
sets ifNotEmpty: [ self renderTableHeaderOn: html ].
140
Removed:
self renderSetsRowsOn: html.
141
Removed:
self renderAddSetRowOn: html ] ]
142
Removed:
]
143
Removed:
144
Removed:
{ #category : #delegation }
145
Removed:
MFTExerciseDialog >> renderSubmitOn: html [
146
Removed:
147
Removed:
html buttonGroup: [
148
Removed:
html formButton
149
Removed:
beSubmit;
150
Removed:
bePrimary;
151
Removed:
callback: [ self answer: (exercise sets: sets) ];
152
Removed:
with: (completion ifNil: [ 'Submit' ] ifNotNil: [ 'Next' ]).
153
Removed:
html formButton
154
Removed:
beSubmit;
155
Removed:
beSecondary;
156
Removed:
callback: [ self answer: MFTExercise new ];
157
Removed:
with: (completion ifNil: [ 'Cancel' ] ifNotNil: [ 'Skip' ]) ]
158
Removed:
]
159
Removed:
160
Removed:
{ #category : #rendering }
161
Removed:
MFTExerciseDialog >> renderTableHeaderOn: html [
162
Removed:
163
Removed:
html tableHead: [
164
Removed:
html
165
Removed:
tableHeading;
166
Removed:
tableHeading: 'Reps';tableHeading: 'Weight';
167
Removed:
tableHeading: 'RPE' ]
168
Removed:
]
169
Removed:
170
Removed:
{ #category : #accessing }
171
Removed:
MFTExerciseDialog >> sets [
172
Removed:
173
Removed:
^ sets
174
Removed:
]
175
Removed:
176
Removed:
{ #category : #accessing }
177
Removed:
MFTExerciseDialog >> sets: anObject [
178
Removed:
179
Removed:
sets := anObject
180
Removed:
]
src/MyFitnessTracker/MFTExercisesDialog.class.st
@@ -1,163 +0,0 @@
1
Removed:
Class {
2
Removed:
#name : #MFTExercisesDialog,
3
Removed:
#superclass : #MFTDialog,
4
Removed:
#instVars : [
5
Removed:
'exercises'
6
Removed:
],
7
Removed:
#category : #'MyFitnessTracker-Dialog'
8
Removed:
}
9
Removed:
10
Removed:
{ #category : #actions }
11
Removed:
MFTExercisesDialog class >> edit: aMFTExerciseCollection [
12
Removed:
13
Removed:
self halt.
14
Removed:
^ self new
15
Removed:
exercises: aMFTExerciseCollection;
16
Removed:
action: #edit;
17
Removed:
yourself
18
Removed:
]
19
Removed:
20
Removed:
{ #category : #adding }
21
Removed:
MFTExercisesDialog >> addExercise [
22
Removed:
23
Removed:
| exercise |
24
Removed:
exercise := self call: MFTExerciseDialog new.
25
Removed:
exercise englishName ifNotEmpty: [ exercises add: exercise ]
26
Removed:
]
27
Removed:
28
Removed:
{ #category : #accessing }
29
Removed:
MFTExercisesDialog >> editExerciseAt: i [
30
Removed:
31
Removed:
| oldExercise newExercise |
32
Removed:
oldExercise := exercises at: i.
33
Removed:
newExercise := self call: (MFTExerciseDialog edit: oldExercise).
34
Removed:
newExercise ifNotNil: [ exercises at: i put: newExercise ]
35
Removed:
]
36
Removed:
37
Removed:
{ #category : #accessing }
38
Removed:
MFTExercisesDialog >> exercises [
39
Removed:
40
Removed:
^ exercises
41
Removed:
]
42
Removed:
43
Removed:
{ #category : #accessing }
44
Removed:
MFTExercisesDialog >> exercises: aCollection [
45
Removed:
46
Removed:
exercises := aCollection
47
Removed:
]
48
Removed:
49
Removed:
{ #category : #initialization }
50
Removed:
MFTExercisesDialog >> initialize [
51
Removed:
52
Removed:
super initialize.
53
Removed:
exercises := OrderedCollection new
54
Removed:
]
55
Removed:
56
Removed:
{ #category : #testing }
57
Removed:
MFTExercisesDialog >> isDeprecated [
58
Removed:
"Use MFTSetsDialog instead."
59
Removed:
60
Removed:
^ true
61
Removed:
]
62
Removed:
63
Removed:
{ #category : #rendering }
64
Removed:
MFTExercisesDialog >> renderAddExerciseRowOn: html [
65
Removed:
66
Removed:
html tableRow: [
67
Removed:
html tableData: [
68
Removed:
html outlineButton
69
Removed:
bePrimary;
70
Removed:
beSmall;
71
Removed:
callback: [ self addExercise ];
72
Removed:
with: 'Add'.
73
Removed:
html
74
Removed:
tableData;
75
Removed:
tableData;
76
Removed:
tableData.
77
Removed:
((exercises collect: #sets) anySatisfy: #isNotEmpty) ifTrue: [
78
Removed:
html tableData ] ] ]
79
Removed:
]
80
Removed:
81
Removed:
{ #category : #rendering }
82
Removed:
MFTExercisesDialog >> renderContentOn: html [
83
Removed:
84
Removed:
self renderDialogOn: html with: [
85
Removed:
html table
86
Removed:
class: 'table table-hover';
87
Removed:
with: [
88
Removed:
exercises ifNotEmpty: [
89
Removed:
self renderTableHeaderOn: html.
90
Removed:
self renderExercisesRowsOn: html ].
91
Removed:
self renderAddExerciseRowOn: html ] ]
92
Removed:
]
93
Removed:
94
Removed:
{ #category : #rendering }
95
Removed:
MFTExercisesDialog >> renderExerciseActionsButtonGroupOn: html at: i [
96
Removed:
97
Removed:
html buttonGroup: [
98
Removed:
html outlineButton
99
Removed:
beSecondary;
100
Removed:
beSmall;
101
Removed:
callback: [ exercises removeAt: i ];
102
Removed:
with: 'Delete'.
103
Removed:
html outlineButton
104
Removed:
beSecondary;
105
Removed:
beSmall;
106
Removed:
callback: [ self editExerciseAt: i ];
107
Removed:
with: 'Edit' ]
108
Removed:
]
109
Removed:
110
Removed:
{ #category : #rendering }
111
Removed:
MFTExercisesDialog >> renderExercisesRowsOn: html [
112
Removed:
113
Removed:
exercises doWithIndex: [ :exercise :i |
114
Removed:
html tableRow: [
115
Removed:
html tableData: [
116
Removed:
self renderExerciseActionsButtonGroupOn: html at: i ].
117
Removed:
html tableData: exercise englishName.
118
Removed:
html tableData: exercise primaryMuscle englishName.
119
Removed:
((exercises collect: #sets) anySatisfy: #isNotEmpty) ifTrue: [
120
Removed:
html tableData
121
Removed:
style: 'text-align: right';
122
Removed:
with: exercise repsBySet size ].
123
Removed:
((exercises collect: #volume) anySatisfy: [ :volume | volume ~~ 0 ])
124
Removed:
ifTrue: [
125
Removed:
html tableData
126
Removed:
style: 'text-align: right';
127
Removed:
with: exercise volume ] ] ]
128
Removed:
]
129
Removed:
130
Removed:
{ #category : #rendering }
131
Removed:
MFTExercisesDialog >> renderSubmitOn: html [
132
Removed:
133
Removed:
html buttonGroup: [
134
Removed:
html formButton
135
Removed:
beSubmit;
136
Removed:
bePrimary;
137
Removed:
callback: [ self answer: exercises ];
138
Removed:
with: (completion ifNil: [ 'Submit' ] ifNotNil: [ 'Next' ]).
139
Removed:
html formButton
140
Removed:
beSubmit;
141
Removed:
beSecondary;
142
Removed:
callback: [ self answer: OrderedCollection new ];
143
Removed:
with: (completion ifNil: [ 'Cancel' ] ifNotNil: [ 'Skip' ]) ]
144
Removed:
]
145
Removed:
146
Removed:
{ #category : #rendering }
147
Removed:
MFTExercisesDialog >> renderTableHeaderOn: html [
148
Removed:
149
Removed:
html tableHead: [
150
Removed:
html
151
Removed:
tableHeading;
152
Removed:
tableHeading: 'Exercise';
153
Removed:
tableHeading: 'Primary Muscle'.
154
Removed:
((exercises collect: #sets) anySatisfy: #isNotEmpty) ifTrue: [
155
Removed:
html tableHeading
156
Removed:
style: 'text-align: right';
157
Removed:
with: 'Sets' ].
158
Removed:
((exercises collect: #volume) anySatisfy: [ :volume | volume ~~ 0 ])
159
Removed:
ifTrue: [
160
Removed:
html tableHeading
161
Removed:
style: 'text-align: right';
162
Removed:
with: 'Volume' ] ]
163
Removed:
]