Changeset 3228552
- Timestamp:
- 01/25/2025 06:41:26 PM (14 months ago)
- Location:
- hd-quiz
- Files:
-
- 18 edited
-
tags/2.0.2/assets/frontend/hdq_script.js (modified) (1 diff)
-
trunk/assets/admin_bundled.js (modified) (2 diffs)
-
trunk/assets/admin_bundled.js.map (modified) (1 diff)
-
trunk/assets/frontend/hdq_script.js (modified) (3 diffs)
-
trunk/assets/views/quiz.js (modified) (1 diff)
-
trunk/classes/dashboard.php (modified) (1 diff)
-
trunk/classes/question.php (modified) (2 diffs)
-
trunk/classes/questions/multiple-choice-image.php (modified) (1 diff)
-
trunk/classes/questions/multiple-choice-text.php (modified) (1 diff)
-
trunk/classes/questions/select-all-apply-image.php (modified) (1 diff)
-
trunk/classes/questions/select-all-apply-text.php (modified) (1 diff)
-
trunk/classes/questions/text-based-answer.php (modified) (1 diff)
-
trunk/classes/quiz.php (modified) (3 diffs)
-
trunk/includes/actions-ajax.php (modified) (1 diff)
-
trunk/includes/admin-pages.php (modified) (1 diff)
-
trunk/includes/custom-fields.php (modified) (1 diff)
-
trunk/index.php (modified) (2 diffs)
-
trunk/readme.txt (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
hd-quiz/tags/2.0.2/assets/frontend/hdq_script.js
r3209440 r3228552 318 318 } 319 319 quiz_el.classList.remove("hdq_hidden"); 320 quiz_el.style.display = "block"; 320 321 321 322 if (HDQ.VARS.quiz.timer_per_question === "yes") { -
hd-quiz/trunk/assets/admin_bundled.js
r3202728 r3228552 1 (()=>{var c=async function(e="",t={}){let n=await o(e,t),a=null;if(ajaxurl&&(a=ajaxurl),ajaxurl===null){console.error("No ajax url found");return}let i=new FormData;i.append("action",e);for(let[m,g]of Object.entries(t))i.append(m,g);let s=document.getElementById("hd_wpnonce").value;i.append("HD_NONCE",s);let l=await fetch(a,{method:"POST",credentials:"same-origin",body:i});return l=await l.json(),l;async function o(m,g){let w="";for(let y in g)w+="&"+y+"="+g[y];return`action=${m}`+w}function h(m){console.log(m)}};var f={get:async function(e,t=null){console.log("getting the dashboard");let n=await f.getData();await f.render(n),_hd.init();let a=document.getElementById("hd_save");a.setAttribute("tabindex",0),document.getElementById("hdq_quiz_name").addEventListener("keyup",function(s){s.key==="Enter"&&a.click()});let i=document.getElementsByClassName("hdq_quiz_item");for(let s=0;s<i.length;s++)i[s].addEventListener("click",function(l){l.target.tagName=="CODE"&&l.preventDefault()})},getData:async function(){return await c("hdq_get_view_dashboard",{})},render:async function(e){document.getElementById("hdq_content").innerHTML=e.html,document.getElementById("hdq_content").scrollTo(0,0),document.getElementById("hdq_loading").classList.remove("active")}};var r={get:async function(e,t=null){console.log("getting the quiz ID "+t);let n=await r.getData(t);await r.render(n)},getData:async function(e){let t=1;e[1]&&(t=e[1]);let n={quiz_id:e[0],paged:t};return console.log(n),await c("hdq_get_view_quiz",n)},render:async function(e){document.getElementById("hdq_content").innerHTML=e.html,document.getElementById("hdq_content").scrollTo(0,0),document.getElementById("hdq_loading").classList.remove("active"),_hd.init(),HDQ.form.createEditors(),HDQ.form.tabs(),document.getElementById("hdq_copy_shortcode").addEventListener("click",function(){navigator.clipboard.writeText(this.innerText)}),e.type==="personality"&&r.personality.init(),HDQ.sort.init(),r.question_order.init();let t=document.getElementById("hd_delete_quiz");if(!t)return;t.addEventListener("click",async function(){confirm("You are about to delete this entire quiz and all attached questions. Continue?")&&n(this)});async function n(a){let i={quiz_id:parseInt(a.getAttribute("data-quiz"))},s=await c("hdq_delete_quiz",i);console.log(s),HDQ.router.views.dashboard.get(null,[])}return e},question_order:{init:function(){_hd.validate.field.hdq_field_question_order=r.question_order.validate},validate:async function(e){return{value:await r.question_order.getData(e),status:!0}},getData:async function(){let e=document.getElementsByClassName("hdq_quiz_question"),t=[];for(let n=0;n<e.length;n++){let a=parseInt(e[n].getAttribute("data-id"));t.push(a)}return t}},personality:{saved:{hasAdded:!1,hasSaved:!1},init:function(){_hd.validate.field.hdq_field_personality_results=r.personality.validate,document.getElementById("hdq_add_new_personality_outcome").addEventListener("click",function(){r.personality.create()}),r.personality.remove.init(),document.getElementById("hd_save").addEventListener("click",function(e){r.personality.saved.hasSaved=!0}),document.getElementById("hdq_add_new_quiz").addEventListener("click",function(e){r.personality.saved.hasAdded&&!r.personality.saved.hasSaved&&document.getElementsByClassName("hdq_outcome_label").length>1&&(e.preventDefault(),confirm("You have added a new outcome but have not saved. Contunue to adding a new question?")&&(window.location=this.href))})},remove:{init:function(){let e=document.getElementsByClassName("hdq_remove_outcome");for(let t=0;t<e.length;t++)e[t].addEventListener("click",function(){this.parentElement.remove()})}},validate:async function(e){await tinyMCE.triggerSave();let t=e.getAttribute("id"),n=[],a=e.getElementsByClassName("hdq_outcome_label"),i=e.getElementsByClassName("hd_editor_input");for(let o=0;o<a.length;o++)n.push({label:a[o].value,id:a[o].value.replace(/[`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi,"").replaceAll(" ","_").toLowerCase()+""+o,content:i[o].value});let s=!0;for(let o=0;o<n.length;o++)n[o].label==""?(s=!1,a[o].classList.add("hd_error")):a[o].classList.remove("hd_error");return{value:n,status:s}},create:function(){r.personality.saved.hasAdded=!0;let e=document.getElementById("personality_results").getElementsByClassName("hd_input_item").length;e=String.fromCharCode(e+65);let t=`<div class="hd_input_item">1 (()=>{var c=async function(e="",t={}){let a=await o(e,t),n=null;if(ajaxurl&&(n=ajaxurl),ajaxurl===null){console.error("No ajax url found");return}let i=new FormData;i.append("action",e);for(let[m,g]of Object.entries(t))i.append(m,g);let s=document.getElementById("hd_wpnonce").value;i.append("HD_NONCE",s);let l=await fetch(n,{method:"POST",credentials:"same-origin",body:i});return l=await l.json(),l;async function o(m,g){let w="";for(let y in g)w+="&"+y+"="+g[y];return`action=${m}`+w}function h(m){console.log(m)}};var f={get:async function(e,t=null){console.log("getting the dashboard");let a=await f.getData();await f.render(a),_hd.init();let n=document.getElementById("hd_save");n.setAttribute("tabindex",0),document.getElementById("hdq_quiz_name").addEventListener("keyup",function(s){s.key==="Enter"&&n.click()});let i=document.getElementsByClassName("hdq_quiz_item");for(let s=0;s<i.length;s++)i[s].addEventListener("click",function(l){l.target.tagName=="CODE"&&l.preventDefault()})},getData:async function(){return await c("hdq_get_view_dashboard",{})},render:async function(e){document.getElementById("hdq_content").innerHTML=e.html,document.getElementById("hdq_content").scrollTo(0,0),document.getElementById("hdq_loading").classList.remove("active")}};var r={get:async function(e,t=null){console.log("getting the quiz ID "+t);let a=await r.getData(t);await r.render(a)},getData:async function(e){let t=1;e[1]&&(t=e[1]);let a={quiz_id:e[0],paged:t};return console.log(a),await c("hdq_get_view_quiz",a)},render:async function(e){document.getElementById("hdq_content").innerHTML=e.html,document.getElementById("hdq_content").scrollTo(0,0),document.getElementById("hdq_loading").classList.remove("active"),_hd.init(),HDQ.form.createEditors(),HDQ.form.tabs(),document.getElementById("hdq_copy_shortcode").addEventListener("click",function(){let n=this;if(n.classList.contains("active"))return;n.classList.add("active");let i=n.innerText;navigator.clipboard.writeText(n.innerText),n.innerText="copied to clipboard",setTimeout(function(){n.innerText=i,n.classList.remove("active")},3e3)}),e.type==="personality"&&r.personality.init(),HDQ.sort.init(),r.question_order.init();let t=document.getElementById("hd_delete_quiz");if(!t)return;t.addEventListener("click",async function(){confirm("You are about to delete this entire quiz and all attached questions. Continue?")&&a(this)});async function a(n){let i={quiz_id:parseInt(n.getAttribute("data-quiz"))},s=await c("hdq_delete_quiz",i);console.log(s),HDQ.router.views.dashboard.get(null,[])}return e},question_order:{init:function(){_hd.validate.field.hdq_field_question_order=r.question_order.validate},validate:async function(e){return{value:await r.question_order.getData(e),status:!0}},getData:async function(){let e=document.getElementsByClassName("hdq_quiz_question"),t=[];for(let a=0;a<e.length;a++){let n=parseInt(e[a].getAttribute("data-id"));t.push(n)}return t}},personality:{saved:{hasAdded:!1,hasSaved:!1},init:function(){_hd.validate.field.hdq_field_personality_results=r.personality.validate,document.getElementById("hdq_add_new_personality_outcome").addEventListener("click",function(){r.personality.create()}),r.personality.remove.init(),document.getElementById("hd_save").addEventListener("click",function(e){r.personality.saved.hasSaved=!0}),document.getElementById("hdq_add_new_quiz").addEventListener("click",function(e){r.personality.saved.hasAdded&&!r.personality.saved.hasSaved&&document.getElementsByClassName("hdq_outcome_label").length>1&&(e.preventDefault(),confirm("You have added a new outcome but have not saved. Contunue to adding a new question?")&&(window.location=this.href))})},remove:{init:function(){let e=document.getElementsByClassName("hdq_remove_outcome");for(let t=0;t<e.length;t++)e[t].addEventListener("click",function(){this.parentElement.remove()})}},validate:async function(e){await tinyMCE.triggerSave();let t=e.getAttribute("id"),a=[],n=e.getElementsByClassName("hdq_outcome_label"),i=e.getElementsByClassName("hd_editor_input");for(let o=0;o<n.length;o++)a.push({label:n[o].value,id:n[o].value.replace(/[`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi,"").replaceAll(" ","_").toLowerCase()+""+o,content:i[o].value});let s=!0;for(let o=0;o<a.length;o++)a[o].label==""?(s=!1,n[o].classList.add("hd_error")):n[o].classList.remove("hd_error");return{value:a,status:s}},create:function(){r.personality.saved.hasAdded=!0;let e=document.getElementById("personality_results").getElementsByClassName("hd_input_item").length;e=String.fromCharCode(e+65);let t=`<div class="hd_input_item"> 2 2 <div class="hdq_remove_outcome" title="Remove this outcome">x</div> 3 3 <label class="hd_input_label" for="hdq_result_${e}"><span class="hd_required_icon"></span> Outcome title <span class="hd_tooltip_item">?<span class="hd_tooltip"><div class="hd_tooltip_content">NOTE: If you rename this outcome, you will need to re-edit your questions to set the correct answer.</div></span></span></label> … … 31 31 </div> 32 32 </div> 33 </div>`;document.getElementById("personality_results").insertAdjacentHTML("beforeend",t),HDQ.form.createEditors(),r.personality.remove.init()}}};var d={get:async function(e,t=null){console.log("getting the question ID "+t[1]);let n=await d.getData(t);await d.render(n)},getData:async function(e){let t={quiz_id:parseInt(e[0]),question_id:parseInt(e[1])};return await c("hdq_get_view_question",t)},render:async function(e){document.getElementById("hdq_content").innerHTML=e.html,document.getElementById("hdq_content").scrollTo(0,0),document.getElementById("hdq_loading").classList.remove("active"),_hd.init(),HDQ.form.createEditors(),HDQ.form.tabs(),d.answers.data.question_id=e.question_id,d.answers.data.quiz_id=e.quiz_id,d.answers.init();let t=document.getElementById("hd_delete_question");if(!t)return;t.addEventListener("click",async function(){confirm("You are about to delete this question. Continue?")&&n(this)});async function n(a){let i={quiz_id:parseInt(a.getAttribute("data-quiz")),question_id:parseInt(a.getAttribute("data-id"))},s=await c("hdq_delete_question",i);HDQ.router.views.quiz.get(s.action.data,s.action.data2);let l={quiz_id:s.action.data2};history.pushState(l,"")}},update:function(e){document.getElementById("question_id").value=parseInt(e[0]),document.getElementById("hd_delete_question").setAttribute("data-id",parseInt(e[0]))},answers:{data:{answers:[],question_id:0,quiz_id:0,defaults:{value:"",image:"",imageURL:"",selected:""}},init:function(){d.answers.onChangeQuestionType(),d.fieldAnswers.init()},onChangeQuestionType:function(){let e=document.getElementById("question_type");e&&(e.addEventListener("change",async function(){d.answers.changeQuestionType(this)}),setTimeout(function(){e.options[0].selected&&(e.options[1].selected=!0);let t=new Event("change");e.dispatchEvent(t)},10))},changeQuestionType:async function(e){document.getElementById("hdq_loading").classList.add("active");let t=document.getElementById("question_type"),n=e.value;if(n===""||n===null){t.options[1].selected=!0;let i=new Event("change");t.dispatchEvent(i);return}let a={question_type:n,question_id:d.answers.data.question_id,quiz_id:d.answers.data.quiz_id};d.answers.data.answers=await d.answers.getAnswerData(),a=await c("hdq_get_question_type",a),a.status&&a.status==="success"?(document.getElementById("question_answers").innerHTML=a.html,a.action&&a.action.name&&(console.log("running action "+a.action.name),HDQ[a.action.name]()),d.answers.setAnswerData(d.answers),document.getElementById("hdq_loading").classList.remove("active")):console.log(a)},getAnswerData:async function(e=document.getElementById("question_answers")){let t=e.getElementsByClassName("hdq_answer_row");if(t.length===0)return[[],!1];let n=[];for(let i=0;i<t.length;i++){let s=JSON.parse(JSON.stringify(d.answers.data.defaults)),l=t[i].getElementsByClassName("hdq_answer_item_input");for(let o=0;o<l.length;o++){let h=l[o].getAttribute("data-answer-type");l[o].getAttribute("type")=="checkbox"?l[o].checked&&(s[h]="yes"):l[o].getAttribute("data-value")?s[h]=l[o].getAttribute("data-value"):s[h]=l[o].value}n.push(s)}let a=[];for(let i=0;i<n.length;i++)n[i].value&&n[i].value!==""&&a.push(n[i]);return[a,!0]},setAnswerData:async function(){let e=d.answers.data.answers[0];if(e.length===0)return;let t=document.getElementsByClassName("hdq_answer_row");for(let n=0;n<t.length;n++){let a=t[n].getElementsByClassName("hdq_answer_item_input");for(let i=0;i<a.length;i++){let s=a[i].getAttribute("data-answer-type");e[n]&&e[n][s]&&(a[i].getAttribute("type")=="checkbox"?a[i].checked=!0:a[i].getAttribute("data-value")?(a[i].setAttribute("data-value",e[n][s]),s==="image"&&(a[i].innerHTML="",a[i].insertAdjacentElement("beforeend",e[n].imageURL),a[i].nextElementSibling.classList.add("active"))):a[i].value=e[n][s])}}}},fieldAnswers:{init:function(){_hd.validate.field.hdq_field_answers=d.fieldAnswers.validate},validate:async function(e){let t=!0,n=await d.answers.getAnswerData(e),a=n[0];return n[1]&&a.length==0&&(t=!1),{value:a,status:t}}}};var v={dashboard:f,quiz:r,question:d,reload:{get:function(e){location.reload(!0)}}};var u={views:v,init:async function(){await u.getView(),window.addEventListener("hashchange",async function(){u.getView()})},getHash:async function(){let e=window.location.hash;return e.length==0&&(e="#/dashboard"),e},getView:async function(e=null){let t=await u.getHash();return t=t.replaceAll("#/",""),e=t.split("/"),e.shift(),t=t.split("/")[0],v[t]?u.views[t].get(t,e):console.error("HD Quiz: View "+t+" could not be found"),document.getElementById("hdq_loading").classList.add("active"),t}};var q={tabs:function(){let e=document.getElementsByClassName("hdq_quiz_tab");for(let n=0;n<e.length;n++)e[n].addEventListener("click",function(){t(),this.classList.add("hdq_quiz_tab_active");let a=this.getAttribute("data-id");document.getElementById(a).classList.add("hdq_tab_content_active")});function t(){let n=document.getElementsByClassName("hdq_quiz_tab_active");for(;n.length>0;)n[0].classList.remove("hdq_quiz_tab_active");let a=document.getElementsByClassName("hdq_tab_content_active");for(;a.length>0;)a[0].classList.remove("hdq_tab_content_active")}},createEditors:function(){let e=document.getElementsByClassName("hd_editor_input");for(let n=0;n<e.length;n++){let a=e[n].getAttribute("id");tinyMCE.execCommand("mceRemoveEditor",!1,a)}setTimeout(t,1600);function t(){tinyMCE.init({mode:"textareas",relative_urls:!1,remove_script_host:!1,convert_urls:!0,browser_spellcheck:!0,entity_encoding:"raw",keep_styles:!1,resize:!0,content_style:"body { height: 100vh; min-height: 120px }",menubar:!1,branding:!1,wpeditimage_html5_captions:!0,plugins:"charmap,colorpicker,hr,lists,media,paste,tabfocus,textcolor,wordpress,wpautoresize,wpeditimage,wpemoji,wpgallery,wplink,wpdialogs,wptextpattern,wpview",wpautop:!0,indent:!1,toolbar1:"formatselect,bold,italic,bullist,numlist,blockquote,alignleft,aligncenter,alignright,link,dfw,wp_adv",toolbar2:"strikethrough,hr,forecolor,pastetext,removeformat,charmap,outdent,indent,undo,redo,wp_help",toolbar3:"",toolbar4:"",tabfocus_elements:"content-html,save-post",wp_autoresize_on:0,add_unload_trigger:!1,block_formats:"Paragraph=p;Heading 2=h2;Heading 3=h3;Heading 4=h4;Code=code"})}}};var _={init:function(){let e=document.getElementById("hdq_questions_list").getElementsByClassName("hdq_quiz_question");for(let t=0;t<e.length;t++)_.enableDragItem(e[t])},enableDragItem:function(e){e.setAttribute("draggable",!0),e.ondrag=_.handleDrag,e.ondragend=_.handleDrop},handleDrag:function(e){let t=e.target,n=e.clientX,a=e.clientY,i=[document.getElementById("hdq_questions_list")];t.classList.add("drag-sort-active");let s=document.elementFromPoint(n,a)===null?t:document.elementFromPoint(n,a);if(s!==null&&s.getAttribute("draggable")=="true")for(let l=0;l<i.length;l++)s!==null&&i[l]===s.parentNode&&(s=s!==t.nextSibling?s:s.nextSibling,i[l].insertBefore(t,s))},handleDrop:function(e){e.target.classList.remove("drag-sort-active"),document.getElementById("hdq_questions_list").classList.add("hderp")}};var p={init:async function(){console.log("HD Quiz v"+HDQ_VERSION+" init");async function e(){await p.router.init()}await e(),p.form.createEditors()},router:u,form:q,sort:_,images:function(){_hd.images.init()},reload:function(e){let t=e.getAttribute("href");window.location.href.includes(t)&&window.location.reload()}};p.init();window.HDQ=p;})();33 </div>`;document.getElementById("personality_results").insertAdjacentHTML("beforeend",t),HDQ.form.createEditors(),r.personality.remove.init()}}};var d={get:async function(e,t=null){console.log("getting the question ID "+t[1]);let a=await d.getData(t);await d.render(a)},getData:async function(e){let t={quiz_id:parseInt(e[0]),question_id:parseInt(e[1])};return await c("hdq_get_view_question",t)},render:async function(e){document.getElementById("hdq_content").innerHTML=e.html,document.getElementById("hdq_content").scrollTo(0,0),document.getElementById("hdq_loading").classList.remove("active"),_hd.init(),HDQ.form.createEditors(),HDQ.form.tabs(),d.answers.data.question_id=e.question_id,d.answers.data.quiz_id=e.quiz_id,d.answers.init();let t=document.getElementById("hd_delete_question");if(!t)return;t.addEventListener("click",async function(){confirm("You are about to delete this question. Continue?")&&a(this)});async function a(n){let i={quiz_id:parseInt(n.getAttribute("data-quiz")),question_id:parseInt(n.getAttribute("data-id"))},s=await c("hdq_delete_question",i);HDQ.router.views.quiz.get(s.action.data,s.action.data2);let l={quiz_id:s.action.data2};history.pushState(l,"")}},update:function(e){document.getElementById("question_id").value=parseInt(e[0]),document.getElementById("hd_delete_question").setAttribute("data-id",parseInt(e[0]))},answers:{data:{answers:[],question_id:0,quiz_id:0,defaults:{value:"",image:"",imageURL:"",selected:""}},init:function(){d.answers.onChangeQuestionType(),d.fieldAnswers.init()},onChangeQuestionType:function(){let e=document.getElementById("question_type");e&&(e.addEventListener("change",async function(){d.answers.changeQuestionType(this)}),setTimeout(function(){e.options[0].selected&&(e.options[1].selected=!0);let t=new Event("change");e.dispatchEvent(t)},10))},changeQuestionType:async function(e){document.getElementById("hdq_loading").classList.add("active");let t=document.getElementById("question_type"),a=e.value;if(a===""||a===null){t.options[1].selected=!0;let i=new Event("change");t.dispatchEvent(i);return}let n={question_type:a,question_id:d.answers.data.question_id,quiz_id:d.answers.data.quiz_id};d.answers.data.answers=await d.answers.getAnswerData(),n=await c("hdq_get_question_type",n),n.status&&n.status==="success"?(document.getElementById("question_answers").innerHTML=n.html,n.action&&n.action.name&&(console.log("running action "+n.action.name),HDQ[n.action.name]()),d.answers.setAnswerData(d.answers),document.getElementById("hdq_loading").classList.remove("active")):console.log(n)},getAnswerData:async function(e=document.getElementById("question_answers")){let t=e.getElementsByClassName("hdq_answer_row");if(t.length===0)return[[],!1];let a=[];for(let i=0;i<t.length;i++){let s=JSON.parse(JSON.stringify(d.answers.data.defaults)),l=t[i].getElementsByClassName("hdq_answer_item_input");for(let o=0;o<l.length;o++){let h=l[o].getAttribute("data-answer-type");l[o].getAttribute("type")=="checkbox"?l[o].checked&&(s[h]="yes"):l[o].getAttribute("data-value")?s[h]=l[o].getAttribute("data-value"):s[h]=l[o].value}a.push(s)}let n=[];for(let i=0;i<a.length;i++)a[i].value&&a[i].value!==""&&n.push(a[i]);return[n,!0]},setAnswerData:async function(){let e=d.answers.data.answers[0];if(e.length===0)return;let t=document.getElementsByClassName("hdq_answer_row");for(let a=0;a<t.length;a++){let n=t[a].getElementsByClassName("hdq_answer_item_input");for(let i=0;i<n.length;i++){let s=n[i].getAttribute("data-answer-type");e[a]&&e[a][s]&&(n[i].getAttribute("type")=="checkbox"?n[i].checked=!0:n[i].getAttribute("data-value")?(n[i].setAttribute("data-value",e[a][s]),s==="image"&&(n[i].innerHTML="",n[i].insertAdjacentElement("beforeend",e[a].imageURL),n[i].nextElementSibling.classList.add("active"))):n[i].value=e[a][s])}}}},fieldAnswers:{init:function(){_hd.validate.field.hdq_field_answers=d.fieldAnswers.validate},validate:async function(e){let t=!0,a=await d.answers.getAnswerData(e),n=a[0];return a[1]&&n.length==0&&(t=!1),{value:n,status:t}}}};var v={dashboard:f,quiz:r,question:d,reload:{get:function(e){location.reload(!0)}}};var u={views:v,init:async function(){await u.getView(),window.addEventListener("hashchange",async function(){u.getView()})},getHash:async function(){let e=window.location.hash;return e.length==0&&(e="#/dashboard"),e},getView:async function(e=null){let t=await u.getHash();return t=t.replaceAll("#/",""),e=t.split("/"),e.shift(),t=t.split("/")[0],v[t]?u.views[t].get(t,e):console.error("HD Quiz: View "+t+" could not be found"),document.getElementById("hdq_loading").classList.add("active"),t}};var q={tabs:function(){let e=document.getElementsByClassName("hdq_quiz_tab");for(let a=0;a<e.length;a++)e[a].addEventListener("click",function(){t(),this.classList.add("hdq_quiz_tab_active");let n=this.getAttribute("data-id");document.getElementById(n).classList.add("hdq_tab_content_active")});function t(){let a=document.getElementsByClassName("hdq_quiz_tab_active");for(;a.length>0;)a[0].classList.remove("hdq_quiz_tab_active");let n=document.getElementsByClassName("hdq_tab_content_active");for(;n.length>0;)n[0].classList.remove("hdq_tab_content_active")}},createEditors:function(){let e=document.getElementsByClassName("hd_editor_input");for(let a=0;a<e.length;a++){let n=e[a].getAttribute("id");tinyMCE.execCommand("mceRemoveEditor",!1,n)}setTimeout(t,1600);function t(){tinyMCE.init({mode:"textareas",relative_urls:!1,remove_script_host:!1,convert_urls:!0,browser_spellcheck:!0,entity_encoding:"raw",keep_styles:!1,resize:!0,content_style:"body { height: 100vh; min-height: 120px }",menubar:!1,branding:!1,wpeditimage_html5_captions:!0,plugins:"charmap,colorpicker,hr,lists,media,paste,tabfocus,textcolor,wordpress,wpautoresize,wpeditimage,wpemoji,wpgallery,wplink,wpdialogs,wptextpattern,wpview",wpautop:!0,indent:!1,toolbar1:"formatselect,bold,italic,bullist,numlist,blockquote,alignleft,aligncenter,alignright,link,dfw,wp_adv",toolbar2:"strikethrough,hr,forecolor,pastetext,removeformat,charmap,outdent,indent,undo,redo,wp_help",toolbar3:"",toolbar4:"",tabfocus_elements:"content-html,save-post",wp_autoresize_on:!1,add_unload_trigger:!1,block_formats:"Paragraph=p;Heading 2=h2;Heading 3=h3;Heading 4=h4;Code=code"})}}};var _={init:function(){let e=document.getElementById("hdq_questions_list").getElementsByClassName("hdq_quiz_question");for(let t=0;t<e.length;t++)_.enableDragItem(e[t])},enableDragItem:function(e){e.setAttribute("draggable",!0),e.ondrag=_.handleDrag,e.ondragend=_.handleDrop},handleDrag:function(e){let t=e.target,a=e.clientX,n=e.clientY,i=[document.getElementById("hdq_questions_list")];t.classList.add("drag-sort-active");let s=document.elementFromPoint(a,n)===null?t:document.elementFromPoint(a,n);if(s!==null&&s.getAttribute("draggable")=="true")for(let l=0;l<i.length;l++)s!==null&&i[l]===s.parentNode&&(s=s!==t.nextSibling?s:s.nextSibling,i[l].insertBefore(t,s))},handleDrop:function(e){e.target.classList.remove("drag-sort-active"),document.getElementById("hdq_questions_list").classList.add("hderp")}};var p={init:async function(){console.log("HD Quiz v"+HDQ_VERSION+" init");async function e(){await p.router.init()}await e(),p.form.createEditors()},router:u,form:q,sort:_,images:function(){_hd.images.init()},reload:function(e){let t=e.getAttribute("href");window.location.href.includes(t)&&window.location.reload()}};p.init();window.HDQ=p;})(); 34 34 //# sourceMappingURL=admin_bundled.js.map -
hd-quiz/trunk/assets/admin_bundled.js.map
r3202730 r3228552 2 2 "version": 3, 3 3 "sources": ["fetcher.js", "views/dashboard.js", "views/quiz.js", "views/question.js", "views/index.js", "router.js", "form.js", "sort.js", "admin.js"], 4 "sourcesContent": ["export const self = async function (action = \"\", data = {}) {\n\tlet url = await createUrl(action, data);\n\tlet admin_ajax = null;\n\tif (ajaxurl) {\n\t\tadmin_ajax = ajaxurl;\n\t}\n\tif (ajaxurl === null) {\n\t\tconsole.error(\"No ajax url found\");\n\t\treturn;\n\t}\n\n\tconst formdata = new FormData();\n\tformdata.append(\"action\", action);\n\n\tfor (const [key, value] of Object.entries(data)) {\n\t\tformdata.append(key, value);\n\t}\n\tconst nonce = document.getElementById(\"hd_wpnonce\").value;\n\tformdata.append(\"HD_NONCE\", nonce);\n\tlet res = await fetch(admin_ajax, {\n\t\tmethod: \"POST\",\n\t\tcredentials: \"same-origin\",\n\t\tbody: formdata,\n\t});\n\tres = await res.json();\n\treturn res;\n\n\tasync function createUrl(action, data) {\n\t\tlet url = \"\";\n\t\tfor (const k in data) {\n\t\t\turl += \"&\" + k + \"=\" + data[k];\n\t\t}\n\t\treturn `action=${action}` + url;\n\t}\n\n\tfunction create_error_message(data) {\n\t\tconsole.log(data);\n\t}\n};\n", "import { self as fetcher } from \"../fetcher.js\";\n\nexport const self = {\n\tget: async function (action, d = null) {\n\t\tconsole.log(\"getting the dashboard\");\n\t\tlet data = await self.getData();\n\t\tawait self.render(data);\n\t\t_hd.init();\n\n\t\t// allow ENTER on quiz name creation\n\t\tconst saveEl = document.getElementById(\"hd_save\");\n\t\tsaveEl.setAttribute(\"tabindex\", 0); // wpkses_post sanitize this out\n\t\tdocument.getElementById(\"hdq_quiz_name\").addEventListener(\"keyup\", function (ev) {\n\t\t\tif (ev.key === \"Enter\") {\n\t\t\t\tsaveEl.click();\n\t\t\t}\n\t\t});\n\n\t\t// stop click events on shortcode\n\t\tconst items = document.getElementsByClassName(\"hdq_quiz_item\");\n\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\titems[i].addEventListener(\"click\", function (ev) {\n\t\t\t\tif (ev.target.tagName == \"CODE\") {\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\tgetData: async function () {\n\t\tlet data = {};\n\t\treturn await fetcher(\"hdq_get_view_dashboard\", data);\n\t},\n\trender: async function (data) {\n\t\tdocument.getElementById(\"hdq_content\").innerHTML = data.html;\n\t\tdocument.getElementById(\"hdq_content\").scrollTo(0, 0);\n\t\tdocument.getElementById(\"hdq_loading\").classList.remove(\"active\");\n\t},\n};\n", "import { self as fetcher } from \"../fetcher.js\";\n\nexport const self = {\n\tget: async function (action, d = null) {\n\t\tconsole.log(\"getting the quiz ID \" + d);\n\t\tlet data = await self.getData(d);\n\t\tawait self.render(data);\n\t},\n\tgetData: async function (d) {\n\t\tlet paged = 1;\n\t\tif (d[1]) {\n\t\t\tpaged = d[1];\n\t\t}\n\t\tlet data = {\n\t\t\tquiz_id: d[0],\n\t\t\tpaged: paged,\n\t\t};\n\t\tconsole.log(data);\n\t\treturn await fetcher(\"hdq_get_view_quiz\", data);\n\t},\n\trender: async function (data) {\n\t\tdocument.getElementById(\"hdq_content\").innerHTML = data.html;\n\t\tdocument.getElementById(\"hdq_content\").scrollTo(0, 0);\n\t\tdocument.getElementById(\"hdq_loading\").classList.remove(\"active\");\n\n\t\t_hd.init();\n\t\tHDQ.form.createEditors();\n\t\tHDQ.form.tabs();\n\n\t\tdocument.getElementById(\"hdq_copy_shortcode\").addEventListener(\"click\", function () {\n\t\t\t navigator.clipboard.writeText(this.innerText);\n\t\t});\n\n\t\tif (data.type === \"personality\") {\n\t\t\tself.personality.init();\n\t\t}\n\n\t\tHDQ.sort.init();\n\n\t\tself.question_order.init();\n\n\t\tconst delete_el = document.getElementById(\"hd_delete_quiz\");\n\t\tif (!delete_el) {\n\t\t\treturn;\n\t\t}\n\t\tdelete_el.addEventListener(\"click\", async function () {\n\t\t\tconst message = `You are about to delete this entire quiz and all attached questions. Continue?`; // HDQ_LOCALIZE\n\t\t\tif (confirm(message)) {\n\t\t\t\tdeleteQuiz(this);\n\t\t\t}\n\t\t});\n\n\t\tasync function deleteQuiz(el) {\n\t\t\tlet data = {\n\t\t\t\tquiz_id: parseInt(el.getAttribute(\"data-quiz\")),\n\t\t\t};\n\t\t\tlet res = await fetcher(\"hdq_delete_quiz\", data);\n\t\t\tconsole.log(res);\n\t\t\tHDQ.router.views.dashboard.get(null, []);\n\t\t}\n\t\treturn data;\n\t},\n\tquestion_order: {\n\t\tinit: function () {\n\t\t\t_hd.validate.field.hdq_field_question_order = self.question_order.validate; // set HDFields validation function\n\t\t},\n\t\tvalidate: async function (field) {\n\t\t\tlet data = await self.question_order.getData(field);\n\n\t\t\tlet v = {\n\t\t\t\tvalue: data,\n\t\t\t\tstatus: true,\n\t\t\t};\n\t\t\treturn v;\n\t\t},\n\t\tgetData: async function () {\n\t\t\tconst questions = document.getElementsByClassName(\"hdq_quiz_question\");\n\t\t\tlet data = [];\n\t\t\tfor (let i = 0; i < questions.length; i++) {\n\t\t\t\tlet question_id = parseInt(questions[i].getAttribute(\"data-id\"));\n\t\t\t\tdata.push(question_id);\n\t\t\t}\n\t\t\treturn data;\n\t\t},\n\t},\n\tpersonality: {\n\t\tsaved: {\n\t\t\thasAdded: false,\n\t\t\thasSaved: false,\n\t\t},\n\t\tinit: function () {\n\t\t\t// set HDFields validation function\n\t\t\t_hd.validate.field.hdq_field_personality_results = self.personality.validate;\n\n\t\t\tdocument.getElementById(\"hdq_add_new_personality_outcome\").addEventListener(\"click\", function () {\n\t\t\t\tself.personality.create();\n\t\t\t});\n\n\t\t\tself.personality.remove.init();\n\n\t\t\tdocument.getElementById(\"hd_save\").addEventListener(\"click\", function (event) {\n\t\t\t\tself.personality.saved.hasSaved = true; // note, not 100% accurate since we are not taking validation into account\n\t\t\t});\n\n\t\t\tdocument.getElementById(\"hdq_add_new_quiz\").addEventListener(\"click\", function (event) {\n\t\t\t\tif (self.personality.saved.hasAdded && !self.personality.saved.hasSaved) {\n\t\t\t\t\tif (document.getElementsByClassName(\"hdq_outcome_label\").length > 1) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tlet status = confirm(\"You have added a new outcome but have not saved. Contunue to adding a new question?\");\n\t\t\t\t\t\tif (status) {\n\t\t\t\t\t\t\twindow.location = this.href;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tremove: {\n\t\t\tinit: function () {\n\t\t\t\tconst items = document.getElementsByClassName(\"hdq_remove_outcome\");\n\t\t\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\t\t\titems[i].addEventListener(\"click\", function () {\n\t\t\t\t\t\tthis.parentElement.remove();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\tvalidate: async function (field) {\n\t\t\tawait tinyMCE.triggerSave();\n\t\t\tconst id = field.getAttribute(\"id\");\n\t\t\tconst data = [];\n\n\t\t\tconst labels = field.getElementsByClassName(\"hdq_outcome_label\");\n\t\t\tconst contents = field.getElementsByClassName(\"hd_editor_input\");\n\t\t\tfor (let i = 0; i < labels.length; i++) {\n\t\t\t\tdata.push({\n\t\t\t\t\tlabel: labels[i].value,\n\t\t\t\t\tid:\n\t\t\t\t\t\tlabels[i].value\n\t\t\t\t\t\t\t.replace(/[`~!@#$%^&*()_|+\\-=?;:'\",.<>\\{\\}\\[\\]\\\\\\/]/gi, \"\")\n\t\t\t\t\t\t\t.replaceAll(\" \", \"_\")\n\t\t\t\t\t\t\t.toLowerCase() +\n\t\t\t\t\t\t\"\" +\n\t\t\t\t\t\ti, // replace special characters, and ensure unique\n\t\t\t\t\tcontent: contents[i].value,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// make sure each label exists\n\t\t\tlet valid = true;\n\t\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\t\tif (data[i].label == \"\") {\n\t\t\t\t\tvalid = false;\n\t\t\t\t\tlabels[i].classList.add(\"hd_error\");\n\t\t\t\t} else {\n\t\t\t\t\tlabels[i].classList.remove(\"hd_error\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet v = {\n\t\t\t\tvalue: data,\n\t\t\t\tstatus: valid,\n\t\t\t};\n\t\t\treturn v;\n\t\t},\n\t\tcreate: function () {\n\t\t\tself.personality.saved.hasAdded = true;\n\t\t\tlet countOutcomes = document.getElementById(\"personality_results\").getElementsByClassName(\"hd_input_item\").length;\n\t\t\tcountOutcomes = String.fromCharCode(countOutcomes + \"A\".charCodeAt(0));\n\t\t\tconst html = `<div class=\"hd_input_item\">\n\t<div class=\"hdq_remove_outcome\" title=\"Remove this outcome\">x</div>\n\t<label class=\"hd_input_label\" for=\"hdq_result_${countOutcomes}\"><span class=\"hd_required_icon\"></span> Outcome title <span class=\"hd_tooltip_item\">?<span class=\"hd_tooltip\"><div class=\"hd_tooltip_content\">NOTE: If you rename this outcome, you will need to re-edit your questions to set the correct answer.</div></span></span></label>\n\t<input type=\"text\" data-type=\"text\" data-required=\"required\" class=\"hd_input hdq_outcome_label\" id=\"hdq_result_${countOutcomes}\" value=\"Result ${countOutcomes}\" placeholder=\"Result title...\" data-tab=\"Results\" />\n\n\t<div id=\"wp-hdq_result_content_result_${countOutcomes}-wrap\" class=\"wp-core-ui wp-editor-wrap tmce-active\">\n\t\t<link rel=\"stylesheet\" id=\"dashicons-css\" href=\"https://hdquiz.local/wp-includes/css/dashicons.min.css?ver=6.6.2\" media=\"all\" />\n\t\t<link rel=\"stylesheet\" id=\"editor-buttons-css\" href=\"https://hdquiz.local/wp-includes/css/editor.min.css?ver=6.6.2\" media=\"all\" />\n\t\t<div id=\"wp-hdq_result_content_result_${countOutcomes}-editor-tools\" class=\"wp-editor-tools hide-if-no-js\">\n\t\t\t<div id=\"wp-hdq_result_content_result_${countOutcomes}-media-buttons\" class=\"wp-media-buttons\">\n\t\t\t\t<button type=\"button\" id=\"insert-media-button\" class=\"button insert-media add_media\" data-editor=\"hdq_result_content_result_${countOutcomes}\"><span class=\"wp-media-buttons-icon\"></span> Add Media</button>\n\t\t\t</div>\n\t\t\t<div class=\"wp-editor-tabs\">\n\t\t\t\t<button type=\"button\" id=\"hdq_result_content_result_${countOutcomes}-tmce\" class=\"wp-switch-editor switch-tmce\" data-wp-editor-id=\"hdq_result_content_result_${countOutcomes}\">Visual</button>\n\t\t\t\t<button type=\"button\" id=\"hdq_result_content_result_${countOutcomes}-html\" class=\"wp-switch-editor switch-html\" data-wp-editor-id=\"hdq_result_content_result_${countOutcomes}\">Text</button>\n\t\t\t</div>\n\t\t</div>\n\t\t<div id=\"wp-hdq_result_content_result_${countOutcomes}-editor-container\" class=\"wp-editor-container\">\n\t\t\t<div id=\"qt_hdq_result_content_result_${countOutcomes}_toolbar\" class=\"quicktags-toolbar hide-if-no-js\"></div>\n\t\t\t<textarea\n\t\t\t\tclass=\"hd_input hd_editor_input wp-editor-area\"\n\t\t\t\tstyle=\"height: 240px\"\n\t\t\t\tautocomplete=\"off\"\n\t\t\t\tcols=\"40\"\n\t\t\t\tname=\"hdq_result_content_result_${countOutcomes}\"\n\t\t\t\tid=\"hdq_result_content_result_${countOutcomes}\"\n\t\t\t\tdata-type=\"editor\"\n\t\t\t\tdata-lt-tmp-id=\"lt-8142\"\n\t\t\t\tspellcheck=\"false\"\n\t\t\t\tdata-gramm=\"false\"></textarea>\n\t\t</div>\n\t</div>\n</div>`;\n\t\t\tdocument.getElementById(\"personality_results\").insertAdjacentHTML(\"beforeend\", html);\n\t\t\tHDQ.form.createEditors();\n\t\t\tself.personality.remove.init();\n\t\t},\n\t},\n};\n", "import { self as fetcher } from \"../fetcher.js\";\n\nexport const self = {\n\tget: async function (action, d = null) {\n\t\t// d[0] == quiz_id, d[1] == question_id\n\t\tconsole.log(\"getting the question ID \" + d[1]);\n\t\tlet data = await self.getData(d);\n\t\tawait self.render(data);\n\t},\n\tgetData: async function (d) {\n\t\tlet data = {\n\t\t\tquiz_id: parseInt(d[0]),\n\t\t\tquestion_id: parseInt(d[1]),\n\t\t};\n\t\treturn await fetcher(\"hdq_get_view_question\", data);\n\t},\n\trender: async function (data) {\n\t\tdocument.getElementById(\"hdq_content\").innerHTML = data.html;\n\t\tdocument.getElementById(\"hdq_content\").scrollTo(0, 0);\n\t\tdocument.getElementById(\"hdq_loading\").classList.remove(\"active\");\n\n\t\t_hd.init();\n\t\tHDQ.form.createEditors();\n\t\tHDQ.form.tabs();\n\n\t\tself.answers.data.question_id = data.question_id;\n\t\tself.answers.data.quiz_id = data.quiz_id;\n\n\t\tself.answers.init();\n\n\t\tconst delete_el = document.getElementById(\"hd_delete_question\");\n\t\tif (!delete_el) {\n\t\t\treturn;\n\t\t}\n\t\tdelete_el.addEventListener(\"click\", async function () {\n\t\t\tconst message = `You are about to delete this question. Continue?`; // HDQ_LOCALIZE\n\t\t\tif (confirm(message)) {\n\t\t\t\tdeleteQuestion(this);\n\t\t\t}\n\t\t});\n\n\t\tasync function deleteQuestion(el) {\n\t\t\tlet data = {\n\t\t\t\tquiz_id: parseInt(el.getAttribute(\"data-quiz\")),\n\t\t\t\tquestion_id: parseInt(el.getAttribute(\"data-id\")),\n\t\t\t};\n\t\t\tlet res = await fetcher(\"hdq_delete_question\", data);\n\t\t\tHDQ.router.views.quiz.get(res.action.data, res.action.data2);\n\n\t\t\tlet state = {\n\t\t\t\tquiz_id: res.action.data2,\n\t\t\t};\n\t\t\thistory.pushState(state, \"\");\n\t\t}\n\t},\n\tupdate: function (question_id) {\n\t\tdocument.getElementById(\"question_id\").value = parseInt(question_id[0]);\n\t\tdocument.getElementById(\"hd_delete_question\").setAttribute(\"data-id\", parseInt(question_id[0]));\n\t},\n\tanswers: {\n\t\tdata: {\n\t\t\tanswers: [],\n\t\t\tquestion_id: 0,\n\t\t\tquiz_id: 0,\n\t\t\tdefaults: {\n\t\t\t\tvalue: \"\",\n\t\t\t\timage: \"\",\n\t\t\t\timageURL: \"\",\n\t\t\t\tselected: \"\",\n\t\t\t\t// set default fields here\n\t\t\t},\n\t\t},\n\t\tinit: function () {\n\t\t\tself.answers.onChangeQuestionType();\n\t\t\tself.fieldAnswers.init();\n\t\t},\n\t\tonChangeQuestionType: function () {\n\t\t\t// when changing question type, get template data\n\t\t\tconst questionTypeEl = document.getElementById(\"question_type\");\n\t\t\tif (!questionTypeEl) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tquestionTypeEl.addEventListener(\"change\", async function () {\n\t\t\t\tself.answers.changeQuestionType(this);\n\t\t\t});\n\n\t\t\tsetTimeout(function () {\n\t\t\t\tif (questionTypeEl.options[0].selected) {\n\t\t\t\t\tquestionTypeEl.options[1].selected = true;\n\t\t\t\t}\n\t\t\t\tlet event = new Event(\"change\");\n\t\t\t\tquestionTypeEl.dispatchEvent(event);\n\t\t\t}, 10);\n\t\t},\n\t\tchangeQuestionType: async function (el) {\n\t\t\tdocument.getElementById(\"hdq_loading\").classList.add(\"active\");\n\t\t\tconst questionTypeEl = document.getElementById(\"question_type\");\n\t\t\tlet type = el.value;\n\n\t\t\t// don't allow \"no selection\"\n\t\t\tif (type === \"\" || type === null) {\n\t\t\t\tquestionTypeEl.options[1].selected = true;\n\t\t\t\tlet event = new Event(\"change\");\n\t\t\t\tquestionTypeEl.dispatchEvent(event);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet data = {\n\t\t\t\tquestion_type: type,\n\t\t\t\tquestion_id: self.answers.data.question_id,\n\t\t\t\tquiz_id: self.answers.data.quiz_id,\n\t\t\t};\n\n\t\t\t// store current answer data\n\t\t\tself.answers.data.answers = await self.answers.getAnswerData();\n\n\t\t\t// update with new question type content\n\t\t\tdata = await fetcher(\"hdq_get_question_type\", data);\n\t\t\tif (data.status && data.status === \"success\") {\n\t\t\t\tdocument.getElementById(\"question_answers\").innerHTML = data.html;\n\t\t\t\tif (data.action && data.action.name) {\n\t\t\t\t\tconsole.log(\"running action \" + data.action.name);\n\t\t\t\t\tHDQ[data.action.name]();\n\t\t\t\t}\n\n\t\t\t\t// attempt to set answer data from stored\n\t\t\t\tself.answers.setAnswerData(self.answers);\n\t\t\t\tdocument.getElementById(\"hdq_loading\").classList.remove(\"active\");\n\t\t\t} else {\n\t\t\t\t// something went wrong\n\t\t\t\tconsole.log(data);\n\t\t\t}\n\t\t},\n\t\tgetAnswerData: async function (field = document.getElementById(\"question_answers\")) {\n\t\t\tconst rows = field.getElementsByClassName(\"hdq_answer_row\");\n\t\t\tif (rows.length === 0) {\n\t\t\t\treturn [[], false];\n\t\t\t}\n\n\t\t\tlet answers = [];\n\t\t\tfor (let i = 0; i < rows.length; i++) {\n\t\t\t\tlet answer = JSON.parse(JSON.stringify(self.answers.data.defaults));\n\t\t\t\tconst items = rows[i].getElementsByClassName(\"hdq_answer_item_input\");\n\t\t\t\tfor (let ii = 0; ii < items.length; ii++) {\n\t\t\t\t\tlet type = items[ii].getAttribute(\"data-answer-type\");\n\t\t\t\t\tif (items[ii].getAttribute(\"type\") == \"checkbox\") {\n\t\t\t\t\t\tif (items[ii].checked) {\n\t\t\t\t\t\t\tanswer[type] = \"yes\";\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (items[ii].getAttribute(\"data-value\")) {\n\t\t\t\t\t\t\tanswer[type] = items[ii].getAttribute(\"data-value\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tanswer[type] = items[ii].value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tanswers.push(answer);\n\t\t\t}\n\n\t\t\tlet answers_clean = [];\n\t\t\tfor (let i = 0; i < answers.length; i++) {\n\t\t\t\tif (answers[i].value && answers[i].value !== \"\") {\n\t\t\t\t\tanswers_clean.push(answers[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn [answers_clean, true];\n\t\t},\n\t\tsetAnswerData: async function () {\n\t\t\tlet answers = self.answers.data.answers[0];\n\t\t\tif (answers.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst rows = document.getElementsByClassName(\"hdq_answer_row\");\n\t\t\tfor (let i = 0; i < rows.length; i++) {\n\t\t\t\tconst items = rows[i].getElementsByClassName(\"hdq_answer_item_input\");\n\t\t\t\tfor (let ii = 0; ii < items.length; ii++) {\n\t\t\t\t\tlet type = items[ii].getAttribute(\"data-answer-type\");\n\t\t\t\t\tif (answers[i] && answers[i][type]) {\n\t\t\t\t\t\tif (items[ii].getAttribute(\"type\") == \"checkbox\") {\n\t\t\t\t\t\t\titems[ii].checked = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (items[ii].getAttribute(\"data-value\")) {\n\t\t\t\t\t\t\t\titems[ii].setAttribute(\"data-value\", answers[i][type]);\n\t\t\t\t\t\t\t\tif (type === \"image\") {\n\t\t\t\t\t\t\t\t\titems[ii].innerHTML = \"\";\n\t\t\t\t\t\t\t\t\titems[ii].insertAdjacentElement(\"beforeend\", answers[i].imageURL);\n\t\t\t\t\t\t\t\t\titems[ii].nextElementSibling.classList.add(\"active\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\titems[ii].value = answers[i][type];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\tfieldAnswers: {\n\t\tinit: function () {\n\t\t\t_hd.validate.field.hdq_field_answers = self.fieldAnswers.validate; // set HDFields validation function\n\t\t},\n\t\tvalidate: async function (field) {\n\t\t\tlet valid = true;\n\t\t\tlet dataArr = await self.answers.getAnswerData(field);\n\t\t\tlet data = dataArr[0];\n\t\t\tif (dataArr[1]) {\n\t\t\t\tif (data.length == 0) {\n\t\t\t\t\tvalid = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet v = {\n\t\t\t\tvalue: data,\n\t\t\t\tstatus: valid,\n\t\t\t};\n\t\t\treturn v;\n\t\t},\n\t},\n};\n", "import { self as dashboard } from \"./dashboard.js\";\nimport { self as quiz } from \"./quiz.js\";\nimport { self as question } from \"./question.js\";\n\nexport const views = {\n\tdashboard: dashboard,\n\tquiz: quiz,\n\tquestion: question,\n\treload: {\n\t\tget: function (data) {\n\t\t\tlocation.reload(true);\n\t\t},\n\t},\n};\n", "import { views } from \"./views/index.js\";\n\nexport const router = {\n\tviews: views,\n\tinit: async function () {\n\t\tawait router.getView();\n\t\twindow.addEventListener(\"hashchange\", async function () {\n\t\t\trouter.getView();\n\t\t});\n\t},\n\tgetHash: async function () {\n\t\tlet hash = window.location.hash;\n\t\tif (hash.length == 0) {\n\t\t\thash = \"#/dashboard\";\n\t\t}\n\t\treturn hash;\n\t},\n\tgetView: async function (d = null) {\n\t\tlet hash = await router.getHash();\n\t\thash = hash.replaceAll(\"#/\", \"\");\n\n\t\td = hash.split(\"/\");\n\t\td.shift();\n\t\thash = hash.split(\"/\")[0];\n\t\tif (views[hash]) {\n\t\t\trouter.views[hash].get(hash, d);\n\t\t} else {\n\t\t\tconsole.error(\"HD Quiz: View \" + hash + \" could not be found\");\n\t\t}\n\n\t\tconst loader = document.getElementById(\"hdq_loading\");\n\t\tloader.classList.add(\"active\");\n\n\t\treturn hash;\n\t},\n};\n", "export const form = {\n\ttabs: function () {\n\t\tconst items = document.getElementsByClassName(\"hdq_quiz_tab\");\n\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\titems[i].addEventListener(\"click\", function () {\n\t\t\t\tremoveActiveClass();\n\t\t\t\tthis.classList.add(\"hdq_quiz_tab_active\");\n\t\t\t\tlet id = this.getAttribute(\"data-id\");\n\t\t\t\tdocument.getElementById(id).classList.add(\"hdq_tab_content_active\");\n\t\t\t});\n\t\t}\n\n\t\tfunction removeActiveClass() {\n\t\t\tlet activeNav = document.getElementsByClassName(\"hdq_quiz_tab_active\");\n\t\t\twhile (activeNav.length > 0) {\n\t\t\t\tactiveNav[0].classList.remove(\"hdq_quiz_tab_active\");\n\t\t\t}\n\n\t\t\tlet activeContent = document.getElementsByClassName(\"hdq_tab_content_active\");\n\t\t\twhile (activeContent.length > 0) {\n\t\t\t\tactiveContent[0].classList.remove(\"hdq_tab_content_active\");\n\t\t\t}\n\t\t}\n\t},\n\tcreateEditors: function () {\n\t\t// destroy old editors so we can re-init\n\t\tlet editors = document.getElementsByClassName(\"hd_editor_input\");\n\t\tfor (let i = 0; i < editors.length; i++) {\n\t\t\tlet eID = editors[i].getAttribute(\"id\");\n\t\t\ttinyMCE.execCommand(\"mceRemoveEditor\", false, eID);\n\t\t}\n\n\t\tsetTimeout(initTINYMCE, 1600); // give it some time to load in first\n\n\t\tfunction initTINYMCE() {\n\t\t\ttinyMCE.init({\n\t\t\t\tmode: \"textareas\",\n\t\t\t\trelative_urls: false,\n\t\t\t\tremove_script_host: false,\n\t\t\t\tconvert_urls: true,\n\t\t\t\tbrowser_spellcheck: true,\n\t\t\t\tentity_encoding: \"raw\",\n\t\t\t\tkeep_styles: false,\n\t\t\t\tresize: true,\n\t\t\t\tcontent_style: \"body { height: 100vh; min-height: 120px }\",\n\t\t\t\tmenubar: false,\n\t\t\t\tbranding: false,\n\t\t\t\twpeditimage_html5_captions: true,\n\t\t\t\tplugins: \"charmap,colorpicker,hr,lists,media,paste,tabfocus,textcolor,wordpress,wpautoresize,wpeditimage,wpemoji,wpgallery,wplink,wpdialogs,wptextpattern,wpview\",\n\t\t\t\twpautop: true,\n\t\t\t\tindent: false,\n\t\t\t\ttoolbar1: \"formatselect,bold,italic,bullist,numlist,blockquote,alignleft,aligncenter,alignright,link,dfw,wp_adv\",\n\t\t\t\ttoolbar2: \"strikethrough,hr,forecolor,pastetext,removeformat,charmap,outdent,indent,undo,redo,wp_help\",\n\t\t\t\ttoolbar3: \"\",\n\t\t\t\ttoolbar4: \"\",\n\t\t\t\ttabfocus_elements: \"content-html,save-post\",\n\t\t\t\twp_autoresize_on: false,\n\t\t\t\tadd_unload_trigger: false,\n\t\t\t\tblock_formats: \"Paragraph=p;Heading 2=h2;Heading 3=h3;Heading 4=h4;Code=code\",\n\t\t\t});\n\t\t}\n\t},\n};\n", "export const sort = {\n\tinit: function () {\n\t\tconst el = document.getElementById(\"hdq_questions_list\").getElementsByClassName(\"hdq_quiz_question\");\n\t\tfor (let i = 0; i < el.length; i++) {\n\t\t\tsort.enableDragItem(el[i]);\n\t\t}\n\t},\n\tenableDragItem: function (item) {\n\t\titem.setAttribute(\"draggable\", true);\n\t\titem.ondrag = sort.handleDrag;\n\t\titem.ondragend = sort.handleDrop;\n\t},\n\thandleDrag: function (item) {\n\t\tconst selectedItem = item.target,\n\t\t\tx = item.clientX,\n\t\t\ty = item.clientY;\n\n\t\tlet parents = [document.getElementById(\"hdq_questions_list\")];\n\n\t\tselectedItem.classList.add(\"drag-sort-active\");\n\t\tlet swapItem = document.elementFromPoint(x, y) === null ? selectedItem : document.elementFromPoint(x, y);\n\t\tif (swapItem === null) {\n\t\t\treturn;\n\t\t}\n\t\tif (swapItem.getAttribute(\"draggable\") != \"true\") {\n\t\t\treturn;\n\t\t}\n\t\tfor (let i = 0; i < parents.length; i++) {\n\t\t\tif (swapItem === null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (parents[i] === swapItem.parentNode) {\n\t\t\t\tswapItem = swapItem !== selectedItem.nextSibling ? swapItem : swapItem.nextSibling;\n\t\t\t\tparents[i].insertBefore(selectedItem, swapItem);\n\t\t\t}\n\t\t}\n\t},\n\thandleDrop: function (item) {\n\t\titem.target.classList.remove(\"drag-sort-active\");\n\t\tdocument.getElementById(\"hdq_questions_list\").classList.add(\"hderp\"); // alow question_orders to save.\n\t},\n};\n", "import { router } from \"./router.js\";\nimport { form } from \"./form.js\";\nimport { sort } from \"./sort.js\";\n\nconst HDQ = {\n\tinit: async function () {\n\t\tconsole.log(\"HD Quiz v\" + HDQ_VERSION + \" init\");\n\n\t\tasync function render() {\n\t\t\tawait HDQ.router.init();\n\t\t}\n\t\tawait render();\n\t\tHDQ.form.createEditors();\n\t},\n\trouter: router,\n\tform: form,\n\tsort: sort,\n\timages: function () {\n\t\t_hd.images.init();\n\t},\n\treload: function (el) {\n\t\tlet l = el.getAttribute(\"href\");\n\t\tlet c = window.location.href;\n\t\tif (c.includes(l)) {\n\t\t\twindow.location.reload();\n\t\t}\n\t},\n};\nHDQ.init();\n\nwindow.HDQ = HDQ;\n"],5 "mappings": "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",6 "names": ["self", "action", "data", "url", "createUrl", "admin_ajax", "formdata", "key", "value", "nonce", "res", "k", "create_error_message", "self", "action", "d", "data", "saveEl", "ev", "items", "i", "self", "action", "d", "data", "paged", " delete_el", "deleteQuiz", "el", "res", "field", "questions", "i", "question_id", "event", "items", "id", "labels", "contents", "valid", "countOutcomes", "html", "self", "action", "d", "data", "delete_el", "deleteQuestion", "el", "res", "state", "question_id", "questionTypeEl", "event", "type", "field", "rows", "answers", "answer", "items", "ii", "answers_clean", "i", "valid", "dataArr", "views", "self", "data", "router", "views", "hash", "d", "form", "items", "i", "removeActiveClass", "id", "activeNav", "activeContent", "editors", "eID", "initTINYMCE", "sort", "el", "i", "item", "selectedItem", "x", "y", "parents", "swapItem", "HDQ", "render", "router", "form", "sort", "el", "l"]4 "sourcesContent": ["export const self = async function (action = \"\", data = {}) {\n\tlet url = await createUrl(action, data);\n\tlet admin_ajax = null;\n\tif (ajaxurl) {\n\t\tadmin_ajax = ajaxurl;\n\t}\n\tif (ajaxurl === null) {\n\t\tconsole.error(\"No ajax url found\");\n\t\treturn;\n\t}\n\n\tconst formdata = new FormData();\n\tformdata.append(\"action\", action);\n\n\tfor (const [key, value] of Object.entries(data)) {\n\t\tformdata.append(key, value);\n\t}\n\tconst nonce = document.getElementById(\"hd_wpnonce\").value;\n\tformdata.append(\"HD_NONCE\", nonce);\n\tlet res = await fetch(admin_ajax, {\n\t\tmethod: \"POST\",\n\t\tcredentials: \"same-origin\",\n\t\tbody: formdata,\n\t});\n\tres = await res.json();\n\treturn res;\n\n\tasync function createUrl(action, data) {\n\t\tlet url = \"\";\n\t\tfor (const k in data) {\n\t\t\turl += \"&\" + k + \"=\" + data[k];\n\t\t}\n\t\treturn `action=${action}` + url;\n\t}\n\n\tfunction create_error_message(data) {\n\t\tconsole.log(data);\n\t}\n};\n", "import { self as fetcher } from \"../fetcher.js\";\n\nexport const self = {\n\tget: async function (action, d = null) {\n\t\tconsole.log(\"getting the dashboard\");\n\t\tlet data = await self.getData();\n\t\tawait self.render(data);\n\t\t_hd.init();\n\n\t\t// allow ENTER on quiz name creation\n\t\tconst saveEl = document.getElementById(\"hd_save\");\n\t\tsaveEl.setAttribute(\"tabindex\", 0); // wpkses_post sanitize this out\n\t\tdocument.getElementById(\"hdq_quiz_name\").addEventListener(\"keyup\", function (ev) {\n\t\t\tif (ev.key === \"Enter\") {\n\t\t\t\tsaveEl.click();\n\t\t\t}\n\t\t});\n\n\t\t// stop click events on shortcode\n\t\tconst items = document.getElementsByClassName(\"hdq_quiz_item\");\n\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\titems[i].addEventListener(\"click\", function (ev) {\n\t\t\t\tif (ev.target.tagName == \"CODE\") {\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\tgetData: async function () {\n\t\tlet data = {};\n\t\treturn await fetcher(\"hdq_get_view_dashboard\", data);\n\t},\n\trender: async function (data) {\n\t\tdocument.getElementById(\"hdq_content\").innerHTML = data.html;\n\t\tdocument.getElementById(\"hdq_content\").scrollTo(0, 0);\n\t\tdocument.getElementById(\"hdq_loading\").classList.remove(\"active\");\n\t},\n};\n", "import { self as fetcher } from \"../fetcher.js\";\n\nexport const self = {\n\tget: async function (action, d = null) {\n\t\tconsole.log(\"getting the quiz ID \" + d);\n\t\tlet data = await self.getData(d);\n\t\tawait self.render(data);\n\t},\n\tgetData: async function (d) {\n\t\tlet paged = 1;\n\t\tif (d[1]) {\n\t\t\tpaged = d[1];\n\t\t}\n\t\tlet data = {\n\t\t\tquiz_id: d[0],\n\t\t\tpaged: paged,\n\t\t};\n\t\tconsole.log(data);\n\t\treturn await fetcher(\"hdq_get_view_quiz\", data);\n\t},\n\trender: async function (data) {\n\t\tdocument.getElementById(\"hdq_content\").innerHTML = data.html;\n\t\tdocument.getElementById(\"hdq_content\").scrollTo(0, 0);\n\t\tdocument.getElementById(\"hdq_loading\").classList.remove(\"active\");\n\n\t\t_hd.init();\n\t\tHDQ.form.createEditors();\n\t\tHDQ.form.tabs();\n\n\t\tdocument.getElementById(\"hdq_copy_shortcode\").addEventListener(\"click\", function () {\n\t\t\tconst el = this;\n\t\t\tif (el.classList.contains(\"active\")) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tel.classList.add(\"active\");\n\t\t\tlet shortcode = el.innerText;\n\t\t\tnavigator.clipboard.writeText(el.innerText);\n\n\t\t\tel.innerText = \"copied to clipboard\";\n\t\t\tsetTimeout(function () {\n\t\t\t\tel.innerText = shortcode;\n\t\t\t\tel.classList.remove(\"active\");\n\t\t\t}, 3000);\n\t\t});\n\n\t\tif (data.type === \"personality\") {\n\t\t\tself.personality.init();\n\t\t}\n\n\t\tHDQ.sort.init();\n\n\t\tself.question_order.init();\n\n\t\tconst delete_el = document.getElementById(\"hd_delete_quiz\");\n\t\tif (!delete_el) {\n\t\t\treturn;\n\t\t}\n\t\tdelete_el.addEventListener(\"click\", async function () {\n\t\t\tconst message = `You are about to delete this entire quiz and all attached questions. Continue?`; // HDQ_LOCALIZE\n\t\t\tif (confirm(message)) {\n\t\t\t\tdeleteQuiz(this);\n\t\t\t}\n\t\t});\n\n\t\tasync function deleteQuiz(el) {\n\t\t\tlet data = {\n\t\t\t\tquiz_id: parseInt(el.getAttribute(\"data-quiz\")),\n\t\t\t};\n\t\t\tlet res = await fetcher(\"hdq_delete_quiz\", data);\n\t\t\tconsole.log(res);\n\t\t\tHDQ.router.views.dashboard.get(null, []);\n\t\t}\n\t\treturn data;\n\t},\n\tquestion_order: {\n\t\tinit: function () {\n\t\t\t_hd.validate.field.hdq_field_question_order = self.question_order.validate; // set HDFields validation function\n\t\t},\n\t\tvalidate: async function (field) {\n\t\t\tlet data = await self.question_order.getData(field);\n\n\t\t\tlet v = {\n\t\t\t\tvalue: data,\n\t\t\t\tstatus: true,\n\t\t\t};\n\t\t\treturn v;\n\t\t},\n\t\tgetData: async function () {\n\t\t\tconst questions = document.getElementsByClassName(\"hdq_quiz_question\");\n\t\t\tlet data = [];\n\t\t\tfor (let i = 0; i < questions.length; i++) {\n\t\t\t\tlet question_id = parseInt(questions[i].getAttribute(\"data-id\"));\n\t\t\t\tdata.push(question_id);\n\t\t\t}\n\t\t\treturn data;\n\t\t},\n\t},\n\tpersonality: {\n\t\tsaved: {\n\t\t\thasAdded: false,\n\t\t\thasSaved: false,\n\t\t},\n\t\tinit: function () {\n\t\t\t// set HDFields validation function\n\t\t\t_hd.validate.field.hdq_field_personality_results = self.personality.validate;\n\n\t\t\tdocument.getElementById(\"hdq_add_new_personality_outcome\").addEventListener(\"click\", function () {\n\t\t\t\tself.personality.create();\n\t\t\t});\n\n\t\t\tself.personality.remove.init();\n\n\t\t\tdocument.getElementById(\"hd_save\").addEventListener(\"click\", function (event) {\n\t\t\t\tself.personality.saved.hasSaved = true; // note, not 100% accurate since we are not taking validation into account\n\t\t\t});\n\n\t\t\tdocument.getElementById(\"hdq_add_new_quiz\").addEventListener(\"click\", function (event) {\n\t\t\t\tif (self.personality.saved.hasAdded && !self.personality.saved.hasSaved) {\n\t\t\t\t\tif (document.getElementsByClassName(\"hdq_outcome_label\").length > 1) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tlet status = confirm(\"You have added a new outcome but have not saved. Contunue to adding a new question?\");\n\t\t\t\t\t\tif (status) {\n\t\t\t\t\t\t\twindow.location = this.href;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tremove: {\n\t\t\tinit: function () {\n\t\t\t\tconst items = document.getElementsByClassName(\"hdq_remove_outcome\");\n\t\t\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\t\t\titems[i].addEventListener(\"click\", function () {\n\t\t\t\t\t\tthis.parentElement.remove();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\tvalidate: async function (field) {\n\t\t\tawait tinyMCE.triggerSave();\n\t\t\tconst id = field.getAttribute(\"id\");\n\t\t\tconst data = [];\n\n\t\t\tconst labels = field.getElementsByClassName(\"hdq_outcome_label\");\n\t\t\tconst contents = field.getElementsByClassName(\"hd_editor_input\");\n\t\t\tfor (let i = 0; i < labels.length; i++) {\n\t\t\t\tdata.push({\n\t\t\t\t\tlabel: labels[i].value,\n\t\t\t\t\tid:\n\t\t\t\t\t\tlabels[i].value\n\t\t\t\t\t\t\t.replace(/[`~!@#$%^&*()_|+\\-=?;:'\",.<>\\{\\}\\[\\]\\\\\\/]/gi, \"\")\n\t\t\t\t\t\t\t.replaceAll(\" \", \"_\")\n\t\t\t\t\t\t\t.toLowerCase() +\n\t\t\t\t\t\t\"\" +\n\t\t\t\t\t\ti, // replace special characters, and ensure unique\n\t\t\t\t\tcontent: contents[i].value,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// make sure each label exists\n\t\t\tlet valid = true;\n\t\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\t\tif (data[i].label == \"\") {\n\t\t\t\t\tvalid = false;\n\t\t\t\t\tlabels[i].classList.add(\"hd_error\");\n\t\t\t\t} else {\n\t\t\t\t\tlabels[i].classList.remove(\"hd_error\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet v = {\n\t\t\t\tvalue: data,\n\t\t\t\tstatus: valid,\n\t\t\t};\n\t\t\treturn v;\n\t\t},\n\t\tcreate: function () {\n\t\t\tself.personality.saved.hasAdded = true;\n\t\t\tlet countOutcomes = document.getElementById(\"personality_results\").getElementsByClassName(\"hd_input_item\").length;\n\t\t\tcountOutcomes = String.fromCharCode(countOutcomes + \"A\".charCodeAt(0));\n\t\t\tconst html = `<div class=\"hd_input_item\">\n\t<div class=\"hdq_remove_outcome\" title=\"Remove this outcome\">x</div>\n\t<label class=\"hd_input_label\" for=\"hdq_result_${countOutcomes}\"><span class=\"hd_required_icon\"></span> Outcome title <span class=\"hd_tooltip_item\">?<span class=\"hd_tooltip\"><div class=\"hd_tooltip_content\">NOTE: If you rename this outcome, you will need to re-edit your questions to set the correct answer.</div></span></span></label>\n\t<input type=\"text\" data-type=\"text\" data-required=\"required\" class=\"hd_input hdq_outcome_label\" id=\"hdq_result_${countOutcomes}\" value=\"Result ${countOutcomes}\" placeholder=\"Result title...\" data-tab=\"Results\" />\n\n\t<div id=\"wp-hdq_result_content_result_${countOutcomes}-wrap\" class=\"wp-core-ui wp-editor-wrap tmce-active\">\n\t\t<link rel=\"stylesheet\" id=\"dashicons-css\" href=\"https://hdquiz.local/wp-includes/css/dashicons.min.css?ver=6.6.2\" media=\"all\" />\n\t\t<link rel=\"stylesheet\" id=\"editor-buttons-css\" href=\"https://hdquiz.local/wp-includes/css/editor.min.css?ver=6.6.2\" media=\"all\" />\n\t\t<div id=\"wp-hdq_result_content_result_${countOutcomes}-editor-tools\" class=\"wp-editor-tools hide-if-no-js\">\n\t\t\t<div id=\"wp-hdq_result_content_result_${countOutcomes}-media-buttons\" class=\"wp-media-buttons\">\n\t\t\t\t<button type=\"button\" id=\"insert-media-button\" class=\"button insert-media add_media\" data-editor=\"hdq_result_content_result_${countOutcomes}\"><span class=\"wp-media-buttons-icon\"></span> Add Media</button>\n\t\t\t</div>\n\t\t\t<div class=\"wp-editor-tabs\">\n\t\t\t\t<button type=\"button\" id=\"hdq_result_content_result_${countOutcomes}-tmce\" class=\"wp-switch-editor switch-tmce\" data-wp-editor-id=\"hdq_result_content_result_${countOutcomes}\">Visual</button>\n\t\t\t\t<button type=\"button\" id=\"hdq_result_content_result_${countOutcomes}-html\" class=\"wp-switch-editor switch-html\" data-wp-editor-id=\"hdq_result_content_result_${countOutcomes}\">Text</button>\n\t\t\t</div>\n\t\t</div>\n\t\t<div id=\"wp-hdq_result_content_result_${countOutcomes}-editor-container\" class=\"wp-editor-container\">\n\t\t\t<div id=\"qt_hdq_result_content_result_${countOutcomes}_toolbar\" class=\"quicktags-toolbar hide-if-no-js\"></div>\n\t\t\t<textarea\n\t\t\t\tclass=\"hd_input hd_editor_input wp-editor-area\"\n\t\t\t\tstyle=\"height: 240px\"\n\t\t\t\tautocomplete=\"off\"\n\t\t\t\tcols=\"40\"\n\t\t\t\tname=\"hdq_result_content_result_${countOutcomes}\"\n\t\t\t\tid=\"hdq_result_content_result_${countOutcomes}\"\n\t\t\t\tdata-type=\"editor\"\n\t\t\t\tdata-lt-tmp-id=\"lt-8142\"\n\t\t\t\tspellcheck=\"false\"\n\t\t\t\tdata-gramm=\"false\"></textarea>\n\t\t</div>\n\t</div>\n</div>`;\n\t\t\tdocument.getElementById(\"personality_results\").insertAdjacentHTML(\"beforeend\", html);\n\t\t\tHDQ.form.createEditors();\n\t\t\tself.personality.remove.init();\n\t\t},\n\t},\n};\n", "import { self as fetcher } from \"../fetcher.js\";\n\nexport const self = {\n\tget: async function (action, d = null) {\n\t\t// d[0] == quiz_id, d[1] == question_id\n\t\tconsole.log(\"getting the question ID \" + d[1]);\n\t\tlet data = await self.getData(d);\n\t\tawait self.render(data);\n\t},\n\tgetData: async function (d) {\n\t\tlet data = {\n\t\t\tquiz_id: parseInt(d[0]),\n\t\t\tquestion_id: parseInt(d[1]),\n\t\t};\n\t\treturn await fetcher(\"hdq_get_view_question\", data);\n\t},\n\trender: async function (data) {\n\t\tdocument.getElementById(\"hdq_content\").innerHTML = data.html;\n\t\tdocument.getElementById(\"hdq_content\").scrollTo(0, 0);\n\t\tdocument.getElementById(\"hdq_loading\").classList.remove(\"active\");\n\n\t\t_hd.init();\n\t\tHDQ.form.createEditors();\n\t\tHDQ.form.tabs();\n\n\t\tself.answers.data.question_id = data.question_id;\n\t\tself.answers.data.quiz_id = data.quiz_id;\n\n\t\tself.answers.init();\n\n\t\tconst delete_el = document.getElementById(\"hd_delete_question\");\n\t\tif (!delete_el) {\n\t\t\treturn;\n\t\t}\n\t\tdelete_el.addEventListener(\"click\", async function () {\n\t\t\tconst message = `You are about to delete this question. Continue?`; // HDQ_LOCALIZE\n\t\t\tif (confirm(message)) {\n\t\t\t\tdeleteQuestion(this);\n\t\t\t}\n\t\t});\n\n\t\tasync function deleteQuestion(el) {\n\t\t\tlet data = {\n\t\t\t\tquiz_id: parseInt(el.getAttribute(\"data-quiz\")),\n\t\t\t\tquestion_id: parseInt(el.getAttribute(\"data-id\")),\n\t\t\t};\n\t\t\tlet res = await fetcher(\"hdq_delete_question\", data);\n\t\t\tHDQ.router.views.quiz.get(res.action.data, res.action.data2);\n\n\t\t\tlet state = {\n\t\t\t\tquiz_id: res.action.data2,\n\t\t\t};\n\t\t\thistory.pushState(state, \"\");\n\t\t}\n\t},\n\tupdate: function (question_id) {\n\t\tdocument.getElementById(\"question_id\").value = parseInt(question_id[0]);\n\t\tdocument.getElementById(\"hd_delete_question\").setAttribute(\"data-id\", parseInt(question_id[0]));\n\t},\n\tanswers: {\n\t\tdata: {\n\t\t\tanswers: [],\n\t\t\tquestion_id: 0,\n\t\t\tquiz_id: 0,\n\t\t\tdefaults: {\n\t\t\t\tvalue: \"\",\n\t\t\t\timage: \"\",\n\t\t\t\timageURL: \"\",\n\t\t\t\tselected: \"\",\n\t\t\t\t// set default fields here\n\t\t\t},\n\t\t},\n\t\tinit: function () {\n\t\t\tself.answers.onChangeQuestionType();\n\t\t\tself.fieldAnswers.init();\n\t\t},\n\t\tonChangeQuestionType: function () {\n\t\t\t// when changing question type, get template data\n\t\t\tconst questionTypeEl = document.getElementById(\"question_type\");\n\t\t\tif (!questionTypeEl) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tquestionTypeEl.addEventListener(\"change\", async function () {\n\t\t\t\tself.answers.changeQuestionType(this);\n\t\t\t});\n\n\t\t\tsetTimeout(function () {\n\t\t\t\tif (questionTypeEl.options[0].selected) {\n\t\t\t\t\tquestionTypeEl.options[1].selected = true;\n\t\t\t\t}\n\t\t\t\tlet event = new Event(\"change\");\n\t\t\t\tquestionTypeEl.dispatchEvent(event);\n\t\t\t}, 10);\n\t\t},\n\t\tchangeQuestionType: async function (el) {\n\t\t\tdocument.getElementById(\"hdq_loading\").classList.add(\"active\");\n\t\t\tconst questionTypeEl = document.getElementById(\"question_type\");\n\t\t\tlet type = el.value;\n\n\t\t\t// don't allow \"no selection\"\n\t\t\tif (type === \"\" || type === null) {\n\t\t\t\tquestionTypeEl.options[1].selected = true;\n\t\t\t\tlet event = new Event(\"change\");\n\t\t\t\tquestionTypeEl.dispatchEvent(event);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet data = {\n\t\t\t\tquestion_type: type,\n\t\t\t\tquestion_id: self.answers.data.question_id,\n\t\t\t\tquiz_id: self.answers.data.quiz_id,\n\t\t\t};\n\n\t\t\t// store current answer data\n\t\t\tself.answers.data.answers = await self.answers.getAnswerData();\n\n\t\t\t// update with new question type content\n\t\t\tdata = await fetcher(\"hdq_get_question_type\", data);\n\t\t\tif (data.status && data.status === \"success\") {\n\t\t\t\tdocument.getElementById(\"question_answers\").innerHTML = data.html;\n\t\t\t\tif (data.action && data.action.name) {\n\t\t\t\t\tconsole.log(\"running action \" + data.action.name);\n\t\t\t\t\tHDQ[data.action.name]();\n\t\t\t\t}\n\n\t\t\t\t// attempt to set answer data from stored\n\t\t\t\tself.answers.setAnswerData(self.answers);\n\t\t\t\tdocument.getElementById(\"hdq_loading\").classList.remove(\"active\");\n\t\t\t} else {\n\t\t\t\t// something went wrong\n\t\t\t\tconsole.log(data);\n\t\t\t}\n\t\t},\n\t\tgetAnswerData: async function (field = document.getElementById(\"question_answers\")) {\n\t\t\tconst rows = field.getElementsByClassName(\"hdq_answer_row\");\n\t\t\tif (rows.length === 0) {\n\t\t\t\treturn [[], false];\n\t\t\t}\n\n\t\t\tlet answers = [];\n\t\t\tfor (let i = 0; i < rows.length; i++) {\n\t\t\t\tlet answer = JSON.parse(JSON.stringify(self.answers.data.defaults));\n\t\t\t\tconst items = rows[i].getElementsByClassName(\"hdq_answer_item_input\");\n\t\t\t\tfor (let ii = 0; ii < items.length; ii++) {\n\t\t\t\t\tlet type = items[ii].getAttribute(\"data-answer-type\");\n\t\t\t\t\tif (items[ii].getAttribute(\"type\") == \"checkbox\") {\n\t\t\t\t\t\tif (items[ii].checked) {\n\t\t\t\t\t\t\tanswer[type] = \"yes\";\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (items[ii].getAttribute(\"data-value\")) {\n\t\t\t\t\t\t\tanswer[type] = items[ii].getAttribute(\"data-value\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tanswer[type] = items[ii].value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tanswers.push(answer);\n\t\t\t}\n\n\t\t\tlet answers_clean = [];\n\t\t\tfor (let i = 0; i < answers.length; i++) {\n\t\t\t\tif (answers[i].value && answers[i].value !== \"\") {\n\t\t\t\t\tanswers_clean.push(answers[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn [answers_clean, true];\n\t\t},\n\t\tsetAnswerData: async function () {\n\t\t\tlet answers = self.answers.data.answers[0];\n\t\t\tif (answers.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst rows = document.getElementsByClassName(\"hdq_answer_row\");\n\t\t\tfor (let i = 0; i < rows.length; i++) {\n\t\t\t\tconst items = rows[i].getElementsByClassName(\"hdq_answer_item_input\");\n\t\t\t\tfor (let ii = 0; ii < items.length; ii++) {\n\t\t\t\t\tlet type = items[ii].getAttribute(\"data-answer-type\");\n\t\t\t\t\tif (answers[i] && answers[i][type]) {\n\t\t\t\t\t\tif (items[ii].getAttribute(\"type\") == \"checkbox\") {\n\t\t\t\t\t\t\titems[ii].checked = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (items[ii].getAttribute(\"data-value\")) {\n\t\t\t\t\t\t\t\titems[ii].setAttribute(\"data-value\", answers[i][type]);\n\t\t\t\t\t\t\t\tif (type === \"image\") {\n\t\t\t\t\t\t\t\t\titems[ii].innerHTML = \"\";\n\t\t\t\t\t\t\t\t\titems[ii].insertAdjacentElement(\"beforeend\", answers[i].imageURL);\n\t\t\t\t\t\t\t\t\titems[ii].nextElementSibling.classList.add(\"active\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\titems[ii].value = answers[i][type];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\tfieldAnswers: {\n\t\tinit: function () {\n\t\t\t_hd.validate.field.hdq_field_answers = self.fieldAnswers.validate; // set HDFields validation function\n\t\t},\n\t\tvalidate: async function (field) {\n\t\t\tlet valid = true;\n\t\t\tlet dataArr = await self.answers.getAnswerData(field);\n\t\t\tlet data = dataArr[0];\n\t\t\tif (dataArr[1]) {\n\t\t\t\tif (data.length == 0) {\n\t\t\t\t\tvalid = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet v = {\n\t\t\t\tvalue: data,\n\t\t\t\tstatus: valid,\n\t\t\t};\n\t\t\treturn v;\n\t\t},\n\t},\n};\n", "import { self as dashboard } from \"./dashboard.js\";\nimport { self as quiz } from \"./quiz.js\";\nimport { self as question } from \"./question.js\";\n\nexport const views = {\n\tdashboard: dashboard,\n\tquiz: quiz,\n\tquestion: question,\n\treload: {\n\t\tget: function (data) {\n\t\t\tlocation.reload(true);\n\t\t},\n\t},\n};\n", "import { views } from \"./views/index.js\";\n\nexport const router = {\n\tviews: views,\n\tinit: async function () {\n\t\tawait router.getView();\n\t\twindow.addEventListener(\"hashchange\", async function () {\n\t\t\trouter.getView();\n\t\t});\n\t},\n\tgetHash: async function () {\n\t\tlet hash = window.location.hash;\n\t\tif (hash.length == 0) {\n\t\t\thash = \"#/dashboard\";\n\t\t}\n\t\treturn hash;\n\t},\n\tgetView: async function (d = null) {\n\t\tlet hash = await router.getHash();\n\t\thash = hash.replaceAll(\"#/\", \"\");\n\n\t\td = hash.split(\"/\");\n\t\td.shift();\n\t\thash = hash.split(\"/\")[0];\n\t\tif (views[hash]) {\n\t\t\trouter.views[hash].get(hash, d);\n\t\t} else {\n\t\t\tconsole.error(\"HD Quiz: View \" + hash + \" could not be found\");\n\t\t}\n\n\t\tconst loader = document.getElementById(\"hdq_loading\");\n\t\tloader.classList.add(\"active\");\n\n\t\treturn hash;\n\t},\n};\n", "export const form = {\n\ttabs: function () {\n\t\tconst items = document.getElementsByClassName(\"hdq_quiz_tab\");\n\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\titems[i].addEventListener(\"click\", function () {\n\t\t\t\tremoveActiveClass();\n\t\t\t\tthis.classList.add(\"hdq_quiz_tab_active\");\n\t\t\t\tlet id = this.getAttribute(\"data-id\");\n\t\t\t\tdocument.getElementById(id).classList.add(\"hdq_tab_content_active\");\n\t\t\t});\n\t\t}\n\n\t\tfunction removeActiveClass() {\n\t\t\tlet activeNav = document.getElementsByClassName(\"hdq_quiz_tab_active\");\n\t\t\twhile (activeNav.length > 0) {\n\t\t\t\tactiveNav[0].classList.remove(\"hdq_quiz_tab_active\");\n\t\t\t}\n\n\t\t\tlet activeContent = document.getElementsByClassName(\"hdq_tab_content_active\");\n\t\t\twhile (activeContent.length > 0) {\n\t\t\t\tactiveContent[0].classList.remove(\"hdq_tab_content_active\");\n\t\t\t}\n\t\t}\n\t},\n\tcreateEditors: function () {\n\t\t// destroy old editors so we can re-init\n\t\tlet editors = document.getElementsByClassName(\"hd_editor_input\");\n\t\tfor (let i = 0; i < editors.length; i++) {\n\t\t\tlet eID = editors[i].getAttribute(\"id\");\n\t\t\ttinyMCE.execCommand(\"mceRemoveEditor\", false, eID);\n\t\t}\n\n\t\tsetTimeout(initTINYMCE, 1600); // give it some time to load in first\n\n\t\tfunction initTINYMCE() {\n\t\t\ttinyMCE.init({\n\t\t\t\tmode: \"textareas\",\n\t\t\t\trelative_urls: false,\n\t\t\t\tremove_script_host: false,\n\t\t\t\tconvert_urls: true,\n\t\t\t\tbrowser_spellcheck: true,\n\t\t\t\tentity_encoding: \"raw\",\n\t\t\t\tkeep_styles: false,\n\t\t\t\tresize: true,\n\t\t\t\tcontent_style: \"body { height: 100vh; min-height: 120px }\",\n\t\t\t\tmenubar: false,\n\t\t\t\tbranding: false,\n\t\t\t\twpeditimage_html5_captions: true,\n\t\t\t\tplugins: \"charmap,colorpicker,hr,lists,media,paste,tabfocus,textcolor,wordpress,wpautoresize,wpeditimage,wpemoji,wpgallery,wplink,wpdialogs,wptextpattern,wpview\",\n\t\t\t\twpautop: true,\n\t\t\t\tindent: false,\n\t\t\t\ttoolbar1: \"formatselect,bold,italic,bullist,numlist,blockquote,alignleft,aligncenter,alignright,link,dfw,wp_adv\",\n\t\t\t\ttoolbar2: \"strikethrough,hr,forecolor,pastetext,removeformat,charmap,outdent,indent,undo,redo,wp_help\",\n\t\t\t\ttoolbar3: \"\",\n\t\t\t\ttoolbar4: \"\",\n\t\t\t\ttabfocus_elements: \"content-html,save-post\",\n\t\t\t\twp_autoresize_on: false,\n\t\t\t\tadd_unload_trigger: false,\n\t\t\t\tblock_formats: \"Paragraph=p;Heading 2=h2;Heading 3=h3;Heading 4=h4;Code=code\",\n\t\t\t});\n\t\t}\n\t},\n};\n", "export const sort = {\n\tinit: function () {\n\t\tconst el = document.getElementById(\"hdq_questions_list\").getElementsByClassName(\"hdq_quiz_question\");\n\t\tfor (let i = 0; i < el.length; i++) {\n\t\t\tsort.enableDragItem(el[i]);\n\t\t}\n\t},\n\tenableDragItem: function (item) {\n\t\titem.setAttribute(\"draggable\", true);\n\t\titem.ondrag = sort.handleDrag;\n\t\titem.ondragend = sort.handleDrop;\n\t},\n\thandleDrag: function (item) {\n\t\tconst selectedItem = item.target,\n\t\t\tx = item.clientX,\n\t\t\ty = item.clientY;\n\n\t\tlet parents = [document.getElementById(\"hdq_questions_list\")];\n\n\t\tselectedItem.classList.add(\"drag-sort-active\");\n\t\tlet swapItem = document.elementFromPoint(x, y) === null ? selectedItem : document.elementFromPoint(x, y);\n\t\tif (swapItem === null) {\n\t\t\treturn;\n\t\t}\n\t\tif (swapItem.getAttribute(\"draggable\") != \"true\") {\n\t\t\treturn;\n\t\t}\n\t\tfor (let i = 0; i < parents.length; i++) {\n\t\t\tif (swapItem === null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (parents[i] === swapItem.parentNode) {\n\t\t\t\tswapItem = swapItem !== selectedItem.nextSibling ? swapItem : swapItem.nextSibling;\n\t\t\t\tparents[i].insertBefore(selectedItem, swapItem);\n\t\t\t}\n\t\t}\n\t},\n\thandleDrop: function (item) {\n\t\titem.target.classList.remove(\"drag-sort-active\");\n\t\tdocument.getElementById(\"hdq_questions_list\").classList.add(\"hderp\"); // alow question_orders to save.\n\t},\n};\n", "import { router } from \"./router.js\";\nimport { form } from \"./form.js\";\nimport { sort } from \"./sort.js\";\n\nconst HDQ = {\n\tinit: async function () {\n\t\tconsole.log(\"HD Quiz v\" + HDQ_VERSION + \" init\");\n\n\t\tasync function render() {\n\t\t\tawait HDQ.router.init();\n\t\t}\n\t\tawait render();\n\t\tHDQ.form.createEditors();\n\t},\n\trouter: router,\n\tform: form,\n\tsort: sort,\n\timages: function () {\n\t\t_hd.images.init();\n\t},\n\treload: function (el) {\n\t\tlet l = el.getAttribute(\"href\");\n\t\tlet c = window.location.href;\n\t\tif (c.includes(l)) {\n\t\t\twindow.location.reload();\n\t\t}\n\t},\n};\nHDQ.init();\n\nwindow.HDQ = HDQ;\n"], 5 "mappings": "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", 6 "names": ["self", "action", "data", "url", "createUrl", "admin_ajax", "formdata", "key", "value", "nonce", "res", "k", "create_error_message", "self", "action", "d", "data", "saveEl", "ev", "items", "i", "self", "action", "d", "data", "paged", "el", "shortcode", "delete_el", "deleteQuiz", "res", "field", "questions", "i", "question_id", "event", "items", "id", "labels", "contents", "valid", "countOutcomes", "html", "self", "action", "d", "data", "delete_el", "deleteQuestion", "el", "res", "state", "question_id", "questionTypeEl", "event", "type", "field", "rows", "answers", "answer", "items", "ii", "answers_clean", "i", "valid", "dataArr", "views", "self", "data", "router", "views", "hash", "d", "form", "items", "i", "removeActiveClass", "id", "activeNav", "activeContent", "editors", "eID", "initTINYMCE", "sort", "el", "i", "item", "selectedItem", "x", "y", "parents", "swapItem", "HDQ", "render", "router", "form", "sort", "el", "l"] 7 7 } -
hd-quiz/trunk/assets/frontend/hdq_script.js
r3208002 r3228552 282 282 }, 283 283 init: function () { 284 if ( HDQ.VARS.quiz.timer == "" || parseInt(HDQ.VARS.quiz.timer) < 3) {284 if (typeof HDQ.VARS.quiz.timer === "undefined" || HDQ.VARS.quiz.timer == "" || parseInt(HDQ.VARS.quiz.timer) < 3) { 285 285 return; // force minimum 3 second timer 286 286 } … … 318 318 } 319 319 quiz_el.classList.remove("hdq_hidden"); 320 quiz_el.style.display = "block"; 320 321 321 322 if (HDQ.VARS.quiz.timer_per_question === "yes") { … … 357 358 end: function (submit = false) { 358 359 const el = document.getElementsByClassName("hdq_timer")[0]; 359 el.classList = "hdq_timer ";360 el.classList = "hdq_timer hdq_timer_complete"; 360 361 HDQ.VARS.timer.active = false; 361 362 clearInterval(HDQ.timer.interval); -
hd-quiz/trunk/assets/views/quiz.js
r3201067 r3228552 29 29 30 30 document.getElementById("hdq_copy_shortcode").addEventListener("click", function () { 31 navigator.clipboard.writeText(this.innerText); 31 const el = this; 32 if (el.classList.contains("active")) { 33 return; 34 } 35 el.classList.add("active"); 36 let shortcode = el.innerText; 37 navigator.clipboard.writeText(el.innerText); 38 39 el.innerText = "copied to clipboard"; 40 setTimeout(function () { 41 el.innerText = shortcode; 42 el.classList.remove("active"); 43 }, 3000); 32 44 }); 33 45 -
hd-quiz/trunk/classes/dashboard.php
r3209440 r3228552 97 97 private function getHeader() 98 98 { 99 $hdq_updated = sanitize_text_field(get_option('HDQ_UPDATED'));99 // $hdq_updated = sanitize_text_field(get_option('HDQ_UPDATED')); 100 100 $notice = ""; 101 if ($hdq_updated) {102 $notice .= '<div id = "hdq_about" style = "margin: 2rem 0; max-width: 100%; padding: 1em;"><p style = "margin-top: 0;"><strong>Thank you for updating to HD Quiz 2.0</strong></p><p style = "margin-bottom: 0;">This new version is far more powerful than the previous versions, and was rewritten from the ground up. Please <a href = "https://hdplugins.com/forum/hd-quiz-support/" target = "_blank">let me know</a> if you experience any issues or bugs. You can also always safely downgrade to the previous version <a href = "https://wordpress.org/plugins/hd-quiz/advanced/#plugin-download-history-stats" target = "_blank">here</a>.</p></div>';103 }101 // if ($hdq_updated) { 102 // $notice .= '<div id = "hdq_about" style = "margin: 2rem 0; max-width: 100%; padding: 1em;"><p style = "margin-top: 0;"><strong>Thank you for updating to HD Quiz 2.0</strong></p><p style = "margin-bottom: 0;">This new version is far more powerful than the previous versions, and was rewritten from the ground up. Please <a href = "https://hdplugins.com/forum/hd-quiz-support/" target = "_blank">let me know</a> if you experience any issues or bugs. You can also always safely downgrade to the previous version <a href = "https://wordpress.org/plugins/hd-quiz/advanced/#plugin-download-history-stats" target = "_blank">here</a>.</p></div>'; 103 // } 104 104 return '<div id="hdq_header" class = ""> 105 105 <h1 id="hdq_heading_title">HD Quiz - WordPress Quiz Builder</h1> -
hd-quiz/trunk/classes/question.php
r3213477 r3228552 62 62 $this->quiz_id = intval($quiz_id); 63 63 $this->question_id = intval($question_id); 64 65 64 $this->getQuiz(); 65 66 66 $quiz_type = sanitize_text_field(get_term_meta($this->quiz_id, "hdq_quiz_type", true)); 67 67 if ($quiz_type === "personality") { 68 68 $this->quiz_type = $quiz_type; 69 69 } 70 71 70 $this->fields(); 72 71 $this->get($flat); 73 74 72 $this->question_types = apply_filters("hdq_add_question_type", $this->question_types); 75 73 … … 264 262 } 265 263 $data = $this->mapOld($data); 266 267 264 $title = $this->getTitle($data, $flat); 268 265 -
hd-quiz/trunk/classes/questions/multiple-choice-image.php
r3201067 r3228552 22 22 23 23 $checked = ""; 24 if ( $this->doesAnswerExist($data[$i])) {24 if (isset($data[$i]) && $this->doesAnswerExist($data[$i])) { 25 25 if (isset($data[$i]["value"])) { 26 26 $answer["value"] = $data[$i]["value"]; -
hd-quiz/trunk/classes/questions/multiple-choice-text.php
r3212777 r3228552 19 19 20 20 $checked = ""; 21 if ( $this->doesAnswerExist($data[$i])) {21 if (isset($data[$i]) && $this->doesAnswerExist($data[$i])) { 22 22 if (isset($data[$i]["value"])) { 23 23 $answer["value"] = $data[$i]["value"]; -
hd-quiz/trunk/classes/questions/select-all-apply-image.php
r3201067 r3228552 21 21 ); 22 22 $checked = ""; 23 if ( $this->doesAnswerExist($data[$i])) {23 if (isset($data[$i]) && $this->doesAnswerExist($data[$i])) { 24 24 if (isset($data[$i]["value"])) { 25 25 $answer["value"] = $data[$i]["value"]; -
hd-quiz/trunk/classes/questions/select-all-apply-text.php
r3201067 r3228552 20 20 21 21 $checked = ""; 22 if ( $this->doesAnswerExist($data[$i])) {22 if (isset($data[$i]) && $this->doesAnswerExist($data[$i])) { 23 23 if (isset($data[$i]["value"])) { 24 24 $answer["value"] = $data[$i]["value"]; -
hd-quiz/trunk/classes/questions/text-based-answer.php
r3201067 r3228552 18 18 "selected" => "" 19 19 ); 20 if ( $this->doesAnswerExist($data[$i])) {20 if (isset($data[$i]) && $this->doesAnswerExist($data[$i])) { 21 21 if (isset($data[$i]["value"])) { 22 22 $answer["value"] = $data[$i]["value"]; -
hd-quiz/trunk/classes/quiz.php
r3209440 r3228552 44 44 $fields = '[ 45 45 { 46 "label": " ' . esc_attr(trim(__("Results", "hd-quiz"))) . '",47 "id": " Results",46 "label": "' . esc_attr(trim(__("Results", "hd-quiz"))) . '", 47 "id": "Results", 48 48 "children": [ 49 49 { … … 291 291 "label": "Rename quiz", 292 292 "required": true, 293 "default": "' . esc_attr(trim( addslashes($this->quiz_name))) . '",293 "default": "' . esc_attr(trim($this->quiz_name)) . '", 294 294 "placeholder": "", 295 295 "type": "text" … … 303 303 304 304 $data = json_decode($fields, true); 305 if ($data === null) { 306 $data = json_decode('[ 307 { 308 "label": "Error", 309 "id": "Results", 310 "children": [ 311 { 312 "type": "content", 313 "content": "There was an issue decoding the JSON string for these quiz settings. This is usually caused by use of an invalid character in one of the settings. Please <a href = \"https://hdplugins.com/forum/hd-quiz-support/\" target = \"_blank\">request support</a> for help and provide useful information such as what language you are using, or if you can think of anything special might have done to trigger this." 314 } 315 ] 316 } 317 ] 318 ', true); 319 } 305 320 $fields = array(); 306 321 foreach ($data as $k => $tab) { -
hd-quiz/trunk/includes/actions-ajax.php
r3212777 r3228552 128 128 $quiz_id = intval($_POST["quiz_id"]); 129 129 } 130 130 131 $question_id = 0; 131 132 if (isset($_POST["question_id"])) { -
hd-quiz/trunk/includes/admin-pages.php
r3201067 r3228552 9 9 wp_enqueue_style("hdq_admin", plugins_url('../assets/admin.css', __FILE__), array(), HDQ_PLUGIN_VERSION); 10 10 wp_enqueue_script('hdq_admin', plugins_url('../assets/admin_bundled.js', __FILE__), array(), HDQ_PLUGIN_VERSION); 11 // wp_enqueue_script_module('hdq_admin', plugins_url('../assets/admin.js', __FILE__), array(), HDQ_PLUGIN_VERSION);11 //wp_enqueue_script_module('hdq_admin', plugins_url('../assets/admin.js', __FILE__), array(), HDQ_PLUGIN_VERSION); 12 12 13 13 $hdq_version = sanitize_text_field(get_option('HDQ_PLUGIN_VERSION')); -
hd-quiz/trunk/includes/custom-fields.php
r3212777 r3228552 134 134 function sanitize_hdq_field_answers($value) 135 135 { 136 if (!is_array(($value))) { 137 $value = array(); 138 } 139 136 140 $allowed_html = array( 137 141 'a' => array( -
hd-quiz/trunk/index.php
r3209440 r3228552 6 6 * Author: Harmonic Design 7 7 * Author URI: https://harmonicdesign.ca 8 * Version: 2.0. 28 * Version: 2.0.3 9 9 * Text Domain: hd-quiz 10 10 * Domain Path: /languages … … 24 24 } 25 25 if (!defined('HDQ_PLUGIN_VERSION')) { 26 define('HDQ_PLUGIN_VERSION', '2.0. 2');26 define('HDQ_PLUGIN_VERSION', '2.0.3'); 27 27 } 28 28 29 29 // Settings that a power user might want to change, 30 30 // but that I don't want to have a dedicated setting for 31 if (!defined('HDQ_TWITTER_SHARE_ICON')) { 32 define('HDQ_TWITTER_SHARE_ICON', false); 33 } 34 if (!defined('HDQ_MAX_ANSWERS')) { 35 define('HDQ_MAX_ANSWERS', 10); 36 } 37 if (!defined('HDQ_REDIRECT')) { 38 define('HDQ_REDIRECT', true); 39 } 40 if (!defined('HDQ_FORCE_ORDER')) { 41 define('HDQ_FORCE_ORDER', false); 42 } 43 if (!defined('HDQ_PER_PAGE')) { 44 define('HDQ_PER_PAGE', 50); 45 } 46 if (!defined('HDQ_DISABLE_PREV_BUTTON')) { 47 define('HDQ_DISABLE_PREV_BUTTON', false); 48 } 49 if (!defined('HDQ_SECURE_ANSWERS')) { 50 define('HDQ_SECURE_ANSWERS', false); 51 } 31 function hdq_admin_init() 32 { 33 if (!defined('HDQ_TWITTER_SHARE_ICON')) { 34 define('HDQ_TWITTER_SHARE_ICON', false); 35 } 36 if (!defined('HDQ_MAX_ANSWERS')) { 37 define('HDQ_MAX_ANSWERS', 10); 38 } 39 if (!defined('HDQ_REDIRECT')) { 40 define('HDQ_REDIRECT', true); 41 } 42 if (!defined('HDQ_FORCE_ORDER')) { 43 define('HDQ_FORCE_ORDER', false); 44 } 45 if (!defined('HDQ_PER_PAGE')) { 46 define('HDQ_PER_PAGE', 50); 47 } 48 if (!defined('HDQ_DISABLE_PREV_BUTTON')) { 49 define('HDQ_DISABLE_PREV_BUTTON', false); 50 } 51 if (!defined('HDQ_SECURE_ANSWERS')) { 52 define('HDQ_SECURE_ANSWERS', false); 53 } 54 } 55 add_action("init", "hdq_admin_init", 10); 52 56 53 57 // custom quiz image sizes -
hd-quiz/trunk/readme.txt
r3209440 r3228552 4 4 Requires at least: 5.0 5 5 Tested up to: 6.7.1 6 Stable tag: 2.0. 26 Stable tag: 2.0.3 7 7 Requires PHP: 7.0 8 8 License: GPLv2 or later … … 154 154 155 155 == Changelog == 156 = 2.0.3 = 157 * Better quiz rename with special characters 158 * If quiz settings borked, timer no longer auto-completes quiz 159 * Various minor enhancements 160 * Minor debug cleanup 161 156 162 = 2.0.2 = 157 163 * Minor bug fixes … … 346 352 347 353 == Upgrade Notice == 348 = 2.0. 2=349 * Minor bug fixes350 * More translation options351 * Quiz name variable as part of Start Quiz button352 * Better editor permissions354 = 2.0.3 = 355 * Better quiz rename with special characters 356 * If quiz settings borked, timer no longer auto-completes quiz 357 * Various minor enhancements 358 * Minor debug cleanup
Note: See TracChangeset
for help on using the changeset viewer.