{"version":3,"sources":["priory.wizard.js"],"names":["Wizard","[object Object]","el","data","this","stepsData","scoreCount","scope","wizard","questions","querySelector","question","currentStep","stepCount","length","countElement","progressTitle","ProgressTitle","prevButton","nextButton","resultsBar","document","tempScore","tempAnswered","updateUi","bindEvents","addEventListener","step","checkAnswers","e","answer","target","value","focus","throwError","classList","add","scrollTo","querySelectorAll","remove","innerHTML","updateQuestion","update","answerElement","checked","dir","change","submitQuestions","body","scrollTop","documentElement","setTimeout","completeWizard","CustomEvent","detail","id","score","calculateTotal","dispatchEvent","set","fetch","then","response","text","outerHTML","totalScore","forEach","parseInt","ControlBinders","register","json"],"mappings":"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","sourcesContent":["class Wizard{\r\n constructor(el, data) {\r\n this.stepsData = data;\r\n this.scoreCount = [];\r\n this.scope = el;\r\n this.scope.wizard = this;\r\n this.questions = el.querySelector(\"[data-questions]\").question;\r\n this.currentStep = 1;\r\n this.stepCount = this.stepsData.length;\r\n this.countElement = el.querySelector(\"[data-count]\");\r\n this.progressTitle = new ProgressTitle(el.querySelector(\"[data-progress-title]\"));\r\n this.prevButton = el.querySelector(\"[data-prev]\");\r\n this.nextButton = el.querySelector(\"[data-next]\");\r\n this.resultsBar = document.querySelector(\"[data-results-bar]\").resultsBar;\r\n\r\n this.tempScore = 0;\r\n\r\n this.tempAnswered = false;\r\n\r\n this.updateUi();\r\n this.bindEvents();\r\n }\r\n\r\n bindEvents(){\r\n this.prevButton.addEventListener(\"click\", ()=> this.step(-1));\r\n this.nextButton.addEventListener(\"click\", ()=> this.checkAnswers());\r\n this.questions.scope.addEventListener(\"change\", e => this.answer(e.target.value));\r\n this.prevButton.focus();\r\n }\r\n\r\n answer(answer){\r\n this.tempScore = answer;\r\n this.tempAnswered = true;\r\n }\r\n\r\n checkAnswers(){\r\n if(this.tempAnswered){\r\n this.step(1);\r\n }else{\r\n this.throwError();\r\n }\r\n }\r\n\r\n throwError(){\r\n this.scope.classList.add(\"wizard--error\");\r\n this.scope.scrollTo(0, 0);\r\n this.scope.querySelectorAll(\"[data-answers] input\")[0].focus();\r\n }\r\n\r\n updateUi(){\r\n this.tempAnswered = false;\r\n this.scope.classList.remove(\"wizard--error\");\r\n\r\n this.countElement.innerHTML = this.currentStep ;\r\n this.questions.updateQuestion(this.stepsData[this.currentStep-1]);\r\n this.progressTitle.update(this.currentStep-1, this.stepsData.length);\r\n\r\n if(this.scoreCount[this.currentStep-1]){\r\n let answerElement = this.scope.querySelector(`[data-answers] input[value=\"${this.scoreCount[this.currentStep-1]}\"]`);\r\n answerElement.checked = true;\r\n this.answer(answerElement.value);\r\n }\r\n \r\n if (this.currentStep === 1){\r\n this.prevButton.classList.add('hidden');\r\n } else {\r\n this.prevButton.classList.remove('hidden');\r\n }\r\n\r\n }\r\n\r\n step(dir){\r\n let change = this.currentStep + dir;\r\n if(change > this.stepCount){\r\n this.scoreCount[this.currentStep-1] = this.tempScore;\r\n this.submitQuestions();\r\n document.body.scrollTop = document.documentElement.scrollTop = 0;\r\n }else if(change !== 0){\r\n if(this.currentStep <= change){\r\n this.scoreCount[this.currentStep-1] = this.tempScore;\r\n setTimeout(()=> this.prevButton.focus(), 100)\r\n }\r\n this.currentStep = change;\r\n this.tempScore = 0;\r\n this.updateUi();\r\n }\r\n }\r\n\r\n submitQuestions(){\r\n const completeWizard = new CustomEvent(\"complete\", {\r\n detail: {\r\n id: this.scope.id,\r\n score: this.calculateTotal()\r\n },\r\n });\r\n this.scope.dispatchEvent(completeWizard);\r\n this.scope.classList.add(\"wizard--closing\");\r\n this.resultsBar.set(this.calculateTotal());\r\n\r\n if (completeWizard){\r\n fetch(`/umbraco/surface/Questionnaire/GetResultMessage?id=${completeWizard.detail.id}&score=${completeWizard.detail.score}`)\r\n .then(response => response.text())\r\n .then(data => {\r\n const title = document.querySelector('[data-questionniare-results-title]');\r\n title.innerHTML = data;\r\n });\r\n fetch(`/umbraco/surface/Questionnaire/GetResultContentBuilder?id=${completeWizard.detail.id}&score=${completeWizard.detail.score}`)\r\n .then(response => response.text())\r\n .then(data => {\r\n const summary = document.querySelector('[data-results-summary]');\r\n summary.outerHTML = data;\r\n });\r\n }\r\n \r\n setTimeout(()=>{\r\n document.querySelector(\"html\").classList.remove(\"overflow-hidden\");\r\n this.scope.remove();\r\n }, 400)\r\n }\r\n\r\n calculateTotal(){\r\n let totalScore = 0;\r\n this.scoreCount.forEach(score =>{\r\n totalScore += parseInt(score);\r\n })\r\n return totalScore;\r\n }\r\n\r\n}\r\n\r\nControlBinders.register(`[data-wizard]`, el =>\r\n fetch(`/umbraco/surface/Questionnaire/GetQuestions?id=${el.id}`)\r\n .then(response => response.json())\r\n .then(data => new Wizard(el, data)));"],"file":"priory.wizard-min.js"}