Measure the time between two events by long-pressing them
"How long after eating did he poo?" is answerable from the log, but only by reading two times off the screen and subtracting them — and the pair is often on different days, so it is rarely on screen together at all. Hold one row, hold another, and a bar along the bottom does the subtraction and keeps it until you clear it, which is what lets you change day between the two picks. Any row that is a single moment can be picked: history, notes, weigh-ins. Sleep and walk rows cannot, being spans — measuring from one would need a rule about which end, and a rule you have to remember is worse than the feature. The picks are a module-level variable rather than storage. A measurement is a question you are asking now, not a setting; but module-level is also what carries it through the re-render a background sync causes every minute, which would otherwise wipe a half-made measurement. Ids that stop resolving — deleted here, tombstoned by another device — leave the pick on the next render instead of lingering as half a pair. Two additions beyond what was asked. Holding a picked row unpicks it: that is not a third selection but an undo of one, and without it a mis-press costs a clear. And the reading is ordered by time rather than by which was pressed first, so it is always chronological and never negative — pressing upward through a log is the natural way to read it. The press mechanics are all load-bearing: a finger that travels is a scroll and cancels, a fired press swallows the click that would otherwise also open the edit dialog, and the platform's own long-press menu is suppressed. That last part needs user-select: none on the rows, which costs the ability to select a note's text to copy. Worth stating plainly — it is a real loss, taken because holding a row now means something else. checks/extract.mjs gained getters for mutable bindings while writing the checks for this. It only ever returned a let's value at load time, so measurePick went stale the moment the code reassigned it and the checks were quietly asserting against a snapshot. Any future check reading a mutable binding would have hit the same thing.
This commit is contained in:
@@ -70,6 +70,18 @@ of them, because logging has to be one tap from wherever you are.
|
||||
- The bar can still wrap, and does below about 300px. Its height changes when
|
||||
it does and the tab bar sticks to that height, which is why `--day-bar-h` is
|
||||
kept current by a `ResizeObserver` rather than measured once.
|
||||
- **Long-press two event rows to measure between them.** "How long after eating
|
||||
did he poo?" is answerable from the log, but only by reading two times off the
|
||||
screen and subtracting — and the pair is often on different days, so it is
|
||||
rarely on screen together. A bar along the bottom holds the gap until you
|
||||
clear it, so changing day mid-measurement is fine. Any row that is one event
|
||||
at one moment can be picked: history, notes, weigh-ins. Sleep and walk rows
|
||||
cannot, being spans rather than moments. A third pick is refused while two are
|
||||
held; pressing a picked row unpicks it. The picks live in a variable rather
|
||||
than `localStorage` — a measurement is a question you are asking now, not a
|
||||
setting — but being module-level is what carries them through the re-render a
|
||||
background sync causes every minute. Long-press has no keyboard equivalent, so
|
||||
this is touch and mouse only.
|
||||
- Each tab is a `.tab-panel` wrapper around the existing sections. The
|
||||
**wrapper** is what gets hidden, never the sections: `walk-timeline` and
|
||||
`walk-trend` carry their own `hidden`, set by `renderWalkPatterns` once a walk
|
||||
|
||||
Reference in New Issue
Block a user