9cdd7a15f40c41874620a7d2bc907d77489f7746
braney
  Sat Sep 26 17:43:32 2026 -0700
docent: setVis:, rightClick:, and drag: then: none / dialog: auto, refs #37892, #38035, #38071, #38087

setVis: sets a track's visibility with its own dropdown under the image. The change
event fires and the page's handler runs, with no navigation. track: asks for the mode in
a URL, so it cannot see what that handler does to the page.

rightClick: opens the track right-click menu and picks an entry by its text. An exact
match wins over a substring. A miss fails the run and lists the entries on offer.

drag: then: none leaves the drag-select dialog open for later click: steps. dialog: auto
hands the selection to dragSelect.selectEnd(), so the page decides between the dialog
and a straight zoom instead of the verb forcing the dialog on.

A track name ending in * now matches a row id by prefix, for custom tracks. shot: also
captures an open right-click menu.

diff --git src/hg/utils/docent/tests/README.txt src/hg/utils/docent/tests/README.txt
index e2baee6864e..8c0e5a5b676 100644
--- src/hg/utils/docent/tests/README.txt
+++ src/hg/utils/docent/tests/README.txt
@@ -173,31 +173,36 @@
     them. views asserts wgEncodeRegMarkH3k27ac comes back, rather than working around it.
     Whether Docent should be cleverer here is an open question, not a settled one.
   * `hideKids` on a VIEW has to enumerate its leaves (a view holds no sub-containers to
     stop at), so views sends 188 variables in a 6,986-character request. That is under
     Apache's 8,190 limit with less room than is comfortable. Its `noText: "Too Long"` is
     what turns a future overflow into a clear failure instead of a strange one.
 
 Still to write
 --------------
 
   mouseover:      by item: on stacked items, and the timing case where a neighbour's
                   tooltip is still up on arrival
   pinShot:        several tooltips in one figure, cursors drawn
   convert:        quickLift onto a GenArk haplotype, hideDefaults re-checked -- note a
                   session taken after it cannot be checked in, see #38046
-  drag:           each of then: zoom / highlight / cancel
+  drag:           each of then: zoom / highlight / cancel. then: none and dialog: auto are
+                  covered only by regress/rm38071
+  setVis:         covered only by regress/rm38035 (in: visible). in: group, a mode the
+                  dropdown lacks, and a track with no dropdown are untested
+  rightClick:     covered only by regress/rm38035 and rm38087, all with pick: and frac:.
+                  item:, no pick: (menu left open, shot), and a pick that misses are untested
   addHub:,
   addPublicHub:   the two hub attach paths (a stable hub URL is the hard part)
   montage:        panel order, lettering, a named shot that was never taken
   goShow:         the suggestion menu, including a `pick:` that matches nothing
   loadSession:    the three remote forms -- only the local-file form is covered
   hubUpload:,
   expect value:   covered only by regress/rm38398 (one hub.txt, then the file card), not
                   by a case here. Several files in one step, as a batch, is untested.
   the YAML lint   `{item:name}` with no space warns and drops the argument. This needs a
                   test that reads stderr, which the harness does not do yet.
 
 A test that needs a stable server-side fixture (a hub, a custom track) should carry it
 in the script rather than assume something on disk.
 
 The one fixture that cannot be carried anywhere is a login. hgCollection refuses a