Loading challenge...
code JavaScript
play_arrow Preview & Tests
Click "Run Tests" to check your solution.
\n'); preview.srcdoc=wrapped.includes('')?wrapped:code+''; }else{ preview.srcdoc=''; } } window.addEventListener('message',function(e){ if(e.data.type==='test-results'){ const results=e.data.results||[]; const resultsEl=document.getElementById('testResults'); const passed=results.filter(r=>r.pass); const failed=results.filter(r=>!r.pass); const passCount=passed.length;const total=results.length; resultsEl.innerHTML=results.map((r,i)=> '
'+ ''+(r.pass?'✓':'✗')+''+ ''+(r.msg||'')+''+ '
' ).join(''); if(passCount===total&&total>0){ allTestsPassed=true; document.getElementById('submitBtn').disabled=false; resultsEl.innerHTML+='
✓ All '+total+' tests passed! Click Submit.
'; }else{ allTestsPassed=false; document.getElementById('submitBtn').disabled=true; resultsEl.innerHTML+='
'+passCount+'/'+total+' passed
'; } } }); function resetCode(){ if(currentChallenge){ editor.setValue(currentChallenge.seed||''); document.getElementById('testResults').innerHTML='
Code reset. Click "Run Tests" to check.
'; document.getElementById('preview').srcdoc=''; allTestsPassed=false;document.getElementById('submitBtn').disabled=true; } } async function submitChallenge(){ if(!allTestsPassed)return; const userData=localStorage.getItem('fcc_user'); const token=localStorage.getItem('fcc_token'); if(!token||!userData){alert('Login to save progress');return;} try{ const user=JSON.parse(userData); const res=await fetch('/api/progress',{ method:'POST',headers:{'Content-Type':'application/json'}, body:JSON.stringify({userId:user.id,challengeId:currentChallenge.id,title:currentChallenge.title}) }); const data=await res.json(); if(data.status==='ok'||data.status==='already_completed'){ const btn=document.getElementById('submitBtn'); btn.textContent='✅ Completed!';btn.disabled=true; if(data.leveledUp)alert('🎉 Level up! Level '+data.level+'!'); if(data.newBadges?.length)alert('🏅 New badge!'); } }catch(e){alert('Error saving');} } // Check auth (function(){ const user=JSON.parse(localStorage.getItem('user')||'null'); const navAuth=document.getElementById('navAuth'); if(user){ navAuth.textContent=user.name||user.email||'My Profile'; navAuth.href='/profile/'; } })();