window.addEventListener("error",function(err){ try { var str="("+err+") ("+JSON.stringify(err)+") "+err.filename+":"+err.lineno+" "+err.error+": "+err.message; var xhr=new XMLHttpRequest(); xhr.open("POST","/zelfoverhoor/error"); xhr.responseType="text"; xhr.setRequestHeader("Content-Type", "text/plain"); xhr.send(str); } catch(e){ console.log("Error sending error:", e); } }); window.onbeforeunload=function(ev){ if(editorIsOpen){ var text="Je bent momenteel een vragenset aan het bewerken; weet je zeker dat je het window wilt sluiten?"; ev.returnValue=text; return text; } return undefined; }; var questionsets=null; var currentlyEditing=null; var editorIsOpen=false; function getQuestionSets(){ var xhr=new XMLHttpRequest(); xhr.onreadystatechange=function(){ if(xhr.readyState==4){ questionsets=JSON.parse(xhr.responseText); updateQuestionSetsList(); } }; xhr.open("GET","/zelfoverhoor/docent/sets"); xhr.responseType="text"; xhr.send(); } function updateQuestionSetsList(){ var tbody=document.getElementById("qsets"); clearElement(tbody); if(questionsets.length==0){ var tr=document.createElement("tr"); var td=document.createElement("td"); td.appendChild(document.createTextNode("Nog geen vragensets...")); td.setAttribute("colspan","4"); tr.appendChild(td); tbody.appendChild(tr); } for(var i=0;i<questionsets.length;i++){ var tr=document.createElement("tr"); td=document.createElement("td"); var a=document.createElement("a"); a.setAttribute("href",location.origin+"/zelfoverhoor/qs/"+questionsets[i].id); a.setAttribute("target","_blank"); a.innerHTML=questionsets[i].id; td.appendChild(a); tr.appendChild(td); td=document.createElement("td"); td.appendChild(document.createTextNode(questionsets[i].name)); tr.appendChild(td); td=document.createElement("td"); td.appendChild(document.createTextNode(questionsets[i].description)); tr.appendChild(td); td=document.createElement("td"); td.appendChild(document.createTextNode(questionsets[i].questions.length)); tr.appendChild(td); td=document.createElement("td"); var input=document.createElement("input"); input.setAttribute("type","button"); input.setAttribute("value","bewerk"); input.addEventListener("click",(function(id){return function(){ doEditQSet(id); };})(questionsets[i].id)); td.appendChild(input); tr.appendChild(td); td=document.createElement("td"); var input=document.createElement("input"); input.setAttribute("type","button"); input.setAttribute("value","verwijder"); input.setAttribute("style","color:red"); input.addEventListener("click",(function(id,name){return function(){ if(confirm("Weet je zeker dat je de vragenset '"+name+"' wilt verwijderen?")){ var xhr=new XMLHttpRequest(); xhr.onreadystatechange=function(){ if(xhr.readyState==4){ if(xhr.status==200){ getQuestionSets(); } else if(xhr.status==404){ alert("Vragenset kon niet worden gevonden... Misschien even de pagina herladen?"); } else { alert("Onbekende error: "+xhr.responseText); } } }; xhr.open("POST","/zelfoverhoor/docent/deleteset"); xhr.send(id); } };})(questionsets[i].id,questionsets[i].name)); td.appendChild(input); tr.appendChild(td); tbody.appendChild(tr); } } function clearElement(el){ var c; while((c=el.lastChild))el.removeChild(c); } function openBlankSetEditor(){ document.getElementById("newqsetname").value=""; document.getElementById("newqsetdescr").value=""; clearElement(document.getElementById("newquestions")); document.getElementById("newqsetform").classList.remove("invisible"); document.getElementById("newqsetvisible").classList.add("invisible"); currentlyEditing=null; editorIsOpen=true; } function doNewQSet(){ openBlankSetEditor(); document.getElementById("formheader").innerHTML="Nieuwe vragenset"; addNewQuestion(); } function receiveEditQSet(qset){ openBlankSetEditor(); document.getElementById("newqsetname").value=qset.name; document.getElementById("newqsetdescr").value=qset.description; for(var i=0;i<qset.questions.length;i++){ var div=addNewQuestion(); var tas=div.getElementsByTagName("textarea"); tas[0].value=qset.questions[i].q; tas[1].value=qset.questions[i].a; } document.getElementById("formheader").innerHTML="Bewerk vragenset ("+qset.id+")"; currentlyEditing=qset.id; } function doEditQSet(id){ var xhr=new XMLHttpRequest(); xhr.onreadystatechange=function(){ if(xhr.readyState==4){ if(xhr.status==200){ var obj; try { obj=JSON.parse(xhr.responseText); } catch(e){ alert("Server stuurde ongeldige data!"); return } receiveEditQSet(obj) } else if(xhr.status==404){ alert("Vragenset lijkt niet te bestaan... Misschien even de pagina herladen?"); } else { alert("Vragenset ophalen lijkt niet te lukken... (error code "+xhr.status+")"); } } }; xhr.open("GET","/zelfoverhoor/qsdata/"+id); xhr.send(); } function closeQSetForm(){ document.getElementById("newqsetform").classList.add("invisible"); document.getElementById("newqsetvisible").classList.remove("invisible"); currentlyEditing=null; editorIsOpen=false; } function renumberQuestions(){ var parent=document.getElementById("newquestions"); var ch=parent.children,nc=ch.length; for(var i=0;i<nc;i++){ ch[i].getElementsByClassName("questionindex")[0].innerHTML=i+1; } } function addNewQuestion(){ var parent=document.getElementById("newquestions"); var number=parent.children.length; var div=document.createElement("div"); div.classList.add("newquestioncontainer"); if(number>0){ var insertbtn=document.createElement("input"); insertbtn.setAttribute("type","button"); insertbtn.setAttribute("value","Voeg vraag hier toe"); insertbtn.setAttribute("style","margin-bottom:5px"); insertbtn.addEventListener("click",function(){ addNewQuestion(); var newdiv=parent.children[parent.children.length-1]; parent.insertBefore(newdiv,div); renumberQuestions(); }); div.appendChild(insertbtn); div.appendChild(document.createElement("br")); } var span=document.createElement("span"); span.setAttribute("style","display:inline-block"); var b=document.createElement("b"); b.appendChild(document.createTextNode("Vraag ")); var span2=document.createElement("span"); span2.classList.add("questionindex"); span2.innerHTML=number+1; b.appendChild(span2); b.appendChild(document.createTextNode(":")); span.appendChild(b); span.appendChild(document.createElement("br")); var qta=document.createElement("textarea"); span.appendChild(qta); div.appendChild(span); span=document.createElement("span"); span.setAttribute("style","display:inline-block"); b=document.createElement("b"); b.appendChild(document.createTextNode("Antwoord:")); span.appendChild(b); span.appendChild(document.createElement("br")); span.appendChild(document.createElement("textarea")); div.appendChild(span); span=document.createElement("span"); var input=document.createElement("input"); input.setAttribute("type","button"); input.setAttribute("value","verwijder vraag"); input.setAttribute("style","vertical-align:50px"); input.addEventListener("click",function(){ var index=div.getElementsByClassName("questionindex")[0].innerHTML; if(confirm("Weet je zeker dat je vraag "+index+" wilt verwijderen?")){ parent.removeChild(div); renumberQuestions(); } }); span.appendChild(input); div.appendChild(span); parent.appendChild(div); return div; } function submitQSet(){ var name=document.getElementById("newqsetname").value.trim(); var description=document.getElementById("newqsetdescr").value.trim(); if(name==""||description==""){ alert("Naam en beschrijving zijn nodig."); return; } var div=document.getElementById("newquestions"); var ch=div.children,nq=ch.length; var questions=[]; for(var i=0;i<nq;i++){ var tas=ch[i].getElementsByTagName("textarea"); var q={"q": tas[0].value.trim(), "a": tas[1].value.trim()}; if(q.q==""||q.a==""){ alert("Een van de vragen of antwoorden is leeg; graag even vullen of de vraag verwijderen."); return; } questions.push(q); } var obj={"name": name, "description": description, "questions": questions}; var xhr=new XMLHttpRequest(); xhr.onreadystatechange=function(){ if(xhr.readyState==4){ if(xhr.status==200){ getQuestionSets(); closeQSetForm(); } else { alert("Vragenset lijkt niet succesvol toegevoegd te zijn...\n"+xhr.responseText); } } }; if(currentlyEditing!=null){ xhr.open("POST","/zelfoverhoor/docent/editset/"+currentlyEditing); } else { xhr.open("POST","/zelfoverhoor/docent/addset"); } xhr.send(JSON.stringify(obj)); } function doMaybeCloseForm(){ var str; if(currentlyEditing)str="Weet je zeker dat je de wijzigingen wilt annuleren?"; else str="Weet je zeker dat je de nieuwe vragenset wilt weggooien?"; if(confirm(str)){ closeQSetForm(); } } window.addEventListener("load",function(){ getQuestionSets(); });