Release v2.4.0 — Erzwungene Einstellungen: about:config-Prefs bei jedem Start setzen

Neuer forcedPrefs-WebExtension-Experiment (Services.prefs) setzt beim Start
globale Prefs (Startseite aus, Kartenansicht, nicht gruppiert, absteigend,
3-Spalten-Layout, nicht auto-gelesen) sowie pro Identität die Signatur-/
Antwort-Einstellungen. Pro Setting im Options-Dialog (⚙-Tab) abschaltbar.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015PZHd9vRsBiH8cKYdQo1Yv
This commit is contained in:
Kendrick Bollens
2026-07-22 14:24:43 +02:00
parent 83d0d52a05
commit d244273e44
8 changed files with 260 additions and 1 deletions

View File

@@ -1049,6 +1049,13 @@
</div>
</div>
<!-- Erzwungene Einstellungen -->
<div class="card">
<div class="card-title">Erzwungene Einstellungen</div>
<div class="card-desc">Diese Thunderbird-Einstellungen werden bei jedem Start automatisch gesetzt (sie „springen" sonst zurück). Zum Abschalten den jeweiligen Haken entfernen — der bisherige Wert wird dabei <strong>nicht</strong> wiederhergestellt, es wird nur nicht mehr erzwungen.</div>
<div id="forced-prefs-list"></div>
</div>
<div id="sync-log"></div>
</div>
@@ -1088,6 +1095,8 @@
</div>
</div>
<!-- geteilte Pref-Liste muss VOR templates_options.js geladen werden -->
<script src="../lib/forced-prefs-list.js"></script>
<script src="templates_options.js"></script>
</body>
</html>

View File

@@ -1978,3 +1978,51 @@ window.addEventListener('load', async () => {
}
});
});
// ── Opt-out-Schalter für erzwungene Prefs ──
// FORCED_PREFS / FORCED_IDENTITY_PREFS stammen aus ../lib/forced-prefs-list.js
// (im HTML vor diesem Script geladen). Gespeichert werden die ids der
// DEAKTIVIERTEN Prefs unter 'forced_prefs_optout'; Haken = wird erzwungen.
const FORCED_PREFS_OPTOUT_KEY = 'forced_prefs_optout';
async function renderForcedPrefsToggles() {
const container = document.getElementById('forced-prefs-list');
if (!container || typeof FORCED_PREFS === 'undefined') return;
const stored = await browser.storage.local.get(FORCED_PREFS_OPTOUT_KEY);
const disabled = new Set(stored[FORCED_PREFS_OPTOUT_KEY] || []);
container.textContent = '';
const entries = [...FORCED_PREFS, ...(typeof FORCED_IDENTITY_PREFS !== 'undefined' ? FORCED_IDENTITY_PREFS : [])];
for (const p of entries) {
const row = document.createElement('label');
row.className = 'forced-pref-row';
row.style.display = 'flex';
row.style.alignItems = 'center';
row.style.gap = '8px';
row.style.padding = '4px 0';
row.style.cursor = 'pointer';
const cb = document.createElement('input');
cb.type = 'checkbox';
cb.checked = !disabled.has(p.id); // Haken = wird erzwungen
cb.addEventListener('change', () => setForcedPrefEnabled(p.id, cb.checked));
const span = document.createElement('span');
span.textContent = p.label;
row.append(cb, span);
container.appendChild(row);
}
}
async function setForcedPrefEnabled(id, enabled) {
const stored = await browser.storage.local.get(FORCED_PREFS_OPTOUT_KEY);
const disabled = new Set(stored[FORCED_PREFS_OPTOUT_KEY] || []);
if (enabled) disabled.delete(id);
else disabled.add(id);
await browser.storage.local.set({ [FORCED_PREFS_OPTOUT_KEY]: [...disabled] });
// background.js lauscht auf storage.onChanged und wendet Aktivierungen sofort an.
}
document.addEventListener('DOMContentLoaded', renderForcedPrefsToggles);