@@ -489,6 +489,7 @@ <h1>Wall Ball Rep Tracker</h1>
489489 </ div >
490490 < canvas id ="canvas "> </ canvas >
491491 < div id ="controls-container ">
492+ < button id ="reset-button " class ="control-button "> Reset</ button >
492493 < button id ="focus-mode-button " class ="control-button "> Focus Mode</ button >
493494 </ div >
494495 < div id ="camera-status " style ="display: none; margin: 1rem auto; padding: 1rem; background: rgba(0,0,0,0.7); border-radius: 5px; max-width: 400px; ">
@@ -528,6 +529,7 @@ <h2>Session History</h2>
528529
529530 < script >
530531 async function setupCamera ( ) {
532+ console . log ( 'setupCamera: start' ) ;
531533 const video = document . getElementById ( 'video' ) ;
532534 const cameraStatus = document . getElementById ( 'camera-status' ) ;
533535 const repsDisplay = document . getElementById ( 'reps' ) ;
@@ -566,13 +568,15 @@ <h2>Session History</h2>
566568
567569 await video . play ( ) ;
568570 cameraStatus . style . display = 'none' ;
571+ console . log ( 'setupCamera: success' ) ;
569572 return video ;
570573 } catch ( err ) {
571574 localStorage . setItem ( 'wallBallCameraAccess' , 'denied' ) ;
572575 cameraStatus . innerHTML =
573576 `Camera access failed: ${ err . message } . <button onclick="requestCameraAgain()" class="retry-button">Try Again</button>` ;
574577 repsDisplay . textContent = 'Camera Error' ;
575578 console . error ( 'Camera error:' , err ) ;
579+ console . log ( 'setupCamera: error' ) ;
576580 throw err ;
577581 }
578582 }
@@ -601,7 +605,12 @@ <h2>Session History</h2>
601605
602606 }
603607
608+ let reps = 0 ;
609+ let stage = null ;
610+ let startTime = null ;
611+
604612 async function main ( ) {
613+ console . log ( 'main: start' ) ;
605614 const video = await setupCamera ( ) ;
606615 const canvas = document . getElementById ( 'canvas' ) ;
607616 const ctx = canvas . getContext ( '2d' ) ;
@@ -623,11 +632,13 @@ <h2>Session History</h2>
623632 document . body . classList . add ( 'focus-view' ) ;
624633 } ) ;
625634
635+ const resetButton = document . getElementById ( 'reset-button' ) ;
636+ resetButton . addEventListener ( 'click' , resetReps ) ;
637+
626638 const goalInput = document . getElementById ( 'goal-input' ) ;
627639 const progressBar = document . getElementById ( 'progress-bar' ) ;
628640 let goal = parseInt ( goalInput . value ) ;
629- let stage = 'start' ; // Initial state
630- resetReps ( ) ;
641+ updateProgressBar ( ) ;
631642
632643 goalInput . addEventListener ( 'input' , ( ) => {
633644 goal = parseInt ( goalInput . value ) ;
@@ -651,17 +662,8 @@ <h2>Session History</h2>
651662 progressBar . style . width = `${ Math . min ( progress , 100 ) } %` ;
652663 }
653664
654- function resetReps ( ) {
655- reps = 0 ;
656- stage = 'start' ;
657- startTime = null ;
658- document . getElementById ( 'reps' ) . textContent = 'Reps: 0' ;
659- timerDisplay . textContent = 'Time: 0s' ;
660- rpmDisplay . textContent = 'RPM: 0' ;
661- updateProgressBar ( ) ;
662- }
663665
664- let startTime = null ;
666+
665667 const timerDisplay = document . getElementById ( 'timer' ) ;
666668 const rpmDisplay = document . getElementById ( 'rpm' ) ;
667669
@@ -690,6 +692,7 @@ <h2>Session History</h2>
690692 } ) ;
691693
692694 async function detect ( ) {
695+ console . log ( 'detect: start' ) ;
693696 const poses = await detector . estimatePoses ( video ) ;
694697 ctx . clearRect ( 0 , 0 , canvas . width , canvas . height ) ;
695698 ctx . drawImage ( video , 0 , 0 , canvas . width , canvas . height ) ;
@@ -748,6 +751,7 @@ <h2>Session History</h2>
748751 }
749752 }
750753 }
754+ console . log ( 'detect: end' ) ;
751755 if ( window . poseDetectionActive ) {
752756 requestAnimationFrame ( detect ) ;
753757 }
@@ -757,23 +761,25 @@ <h2>Session History</h2>
757761 loader . style . display = 'none' ;
758762
759763 window . poseDetectionActive = true ;
764+ console . log ( 'main: starting detection' ) ;
760765 detect ( ) ;
761766 }
762767
763768
764- let reps = 0 ;
765- let stage = null ; // 'up' or 'down'
766- let startTime = null ;
769+
767770
768771 function resetReps ( ) {
769772 reps = 0 ;
770- stage = null ;
773+ stage = 'start' ;
771774 startTime = null ;
772775 document . getElementById ( 'reps' ) . textContent = 'Reps: 0' ;
773- document . getElementById ( 'timer' ) . textContent = 'Time: 0s' ;
774- document . getElementById ( 'rpm' ) . textContent = 'RPM: 0' ;
775- if ( document . getElementById ( 'progress-bar' ) ) {
776- document . getElementById ( 'progress-bar' ) . style . width = '0%' ;
776+ const timerDisplay = document . getElementById ( 'timer' ) ;
777+ const rpmDisplay = document . getElementById ( 'rpm' ) ;
778+ if ( timerDisplay ) timerDisplay . textContent = 'Time: 0s' ;
779+ if ( rpmDisplay ) rpmDisplay . textContent = 'RPM: 0' ;
780+ const progressBar = document . getElementById ( 'progress-bar' ) ;
781+ if ( progressBar ) {
782+ progressBar . style . width = '0%' ;
777783 }
778784 }
779785
0 commit comments