⚛ MASTERING PHYSICS
Learn • Practice • Interact Live
+REAL_EXAMPLE_PRICES[g][i];prices.append(p);}const bundle=document.createElement('p');bundle.textContent='Full package / الباقة الكاملة — const form=document.createElement('form');form.onsubmit=realAuthSubmitPayment; const grade=document.createElement('select');grade.name='grade';grade.required=true; for(const g of ['GS','LS'])grade.add(new Option(g,g)); const unit=document.createElement('select');unit.name='unit';unit.required=true; for(const u of REAL_UNITS)unit.add(new Option(u,u)); const reference=document.createElement('input');reference.name='reference';reference.required=true;reference.maxLength=120;reference.placeholder='Whish transaction reference / رقم عملية Whish'; const button=document.createElement('button');button.className='btn green';button.type='submit';button.textContent='Submit for review / إرسال للمراجعة'; form.append(grade,unit,reference,button);panel.append(form); const pending=document.createElement('h3');pending.textContent='Payment requests / طلبات الدفع';panel.append(pending); const payments=document.createElement('div'); if(!requests.requests?.length)payments.textContent='No payment requests yet.'; for(const request of requests.requests||[]){const p=document.createElement('p');p.textContent=request.grade+' – '+request.unit+' : '+request.status;payments.append(p);} panel.append(payments); }catch(error){panel.textContent='Could not load courses: '+error.message;} } async function realAuthLoadChapters(course,container,token){ try{ const data=await realAuthRequest('/chapters?grade='+encodeURIComponent(course.grade)+'&unit='+encodeURIComponent(course.unit),null,token); if(authToken!==token || !container.isConnected)return; container.replaceChildren(); if(!data.chapters?.length)container.textContent='No lessons uploaded yet.'; for(const chapter of data.chapters||[]){ const section=document.createElement('details'); const summary=document.createElement('summary');summary.textContent=chapter.title; const videos=document.createElement('div'); section.append(summary,videos); section.addEventListener('toggle',async()=>{ if(!section.open || section.dataset.loaded)return; videos.textContent='Loading videos...'; try{ const response=await realAuthRequest('/videos?chapter_id='+chapter.id,null,token); if(authToken!==token || !videos.isConnected)return; videos.replaceChildren();section.dataset.loaded='1'; if(!response.videos?.length)videos.textContent='No videos yet.'; for(const video of response.videos||[]){ const p=document.createElement('p'); const link=document.createElement('a');link.href=video.youtube_url;link.target='_blank';link.rel='noopener noreferrer';link.textContent=video.title; p.append(link);videos.append(p); } }catch(error){videos.textContent=error.message;} }); container.append(section); } }catch(error){container.textContent='Could not load chapters: '+error.message;} } async function realAuthSubmitPayment(event){ event.preventDefault();const form=event.currentTarget;const button=form.querySelector('button');button.disabled=true; try{ await realAuthRequest('/payments/requests',{grade:form.elements.grade.value,unit:form.elements.unit.value,transaction_reference:form.elements.reference.value.trim()},authToken); realAuthStatus('Payment request submitted for manual verification. No access granted yet.'); await realAuthLoadCourses(); }catch(error){realAuthStatus(error.message,true)}finally{button.disabled=false;} } async function realAuthLogout(){ const token=authToken;authToken=null;authStudent=null; try{if(token)await realAuthRequest('/auth/logout',{},token)}catch(_){} openRealAuth();realAuthStatus('Logged out.'); } window.addEventListener('pagehide',()=>{authToken=null;authStudent=null;}); +REAL_EXAMPLE_BUNDLES[g]+' (demo only)';prices.append(bundle);}; const info=document.createElement('p');info.textContent='TEST ONLY: Do not pay. For an already verified Whish test reference, you may submit a request; admin approval is required. / تجربة فقط، لا تدفع أي مبلغ. التفعيل بعد موافقة الإدارة.';panel.append(info); const form=document.createElement('form');form.onsubmit=realAuthSubmitPayment; const grade=document.createElement('select');grade.name='grade';grade.required=true; for(const g of ['GS','LS'])grade.add(new Option(g,g)); const unit=document.createElement('select');unit.name='unit';unit.required=true; for(const u of REAL_UNITS)unit.add(new Option(u,u)); const reference=document.createElement('input');reference.name='reference';reference.required=true;reference.maxLength=120;reference.placeholder='Whish transaction reference / رقم عملية Whish'; const button=document.createElement('button');button.className='btn green';button.type='submit';button.textContent='Submit for review / إرسال للمراجعة'; form.append(grade,unit,reference,button);panel.append(form); const pending=document.createElement('h3');pending.textContent='Payment requests / طلبات الدفع';panel.append(pending); const payments=document.createElement('div'); if(!requests.requests?.length)payments.textContent='No payment requests yet.'; for(const request of requests.requests||[]){const p=document.createElement('p');p.textContent=request.grade+' – '+request.unit+' : '+request.status;payments.append(p);} panel.append(payments); }catch(error){panel.textContent='Could not load courses: '+error.message;} } async function realAuthLoadChapters(course,container,token){ try{ const data=await realAuthRequest('/chapters?grade='+encodeURIComponent(course.grade)+'&unit='+encodeURIComponent(course.unit),null,token); if(authToken!==token || !container.isConnected)return; container.replaceChildren(); if(!data.chapters?.length)container.textContent='No lessons uploaded yet.'; for(const chapter of data.chapters||[]){ const section=document.createElement('details'); const summary=document.createElement('summary');summary.textContent=chapter.title; const videos=document.createElement('div'); section.append(summary,videos); section.addEventListener('toggle',async()=>{ if(!section.open || section.dataset.loaded)return; videos.textContent='Loading videos...'; try{ const response=await realAuthRequest('/videos?chapter_id='+chapter.id,null,token); if(authToken!==token || !videos.isConnected)return; videos.replaceChildren();section.dataset.loaded='1'; if(!response.videos?.length)videos.textContent='No videos yet.'; for(const video of response.videos||[]){ const p=document.createElement('p'); const link=document.createElement('a');link.href=video.youtube_url;link.target='_blank';link.rel='noopener noreferrer';link.textContent=video.title; p.append(link);videos.append(p); } }catch(error){videos.textContent=error.message;} }); container.append(section); } }catch(error){container.textContent='Could not load chapters: '+error.message;} } async function realAuthSubmitPayment(event){ event.preventDefault();const form=event.currentTarget;const button=form.querySelector('button');button.disabled=true; try{ await realAuthRequest('/payments/requests',{grade:form.elements.grade.value,unit:form.elements.unit.value,transaction_reference:form.elements.reference.value.trim()},authToken); realAuthStatus('Payment request submitted for manual verification. No access granted yet.'); await realAuthLoadCourses(); }catch(error){realAuthStatus(error.message,true)}finally{button.disabled=false;} } async function realAuthLogout(){ const token=authToken;authToken=null;authStudent=null; try{if(token)await realAuthRequest('/auth/logout',{},token)}catch(_){} openRealAuth();realAuthStatus('Logged out.'); } window.addEventListener('pagehide',()=>{authToken=null;authStudent=null;});