fix: reset restores home steps after SITE_CONFIG contamination (closes #325)

This commit is contained in:
efiten
2026-04-02 01:21:59 +00:00
committed by you
parent 75f1295a06
commit 5ed1dec701
3 changed files with 38 additions and 36 deletions
+1
View File
@@ -807,6 +807,7 @@ window.addEventListener('DOMContentLoaded', () => {
// User's localStorage preferences take priority over server config
const userTheme = (() => { try { return JSON.parse(localStorage.getItem('meshcore-user-theme') || '{}'); } catch { return {}; } })();
window._SITE_CONFIG_ORIGINAL_HOME = JSON.parse(JSON.stringify(window.SITE_CONFIG.home || {}));
mergeUserHomeConfig(window.SITE_CONFIG, userTheme);
// Apply CSS variable overrides from theme config (skipped if user has local overrides)
+9 -8
View File
@@ -450,7 +450,8 @@
function mergeSection(key) {
return Object.assign({}, DEFAULTS[key], cfg[key] || {}, local[key] || {});
}
var mergedHome = mergeSection('home');
var serverHome = window._SITE_CONFIG_ORIGINAL_HOME || cfg.home || {};
var mergedHome = Object.assign({}, DEFAULTS.home, serverHome, local.home || {});
var localTsMode = localStorage.getItem('meshcore-timestamp-mode');
var localTsTimezone = localStorage.getItem('meshcore-timestamp-timezone');
var localTsFormat = localStorage.getItem('meshcore-timestamp-format');
@@ -1202,19 +1203,19 @@
var tmp = state.home.steps[i];
state.home.steps[i] = state.home.steps[j];
state.home.steps[j] = tmp;
render(container);
render(container); autoSave();
});
});
container.querySelectorAll('[data-rm-step]').forEach(function (btn) {
btn.addEventListener('click', function () {
state.home.steps.splice(parseInt(btn.dataset.rmStep), 1);
render(container);
render(container); autoSave();
});
});
var addStepBtn = document.getElementById('addStep');
if (addStepBtn) addStepBtn.addEventListener('click', function () {
state.home.steps.push({ emoji: '📌', title: '', description: '' });
render(container);
render(container); autoSave();
});
// Checklist
@@ -1227,13 +1228,13 @@
container.querySelectorAll('[data-rm-check]').forEach(function (btn) {
btn.addEventListener('click', function () {
state.home.checklist.splice(parseInt(btn.dataset.rmCheck), 1);
render(container);
render(container); autoSave();
});
});
var addCheckBtn = document.getElementById('addCheck');
if (addCheckBtn) addCheckBtn.addEventListener('click', function () {
state.home.checklist.push({ question: '', answer: '' });
render(container);
render(container); autoSave();
});
// Footer links
@@ -1246,13 +1247,13 @@
container.querySelectorAll('[data-rm-link]').forEach(function (btn) {
btn.addEventListener('click', function () {
state.home.footerLinks.splice(parseInt(btn.dataset.rmLink), 1);
render(container);
render(container); autoSave();
});
});
var addLinkBtn = document.getElementById('addLink');
if (addLinkBtn) addLinkBtn.addEventListener('click', function () {
state.home.footerLinks.push({ label: '', url: '' });
render(container);
render(container); autoSave();
});
// Export copy
+28 -28
View File
@@ -22,9 +22,9 @@
<meta name="twitter:title" content="CoreScope">
<meta name="twitter:description" content="Real-time MeshCore LoRa mesh network analyzer — live packet visualization, node tracking, channel decryption, and route analysis.">
<meta name="twitter:image" content="https://raw.githubusercontent.com/Kpa-clawbot/corescope/master/public/og-image.png">
<link rel="stylesheet" href="style.css?v=1775062162">
<link rel="stylesheet" href="home.css?v=1775062162">
<link rel="stylesheet" href="live.css?v=1775062162">
<link rel="stylesheet" href="style.css?v=1775076186">
<link rel="stylesheet" href="home.css?v=1775076186">
<link rel="stylesheet" href="live.css?v=1775076186">
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"
integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY="
crossorigin="anonymous">
@@ -85,30 +85,30 @@
<main id="app" role="main"></main>
<script src="vendor/qrcode.js"></script>
<script src="roles.js?v=1775062162"></script>
<script src="customize.js?v=1775062162" onerror="console.error('Failed to load:', this.src)"></script>
<script src="region-filter.js?v=1775062162"></script>
<script src="hop-resolver.js?v=1775062162"></script>
<script src="hop-display.js?v=1775062162"></script>
<script src="app.js?v=1775062162"></script>
<script src="home.js?v=1775062162"></script>
<script src="packet-filter.js?v=1775062162"></script>
<script src="packets.js?v=1775062162"></script>
<script src="geo-filter-overlay.js?v=1775062162"></script>
<script src="map.js?v=1775062162" onerror="console.error('Failed to load:', this.src)"></script>
<script src="channels.js?v=1775062162" onerror="console.error('Failed to load:', this.src)"></script>
<script src="nodes.js?v=1775062162" onerror="console.error('Failed to load:', this.src)"></script>
<script src="traces.js?v=1775062162" onerror="console.error('Failed to load:', this.src)"></script>
<script src="analytics.js?v=1775062162" onerror="console.error('Failed to load:', this.src)"></script>
<script src="audio.js?v=1775062162" onerror="console.error('Failed to load:', this.src)"></script>
<script src="audio-v1-constellation.js?v=1775062162" onerror="console.error('Failed to load:', this.src)"></script>
<script src="audio-v2-constellation.js?v=1775062162" onerror="console.error('Failed to load:', this.src)"></script>
<script src="audio-lab.js?v=1775062162" onerror="console.error('Failed to load:', this.src)"></script>
<script src="live.js?v=1775062162" onerror="console.error('Failed to load:', this.src)"></script>
<script src="observers.js?v=1775062162" onerror="console.error('Failed to load:', this.src)"></script>
<script src="observer-detail.js?v=1775062162" onerror="console.error('Failed to load:', this.src)"></script>
<script src="compare.js?v=1775062162" onerror="console.error('Failed to load:', this.src)"></script>
<script src="node-analytics.js?v=1775062162" onerror="console.error('Failed to load:', this.src)"></script>
<script src="perf.js?v=1775062162" onerror="console.error('Failed to load:', this.src)"></script>
<script src="roles.js?v=1775076186"></script>
<script src="customize.js?v=1775076186" onerror="console.error('Failed to load:', this.src)"></script>
<script src="region-filter.js?v=1775076186"></script>
<script src="hop-resolver.js?v=1775076186"></script>
<script src="hop-display.js?v=1775076186"></script>
<script src="app.js?v=1775076186"></script>
<script src="home.js?v=1775076186"></script>
<script src="packet-filter.js?v=1775076186"></script>
<script src="packets.js?v=1775076186"></script>
<script src="geo-filter-overlay.js?v=1775076186"></script>
<script src="map.js?v=1775076186" onerror="console.error('Failed to load:', this.src)"></script>
<script src="channels.js?v=1775076186" onerror="console.error('Failed to load:', this.src)"></script>
<script src="nodes.js?v=1775076186" onerror="console.error('Failed to load:', this.src)"></script>
<script src="traces.js?v=1775076186" onerror="console.error('Failed to load:', this.src)"></script>
<script src="analytics.js?v=1775076186" onerror="console.error('Failed to load:', this.src)"></script>
<script src="audio.js?v=1775076186" onerror="console.error('Failed to load:', this.src)"></script>
<script src="audio-v1-constellation.js?v=1775076186" onerror="console.error('Failed to load:', this.src)"></script>
<script src="audio-v2-constellation.js?v=1775076186" onerror="console.error('Failed to load:', this.src)"></script>
<script src="audio-lab.js?v=1775076186" onerror="console.error('Failed to load:', this.src)"></script>
<script src="live.js?v=1775076186" onerror="console.error('Failed to load:', this.src)"></script>
<script src="observers.js?v=1775076186" onerror="console.error('Failed to load:', this.src)"></script>
<script src="observer-detail.js?v=1775076186" onerror="console.error('Failed to load:', this.src)"></script>
<script src="compare.js?v=1775076186" onerror="console.error('Failed to load:', this.src)"></script>
<script src="node-analytics.js?v=1775076186" onerror="console.error('Failed to load:', this.src)"></script>
<script src="perf.js?v=1775076186" onerror="console.error('Failed to load:', this.src)"></script>
</body>
</html>