-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathupload.js
More file actions
97 lines (90 loc) · 3.26 KB
/
upload.js
File metadata and controls
97 lines (90 loc) · 3.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
document.addEventListener('DOMContentLoaded',()=>{
const qpFile=document.getElementById('qpFile')
const msFile=document.getElementById('msFile')
const setTime=document.getElementById('setTime')
const startBtn=document.getElementById('startBtn')
const solveArea=document.getElementById('solveArea')
const qpViewer=document.getElementById('qpViewer')
const timeLeft=document.getElementById('timeLeft')
const pauseBtn=document.getElementById('pauseBtn')
const questionsSection=document.getElementById('questionsSection')
const submitBtn=document.getElementById('submitBtn')
let paused=false
let totalTime=0
let timer=null
let correctAnswers=[]
let userAnswers=[]
let audioEl=null
startBtn.addEventListener('click',async()=>{
const f1=qpFile.files[0]
const f2=msFile.files[0]
if(!f1||!f2){alert("Upload QP & MS");return}
let mins=parseInt(setTime.value)||45
totalTime=mins*60
try{
let fd=new FormData()
fd.append("qp",f1)
fd.append("ms",f2)
let r=await fetch("http://127.0.0.1:5000/uploadPapers",{method:"POST",body:fd})
if(!r.ok){alert("Parsing error");return}
let j=await r.json()
correctAnswers=j.answers||[]
let n=j.numQuestions||correctAnswers.length
userAnswers=new Array(n).fill(null)
qpViewer.src=URL.createObjectURL(f1)
buildMCQs(n)
solveArea.style.display='block'
startTimer()
}catch(e){console.error(e);alert("Error")}
})
function buildMCQs(n){
questionsSection.innerHTML=""
for(let i=0;i<n;i++){
let d=document.createElement('div')
d.style.margin="0.5rem 0"
let h=`<b>Q${i+1}:</b>`
h+=`<button class='optBtn' data-q='${i}' data-opt='A'>A</button>`
h+=`<button class='optBtn' data-q='${i}' data-opt='B'>B</button>`
h+=`<button class='optBtn' data-q='${i}' data-opt='C'>C</button>`
h+=`<button class='optBtn' data-q='${i}' data-opt='D'>D</button>`
d.innerHTML=h
questionsSection.appendChild(d)
}
}
function startTimer(){
updateTime()
timer=setInterval(()=>{
if(paused)return
if(totalTime<=0){clearInterval(timer);alert("Time's up!");return}
totalTime--
updateTime()
},1000)
}
function updateTime(){
let m=Math.floor(totalTime/60)
let s=totalTime%60
timeLeft.textContent=`${m}:${s.toString().padStart(2,'0')}`
}
pauseBtn.addEventListener('click',()=>{
paused=!paused
pauseBtn.textContent=paused?"Resume":"Pause"
})
questionsSection.addEventListener('click',e=>{
if(e.target.classList.contains('optBtn')){
let i=parseInt(e.target.dataset.q)
let opt=e.target.dataset.opt
let p=e.target.parentNode
p.querySelectorAll('.optBtn').forEach(b=>b.style.border="")
e.target.style.border="2px solid red"
userAnswers[i]=opt
}
})
submitBtn.addEventListener('click',()=>{
let score=0
for(let i=0;i<correctAnswers.length;i++){
if(userAnswers[i]===correctAnswers[i])score++
}
let pct=((score/correctAnswers.length)*100).toFixed(2)
alert(`Score: ${score}/${correctAnswers.length} = ${pct}%`)
})
})