[Pharo] Personal fitness tracker web app.
Update WA components.
Changed files
- src/MyFitnessTracker-Components/MFTHomepage.class.st
- src/MyFitnessTracker-Components/MFTMonthCalendarComponent.class.st
- src/MyFitnessTracker-Components/MFTNavbarComponent.class.st
- src/MyFitnessTracker-Components/MFTPage.class.st
- src/MyFitnessTracker-Components/MFTPageManager.class.st
- src/MyFitnessTracker-Components/MFTRootComponent.class.st
- src/MyFitnessTracker-Components/MFTWorkoutComponent.class.st
- src/MyFitnessTracker-Components/MFTWorkoutEditComponent.class.st
- src/MyFitnessTracker-Components/MFTWorkoutsPage.class.st
src/MyFitnessTracker-Components/MFTHomepage.class.st
@@ -1,8 +1,8 @@
1
1
Class {
2
2
#name : 'MFTHomepage',
3
Removed:
#superclass : 'WAComponent',
3
Added:
#superclass : 'MFTPage',
4
4
#instVars : [
5
Removed:
'workoutPlan'
5
Added:
'workoutRoutine'
6
6
],
7
7
#category : 'MyFitnessTracker-Components',
8
8
#package : 'MyFitnessTracker-Components'
@@ -12,7 +12,7 @@
12
12
MFTHomepage >> initialize [
13
13
14
14
super initialize.
15
Removed:
workoutPlan := MFTRoutine heavyDutyOneIdealRoutine
15
Added:
workoutRoutine := MFTRoutine placeholder
16
16
]
17
17
18
18
{ #category : 'rendering' }
@@ -20,33 +20,27 @@
20
20
21
21
html heading
22
22
level: 1;
23
Removed:
with: 'Workouts'.
24
Removed:
html render: MFTMonthCalendarComponent new.
25
Removed:
html heading
26
Removed:
level: 2;
27
Removed:
with: 'Next workout'.
23
Added:
with: 'Routine'.
24
Added:
self renderRoutineActivityForTodayOn: html.
25
Added:
28
26
html render:
29
Removed:
(MFTWorkoutComponent workout: workoutPlan nextPlannedWorkout).
27
Added:
(MFTWorkoutComponent workout: workoutRoutine nextPlannedWorkout).
30
28
html heading
31
29
level: 2;
32
30
with: 'Completed workouts'.
33
Removed:
workoutPlan completedWorkouts do: [ :workout |
31
Added:
workoutRoutine completedWorkouts do: [ :workout |
34
32
html render: (MFTWorkoutComponent workout: workout) ]
35
33
]
36
34
37
35
{ #category : 'rendering' }
38
Removed:
MFTHomepage >> style [
39
Removed:
^ 'color: red;'
40
Removed:
]
36
Added:
MFTHomepage >> renderRoutineActivityForTodayOn: html [
41
37
42
Removed:
{ #category : 'accessing' }
43
Removed:
MFTHomepage >> workoutPlan [
44
Removed:
45
Removed:
^ workoutPlan
38
Added:
| activity |
39
Added:
activity := self session user routine activityToday
46
40
]
47
41
48
42
{ #category : 'accessing' }
49
Removed:
MFTHomepage >> workoutPlan: anObject [
43
Added:
MFTHomepage >> title [
50
44
51
Removed:
workoutPlan := anObject
45
Added:
^ 'Home'
52
46
]
src/MyFitnessTracker-Components/MFTMonthCalendarComponent.class.st
@@ -1,14 +0,0 @@
1
Removed:
Class {
2
Removed:
#name : 'MFTMonthCalendarComponent',
3
Removed:
#superclass : 'WAMiniCalendar',
4
Removed:
#category : 'MyFitnessTracker-Components',
5
Removed:
#package : 'MyFitnessTracker-Components'
6
Removed:
}
7
Removed:
8
Removed:
{ #category : 'instance creation' }
9
Removed:
MFTMonthCalendarComponent class >> month: aMonth [
10
Removed:
11
Removed:
^ self new
12
Removed:
month: aMonth;
13
Removed:
yourself
14
Removed:
]
src/MyFitnessTracker-Components/MFTNavbarComponent.class.st
@@ -0,0 +1,38 @@
1
Added:
Class {
2
Added:
#name : 'MFTNavbarComponent',
3
Added:
#superclass : 'WAComponent',
4
Added:
#category : 'MyFitnessTracker-Components',
5
Added:
#package : 'MyFitnessTracker-Components'
6
Added:
}
7
Added:
8
Added:
{ #category : 'rendering' }
9
Added:
MFTNavbarComponent >> renderContentOn: html [
10
Added:
11
Added:
| pm |
12
Added:
pm := self session pageManager.
13
Added:
14
Added:
html navigation
15
Added:
style: 'position: fixed;
16
Added:
bottom: 2em;
17
Added:
left: 0;
18
Added:
right: 0';
19
Added:
with: [
20
Added:
html unorderedList
21
Added:
style: 'position: relative;
22
Added:
padding: 0.5em;
23
Added:
margin: 0 auto;
24
Added:
max-width: 61.8vw;
25
Added:
display: flex;
26
Added:
flex-direction: row;
27
Added:
justify-content: space-evenly;
28
Added:
border-radius: 1em 1em 0 0;
29
Added:
background-color: dimGray;
30
Added:
list-style-type: none';
31
Added:
with: [
32
Added:
pm mainPages collect: [ :page |
33
Added:
html listItem: [
34
Added:
html anchor
35
Added:
style: 'padding: 0.5em; color: white';
36
Added:
callback: [ pm setActivePage: page class ];
37
Added:
with: page title ] ] ] ]
38
Added:
]
src/MyFitnessTracker-Components/MFTPage.class.st
@@ -0,0 +1,12 @@
1
Added:
Class {
2
Added:
#name : 'MFTPage',
3
Added:
#superclass : 'WAComponent',
4
Added:
#category : 'MyFitnessTracker-Components',
5
Added:
#package : 'MyFitnessTracker-Components'
6
Added:
}
7
Added:
8
Added:
{ #category : 'accessing' }
9
Added:
MFTPage >> title [
10
Added:
11
Added:
^ self subclassResponsibility
12
Added:
]
src/MyFitnessTracker-Components/MFTPageManager.class.st
@@ -3,8 +3,9 @@
3
3
#superclass : 'Object',
4
4
#instVars : [
5
5
'mainPages',
6
Removed:
'footer',
7
Removed:
'activePage'
6
Added:
'activePage',
7
Added:
'navbar',
8
Added:
'footer'
8
9
],
9
10
#category : 'MyFitnessTracker-Components',
10
11
#package : 'MyFitnessTracker-Components'
@@ -25,7 +26,9 @@
25
26
{ #category : 'as yet unclassified' }
26
27
MFTPageManager >> defaultPublicPages [
27
28
28
Removed:
^ OrderedDictionary newFrom: { (#home -> MFTHomepage new) }
29
Added:
^ {
30
Added:
MFTHomepage new.
31
Added:
MFTWorkoutsPage new }
29
32
]
30
33
31
34
{ #category : 'accessing' }
@@ -44,7 +47,8 @@
44
47
MFTPageManager >> initialize [
45
48
46
49
mainPages := self defaultPublicPages.
47
Removed:
activePage := mainPages at: #home.
50
Added:
activePage := mainPages first.
51
Added:
navbar := MFTNavbarComponent new.
48
52
footer := MFTFooter new
49
53
]
50
54
@@ -68,7 +72,21 @@
68
72
]
69
73
70
74
{ #category : 'accessing' }
71
Removed:
MFTPageManager >> setActivePageAt: aKey [
75
Added:
MFTPageManager >> navbar [
72
76
73
Removed:
activePage := mainPages at: aKey
77
Added:
^ navbar
78
Added:
]
79
Added:
80
Added:
{ #category : 'accessing' }
81
Added:
MFTPageManager >> navbar: aNavbar [
82
Added:
83
Added:
navbar := aNavbar
84
Added:
]
85
Added:
86
Added:
{ #category : 'accessing' }
87
Added:
MFTPageManager >> setActivePage: aMFTPageClass [
88
Added:
89
Added:
activePage := mainPages
90
Added:
detect: [ :page | page class = aMFTPageClass ]
91
Added:
ifNone: [ MFTHomepage ]
74
92
]
src/MyFitnessTracker-Components/MFTRootComponent.class.st
@@ -27,6 +27,7 @@
27
27
MFTRootComponent >> children [
28
28
29
29
^ {
30
Added:
pageManager navbar.
30
31
pageManager activePage.
31
32
pageManager footer }
32
33
]
@@ -42,6 +43,7 @@
42
43
MFTRootComponent >> renderContentOn: html [
43
44
44
45
html
46
Added:
render: pageManager navbar;
45
47
render: pageManager activePage;
46
48
render: pageManager footer
47
49
]
@@ -54,7 +56,7 @@
54
56
aRoot meta
55
57
name: 'viewport';
56
58
content: 'width=device-width, initial-scale=1'.
57
Removed:
aRoot title: 'My Fitness Tracker'.
59
Added:
aRoot title: 'MFT ' , self session pageManager activePage title.
58
60
aRoot link
59
61
beShortcutIcon;
60
62
url: MFTFileLibrary / #faviconPng.
src/MyFitnessTracker-Components/MFTWorkoutComponent.class.st
@@ -20,31 +20,41 @@
20
20
MFTWorkoutComponent >> renderContentOn: html [
21
21
22
22
html div
23
Removed:
class: 'workout';
23
Added:
style: 'border: 1px solid dimGray;
24
Added:
border-radius: 1em;
25
Added:
padding: 1em;
26
Added:
max-width: 30em';
24
27
with: [
28
Added:
self renderWorkoutActionsOn: html.
25
29
html heading
26
30
level: 3;
27
31
with: workout status capitalized.
28
Removed:
self setGroupsAsTableOn: html ]
32
Added:
self renderWorkoutSetsAsTableOn: html ]
29
33
]
30
34
31
35
{ #category : 'rendering' }
32
Removed:
MFTWorkoutComponent >> setGroupsAsTableOn: html [
36
Added:
MFTWorkoutComponent >> renderWorkoutActionsOn: html [
33
37
38
Added:
html anchor
39
Added:
callback: [ self call: (MFTWorkoutEditComponent workout: workout) ];
40
Added:
with: 'Edit'
41
Added:
]
42
Added:
43
Added:
{ #category : 'rendering' }
44
Added:
MFTWorkoutComponent >> renderWorkoutSetsAsTableOn: html [
45
Added:
34
46
html table: [
35
47
html tableHead: [
36
48
html
37
Removed:
tableHeading: 'Group';
38
49
tableHeading: 'Set';
39
50
tableHeading: 'Exercise';
40
51
tableHeading: 'Reps';
41
52
tableHeading: 'Load' ].
42
Removed:
workout setGroups collect: [ :setGroup |
43
Removed:
setGroup sets collect: [ :set |
53
Added:
workout setGroups collectWithIndex: [ :setGroup :i |
54
Added:
setGroup sets collectWithIndex: [ :set :j |
44
55
html tableRow: [
45
Removed:
html tableData: (workout setGroups indexOf: setGroup).
46
56
html
47
Removed:
tableData: (Character value: 96 + (setGroup sets indexOf: set));
57
Added:
tableData: i asString , (Character alphabet at: j) asString;
48
58
tableData: set exercise;
49
59
tableData: set reps;
50
60
tableData: set load ] ] ] ]
src/MyFitnessTracker-Components/MFTWorkoutEditComponent.class.st
@@ -0,0 +1,35 @@
1
Added:
Class {
2
Added:
#name : 'MFTWorkoutEditComponent',
3
Added:
#superclass : 'WAComponent',
4
Added:
#instVars : [
5
Added:
'workout'
6
Added:
],
7
Added:
#category : 'MyFitnessTracker-Components',
8
Added:
#package : 'MyFitnessTracker-Components'
9
Added:
}
10
Added:
11
Added:
{ #category : 'accessing' }
12
Added:
MFTWorkoutEditComponent class >> workout: aMFTWorkout [
13
Added:
14
Added:
^ self new
15
Added:
workout: aMFTWorkout;
16
Added:
yourself
17
Added:
]
18
Added:
19
Added:
{ #category : 'rendering' }
20
Added:
MFTWorkoutEditComponent >> renderContentOn: html [
21
Added:
22
Added:
html render: workout setGroups
23
Added:
]
24
Added:
25
Added:
{ #category : 'accessing' }
26
Added:
MFTWorkoutEditComponent >> workout [
27
Added:
28
Added:
^ workout
29
Added:
]
30
Added:
31
Added:
{ #category : 'accessing' }
32
Added:
MFTWorkoutEditComponent >> workout: aMFTWorkout [
33
Added:
34
Added:
workout := aMFTWorkout
35
Added:
]
src/MyFitnessTracker-Components/MFTWorkoutsPage.class.st
@@ -0,0 +1,12 @@
1
Added:
Class {
2
Added:
#name : 'MFTWorkoutsPage',
3
Added:
#superclass : 'MFTPage',
4
Added:
#category : 'MyFitnessTracker-Components',
5
Added:
#package : 'MyFitnessTracker-Components'
6
Added:
}
7
Added:
8
Added:
{ #category : 'accessing' }
9
Added:
MFTWorkoutsPage >> title [
10
Added:
11
Added:
^ 'Workouts'
12
Added:
]