feat(sync): Sync now dans le menu Tools
Synchroniser est une ACTION, pas un reglage. Elle n'existait qu'au fond du panneau des reglages, a cote de l'URL et du jeton : on l'y configure une fois, on la declenche tous les jours. Sans URL, sans "Enable sync" ou sans mot de passe de sync, l'appui ouvre les reglages ET DESCEND jusqu'a la section - un bouton qui ne peut qu'echouer ne vaut pas mieux que pas de bouton, et repondre "Sync not configured" laisse chercher ou reparer. Le panneau n'a pas d'onglets, c'est une colonne longue : le battement dit lequel des blocs on est venu chercher. L'etat est lu SANS les secrets - hasEncPwd dit que le mot de passe existe sans le lire, ce que loadSyncConfig documente : les tirer les planterait dans le renderer pour la vie du processus. L'entree disparait sans le pont, comme la section : le frontend PHP n'a pas de sortie reseau. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -6623,6 +6623,26 @@ function setTheme(t) {
|
||||
Bridge.syncTitleBarTheme(t);
|
||||
}
|
||||
|
||||
/// Amene la section Sync sous les yeux, dans un panneau qui defile long.
|
||||
///
|
||||
/// Le panneau des reglages n'a pas d'onglets : c'est une seule colonne, et la
|
||||
/// section Sync est vers le bas. L'ouvrir sans y descendre reviendrait a dire
|
||||
/// "c'est quelque part la-dedans". Le liseré s'efface tout seul - il montre ou
|
||||
/// regarder, il ne decore pas.
|
||||
function revealSyncSettings() {
|
||||
const el = $('#syncField');
|
||||
if (!el) return;
|
||||
// Un tour d'horloge : le panneau vient d'etre montre, ses hauteurs ne sont
|
||||
// pas encore calculees et scrollIntoView n'aurait nulle part ou aller.
|
||||
setTimeout(() => {
|
||||
el.scrollIntoView({ block: 'start', behavior: 'smooth' });
|
||||
el.classList.add('is-flash');
|
||||
setTimeout(() => el.classList.remove('is-flash'), 2500);
|
||||
const box = $('#settingSyncEnabled');
|
||||
if (box && !box.checked) box.focus();
|
||||
}, 0);
|
||||
}
|
||||
|
||||
function openSettings() {
|
||||
$('#settingTheme').value = state.theme;
|
||||
$('#settingSort').value = state.sortBy + ':' + state.sortDir;
|
||||
@@ -6717,6 +6737,10 @@ function openSettings() {
|
||||
const syncField = document.getElementById('syncField');
|
||||
if (syncField) {
|
||||
syncField.style.display = Bridge.active ? '' : 'none';
|
||||
// Meme regle pour l'entree des outils : proposer une action que cette
|
||||
// version ne sait pas rendre vaut moins que de ne rien proposer.
|
||||
const syncNav = document.getElementById('sidebarSyncBtn');
|
||||
if (syncNav) syncNav.style.display = Bridge.active ? '' : 'none';
|
||||
if (Bridge.active) loadSyncConfig().then(refreshSyncUI);
|
||||
}
|
||||
|
||||
@@ -7752,6 +7776,22 @@ async function init() {
|
||||
$('#idleStayBtn').addEventListener('click', resetAutoLock);
|
||||
|
||||
// Settings slide-over
|
||||
// SYNCHRONISER DEPUIS LES OUTILS, ou reglez-la d'abord.
|
||||
//
|
||||
// Un bouton qui ne peut qu'echouer ne vaut pas mieux que pas de bouton :
|
||||
// sans URL ni mot de passe de sync, l'appui ouvre les reglages a l'endroit
|
||||
// ou l'on repare cela, plutot que de repondre "Sync not configured" et de
|
||||
// laisser chercher ou.
|
||||
$('#sidebarSyncBtn').addEventListener('click', async () => {
|
||||
// Sans les secrets : on ne veut savoir que si c'est configure, pas s'en
|
||||
// servir - les tirer les planterait dans le renderer pour la vie du
|
||||
// processus, ce que loadSyncConfig documente. hasEncPwd suffit a dire
|
||||
// que le mot de passe existe, sans le lire.
|
||||
const cfg = await loadSyncConfig(false);
|
||||
if (cfg && cfg.enabled && cfg.url && cfg.hasEncPwd) return runSyncNow();
|
||||
openSettings();
|
||||
revealSyncSettings();
|
||||
});
|
||||
$('#settingsBtn').addEventListener('click', openSettings);
|
||||
$('#settingsClose').addEventListener('click', closeSettings);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user