From 5a5a94df83d9bf2408e197ed279e3574dd4c5b66 Mon Sep 17 00:00:00 2001 From: Aaron Kimbrell Date: Sun, 27 Sep 2026 22:14:19 -0500 Subject: [PATCH] feat(dashboard): a Reset property button in the property 3D view Starts the property over as it's saved: fetched again, every model back in its place and not smashed, behaviors stopped, the log and the selection cleared, and the view framed on the plot. Co-Authored-By: Claude Opus 5.5 --- dDashboardServer/templates/property-3d.jinja2 | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/dDashboardServer/templates/property-3d.jinja2 b/dDashboardServer/templates/property-3d.jinja2 index 531090486..ff7c2e7a5 100644 --- a/dDashboardServer/templates/property-3d.jinja2 +++ b/dDashboardServer/templates/property-3d.jinja2 @@ -33,6 +33,7 @@ + @@ -467,6 +468,14 @@ document.getElementById('modelsToggle').addEventListener('change', (e) => viewer if (document.getElementById('generatedToggle')) document.getElementById('generatedToggle').addEventListener('change', () => { loadedLod = null; loadScene(); }); document.getElementById('shadowToggle').addEventListener('change', (e) => viewer.setShadows(e.target.checked)); document.getElementById('resetViewBtn').addEventListener('click', () => viewer.resetView()); +// The whole property as saved, fetched again: models placed as stored, behaviors from the start, nothing selected +document.getElementById('resetPropertyBtn').addEventListener('click', () => { + if (/model=/.test(location.hash)) history.replaceState(null, '', location.pathname + location.search); + viewer.select(null); + player.reset(); + document.getElementById('behaviorLog').innerHTML = '
  • Select a model with behaviors and trigger it.
  • '; + load(); +}); document.getElementById('fullscreenBtn').addEventListener('click', () => { const wrap = document.getElementById('viewerWrap'); if (document.fullscreenElement) document.exitFullscreen();