Started unification of the many workout dialog steps.

Commit
074461e8a7fb51776403805dda83a05b7c668e41
Author
Marius Peter <marius.peter@tutanota.com>
Author date
Committer
Marius Peter <marius.peter@tutanota.com>
Committer date
Changed files
src/MyFitnessTracker/MFTDateDialog.class.st
index 1672ce8e..6d563dd6 100644..100644
@@ -38,7 +38,7 @@
38 38 date := Date readFrom: value pattern: 'yyyy-mm-dd' ] ]
39 39 ]
40 40
41 Removed: { #category : 'rendering' }
41 Added: { #category : 'as yet unclassified' }
42 42 MFTDateDialog >> renderSubmitOn: html [
43 43
44 44 html buttonGroup: [
src/MyFitnessTracker/MFTDateFormComponent.class.st
index 00000000..867c5093 000000..100644
@@ -0,0 +1,39 @@
1 Added: Class {
2 Added: #name : 'MFTDateFormComponent',
3 Added: #superclass : 'MFTFormComponent',
4 Added: #instVars : [
5 Added: 'date'
6 Added: ],
7 Added: #category : 'MyFitnessTracker-Forms',
8 Added: #package : 'MyFitnessTracker',
9 Added: #tag : 'Forms'
10 Added: }
11 Added:
12 Added: { #category : 'accessing' }
13 Added: MFTDateFormComponent >> date [
14 Added:
15 Added: ^ date
16 Added: ]
17 Added:
18 Added: { #category : 'accessing' }
19 Added: MFTDateFormComponent >> date: anObject [
20 Added:
21 Added: date := anObject
22 Added: ]
23 Added:
24 Added: { #category : 'initialization' }
25 Added: MFTDateFormComponent >> initialize [
26 Added:
27 Added: super initialize.
28 Added: date := Date today
29 Added: ]
30 Added:
31 Added: { #category : 'rendering' }
32 Added: MFTDateFormComponent >> renderContentOn: html [
33 Added:
34 Added: self renderDialogOn: html with: [
35 Added: html dateInput5 formControl
36 Added: value: date yyyymmdd;
37 Added: callback: [ :value |
38 Added: date := Date readFrom: value pattern: 'yyyy-mm-dd' ] ]
39 Added: ]
src/MyFitnessTracker/MFTFormComponent.class.st
index 00000000..afb119cd 000000..100644
@@ -0,0 +1,7 @@
1 Added: Class {
2 Added: #name : 'MFTFormComponent',
3 Added: #superclass : 'SBSComponent',
4 Added: #category : 'MyFitnessTracker-Forms',
5 Added: #package : 'MyFitnessTracker',
6 Added: #tag : 'Forms'
7 Added: }
src/MyFitnessTracker/MFTLogsPage.class.st
index 1331ffaa..fc4c3124 100644..100644
@@ -10,6 +10,12 @@
10 10 #tag : 'Components'
11 11 }
12 12
13 Added: { #category : 'hooks' }
14 Added: MFTLogsPage >> children [
15 Added:
16 Added: ^ logs
17 Added: ]
18 Added:
13 19 { #category : 'initialization' }
14 20 MFTLogsPage >> initialize [
15 21
src/MyFitnessTracker/MFTMainPublicCard.class.st
index aa2297e2..7403802a 100644..100644
@@ -11,7 +11,7 @@
11 11
12 12 | newWorkout |
13 13 newWorkout := self session pageManager activePage call:
14 Removed: MFTWorkoutTask new.
14 Added: MFTWorkoutDialog new.
15 15 newWorkout ifNil: [ ^ self ].
16 16
17 17 self session user isLoggedIn
src/MyFitnessTracker/MFTSetGroupsDialog.class.st
index 5a21de16..1e5e4ed6 100644..100644
@@ -53,104 +53,6 @@
53 53 ]
54 54
55 55 { #category : 'rendering' }
56 Removed: MFTSetGroupsDialog >> renderLoad [
57 Removed:
58 Removed: ^ (setGroups flatCollect: #sets) anySatisfy: #hasLoad
59 Removed: ]
60 Removed:
61 Removed: { #category : 'rendering' }
62 Removed: MFTSetGroupsDialog >> renderRestAfter [
63 Removed:
64 Removed: ^ (setGroups flatCollect: #sets) anySatisfy: #hasRestAfter
65 Removed: ]
66 Removed:
67 Removed: { #category : 'rendering' }
68 Removed: MFTSetGroupsDialog >> renderRpe [
69 Removed:
70 Removed: ^ (setGroups flatCollect: #sets) anySatisfy: #hasRpe
71 Removed: ]
72 Removed:
73 Removed: { #category : 'rendering' }
74 Removed: MFTSetGroupsDialog >> renderSetGroupButtonsOn: html For: setGroup [
75 Removed:
76 Removed: html buttonGroup: [
77 Removed: html outlineButton
78 Removed: beDanger;
79 Removed: beSmall;
80 Removed: callback: [ setGroups remove: setGroup ];
81 Removed: with: 'Remove'.
82 Removed: html outlineButton
83 Removed: beSecondary;
84 Removed: beSmall;
85 Removed: callback: [ self editSetGroup: setGroup ];
86 Removed: with: 'Edit'.
87 Removed: html outlineButton
88 Removed: beSecondary;
89 Removed: beSmall;
90 Removed: callback: [
91 Removed: setGroups add: setGroup afterIndex: (setGroups indexOf: setGroup) ];
92 Removed: with: 'Duplicate' ]
93 Removed: ]
94 Removed:
95 Removed: { #category : 'rendering' }
96 Removed: MFTSetGroupsDialog >> renderSetGroupsRowsOn: html [
97 Removed:
98 Removed: | renderLoad renderRpe renderRestAfter |
99 Removed: renderLoad := self renderLoad.
100 Removed: renderRpe := self renderRpe.
101 Removed: renderRestAfter := self renderRestAfter.
102 Removed: setGroups do: [ :setGroup |
103 Removed: html tableRow with: [
104 Removed: html tableData
105 Removed: attributeAt: 'rowspan' put: setGroup sets size + 1;
106 Removed: style: 'vertical-align: middle';
107 Removed: with: [ self renderSetGroupButtonsOn: html For: setGroup ] ].
108 Removed: setGroup sets do: [ :set |
109 Removed: html tableRow: [
110 Removed: html tableData: set exercise englishName.
111 Removed: html tableData: set reps.
112 Removed: setGroup hasLoad ifTrue: [ html tableData: set load ].
113 Removed: setGroup hasRpe ifTrue: [ html tableData: set rpe ].
114 Removed: setGroup hasRestAfter ifTrue: [ html tableData: set restAfter ] ] ] ]
115 Removed: ]
116 Removed:
117 Removed: { #category : 'rendering' }
118 Removed: MFTSetGroupsDialog >> renderSetGroupsTableHeaderOn: html [
119 Removed:
120 Removed: html tableHead: [
121 Removed: html
122 Removed: tableHeading;
123 Removed: tableHeading: 'Exercise';
124 Removed: tableHeading: 'Reps'.
125 Removed: self renderLoad ifTrue: [ html tableHeading: 'Load' ].
126 Removed: self renderRpe ifTrue: [ html tableHeading: 'RPE' ].
127 Removed: self renderRestAfter ifTrue: [ html tableHeading: 'Rest after (s) ' ] ]
128 Removed: ]
129 Removed:
130 Removed: { #category : 'rendering' }
131 Removed: MFTSetGroupsDialog >> renderSetsTableHeaderOn: html [
132 Removed:
133 Removed: html tableHead: [
134 Removed: html
135 Removed: tableHeading;
136 Removed: tableHeading: 'Exercise';
137 Removed: tableHeading: 'Reps'.
138 Removed: self renderLoad ifTrue: [ html tableHeading: 'Load' ].
139 Removed: self renderRpe ifTrue: [ html tableHeading: 'RPE' ].
140 Removed: self renderRestAfter ifTrue: [ html tableHeading: 'Rest after (s) ' ] ]
141 Removed: ]
142 Removed:
143 Removed: { #category : 'rendering' }
144 Removed: MFTSetGroupsDialog >> renderSetsTableOn: html [
145 Removed:
146 Removed: html table
147 Removed: class: 'table table-bordered';
148 Removed: with: [
149 Removed: self renderSetGroupsTableHeaderOn: html.
150 Removed: self renderSetGroupsRowsOn: html ]
151 Removed: ]
152 Removed:
153 Removed: { #category : 'rendering' }
154 56 MFTSetGroupsDialog >> renderSubmitOn: html [
155 57
156 58 html buttonGroup: [
src/MyFitnessTracker/MFTSetGroupsDialogOld.class.st
index 00000000..cb18e1eb 000000..100644
@@ -0,0 +1,179 @@
1 Added: Class {
2 Added: #name : 'MFTSetGroupsDialogOld',
3 Added: #superclass : 'MFTDialog',
4 Added: #instVars : [
5 Added: 'setGroups'
6 Added: ],
7 Added: #category : 'MyFitnessTracker-Dialogs',
8 Added: #package : 'MyFitnessTracker',
9 Added: #tag : 'Dialogs'
10 Added: }
11 Added:
12 Added: { #category : 'adding' }
13 Added: MFTSetGroupsDialogOld >> addExercise [
14 Added:
15 Added: | setGroup |
16 Added: setGroup := self call: (MFTSetGroupDialog new heading: 'Exercise').
17 Added: setGroup ifNotNil: [ setGroups add: setGroup ]
18 Added: ]
19 Added:
20 Added: { #category : 'rendering' }
21 Added: MFTSetGroupsDialogOld >> editSetGroup: aMFTSetGroup [
22 Added:
23 Added: | oldSetGroup newSetGroup |
24 Added: oldSetGroup := aMFTSetGroup.
25 Added: newSetGroup := self call: (MFTSetGroupDialog edit: aMFTSetGroup copy).
26 Added: newSetGroup ifNotNil: [
27 Added: setGroups at: (setGroups indexOf: oldSetGroup) put: newSetGroup ]
28 Added: ]
29 Added:
30 Added: { #category : 'initialization' }
31 Added: MFTSetGroupsDialogOld >> initialize [
32 Added:
33 Added: super initialize.
34 Added: setGroups := OrderedCollection new
35 Added: ]
36 Added:
37 Added: { #category : 'rendering' }
38 Added: MFTSetGroupsDialogOld >> renderAddSetGroupButtonsOn: html [
39 Added:
40 Added: html outlineButton
41 Added: bePrimary;
42 Added: beSmall;
43 Added: callback: [ self addExercise ];
44 Added: with: 'Add exercise'
45 Added: ]
46 Added:
47 Added: { #category : 'rendering' }
48 Added: MFTSetGroupsDialogOld >> renderContentOn: html [
49 Added:
50 Added: self renderDialogOn: html with: [
51 Added: setGroups ifNotEmpty: [ self renderSetsTableOn: html ].
52 Added: self renderAddSetGroupButtonsOn: html ]
53 Added: ]
54 Added:
55 Added: { #category : 'as yet unclassified' }
56 Added: MFTSetGroupsDialogOld >> renderLoad [
57 Added:
58 Added: ^ (setGroups flatCollect: #sets) anySatisfy: #hasLoad
59 Added: ]
60 Added:
61 Added: { #category : 'as yet unclassified' }
62 Added: MFTSetGroupsDialogOld >> renderRestAfter [
63 Added:
64 Added: ^ (setGroups flatCollect: #sets) anySatisfy: #hasRestAfter
65 Added: ]
66 Added:
67 Added: { #category : 'as yet unclassified' }
68 Added: MFTSetGroupsDialogOld >> renderRpe [
69 Added:
70 Added: ^ (setGroups flatCollect: #sets) anySatisfy: #hasRpe
71 Added: ]
72 Added:
73 Added: { #category : 'as yet unclassified' }
74 Added: MFTSetGroupsDialogOld >> renderSetGroupButtonsOn: html For: setGroup [
75 Added:
76 Added: html buttonGroup: [
77 Added: html outlineButton
78 Added: beDanger;
79 Added: beSmall;
80 Added: callback: [ setGroups remove: setGroup ];
81 Added: with: 'Remove'.
82 Added: html outlineButton
83 Added: beSecondary;
84 Added: beSmall;
85 Added: callback: [ self editSetGroup: setGroup ];
86 Added: with: 'Edit'.
87 Added: html outlineButton
88 Added: beSecondary;
89 Added: beSmall;
90 Added: callback: [
91 Added: setGroups add: setGroup afterIndex: (setGroups indexOf: setGroup) ];
92 Added: with: 'Duplicate' ]
93 Added: ]
94 Added:
95 Added: { #category : 'as yet unclassified' }
96 Added: MFTSetGroupsDialogOld >> renderSetGroupsRowsOn: html [
97 Added:
98 Added: | renderLoad renderRpe renderRestAfter |
99 Added: renderLoad := self renderLoad.
100 Added: renderRpe := self renderRpe.
101 Added: renderRestAfter := self renderRestAfter.
102 Added: setGroups do: [ :setGroup |
103 Added: html tableRow with: [
104 Added: html tableData
105 Added: attributeAt: 'rowspan' put: setGroup sets size + 1;
106 Added: style: 'vertical-align: middle';
107 Added: with: [ self renderSetGroupButtonsOn: html For: setGroup ] ].
108 Added: setGroup sets do: [ :set |
109 Added: html tableRow: [
110 Added: html tableData: set exercise englishName.
111 Added: html tableData: set reps.
112 Added: setGroup hasLoad ifTrue: [ html tableData: set load ].
113 Added: setGroup hasRpe ifTrue: [ html tableData: set rpe ].
114 Added: setGroup hasRestAfter ifTrue: [ html tableData: set restAfter ] ] ] ]
115 Added: ]
116 Added:
117 Added: { #category : 'as yet unclassified' }
118 Added: MFTSetGroupsDialogOld >> renderSetGroupsTableHeaderOn: html [
119 Added:
120 Added: html tableHead: [
121 Added: html
122 Added: tableHeading;
123 Added: tableHeading: 'Exercise';
124 Added: tableHeading: 'Reps'.
125 Added: self renderLoad ifTrue: [ html tableHeading: 'Load' ].
126 Added: self renderRpe ifTrue: [ html tableHeading: 'RPE' ].
127 Added: self renderRestAfter ifTrue: [ html tableHeading: 'Rest after (s) ' ] ]
128 Added: ]
129 Added:
130 Added: { #category : 'as yet unclassified' }
131 Added: MFTSetGroupsDialogOld >> renderSetsTableHeaderOn: html [
132 Added:
133 Added: html tableHead: [
134 Added: html
135 Added: tableHeading;
136 Added: tableHeading: 'Exercise';
137 Added: tableHeading: 'Reps'.
138 Added: self renderLoad ifTrue: [ html tableHeading: 'Load' ].
139 Added: self renderRpe ifTrue: [ html tableHeading: 'RPE' ].
140 Added: self renderRestAfter ifTrue: [ html tableHeading: 'Rest after (s) ' ] ]
141 Added: ]
142 Added:
143 Added: { #category : 'as yet unclassified' }
144 Added: MFTSetGroupsDialogOld >> renderSetsTableOn: html [
145 Added:
146 Added: html table
147 Added: class: 'table table-bordered';
148 Added: with: [
149 Added: self renderSetGroupsTableHeaderOn: html.
150 Added: self renderSetGroupsRowsOn: html ]
151 Added: ]
152 Added:
153 Added: { #category : 'rendering' }
154 Added: MFTSetGroupsDialogOld >> renderSubmitOn: html [
155 Added:
156 Added: html buttonGroup: [
157 Added: html formButton
158 Added: beSubmit;
159 Added: bePrimary;
160 Added: callback: [ self answer: setGroups ];
161 Added: with: (completion ifNil: [ 'Submit' ] ifNotNil: [ 'Next' ]).
162 Added: html formButton
163 Added: beSubmit;
164 Added: beSecondary;
165 Added: callback: [ self answer: OrderedCollection new ];
166 Added: with: (completion ifNil: [ 'Cancel' ] ifNotNil: [ 'Skip' ]) ]
167 Added: ]
168 Added:
169 Added: { #category : 'accessing' }
170 Added: MFTSetGroupsDialogOld >> setGroups [
171 Added:
172 Added: ^ setGroups
173 Added: ]
174 Added:
175 Added: { #category : 'accessing' }
176 Added: MFTSetGroupsDialogOld >> setGroups: anObject [
177 Added:
178 Added: setGroups := anObject
179 Added: ]
src/MyFitnessTracker/MFTWorkout.class.st
index 1233457e..94e92c15 100644..100644
@@ -138,6 +138,12 @@
138 138 ]
139 139
140 140 { #category : 'accessing' }
141 Added: MFTWorkout >> primaryMuscleGroup: aMFTMuscleGroup [
142 Added:
143 Added: primaryMuscleGroupId := aMFTMuscleGroup id
144 Added: ]
145 Added:
146 Added: { #category : 'accessing' }
141 147 MFTWorkout >> primaryMuscleGroupId [
142 148
143 149 ^ primaryMuscleGroupId
@@ -273,6 +279,12 @@
273 279
274 280 ^ MFTSQLite3Database allMuscleGroups select: [ :group |
275 281 secondaryMuscleGroupIds includes: group id ]
282 Added: ]
283 Added:
284 Added: { #category : 'as yet unclassified' }
285 Added: MFTWorkout >> secondaryMuscleGroups: aMFTMuscleGroupCollection [
286 Added:
287 Added: secondaryMuscleGroupIds := aMFTMuscleGroupCollection collect: #id
276 288 ]
277 289
278 290 { #category : 'accessing' }
src/MyFitnessTracker/MFTWorkoutDialog.class.st
index 00000000..2f2b8919 000000..100644
@@ -0,0 +1,216 @@
1 Added: Class {
2 Added: #name : 'MFTWorkoutDialog',
3 Added: #superclass : 'MFTDialog',
4 Added: #instVars : [
5 Added: 'workout',
6 Added: 'allMuscleGroups'
7 Added: ],
8 Added: #category : 'MyFitnessTracker-Dialogs',
9 Added: #package : 'MyFitnessTracker',
10 Added: #tag : 'Dialogs'
11 Added: }
12 Added:
13 Added: { #category : 'actions' }
14 Added: MFTWorkoutDialog class >> edit: aString [
15 Added:
16 Added: ^ self new
17 Added: action: #edit;
18 Added: string: aString;
19 Added: yourself
20 Added: ]
21 Added:
22 Added: { #category : 'adding' }
23 Added: MFTWorkoutDialog >> addExercise [
24 Added:
25 Added: | setGroup |
26 Added: setGroup := self call: (MFTSetGroupDialog new heading: 'Exercise').
27 Added: setGroup ifNotNil: [ workout addSetGroup: setGroup ]
28 Added: ]
29 Added:
30 Added: { #category : 'initialization' }
31 Added: MFTWorkoutDialog >> initialize [
32 Added:
33 Added: super initialize.
34 Added: workout := MFTWorkout placeholderCollection first.
35 Added: allMuscleGroups := MFTSQLite3Database allMuscleGroups
36 Added: ]
37 Added:
38 Added: { #category : 'adding' }
39 Added: MFTWorkoutDialog >> renderAddSetsButtonGroupOn: html [
40 Added:
41 Added: html buttonGroup: [
42 Added: html outlineButton
43 Added: bePrimary;
44 Added: beSmall;
45 Added: callback: [ self addExercise ];
46 Added: with: 'Add exercise'.
47 Added: html outlineButton
48 Added: beSecondary;
49 Added: beSmall;
50 Added: callback: [ self addSuperset ];
51 Added: with: 'Add superset'.
52 Added: html outlineButton
53 Added: beSecondary;
54 Added: beSmall;
55 Added: callback: [ self addTriSet ];
56 Added: with: 'Add tri-set'.
57 Added: html outlineButton
58 Added: beSecondary;
59 Added: beSmall;
60 Added: callback: [ self addGiantSet ];
61 Added: with: 'Add giant set' ]
62 Added: ]
63 Added:
64 Added: { #category : 'rendering' }
65 Added: MFTWorkoutDialog >> renderContentOn: html [
66 Added:
67 Added: self renderDialogOn: html with: [
68 Added: self renderDatePickerOn: html.
69 Added: self renderExercisePickerOn: html.
70 Added: self renderPrimaryMuscleGroupPickerOn: html.
71 Added: self renderSecondaryMuscleGroupsPickerOn: html ]
72 Added: ]
73 Added:
74 Added: { #category : 'rendering' }
75 Added: MFTWorkoutDialog >> renderDatePickerOn: html [
76 Added:
77 Added: html formGroup: [
78 Added: html heading level2 with: 'Date'.
79 Added: html dateInput5 formControl
80 Added: value: workout date yyyymmdd;
81 Added: callback: [ :value |
82 Added: workout date: (Date readFrom: value pattern: 'yyyy-mm-dd') ] ]
83 Added: ]
84 Added:
85 Added: { #category : 'rendering' }
86 Added: MFTWorkoutDialog >> renderExercisePickerOn: html [
87 Added:
88 Added: html formGroup: [
89 Added: html heading level2 with: 'Exercises'.
90 Added: self renderAddSetsButtonGroupOn: html.
91 Added: self renderSetsTableOn: html ]
92 Added: ]
93 Added:
94 Added: { #category : 'rendering' }
95 Added: MFTWorkoutDialog >> renderLoad [
96 Added:
97 Added: ^ (workout setGroups flatCollect: #sets) anySatisfy: #hasLoad
98 Added: ]
99 Added:
100 Added: { #category : 'rendering' }
101 Added: MFTWorkoutDialog >> renderPrimaryMuscleGroupPickerOn: html [
102 Added:
103 Added: html formGroup: [
104 Added: html heading level3 with: 'Primary Muscle Group'.
105 Added: html formGroup: [
106 Added: html select formControl
107 Added: list: allMuscleGroups;
108 Added: selected: workout primaryMuscleGroup;
109 Added: labels: [ :muscleGroup | muscleGroup englishName ];
110 Added: callback: [ :group | workout primaryMuscleGroup: group ] ] ]
111 Added: ]
112 Added:
113 Added: { #category : 'rendering' }
114 Added: MFTWorkoutDialog >> renderRestAfter [
115 Added:
116 Added: ^ (workout setGroups flatCollect: #sets) anySatisfy: #hasRestAfter
117 Added: ]
118 Added:
119 Added: { #category : 'rendering' }
120 Added: MFTWorkoutDialog >> renderRpe [
121 Added:
122 Added: ^ (workout setGroups flatCollect: #sets) anySatisfy: #hasRpe
123 Added: ]
124 Added:
125 Added: { #category : 'rendering' }
126 Added: MFTWorkoutDialog >> renderSecondaryMuscleGroupsPickerOn: html [
127 Added:
128 Added: ^ html formGroup: [
129 Added: html heading level3 with: 'Secondary Muscle Groups'.
130 Added: html multiSelect formControl
131 Added: list: allMuscleGroups;
132 Added: selected: workout secondaryMuscleGroups;
133 Added: labels: [ :muscleGroup | muscleGroup englishName ];
134 Added: callback: [ :groups | workout secondaryMuscleGroups: groups ] ]
135 Added: ]
136 Added:
137 Added: { #category : 'rendering' }
138 Added: MFTWorkoutDialog >> renderSetGroupButtonsOn: html For: setGroup [
139 Added:
140 Added: html buttonGroupVertical: [
141 Added: html outlineButton
142 Added: beDanger;
143 Added: beSmall;
144 Added: callback: [ workout setGroups remove: setGroup ];
145 Added: with: 'Remove'.
146 Added: html outlineButton
147 Added: beSecondary;
148 Added: beSmall;
149 Added: callback: [ self editSetGroup: setGroup ];
150 Added: with: 'Edit'.
151 Added: html outlineButton
152 Added: beSecondary;
153 Added: beSmall;
154 Added: callback: [
155 Added: workout setGroups
156 Added: add: setGroup
157 Added: afterIndex: (workout setGroups indexOf: setGroup) ];
158 Added: with: 'Duplicate' ]
159 Added: ]
160 Added:
161 Added: { #category : 'rendering' }
162 Added: MFTWorkoutDialog >> renderSetGroupsRowsOn: html [
163 Added:
164 Added: workout setGroups do: [ :setGroup |
165 Added: html tableRow with: [
166 Added: html tableData
167 Added: attributeAt: 'rowspan' put: setGroup sets size + 1;
168 Added: style: 'vertical-align: middle';
169 Added: with: [ self renderSetGroupButtonsOn: html For: setGroup ] ].
170 Added: setGroup sets do: [ :set |
171 Added: html tableRow: [
172 Added: html tableData: set exercise englishName.
173 Added: html tableData: set reps.
174 Added: setGroup hasLoad ifTrue: [ html tableData: set load ].
175 Added: setGroup hasRpe ifTrue: [ html tableData: set rpe ].
176 Added: setGroup hasRestAfter ifTrue: [ html tableData: set restAfter ] ] ] ]
177 Added: ]
178 Added:
179 Added: { #category : 'rendering' }
180 Added: MFTWorkoutDialog >> renderSetGroupsTableHeaderOn: html [
181 Added:
182 Added: html tableHead: [
183 Added: html
184 Added: tableHeading;
185 Added: tableHeading: 'Exercise';
186 Added: tableHeading: 'Reps'.
187 Added: self renderLoad ifTrue: [ html tableHeading: 'Load' ].
188 Added: self renderRpe ifTrue: [ html tableHeading: 'RPE' ].
189 Added: self renderRestAfter ifTrue: [ html tableHeading: 'Rest after (s) ' ] ]
190 Added: ]
191 Added:
192 Added: { #category : 'rendering' }
193 Added: MFTWorkoutDialog >> renderSetsTableOn: html [
194 Added:
195 Added: html table
196 Added: class: 'table table-bordered';
197 Added: with: [
198 Added: self renderSetGroupsTableHeaderOn: html.
199 Added: self renderSetGroupsRowsOn: html ]
200 Added: ]
201 Added:
202 Added: { #category : 'rendering' }
203 Added: MFTWorkoutDialog >> renderSubmitOn: html [
204 Added:
205 Added: html buttonGroup: [
206 Added: html formButton
207 Added: beSubmit;
208 Added: bePrimary;
209 Added: callback: [ self answer: workout ];
210 Added: with: 'Submit'.
211 Added: html formButton
212 Added: beSubmit;
213 Added: beSecondary;
214 Added: callback: [ self answer: nil ];
215 Added: with: 'Cancel' ]
216 Added: ]