Initialize recovery dialog before renderer startup
This commit is contained in:
+39
-26
@@ -4315,6 +4315,44 @@ function showAppChoice({ message, title, confirmText, alternateText, cancelText
|
|||||||
return showAppDialog({ message, title, confirmText, alternateText, cancelText, showCancel: true });
|
return showAppDialog({ message, title, confirmText, alternateText, cancelText, showCancel: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let _appAlertListenersReady = false;
|
||||||
|
|
||||||
|
function setupAppAlertListeners() {
|
||||||
|
if (_appAlertListenersReady) return;
|
||||||
|
const confirm = document.getElementById('appAlertConfirmBtn');
|
||||||
|
const alternate = document.getElementById('appAlertAlternateBtn');
|
||||||
|
const cancel = document.getElementById('appAlertCancelBtn');
|
||||||
|
const close = document.getElementById('appAlertCloseBtn');
|
||||||
|
const modal = document.getElementById('appAlertModal');
|
||||||
|
if (!confirm || !alternate || !cancel || !close || !modal) return;
|
||||||
|
_appAlertListenersReady = true;
|
||||||
|
confirm.addEventListener('click', () => closeAppAlert(true));
|
||||||
|
alternate.addEventListener('click', () => closeAppAlert('alternate'));
|
||||||
|
cancel.addEventListener('click', () => closeAppAlert(false));
|
||||||
|
close.addEventListener('click', () => closeAppAlert(false));
|
||||||
|
modal.addEventListener('click', event => {
|
||||||
|
if (event.target === modal) closeAppAlert(false);
|
||||||
|
});
|
||||||
|
document.addEventListener('keydown', event => {
|
||||||
|
if (modal.style.display !== 'flex') return;
|
||||||
|
const focusable = [...modal.querySelectorAll('button:not([disabled]):not([hidden])')];
|
||||||
|
if (event.key === 'Tab' && focusable.length) {
|
||||||
|
const first = focusable[0];
|
||||||
|
const last = focusable.at(-1);
|
||||||
|
if ((!event.shiftKey && document.activeElement === last) || (event.shiftKey && document.activeElement === first)) {
|
||||||
|
event.preventDefault();
|
||||||
|
(event.shiftKey ? last : first).focus();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (event.key === 'Escape') {
|
||||||
|
event.preventDefault();
|
||||||
|
event.stopImmediatePropagation();
|
||||||
|
closeAppAlert(false);
|
||||||
|
}
|
||||||
|
}, true);
|
||||||
|
}
|
||||||
|
|
||||||
async function executeHealthCheck(hosters, _mode, generations) {
|
async function executeHealthCheck(hosters, _mode, generations) {
|
||||||
renderHealthCheckResults([]);
|
renderHealthCheckResults([]);
|
||||||
const result = await window.api.runHealthCheck({ hosters });
|
const result = await window.api.runHealthCheck({ hosters });
|
||||||
@@ -7169,32 +7207,6 @@ function setupListeners() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
document.getElementById('saveSettingsBtn').addEventListener('click', saveSettings);
|
document.getElementById('saveSettingsBtn').addEventListener('click', saveSettings);
|
||||||
document.getElementById('appAlertConfirmBtn').addEventListener('click', () => closeAppAlert(true));
|
|
||||||
document.getElementById('appAlertAlternateBtn').addEventListener('click', () => closeAppAlert('alternate'));
|
|
||||||
document.getElementById('appAlertCancelBtn').addEventListener('click', () => closeAppAlert(false));
|
|
||||||
document.getElementById('appAlertCloseBtn').addEventListener('click', () => closeAppAlert(false));
|
|
||||||
document.getElementById('appAlertModal').addEventListener('click', event => {
|
|
||||||
if (event.target.id === 'appAlertModal') closeAppAlert(false);
|
|
||||||
});
|
|
||||||
document.addEventListener('keydown', event => {
|
|
||||||
const modal = document.getElementById('appAlertModal');
|
|
||||||
if (modal?.style.display !== 'flex') return;
|
|
||||||
const focusable = [...modal.querySelectorAll('button:not([disabled]):not([hidden])')];
|
|
||||||
if (event.key === 'Tab' && focusable.length) {
|
|
||||||
const first = focusable[0];
|
|
||||||
const last = focusable[focusable.length - 1];
|
|
||||||
if ((!event.shiftKey && document.activeElement === last) || (event.shiftKey && document.activeElement === first)) {
|
|
||||||
event.preventDefault();
|
|
||||||
(event.shiftKey ? last : first).focus();
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (event.key === 'Escape') {
|
|
||||||
event.preventDefault();
|
|
||||||
event.stopImmediatePropagation();
|
|
||||||
closeAppAlert(false);
|
|
||||||
}
|
|
||||||
}, true);
|
|
||||||
|
|
||||||
document.getElementById('clearHistoryBtn').addEventListener('click', openHistoryClearModal);
|
document.getElementById('clearHistoryBtn').addEventListener('click', openHistoryClearModal);
|
||||||
document.getElementById('confirmHistoryClearBtn').addEventListener('click', confirmHistoryClear);
|
document.getElementById('confirmHistoryClearBtn').addEventListener('click', confirmHistoryClear);
|
||||||
@@ -8139,6 +8151,7 @@ function updateStatsPanel() {
|
|||||||
window.api.onUpdateAvailable(showUpdateBanner);
|
window.api.onUpdateAvailable(showUpdateBanner);
|
||||||
window.api.onUpdateProgress(handleUpdateProgress);
|
window.api.onUpdateProgress(handleUpdateProgress);
|
||||||
window.api.onPrepareClose(prepareForWindowClose);
|
window.api.onPrepareClose(prepareForWindowClose);
|
||||||
|
setupAppAlertListeners();
|
||||||
init().then(() => {
|
init().then(() => {
|
||||||
window.api.signalCloseHandshakeReady();
|
window.api.signalCloseHandshakeReady();
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user