Let hovered space toggles override stale focus

This commit is contained in:
pewdiepie-archdaemon
2026-06-01 14:45:47 +09:00
parent e846269d61
commit ace470b437

View File

@@ -22,6 +22,10 @@ function _isTextEditingTarget(target) {
return !!(el && el.closest('input, textarea, select, [contenteditable="true"], [contenteditable=""]'));
}
function _targetEl(target) {
return target && target.nodeType === 1 ? target : target?.parentElement || null;
}
const SPACE_CARD_SELECTOR = [
'#email-lib-modal .doclib-card',
'#doclib-modal .doclib-card',
@@ -69,6 +73,27 @@ function _spaceWindowId(win) {
return null;
}
function _spaceIsBlocked(e, surface) {
const target = _targetEl(e.target);
if (!target) return false;
if (_isTextEditingTarget(target)) return !surface || surface.contains(target);
const blocked = target.closest?.(SPACE_BLOCKED_SELECTOR);
return !!(blocked && (!surface || surface.contains(blocked)));
}
function _activateSpaceCard(card) {
if (!card || !document.contains(card)) return false;
if (card.matches('#tasks-modal .task-card')) {
const titleRow = card.querySelector('.memory-item-title')?.closest('div');
if (titleRow) {
titleRow.click();
return true;
}
}
card.click();
return true;
}
function _initHoverCardSpaceToggle() {
if (document._odysseusHoverCardSpaceToggle) return;
document._odysseusHoverCardSpaceToggle = true;
@@ -88,15 +113,14 @@ function _initHoverCardSpaceToggle() {
}, true);
document.addEventListener('keydown', (e) => {
if (e.code !== 'Space' || e.repeat) return;
if (_isTextEditingTarget(e.target)) return;
const blocked = e.target?.closest?.(SPACE_BLOCKED_SELECTOR);
if (blocked) return;
if (hoveredToggleCard && _isSpaceVisible(hoveredToggleCard)) {
if (_spaceIsBlocked(e, hoveredToggleCard)) return;
e.preventDefault();
hoveredToggleCard.click();
_activateSpaceCard(hoveredToggleCard);
return;
}
if (hoveredDockChip && document.contains(hoveredDockChip)) {
if (_spaceIsBlocked(e, hoveredDockChip)) return;
const id = hoveredDockChip.dataset.modalId;
if (id && Modals.isRegistered(id)) {
e.preventDefault();
@@ -106,6 +130,7 @@ function _initHoverCardSpaceToggle() {
}
const id = _spaceWindowId(hoveredToggleWindow);
if (!id) return;
if (_spaceIsBlocked(e, hoveredToggleWindow)) return;
e.preventDefault();
Modals.minimize(id);
}, true);