2 lines
10 KiB
JavaScript
Executable File
2 lines
10 KiB
JavaScript
Executable File
"use strict";(self.webpackChunkWebComponents=self.webpackChunkWebComponents||[]).push([[819],{48819:(e,t,i)=>{i.r(t),i.d(t,{default:()=>r});var s=i(78673),n=i(83057);class a extends s.A{constructor(e){if(super(e),e){var t=e.orig;this.useRunestoneServices=e.useRunestoneServices||eBookConfig.useRunestoneServices,this.origElem=t,this.divid=t.id,this.question=this.origElem.innerHTML,this.optional=!1,this.attachURL=e.attachURL,this.origElem.hasAttribute("data-optional")&&(this.optional=!0),this.origElem.hasAttribute("data-attachment")&&(this.attachment=!0),this.placeholder=this.origElem.getAttribute("data-placeholder")||"Write your answer here",this.renderHTML(),this.caption="shortanswer",this.addCaption("runestone"),this.checkServer("shortanswer",!0),"undefined"!=typeof Prism&&Prism.highlightAllUnder(this.containerDiv),this.attachment&&this.getAttachmentName()}}renderHTML(){for(this.containerDiv=document.createElement("div"),this.containerDiv.id=this.divid,this.containerDiv.classList.add(...(this.origElem.getAttribute("class")||"").split(" ").filter(Boolean)),this.newForm=document.createElement("form"),this.newForm.id=this.divid+"_journal",this.newForm.name=this.newForm.id,this.newForm.action="",this.containerDiv.appendChild(this.newForm),this.fieldSet=document.createElement("fieldset"),this.newForm.appendChild(this.fieldSet),this.firstLegendDiv=document.createElement("div");this.origElem.firstChild;)this.firstLegendDiv.appendChild(this.origElem.firstChild);if(this.firstLegendDiv.classList.add("journal-question"),this.firstLegendDiv.classList.add("exercise-statement"),this.fieldSet.appendChild(this.firstLegendDiv),this.jInputDiv=document.createElement("div"),this.jInputDiv.id=this.divid+"_journal_input",this.fieldSet.appendChild(this.jInputDiv),this.jOptionsDiv=document.createElement("div"),this.jOptionsDiv.classList.add("journal-options"),this.jInputDiv.appendChild(this.jOptionsDiv),this.jTextArea=document.createElement("textarea"),this.jTextArea.id=this.divid+"_solution",this.jTextArea.setAttribute("aria-label","textarea"),this.jTextArea.placeholder=this.placeholder,this.jTextArea.style.display="inline",this.jTextArea.style.width="530px",this.jTextArea.classList.add("form-control"),this.jTextArea.rows=4,this.jTextArea.cols=50,this.jOptionsDiv.appendChild(this.jTextArea),this.jTextArea.onchange=function(){this.isAnswered=!0}.bind(this),this.jTextArea.addEventListener("keydown",(()=>{this.isTimed?this.feedbackDiv.innerHTML="Your answer is automatically saved.":(this.feedbackDiv.innerHTML="Your answer has not been saved yet!",this.feedbackDiv.classList.remove("alert-success"),this.feedbackDiv.classList.add("alert","alert-danger"))})),this.jTextArea.addEventListener("input",(()=>{this.jTextArea.style.height="auto",this.jTextArea.style.height=`${this.jTextArea.scrollHeight}px`,this.renderMath(this.jTextArea.value)})),this.buttonDiv=document.createElement("div"),this.fieldSet.appendChild(this.buttonDiv),this.submitButton=document.createElement("button"),this.submitButton.classList.add("btn","btn-success"),this.submitButton.type="button",this.submitButton.textContent="Save",this.submitButton.onclick=function(){this.checkCurrentAnswer(),this.logCurrentAnswer(),this.renderFeedback()}.bind(this),this.buttonDiv.appendChild(this.submitButton),this.otherOptionsDiv=document.createElement("div"),this.otherOptionsDiv.style.paddingLeft="20px",this.otherOptionsDiv.classList.add("journal-options"),this.fieldSet.appendChild(this.otherOptionsDiv),this.feedbackDiv=document.createElement("div"),this.feedbackDiv.style.width="530px",this.feedbackDiv.style.fontStyle="italic",this.feedbackDiv.id=this.divid+"_feedback",this.feedbackDiv.classList.add("shortanswer__feedback"),this.feedbackDiv.style.display="none",this.fieldSet.appendChild(this.feedbackDiv),this.attachment){let e=document.createElement("div");if(this.attachDiv=e,this.graderactive){let t=document.createElement("button");t.type="button",t.innerHTML="View Attachment",t.onclick=this.viewFile.bind(this),e.appendChild(t)}else this.fileUpload=document.createElement("input"),this.fileUpload.type="file",this.fileUpload.id=`${this.divid}_fileme`,e.appendChild(this.fileUpload);this.containerDiv.appendChild(e)}this.origElem.replaceWith(this.containerDiv),"undefined"!=typeof MathJax&&this.queueMathJax(this.containerDiv)}renderMath(e){(0,n.u)(e)?(this.renderedAnswer||(this.rederedAnswerDiv=document.createElement("div"),this.rederedAnswerDiv.classList.add("shortanswer__rendered-answer-div"),this.fieldSet.appendChild(this.rederedAnswerDiv),this.renderedAnswerLabel=document.createElement("label"),this.renderedAnswerLabel.innerHTML="Rendered Answer:",this.renderedAnswerLabel.id=this.divid+"_rendered_answer_label",this.renderedAnswerLabel.classList.add("shortanswer__rendered-answer-label"),this.rederedAnswerDiv.appendChild(this.renderedAnswerLabel),this.renderedAnswer=document.createElement("div"),this.renderedAnswer.classList.add("shortanswer__rendered-answer"),this.renderedAnswer.classList.add("latexoutput"),this.renderedAnswer.setAttribute("aria-labelledby",this.renderedAnswerLabel.id),this.renderedAnswer.setAttribute("aria-live","polite"),this.rederedAnswerDiv.appendChild(this.renderedAnswer)),e=(e=(e=e.replace(/\$\$(.*?)\$\$/g,"\\[ $1 \\]")).replace(/\$(.*?)\$/g,"\\( $1 \\)")).replace(/\n/g,"<br/>"),this.renderedAnswer.innerHTML=e,this.rederedAnswerDiv.style.display="block",this.queueMathJax(this.renderedAnswer)):this.renderedAnswer&&(this.rederedAnswerDiv.style.display="none")}async checkCurrentAnswer(){let e=document.getElementById(this.divid+"_solution").value;this.renderMath(e),this.setLocalStorage({answer:e,timestamp:new Date})}async logCurrentAnswer(e){let t=document.getElementById(this.divid+"_solution").value;this.renderMath(t),this.setLocalStorage({answer:t,timestamp:new Date});let i={event:"shortanswer",act:t,answer:t,div_id:this.divid};void 0!==e&&(i.sid=e),await this.logBookEvent(i),this.attachment&&await this.uploadFile()}renderFeedback(){this.feedbackDiv.innerHTML="Your answer has been saved.",this.feedbackDiv.classList.remove("alert-danger"),this.feedbackDiv.classList.add("alert","alert-success"),this.feedbackDiv.style.display="block"}setLocalStorage(e){if(!this.graderactive){let t=this.localStorageKey();localStorage.setItem(t,JSON.stringify(e))}}checkLocalStorage(){var e="";if(!this.graderactive&&localStorage.length>0){var t=localStorage.getItem(this.localStorageKey());if(null!==t){try{e=JSON.parse(t).answer}catch(e){return console.log(e.message),void localStorage.removeItem(this.localStorageKey())}let i=document.getElementById(this.divid+"_solution");i&&(i.value=e),this.renderMath(e)}}}restoreAnswers(e){e.answer||(e.answer=""),this.answer=e.answer,this.jTextArea.value=this.answer,this.renderMath(this.answer);let t=document.createElement("p");t.classList.add("shortanswer__timestamp"),this.jInputDiv.appendChild(t);var i;if(i=e.timestamp?new Date(e.timestamp).toLocaleString():"",t.textContent=i,this.jTextArea.style.height="auto",this.jTextArea.style.height=`${this.jTextArea.scrollHeight}px`,e.last_answer){this.current_answer="ontime";let s=document.createElement("button");s.type="button",s.textContent="Show Late Answer",s.classList.add("btn","btn-warning"),s.style.marginLeft="5px",s.addEventListener("click",function(){var n,a;"ontime"===this.current_answer?(this.jTextArea.value=e.last_answer,this.answer=e.last_answer,n=new Date(e.last_timestamp).toLocaleString(),a="Show on-Time Answer",this.current_answer="late"):(this.jTextArea.value=e.answer,this.answer=e.answer,n=i,a="Show Late Answer",this.current_answer="ontime"),this.renderMath(this.answer),t.textContent=`Submitted: ${n}`,s.textContent=a}.bind(this)),this.buttonDiv.appendChild(s)}let s="";void 0!==e.score&&(s=`Score: ${e.score}`),e.comment&&(s+=` -- ${e.comment}`),""!==s&&(this.feedbackDiv.innerHTML=s,this.feedbackDiv.style.display="block",this.feedbackDiv.classList.add("alert","alert-success"))}disableInteraction(){this.jTextArea.disabled=!0}async getAttachmentName(){let e=`/ns/assessment/has_attachment/${this.divid}`;this.sid&&(e+=`?sid=${this.sid}`);const t=await fetch(e);if(!t.ok)return console.error("Error fetching attachment name:",t.statusText),null;const i=await t.json();if(i.detail.hasAttachment){let e=i.detail.hasAttachment;e=e.substring(e.lastIndexOf("/")+1);let t=document.createElement("span");t.innerHTML=`Attachment: ${e}`,this.attachDiv.appendChild(t)}}async uploadFile(){const e=this.fileUpload.files,t=e[0].name.split(".").pop();if(!["jpg","jpeg","png","gif","pdf"].includes(t))return void alert("File type not allowed. Please upload a jpg, jpeg, png, gif, or pdf file.");if(e[0].size>5242880)return void alert("File size exceeds 5MB limit. Please upload a smaller file.");const i=new FormData;this.fileUpload.files.length>0&&(i.append("file",e[0]),fetch(`/ns/logger/upload/${this.divid}`,{method:"POST",body:i}).then((e=>e.json())).then((e=>{console.log(e)})).catch((e=>{console.error(e)})))}viewFile(){if(this.attachURL){const e=window.open("","_blank");if(-1!==this.attachURL.indexOf(".pdf?")){const t=e.document.createElement("object");t.setAttribute("data",this.attachURL),t.setAttribute("type","application/pdf"),t.setAttribute("width","800px"),t.setAttribute("height","1040px"),e.document.body.appendChild(t);let i=e.document.createElement("a");i.setAttribute("href",this.attachURL),i.innerText="Download PDF",t.appendChild(i)}else{const t=e.document.createElement("img");t.setAttribute("src",this.attachURL),t.setAttribute("style","width:100%; height:auto;"),e.document.body.appendChild(t)}}else alert("No attachment for this student.")}}document.addEventListener("runestone:login-complete",(function(){document.querySelectorAll("[data-component=shortanswer]").forEach((function(e){if(!e.closest("[data-component=timedAssessment]"))try{window.componentMap[e.id]=new a({orig:e,useRunestoneServices:eBookConfig.useRunestoneServices})}catch(t){console.log(`Error rendering ShortAnswer Problem ${e.id}\n Details: ${t}`)}}))}));class r extends a{constructor(e){super(e),this.renderTimedIcon(this.containerDiv),this.isTimed=!0,this.hideButtons()}hideButtons(){this.submitButton&&(this.submitButton.style.display="none")}renderTimedIcon(e){var t=document.createElement("div"),i=document.createElement("img");i.src="../_static/clock.png",i.style.width="15px",i.style.height="15px",t.className="timeTip",t.title="",t.appendChild(i),e.insertBefore(t,e.firstChild)}checkCorrectTimed(){return"I"}hideFeedback(){this.feedbackDiv&&(this.feedbackDiv.style.display="none")}}void 0===window.component_factory&&(window.component_factory={}),window.component_factory.shortanswer=function(e){return e.timed?new r(e):new a(e)}}}]);
|
|
//# sourceMappingURL=819.66dbba90006846bf.js.map
|