@@ -11,6 +11,8 @@ async function init() {
1111 const certs = parseCertTable ( md ) ;
1212 renderCertCards ( certs ) ;
1313 renderUpdates ( md ) ;
14+
15+ setupUpdatesToggle ( ) ; // <-- initialise toggle after updates rendered
1416 } catch ( err ) {
1517 console . error ( err ) ;
1618 const certList = document . getElementById ( "certList" ) ;
@@ -183,6 +185,55 @@ function renderUpdates(md) {
183185 . join ( "" ) ;
184186}
185187
188+ /* ---------- Updates toggle (collapsible) ---------- */
189+
190+ function setupUpdatesToggle ( ) {
191+ const updatesBox = document . getElementById ( "updates" ) ;
192+ const toggleBtn = document . getElementById ( "updatesToggle" ) ;
193+ const updatesInner = document . getElementById ( "updatesInner" ) ;
194+ if ( ! updatesBox || ! toggleBtn || ! updatesInner ) return ;
195+
196+ // default collapsed state on first load (change if you want expanded by default)
197+ const storageKey = "prostore_updates_expanded" ;
198+ // If no saved state, default to collapsed (true)
199+ const saved = localStorage . getItem ( storageKey ) ;
200+ const initialCollapsed = saved === null ? true : ( saved === "false" ? false : ( saved === "true" ? false : true ) ) ; // keep collapsed if missing
201+ // simplified: if saved === "1" expand, else collapse: but we used true/false strings for clarity
202+
203+ // Utility to set state
204+ function setCollapsed ( collapsed , skipSave = false ) {
205+ if ( collapsed ) {
206+ updatesBox . classList . add ( "collapsed" ) ;
207+ updatesBox . classList . remove ( "expanded" ) ;
208+ toggleBtn . setAttribute ( "aria-expanded" , "false" ) ;
209+ toggleBtn . classList . remove ( "rotated" ) ; // caret shows ^
210+ } else {
211+ updatesBox . classList . remove ( "collapsed" ) ;
212+ updatesBox . classList . add ( "expanded" ) ;
213+ toggleBtn . setAttribute ( "aria-expanded" , "true" ) ;
214+ toggleBtn . classList . add ( "rotated" ) ; // caret flips to look like v
215+ }
216+ if ( ! skipSave ) localStorage . setItem ( storageKey , ( ! collapsed ) . toString ( ) ) ;
217+ }
218+
219+ // init
220+ setCollapsed ( initialCollapsed , true ) ;
221+
222+ // click handler
223+ toggleBtn . addEventListener ( "click" , ( ) => {
224+ const isCollapsed = updatesBox . classList . contains ( "collapsed" ) ;
225+ setCollapsed ( ! isCollapsed ) ;
226+ } ) ;
227+
228+ // keyboard support
229+ toggleBtn . addEventListener ( "keydown" , ( e ) => {
230+ if ( e . key === "Enter" || e . key === " " ) {
231+ e . preventDefault ( ) ;
232+ toggleBtn . click ( ) ;
233+ }
234+ } ) ;
235+ }
236+
186237/* ---------- Modal ---------- */
187238function openModal ( c ) {
188239 const modal = document . getElementById ( "certModal" ) ;
0 commit comments