hetchyy Claude Opus 4.6 commited on
Commit
ef9d3f2
·
1 Parent(s): f601c8a

Persist accordion open/closed state separately for main view and Animate All

Browse files

Main view defaults to collapsed, Animate All defaults to expanded.
Each context saves independently to localStorage so toggling in one
doesn't affect the other.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

src/ui/interface.py CHANGED
@@ -129,7 +129,7 @@ def _build_left_column(c):
129
 
130
  def _build_animation_settings(c):
131
  """Build the animation settings accordion."""
132
- with gr.Accordion("Animation Settings", open=True, elem_id="anim-settings-accordion"):
133
  with gr.Row(elem_id="anim-style-row"):
134
  c.anim_granularity_radio = gr.Radio(
135
  choices=ANIM_GRANULARITIES,
 
129
 
130
  def _build_animation_settings(c):
131
  """Build the animation settings accordion."""
132
+ with gr.Accordion("Animation Settings", open=False, elem_id="anim-settings-accordion"):
133
  with gr.Row(elem_id="anim-style-row"):
134
  c.anim_granularity_radio = gr.Radio(
135
  choices=ANIM_GRANULARITIES,
src/ui/static/animate-all.js CHANGED
@@ -933,6 +933,15 @@ function stopAnimateAll() {
933
  } else {
934
  animateAllState.accordionParent.appendChild(animAccordion);
935
  }
 
 
 
 
 
 
 
 
 
936
  }
937
  // Reset button
938
  if (animateAllState.btn) {
@@ -1049,6 +1058,15 @@ function toggleAnimateAll(btn) {
1049
  animateAllState.accordionNextSibling = animAccordion.nextElementSibling;
1050
  var container = document.querySelector('.segments-container');
1051
  if (container) container.parentNode.insertBefore(animAccordion, container);
 
 
 
 
 
 
 
 
 
1052
  }
1053
  var container = document.querySelector('.segments-container');
1054
  // Add tip callout above the mega card
 
933
  } else {
934
  animateAllState.accordionParent.appendChild(animAccordion);
935
  }
936
+ // Restore main-context accordion state (default: closed)
937
+ window._animateAllActive = false;
938
+ var _s = loadAnimSettings();
939
+ var wantOpen = _s && _s.accordionOpenMain === true;
940
+ var isOpen = animAccordion.classList.contains('open');
941
+ if (wantOpen !== isOpen) {
942
+ var btn = animAccordion.querySelector(':scope > .label-wrap');
943
+ if (btn) btn.click();
944
+ }
945
  }
946
  // Reset button
947
  if (animateAllState.btn) {
 
1058
  animateAllState.accordionNextSibling = animAccordion.nextElementSibling;
1059
  var container = document.querySelector('.segments-container');
1060
  if (container) container.parentNode.insertBefore(animAccordion, container);
1061
+ // Restore mega-context accordion state (default: open)
1062
+ window._animateAllActive = true;
1063
+ var _s = loadAnimSettings();
1064
+ var wantOpen = !_s || _s.accordionOpenMega !== false;
1065
+ var isOpen = animAccordion.classList.contains('open');
1066
+ if (wantOpen !== isOpen) {
1067
+ var btn = animAccordion.querySelector(':scope > .label-wrap');
1068
+ if (btn) btn.click();
1069
+ }
1070
  }
1071
  var container = document.querySelector('.segments-container');
1072
  // Add tip callout above the mega card
src/ui/static/animation-core.js CHANGED
@@ -65,7 +65,11 @@ function saveAnimSettings() {
65
  }
66
  s.playbackRate = window.ANIM_PLAYBACK_RATE || 1;
67
  var accEl = document.getElementById('anim-settings-accordion');
68
- if (accEl) s.accordionOpen = accEl.classList.contains('open');
 
 
 
 
69
  localStorage.setItem(_ANIM_STORAGE_KEY, JSON.stringify(s));
70
  } catch(e) {}
71
  }
@@ -106,11 +110,12 @@ if (_saved) {
106
  }
107
  window.ANIM_PLAYBACK_RATE = (_saved && _saved.playbackRate) ? _saved.playbackRate : 1;
108
 
109
- // --- Accordion open/close persistence ---
110
- if (_saved && _saved.accordionOpen === false) {
 
111
  requestAnimationFrame(function() {
112
  var acc = document.getElementById('anim-settings-accordion');
113
- if (acc && acc.classList.contains('open')) {
114
  var btn = acc.querySelector(':scope > .label-wrap');
115
  if (btn) btn.click();
116
  }
 
65
  }
66
  s.playbackRate = window.ANIM_PLAYBACK_RATE || 1;
67
  var accEl = document.getElementById('anim-settings-accordion');
68
+ if (accEl) {
69
+ var accOpen = accEl.classList.contains('open');
70
+ if (window._animateAllActive) s.accordionOpenMega = accOpen;
71
+ else s.accordionOpenMain = accOpen;
72
+ }
73
  localStorage.setItem(_ANIM_STORAGE_KEY, JSON.stringify(s));
74
  } catch(e) {}
75
  }
 
110
  }
111
  window.ANIM_PLAYBACK_RATE = (_saved && _saved.playbackRate) ? _saved.playbackRate : 1;
112
 
113
+ // --- Accordion open/close persistence (main view only; mega handled by animate-all.js) ---
114
+ window._animateAllActive = false;
115
+ if (_saved && _saved.accordionOpenMain === true) {
116
  requestAnimationFrame(function() {
117
  var acc = document.getElementById('anim-settings-accordion');
118
+ if (acc && !acc.classList.contains('open')) {
119
  var btn = acc.querySelector(':scope > .label-wrap');
120
  if (btn) btn.click();
121
  }