Shotlog - Screenshot Log
Public Made by Adomby adom
See the shots your AI never showed you, and know it actually SAW them. adom-shotlog streams every screenshot the AI gathers into a live gallery (webview/pup/browser/phone), reports whether a human is really watching and on which surface, and ingests Adom Bridge child-window arrays via --meta.
Broaden the tooltip guard: suppress over any open popover, not just the same card's #4
Closes adom/adom-shotlog#3.
0.28.2 already guards this case, and the comment quotes Ray verbatim:
// A card whose info overlay is REVEALED (compact mode ⓘ) is being read:
// no tooltip may float over it (Ray: "the tooltip obscures the popover").
if (el.closest && el.closest(".shot-card")?.querySelector(".card-info.show")) return;
The guard is card-scoped: it only fires when the hovered element sits inside a .shot-card whose OWN .card-info is open. Ray hit the same complaint again with a different surface open, and that path is unguarded, so a .hover-popover.show elsewhere still gets covered by the 600ms tooltip.
Change
Keep the existing card-scoped check, add a global one:
if (document.querySelector(".hover-popover.show, .card-info.show")) return;
Nothing incidental covers something the human deliberately opened. Both surfaces are explicitly opened by a click or a deliberate hover, so suppressing an automatic tooltip while either is up matches the intent already encoded at index.html:1219, where the ⓘ hover calls window._hideTip().
Verified
node --checkon the main script block: OK.cargo build --releaseclean, 7 warnings, identical to baseline; confirmed the new selector is present in the rebuilt binary (the HTML isinclude_str!-embedded).
I could NOT reproduce Ray's original screenshot on 0.28.2 to prove the exact path, so treat this as closing the obvious hole rather than a confirmed repro. If the compact-ⓘ case was the whole complaint, this is still harmless: it only ever suppresses a tooltip while a popover is genuinely open.
Not merging this myself, adom-shotlog is yours.
Diff Skip to comments (1)
@@ -1,2078 +1,2086 @@⋯ 286 unchanged lines ⋯ .shot-card-img { display: block; width: 100%; height: 220px; flex-shrink: 0; background: #111; object-fit: contain; object-position: center top; transition: opacity .15s; } .shot-card:active .shot-card-img { opacity: .85; }-/* Direct-to-fullscreen shortcut: a ⛶ button on the thumbnail (hover-revealed)- that skips the modal and fills the window in ONE click. The image itself- still opens the modal on click — this is purely additional. */+/* Fullscreen affordance: a ⛶ button on the thumbnail (hover-revealed).+ The thumbnail IMAGE also fills the window in one click (see the click+ handler on img, "ONE click on a thumbnail goes STRAIGHT to fill-window"),+ so this button is the discoverable, keyboard-focusable route to the same+ thing rather than a separate shortcut past the modal. */ .card-img-wrap { position: relative; } .card-fill-btn { position: absolute; top: 10px; right: 10px; width: 32px; height: 32px; display: inline-flex; align-items: center; justify-content: center;⋯ 626 unchanged lines ⋯ const tip = $('global-tooltip'); let cx=0, cy=0, timer=null; document.addEventListener('mousemove', e => { cx=e.clientX; cy=e.clientY; }, true); function show(el) {- // A card whose info overlay is REVEALED (compact mode ⓘ) is being read:- // no tooltip may float over it (Ray: "the tooltip obscures the popover").+ // Nothing incidental may cover something the human deliberately opened.+ // This started as a card-scoped check for the compact-mode ⓘ overlay+ // (Ray: "the tooltip obscures the popover"), but the same complaint came+ // back with a DIFFERENT surface open: the guard only fired when the+ // hovered element sat inside a .shot-card whose OWN overlay was showing,+ // so any other open popover still got covered. Suppress over any of them. if (el.closest && el.closest('.shot-card')?.querySelector('.card-info.show')) return;+ if (document.querySelector('.hover-popover.show, .card-info.show')) return; // Rich (authored, trusted) HTML via el._ttHtml; else plain text. Dynamic // values interpolated into _ttHtml are escaped by the builders below. if (el._ttHtml) { tip.innerHTML = el._ttHtml; }⋯ 1145 unchanged lines ⋯ </script> </body> </html>+
Comments
Log in to comment.