Prevent tracker realign from closing open dropdowns and datepicker

This commit is contained in:
2026-02-26 16:06:06 +01:00
parent c9f2259180
commit 7ee22b6c8f

View File

@@ -939,15 +939,69 @@ function insertTrackerAtMarker(marker, trackerElement) {
return false;
}
if (
trackerElement.parentElement === marker.parentElement
&& trackerElement.previousElementSibling === marker
) {
return true;
}
marker.parentElement.insertBefore(trackerElement, marker.nextSibling);
return true;
}
const TRACKER_INTERACTION_GRACE_MS = 2200;
function markTrackerInteraction(trackerElement) {
if (!trackerElement || !trackerElement.dataset) {
return;
}
trackerElement.dataset.realignBlockedUntil = String(Date.now() + TRACKER_INTERACTION_GRACE_MS);
}
function isTrackerInteractionActive(trackerElement) {
if (!trackerElement || !trackerElement.isConnected) {
return false;
}
const blockedUntil = parseInt(trackerElement.dataset.realignBlockedUntil || '0', 10);
if (!Number.isNaN(blockedUntil) && blockedUntil > Date.now()) {
return true;
}
if (trackerElement.querySelector('.fb-tracker-ai-wrapper--open')) {
return true;
}
const activeElement = document.activeElement;
return Boolean(activeElement && trackerElement.contains(activeElement));
}
function bindTrackerInteractionGuard(trackerElement) {
if (!trackerElement || trackerElement.dataset.realignGuardBound === '1') {
return;
}
trackerElement.dataset.realignGuardBound = '1';
const bumpInteraction = () => markTrackerInteraction(trackerElement);
trackerElement.addEventListener('focusin', bumpInteraction, true);
trackerElement.addEventListener('pointerdown', bumpInteraction, true);
trackerElement.addEventListener('mousedown', bumpInteraction, true);
trackerElement.addEventListener('click', bumpInteraction, true);
trackerElement.addEventListener('keydown', bumpInteraction, true);
}
function realignExistingTrackerUI(postElement, buttonBar, trackerElement, postNum = '?') {
if (!postElement || !trackerElement || !trackerElement.isConnected) {
return false;
}
bindTrackerInteractionGuard(trackerElement);
if (isTrackerInteractionActive(trackerElement)) {
return true;
}
const marker = ensureTrackerInsertionMarker(postElement, buttonBar, postNum);
if (!marker) {
return false;
@@ -3938,6 +3992,7 @@ async function createTrackerUI(postElement, buttonBar, postNum = '?', options =
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
font-size: 13px;
`;
bindTrackerInteractionGuard(container);
// Check current status (check all URL candidates to avoid duplicates)
const profileNumber = await getProfileNumber();