mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-06-17 02:05:22 -04:00
Improve space toggles and email warmup
This commit is contained in:
+76
-6
@@ -5,10 +5,13 @@
|
||||
*/
|
||||
|
||||
import themeModule from './theme.js';
|
||||
import * as Modals from './modalManager.js';
|
||||
|
||||
let toastEl = null;
|
||||
let autoScrollEnabled = true;
|
||||
let hoveredToggleCard = null;
|
||||
let hoveredToggleWindow = null;
|
||||
let hoveredDockChip = null;
|
||||
|
||||
// Smooth scroll state
|
||||
let _scrollRafId = null;
|
||||
@@ -19,25 +22,92 @@ function _isTextEditingTarget(target) {
|
||||
return !!(el && el.closest('input, textarea, select, [contenteditable="true"], [contenteditable=""]'));
|
||||
}
|
||||
|
||||
const SPACE_CARD_SELECTOR = [
|
||||
'#email-lib-modal .doclib-card',
|
||||
'#doclib-modal .doclib-card',
|
||||
'#memory-modal .doclib-card',
|
||||
'#tasks-modal .task-card',
|
||||
'#tasks-modal .task-log-row',
|
||||
'#research-overlay [data-job-id]',
|
||||
'#cookbook-modal .doclib-card',
|
||||
'.email-reader-tab-modal .doclib-card',
|
||||
'.email-window-modal .doclib-card',
|
||||
].join(', ');
|
||||
|
||||
const SPACE_BLOCKED_SELECTOR = [
|
||||
'button',
|
||||
'a',
|
||||
'input',
|
||||
'textarea',
|
||||
'select',
|
||||
'[contenteditable="true"]',
|
||||
'[contenteditable=""]',
|
||||
'.recipient-chip',
|
||||
'.doclib-card-dropdown',
|
||||
'.email-card-dropdown',
|
||||
'.task-log-row-actions',
|
||||
'.modal-header',
|
||||
].join(', ');
|
||||
|
||||
function _visibleModalForSpace(win) {
|
||||
const modal = win?.closest?.('.modal[id]');
|
||||
if (!modal || modal.classList.contains('hidden') || modal.classList.contains('modal-minimized')) return null;
|
||||
return modal;
|
||||
}
|
||||
|
||||
function _isSpaceVisible(el) {
|
||||
if (!el || !document.contains(el)) return false;
|
||||
if (el.closest?.('.modal.hidden, .modal.modal-minimized, [hidden]')) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
function _spaceWindowId(win) {
|
||||
if (!win || !document.contains(win)) return null;
|
||||
const modal = _visibleModalForSpace(win);
|
||||
if (modal && Modals.isRegistered(modal.id)) return modal.id;
|
||||
if (win.closest?.('.doc-editor-pane') && Modals.isRegistered('doc-panel') && !Modals.isMinimized('doc-panel')) return 'doc-panel';
|
||||
return null;
|
||||
}
|
||||
|
||||
function _initHoverCardSpaceToggle() {
|
||||
if (document._odysseusHoverCardSpaceToggle) return;
|
||||
document._odysseusHoverCardSpaceToggle = true;
|
||||
document.addEventListener('pointerover', (e) => {
|
||||
const card = e.target?.closest?.('#email-lib-modal .doclib-card, #doclib-modal .doclib-card, .email-reader-tab-modal .doclib-card, .email-window-modal .doclib-card');
|
||||
const chip = e.target?.closest?.('.minimized-dock-chip[data-modal-id]');
|
||||
if (chip) hoveredDockChip = chip;
|
||||
const card = e.target?.closest?.(SPACE_CARD_SELECTOR);
|
||||
if (card) hoveredToggleCard = card;
|
||||
const win = e.target?.closest?.('.modal:not(.hidden):not(.modal-minimized) .modal-content, .doc-editor-pane');
|
||||
if (win) hoveredToggleWindow = win;
|
||||
}, true);
|
||||
document.addEventListener('pointerout', (e) => {
|
||||
if (!hoveredToggleCard) return;
|
||||
const next = e.relatedTarget;
|
||||
if (!next || !hoveredToggleCard.contains(next)) hoveredToggleCard = null;
|
||||
if (hoveredDockChip && (!next || !hoveredDockChip.contains(next))) hoveredDockChip = null;
|
||||
if (hoveredToggleCard && (!next || !hoveredToggleCard.contains(next))) hoveredToggleCard = null;
|
||||
if (hoveredToggleWindow && (!next || !hoveredToggleWindow.contains(next))) hoveredToggleWindow = null;
|
||||
}, true);
|
||||
document.addEventListener('keydown', (e) => {
|
||||
if (e.code !== 'Space' || e.repeat || !hoveredToggleCard || !document.contains(hoveredToggleCard)) return;
|
||||
if (e.code !== 'Space' || e.repeat) return;
|
||||
if (_isTextEditingTarget(e.target)) return;
|
||||
const blocked = e.target?.closest?.('button, a, input, textarea, select, [contenteditable="true"], [contenteditable=""], .recipient-chip, .doclib-card-dropdown, .email-card-dropdown');
|
||||
const blocked = e.target?.closest?.(SPACE_BLOCKED_SELECTOR);
|
||||
if (blocked) return;
|
||||
if (hoveredToggleCard && _isSpaceVisible(hoveredToggleCard)) {
|
||||
e.preventDefault();
|
||||
hoveredToggleCard.click();
|
||||
return;
|
||||
}
|
||||
if (hoveredDockChip && document.contains(hoveredDockChip)) {
|
||||
const id = hoveredDockChip.dataset.modalId;
|
||||
if (id && Modals.isRegistered(id)) {
|
||||
e.preventDefault();
|
||||
Modals.restore(id);
|
||||
}
|
||||
return;
|
||||
}
|
||||
const id = _spaceWindowId(hoveredToggleWindow);
|
||||
if (!id) return;
|
||||
e.preventDefault();
|
||||
hoveredToggleCard.click();
|
||||
Modals.minimize(id);
|
||||
}, true);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user