1
0

Minor cleanup
All checks were successful
Build and test project / build-and-test (push) Successful in 1m33s

This commit is contained in:
2026-03-22 12:38:37 +01:00
parent d4d74d499e
commit 2f1330ec32
6 changed files with 29 additions and 47 deletions

View File

@@ -21,6 +21,7 @@ export default [
HTMLElement: 'readonly',
Worker: 'readonly',
requestAnimationFrame: 'readonly',
location: 'readonly',
// JSZip loaded via script tag
JSZip: 'readonly',
},

View File

@@ -212,6 +212,11 @@ h2 {
border-color: var(--border);
}
.mode-card-disabled {
opacity: 0.5;
cursor: not-allowed;
}
.mode-card-selected {
border-color: var(--primary);
box-shadow: 0 0 0 1px var(--primary), var(--shadow);

View File

@@ -185,8 +185,7 @@ function goToModeSelection() {
const patchesHint = $('mode-patches-hint');
if (autoModeNoPatchesAvailable) {
patchesRadio.disabled = true;
patchesCard.style.opacity = '0.5';
patchesCard.style.cursor = 'not-allowed';
patchesCard.classList.add('mode-card-disabled');
patchesHint.hidden = false;
// Auto-select NickelMenu since it's the only available option.
const nmRadio = $q('input[value="nickelmenu"]', stepMode);
@@ -194,8 +193,7 @@ function goToModeSelection() {
nmRadio.dispatchEvent(new Event('change'));
} else {
patchesRadio.disabled = false;
patchesCard.style.opacity = '';
patchesCard.style.cursor = '';
patchesCard.classList.remove('mode-card-disabled');
patchesHint.hidden = true;
}
@@ -468,24 +466,9 @@ btnErrorBack.addEventListener('click', () => {
showStep(stepPatches);
});
// "Start Over" — full reset of all state, back to step 1.
// "Start Over" — reload the page for a guaranteed clean slate.
btnRetry.addEventListener('click', () => {
state.device.disconnect();
state.firmwareURL = null;
state.resultTgz = null;
state.resultNmZip = null;
state.manualMode = false;
state.selectedPrefix = null;
state.patchesLoaded = false;
state.isRestore = false;
state.selectedMode = null;
state.nickelMenuOption = null;
btnDeviceNext.hidden = false;
btnDeviceRestore.hidden = false;
setNavLabels(TL.NAV_DEFAULT);
setNavStep(1);
showStep(stepConnect);
location.reload();
});
// =============================================================================
@@ -494,31 +477,24 @@ btnRetry.addEventListener('click', () => {
// Modal dialogs for "How It Works" (disclaimer) and "Privacy" (analytics info).
// Clicking the backdrop (the <dialog> element itself) also closes them.
const dialog = $('how-it-works-dialog');
$('btn-how-it-works').addEventListener('click', (e) => {
/** Wire up a <dialog>: open button, close button, and backdrop click to close. */
function setupDialog(dialogId, openBtnId, closeBtnId) {
const dlg = $(dialogId);
$(openBtnId).addEventListener('click', (e) => {
e.preventDefault();
dialog.showModal();
dlg.showModal();
});
$('btn-close-dialog').addEventListener('click', () => {
dialog.close();
});
dialog.addEventListener('click', (e) => {
if (e.target === dialog) dialog.close();
$(closeBtnId).addEventListener('click', () => dlg.close());
dlg.addEventListener('click', (e) => {
if (e.target === dlg) dlg.close();
});
}
setupDialog('how-it-works-dialog', 'btn-how-it-works', 'btn-close-dialog');
// Privacy dialog is only shown when analytics are enabled.
if (analyticsEnabled()) {
$('btn-privacy').hidden = false;
$('privacy-link-separator').hidden = false;
}
const privacyDialog = $('privacy-dialog');
$('btn-privacy').addEventListener('click', (e) => {
e.preventDefault();
privacyDialog.showModal();
});
$('btn-close-privacy').addEventListener('click', () => {
privacyDialog.close();
});
privacyDialog.addEventListener('click', (e) => {
if (e.target === privacyDialog) privacyDialog.close();
});
setupDialog('privacy-dialog', 'btn-privacy', 'btn-close-privacy');

View File

@@ -383,7 +383,7 @@ export function initNickelMenu(state) {
showNmDone('download');
}
} catch (err) {
state.showError(TL.STATUS.NM_INSTALL_FAILED + err.message);
state.showError(TL.STATUS.NM_INSTALL_FAILED(err.message));
}
}

View File

@@ -331,7 +331,7 @@ export function initPatchesFlow(state) {
} catch (err) {
btnWrite.disabled = false;
btnWrite.textContent = TL.BUTTON.WRITE_TO_KOBO;
state.showError(TL.STATUS.WRITE_FAILED + err.message);
state.showError(TL.STATUS.WRITE_FAILED(err.message));
}
});

View File

@@ -35,8 +35,8 @@ export const TL = {
EXTRACTING: 'Extracting KoboRoot.tgz...',
APPLYING_PATCHES: 'Applying patches...',
NO_FIRMWARE_URL: 'No download URL available for this device.',
WRITE_FAILED: 'Failed to write KoboRoot.tgz: ',
NM_INSTALL_FAILED: 'NickelMenu installation failed: ',
WRITE_FAILED: (msg) => `Failed to write KoboRoot.tgz: ${msg}`,
NM_INSTALL_FAILED: (msg) => `NickelMenu installation failed: ${msg}`,
EXTRACT_FAILED: 'KoboRoot.tgz not found in software update',
},