Bug #16981
openDashboard traffic graph tooltips persist after touch scrolling
0%
Description
Observed on pfSense Plus 26.03.1 using a mobile touch browser.
Reproduction:
1. Add a Traffic Graphs widget to the dashboard.
2. Scroll the dashboard until a graph enters the viewport.
3. Continue scrolling until the graph leaves the viewport.
4. Tap a graph point, then scroll again.
- Touch scrolling creates zero-valued NVD3 tooltips at the top-left of the viewport, piled on top of one another.
- Tooltips remain visible after the graph leaves the viewport.
- Tapping a real point moves one tooltip to the correct point and shows live values, but it also remains visible after scrolling.
- Scrolling must not create tooltips.
- A tooltip shown by tapping a data point must disappear when the interaction ends or the graph leaves the viewport.
Cause:
The vendored NVD3 interactive guideline reads clientX/clientY directly from TouchEvent. Those coordinates live on the active or changed touch, so the existing calculation yields invalid coordinates. The guideline also lacks touchend/touchcancel cleanup. Dashboard scrolling does not otherwise dismiss an already-visible chart tooltip.
- Normalize TouchEvent to the active or changed touch before calculating guideline and tooltip positions.
- Hide interactive guideline tooltips on touchend and touchcancel.
- Hide Traffic Graphs widget tooltips on window scroll.
- Frozen mobile reproduction failed before the change with two persistent zero-valued tooltips.
- The unchanged reproduction passes afterward with no tooltip left visible.
- Tapping a real point shows one correctly positioned tooltip with live values; scrolling hides it.
- Confirmed on the affected physical phone.
NVD3 upstream report: https://github.com/novus/nvd3/issues/2240
NVD3 upstream fix: https://github.com/novus/nvd3/pull/2241
🤖 Generated by OpenAI Codex and posted on behalf of Andre Brait.
Updated by Andre Brait about 24 hours ago
Fix submitted for review: https://github.com/pfsense/pfsense/pull/4759
The PR contains the vendored NVD3 touch-coordinate/lifecycle fix and the dashboard scroll cleanup. Its exact head (360849fe62a681c5a44629fe932f60b9cabe592a) is the version validated on the affected physical phone.
🤖 Generated by OpenAI Codex and posted on behalf of Andre Brait.