[OCaml] High Intensity Training Online
feat move feedback to a button in the top action group
The 'How are you feeling?' section sat below the table, out of reach past a long log. Replace it with a primary-colour outline 'Record feedback' button beside 'View progress', which opens the same modal. The modal stays in the DOM; past reports list below the table under a heading; the post-workout nudge moves up beside the buttons. Drop the dead feedback-section and feedback-toggle CSS.
Changed files
lib/presenter/pages_logbook.ml
@@ -319,7 +319,9 @@
319
319
html_page ~viewer ~request ~active:"logbook" ~logging "Logbook"
320
320
([
321
321
tag "h1" [] [ txt "Logbook" ];
322
Removed:
(* Actions above the ledger. View progress opens the per-exercise chart. *)
322
Added:
(* Actions above the ledger, so they are reachable without scrolling past
323
Added:
a long table. View progress opens the per-exercise chart; Record
324
Added:
feedback opens the subjective-feedback modal. *)
323
325
tag "div"
324
326
[ class_ "button-group logbook-actions-bar" ]
325
327
[
@@ -330,7 +332,19 @@
330
332
Dream_html.attr "data-hito-app-link";
331
333
]
332
334
[ txt "View progress" ];
335
Added:
tag "a"
336
Added:
[
337
Added:
class_ "button outline";
338
Added:
Dream_html.string_attr "href" "/logbook?feedback=start";
339
Added:
Dream_html.attr "data-hito-feedback-open";
340
Added:
]
341
Added:
[ txt "Record feedback" ];
333
342
];
343
Added:
(if suggest_feedback then
344
Added:
tag "p"
345
Added:
[ class_ "eyebrow" ]
346
Added:
[ txt "Workout saved — add feedback while it is fresh." ]
347
Added:
else txt "");
334
348
]
335
349
@ (match calendar with Some cal -> [ calendar_grid cal ] | None -> [])
336
350
@ [
@@ -412,33 +426,15 @@
412
426
records);
413
427
];
414
428
]));
415
Removed:
tag "section"
416
Removed:
[ class_ "feedback-section" ]
417
Removed:
([
418
Removed:
tag "h2" [] [ txt "How are you feeling?" ];
419
Removed:
(if suggest_feedback then
420
Removed:
tag "p"
421
Removed:
[ class_ "eyebrow" ]
422
Removed:
[ txt "Workout saved — add feedback while it is fresh." ]
423
Removed:
else txt "");
424
Removed:
tag "p" []
425
Removed:
[
426
Removed:
txt
427
Removed:
"Rate any factor against your usual. Leave the rest \
428
Removed:
unselected.";
429
Removed:
];
430
Removed:
tag "a"
431
Removed:
[
432
Removed:
class_ "feedback-toggle";
433
Removed:
Dream_html.string_attr "href" "/logbook?feedback=start";
434
Removed:
Dream_html.attr "data-hito-feedback-open";
435
Removed:
]
436
Removed:
[ txt "Record feedback" ];
437
Removed:
feedback_modal request ~open_:feedback_open;
438
Removed:
]
439
Removed:
@ feedback_list feedback
440
Removed:
@
441
Removed:
match delete_record with
442
Removed:
| Some record -> [ delete_record_dialog request record ]
443
Removed:
| None -> []);
444
Removed:
])
429
Added:
]
430
Added:
(* The subjective-feedback modal stays in the DOM so the Record feedback
431
Added:
button opens it. Past reports, when any, list below; the delete-confirm
432
Added:
dialog appears only when a row asked for it. *)
433
Added:
@ [ feedback_modal request ~open_:feedback_open ]
434
Added:
@ (match feedback_list feedback with
435
Added:
| [] -> []
436
Added:
| list -> tag "h2" [] [ txt "Recent feedback" ] :: list)
437
Added:
@
438
Added:
match delete_record with
439
Added:
| Some record -> [ delete_record_dialog request record ]
440
Added:
| None -> [])
lib/web/assets/hito.css
@@ -1121,37 +1121,6 @@
1121
1121
background: var(--oxblood-hover);
1122
1122
}
1123
1123
1124
Removed:
/* The subjective feedback section on the Logbook. A bordered block separating
1125
Removed:
the standalone feedback form from the workout list. Past reports read as a
1126
Removed:
plain list. */
1127
Removed:
.feedback-section {
1128
Removed:
margin-top: 2rem;
1129
Removed:
border-top: 1px solid var(--rule);
1130
Removed:
padding-top: 1rem;
1131
Removed:
}
1132
Removed:
/* The feedback form is gated behind a disclosure. The summary reads as a
1133
Removed:
secondary button so the reveal control matches the rest of the UI. */
1134
Removed:
.feedback-toggle {
1135
Removed:
display: inline-block;
1136
Removed:
cursor: pointer;
1137
Removed:
padding: 0.55rem 1.1rem;
1138
Removed:
border: 1px solid var(--brass);
1139
Removed:
border-radius: var(--radius);
1140
Removed:
background: var(--brass-wash);
1141
Removed:
color: var(--ink);
1142
Removed:
font-weight: 600;
1143
Removed:
list-style: none;
1144
Removed:
}
1145
Removed:
.feedback-toggle::-webkit-details-marker {
1146
Removed:
display: none;
1147
Removed:
}
1148
Removed:
.feedback-toggle:hover {
1149
Removed:
color: var(--on-brass);
1150
Removed:
background: var(--brass);
1151
Removed:
}
1152
Removed:
.feedback-disclosure[open] .feedback-toggle {
1153
Removed:
margin-bottom: 1rem;
1154
Removed:
}
1155
1124
.feedback-list {
1156
1125
margin-top: 1rem;
1157
1126
list-style: disc;