"use strict";(self.webpackChunkWebComponents=self.webpackChunkWebComponents||[]).push([[919],{9919:(e,t,i)=>{i.r(t),i.d(t,{default:()=>n});var s=i(78673);class r extends s.A{constructor(e){super(e);var t=(e=e||{}).orig;this.origElem=t,this.useRunestoneServices=e.useRunestoneServices,this.multipleanswers=!1,this.divid=t.id,this.parseBooleanAttribute(this.origElem,"data-multipleanswers")&&(this.multipleanswers=!0),this.children=this.origElem.childNodes,this.random=!1,eBookConfig.peer?this.random=!1:this.parseBooleanAttribute(this.origElem,"data-random")&&(this.random=!0),this.correct=null,this.didSubmit=!1,this.answerList=[],this.correctList=[],this.correctIndexList=[],this.feedbackList=[],this.question=null,this.caption="Multiple Choice",this.findAnswers(),this.findQuestion(),this.findFeedbacks(),this.createCorrectList(),this.createMCForm(),this.addCaption("runestone"),this.checkServer("mChoice",!0),this.queueMathJax(this.containerDiv),"undefined"!=typeof Prism&&Prism.highlightAllUnder(this.containerDiv)}findQuestion(){const e=this.origElem.parentElement.querySelector(".exercise-statement");if(e)this.question=e;else{for(var t,i=0;i")&&(h="

",c=c.slice(3)),a.innerHTML=`${h}${String.fromCharCode("A".charCodeAt(0)+r)}. ${c}`;var d={input:a.querySelector("input"),label:a};d.input.onclick=s,this.optionArray.push(d),this.optsFieldSet.appendChild(a)}}renderMCFormButtons(){this.submitButton=document.createElement("button"),this.submitButton.textContent="Check Me",this.submitButton.className="btn btn-success",this.submitButton.name="do answer",this.submitButton.type="button",this.multipleanswers?this.submitButton.addEventListener("click",function(){this.processMCMASubmission(!0)}.bind(this),!1):this.submitButton.addEventListener("click",function(e){e.preventDefault(),this.processMCMFSubmission(!0)}.bind(this),!1),this.optsForm.appendChild(this.submitButton),this.useRunestoneServices&&!eBookConfig.peer&&(this.compareButton=document.createElement("button"),this.compareButton.className="btn btn-default",this.compareButton.id=this.divid+"_bcomp",this.compareButton.disabled=!0,this.compareButton.name="compare",this.compareButton.textContent="Compare me",this.compareButton.addEventListener("click",function(){this.compareAnswers(this.divid)}.bind(this),!1),this.optsForm.appendChild(this.compareButton))}renderMCfeedbackDiv(){this.feedBackDiv=document.createElement("div"),this.feedBackDiv.id=this.divid+"_feedback",this.feedBackDiv.setAttribute("aria-live","polite"),this.feedBackDiv.setAttribute("role","status"),this.containerDiv.appendChild(this.feedBackDiv)}randomizeAnswers(){for(var e,t,i=this.indexArray.length;0!==i;){t=Math.floor(Math.random()*i),i-=1,e=this.indexArray[i],this.indexArray[i]=this.indexArray[t],this.indexArray[t]=e;var s=this.feedbackList[i];this.feedbackList[i]=this.feedbackList[t],this.feedbackList[t]=s}}restoreAnswers(e){e.answer||(e.answer="");for(var t=e.answer.split(","),i=0;i0){var i=localStorage.getItem(this.localStorageKey());let o=!1;if(null!==i){try{t=(e=JSON.parse(i)).answer.split(",")}catch(e){console.log(`Error parsing stored mchoice data for ${this.divid}: ${e.message}`),o=!0}if(o||e.timestamp1?this.renderMCMAFeedBack():(this.feedBackDiv.innerHTML="

Your answer has been recorded

",this.feedBackDiv.className="alert alert-info"),this.didSubmit=!0}getSubmittedOpts(){var e;this.singlefeedback="",this.feedbackString="",this.givenArray=[],this.givenlog="";for(var t=this.optsForm.elements.group1,i=0;i${this.feedbackList[i]}`,this.givenlog+=e+",",this.singlefeedback=this.feedbackList[i]);this.givenArray.sort(((e,t)=>e-t))}checkCurrentAnswer(){this.getSubmittedOpts(),0!==this.givenArray.length&&(this.multipleanswers?this.scoreMCMASubmission():this.scoreMCMFSubmission())}async logCurrentAnswer(e){this.multipleanswers?await this.logMCMAsubmission(e):await this.logMCMFsubmission(e)}renderFeedback(){this.multipleanswers?this.renderMCMAFeedBack():this.renderMCMFFeedback(),this.queueMathJax(this.feedBackDiv)}scoreMCMASubmission(){this.correctCount=0;for(var e=0,t=0;e${r}`,this.feedBackDiv.className="alert alert-info"):(this.feedBackDiv.innerHTML=`✖️ You gave ${t} ${e} and got ${i} correct of ${s} needed.
    ${r}`,this.feedBackDiv.className="alert alert-danger"),this.queueMathJax(this.feedBackDiv)}processMCMFSubmission(e){this.getSubmittedOpts(),this.scoreMCMFSubmission(),this.setLocalStorage({correct:this.correct?"T":"F",answer:this.givenArray.join(",")}),e&&this.logMCMFsubmission(),!eBookConfig.peer||eBookConfig.isInstructor?(this.renderMCMFFeedback(),this.useRunestoneServices&&this.enableMCComparison()):eBookConfig.peer&&"async"===eBookConfig.peerMode&&"undefined"!=typeof studentVoteCount&&studentVoteCount>1?this.renderMCMAFeedBack():(this.feedBackDiv.innerHTML="

    Your answer has been recorded

    ",this.feedBackDiv.className="alert alert-info"),this.didSubmit=!0}scoreMCMFSubmission(){this.answer=this.givenArray[0],this.givenArray[0]==this.correctIndexList[0]?(this.correct=!0,this.percent=1):null!=this.givenArray[0]&&(this.correct=!1,this.percent=0)}async logMCMFsubmission(e){var t=this.givenArray.length>0?this.givenArray[0]:"",i=this.givenArray[0]==this.correctIndexList[0]?"T":"F";let s={event:"mChoice",act:"answer:"+t+":"+("T"==i?"correct":"no"),answer:t.toString(),correct:i,div_id:this.divid};eBookConfig.peer&&"undefined"!=typeof studentVoteCount&&(s.act=s.act+`:vote${studentVoteCount}`),void 0!==e&&(s.sid=e),await this.logBookEvent(s)}renderMCMFFeedback(){let e=this.givenArray[0]==this.correctIndexList[0],t=this.singlefeedback;e?(this.feedBackDiv.innerHTML="✔️ "+t,this.feedBackDiv.className="alert alert-info"):(null==t&&(t=""),this.feedBackDiv.innerHTML="✖️ "+t,this.feedBackDiv.className="alert alert-danger"),this.queueMathJax(this.feedBackDiv)}enableMCComparison(){eBookConfig.enableCompareMe&&(this.compareButton.disabled=!1)}instructorMchoiceModal(e){var t="";for(var i in e)t+="";return t+"
    StudentAnswer(s)
    "+e[i][0]+""+e[i][1]+"
    "}compareModal(e,t,i){var s=e.detail,r=s.answerDict,n=s.misc,o=Object.keys(r).sort(),a="";a+="";var c="";for(var h in o){c=o[h]===n.correct?"success":"info",a+=""}a+="
    AnswerPercent
    "+o[h]+"";var d=r[o[h]]+"%";a+="
    ",a+="
    "+d,a+="
    ",a+="
    ","unavailable"!==n.yourpct&&(a+="

    You have "+n.yourpct+"% correct for all questions

    "),void 0!==s.reslist&&(a+=this.instructorMchoiceModal(s.reslist));const l=document.createElement("div");l.style.position="fixed",l.style.inset="0",l.style.background="rgba(0,0,0,0.5)",l.style.zIndex="9999";const u=document.createElement("div");u.style.maxWidth="720px",u.style.margin="10vh auto",u.style.background="#fff",u.style.borderRadius="6px",u.style.boxShadow="0 2px 12px rgba(0,0,0,0.3)",u.style.padding="16px";const m=document.createElement("div"),p=document.createElement("button");p.type="button",p.textContent="×",p.setAttribute("aria-label","Close"),p.style.float="right",p.className="btn btn-light",p.onclick=function(){document.body.removeChild(l)};const v=document.createElement("h4");v.className="modal-title",v.textContent="Distribution of Answers",m.appendChild(p),m.appendChild(v);const g=document.createElement("div");g.innerHTML=a,u.appendChild(m),u.appendChild(g),l.appendChild(u),document.body.appendChild(l)}async compareAnswers(){var e={};e.div_id=this.divid,e.course_name=eBookConfig.course;try{const t=new URLSearchParams(e),i=await fetch(`${eBookConfig.new_server_prefix}/assessment/getaggregateresults?${t.toString()}`),s=await i.json();this.compareModal(s)}catch(e){console.error("Error fetching aggregate results:",e)}}disableInteraction(){for(var e=0;e=0?this.feedBackEachArray[e].classList.add("alert","alert-success"):this.feedBackEachArray[e].classList.add("alert","alert-danger")}}renderMCFormOpts(){super.renderMCFormOpts(),this.feedBackEachArray=[];for(var e=0;e