1/************************** 2 * Quiz And Survey Master 3 *************************/ 4 5/************************** 6 * This object contains the newer functions. All global functions under are slowly 7 * being deprecated and replaced with rewritten newer functions 8 **************************/ 9 10var QSM; 11var qsmTimerInterval = []; 12(function ($) { 13 QSM = { 14 /** 15 * Initializes all quizzes or surveys on the page 16 */ 17 init: function () { 18 // Makes sure we have quizzes on this page 19 if (typeof qmn_quiz_data != 'undefined' && qmn_quiz_data) { 20 // hide the recaptcha by default 21 $('.g-recaptcha').hide(); 22 // Cycle through all quizzes 23 _.each(qmn_quiz_data, function (quiz) { 24 let quizID = parseInt(quiz.quiz_id); 25 if ( null == localStorage.getItem('mlw_quiz_start_date' + quizID) ) { 26 localStorage.setItem('mlw_quiz_start_date' + quizID, qmn_ajax_object.start_date); 27 localStorage.setItem('mlw_time_consumed_quiz' + quizID, 1); 28 } 29 jQuery.ajax({ 30 url: qmn_ajax_object.ajaxurl, 31 data: { 32 action: "qsm_create_quiz_nonce", 33 quiz_id: quizID, 34 }, 35 type: 'POST', 36 success: function (response) { 37 jQuery('.qsm-quiz-container-' + quizID + ' #qsm_unique_key_'+quizID).val(response.data.unique_key); 38 jQuery('.qsm-quiz-container-' + quizID + ' #qsm_nonce_'+quizID).val(response.data.nonce); 39 } 40 }); 41 QSM.initPagination(quizID); 42 if ( ( quiz.hasOwnProperty('pagination') || ( _.keys(quiz.qpages).length > 1 && !jQuery('.qsm-quiz-container-'+quizID+' .qsm-auto-page-row').length ) ) ) { 43 qsmEndTimeTakenTimer(quizID); 44 jQuery('.qsm-quiz-container-' + quizID + ' #timer').val(0); 45 jQuery(".qsm-quiz-container-" + quizID + " input[name='timer_ms']").val(0); 46 quizType = 'paginated'; 47 jQuery(document).trigger('start_stop_page_timer', [quizID]); 48 } 49 if (quiz.hasOwnProperty('timer_limit') && 0 != quiz.timer_limit) { 50 QSM.initTimer(quizID); 51 quizType = 'timer'; 52 } else { 53 qsmTimerInterval[quizID] = setInterval(function () { qmnTimeTakenTimer(quizID) }, 1000); 54 } 55 if (jQuery('.qsm-quiz-container-' + quizID + ' .qsm-submit-btn').is(':visible') && !jQuery('.qsm-quiz-container-' + quizID).hasClass('qsm_auto_pagination_enabled') ) { 56 jQuery('.qsm-quiz-container-' + quizID + ' .qsm-quiz-comment-section').fadeIn(); 57 } 58 }); 59 } 60 }, 61 62 /** 63 * Sets up timer for a quiz 64 * 65 * @param int quizID The ID of the quiz 66 */ 67 initTimer: function (quizID) { 68 69 jQuery(document).trigger('qsm_init_timer_before', [quizID]); 70 71 // Gets our form 72 var $quizForm = QSM.getQuizForm(quizID); 73 74 // Creates timer status key. 75 qmn_quiz_data[quizID].timerStatus = false; 76 77 // If we are using the newer pagination system... 78 if (0 < $quizForm.children('.qsm-page').length) { 79 // If there is a first page... 80 if (!qmn_quiz_data[quizID].hasOwnProperty('first_page') || !qmn_quiz_data[quizID].first_page) { 81 QSM.activateTimer(quizID); 82 $('.qsm-quiz-container-' + quizID).find('.stoptimer-p').show(); 83 } 84 // ...else, we must be using the questions per page option. 85 } else if (qmn_quiz_data[quizID].hasOwnProperty('pagination') && qmn_quiz_data[quizID].first_page) { 86 $(document).on('click', '.qsm-quiz-container-' + quizID + ' .mlw_next', function (event) { 87 event.preventDefault(); 88 if ( qmn_quiz_data[quizID].hasOwnProperty('advanced_timer') && qmn_quiz_data[quizID].advanced_timer.hasOwnProperty('show_stop_timer') ) { 89 var start_timer = parseInt(qmn_quiz_data[quizID].advanced_timer.start_timer_page); 90 if ($('.qsm-quiz-container-' + quizID).find('.qmn_pagination > .slide_number_hidden').val() == start_timer) { 91 QSM.activateTimer(quizID); 92 $('.qsm-quiz-container-' + quizID).find('.stoptimer-p').show(); 93 } 94 } else if (!qmn_quiz_data[quizID].timerStatus && (0 == $('.quiz_begin:visible').length || (1 == $('.quiz_begin:visible').length && qmnValidatePage('quizForm' + quizID)))) { 95 QSM.activateTimer(quizID); 96 $('.qsm-quiz-container-' + quizID).find('.stoptimer-p').show(); 97 } 98 }); 99 } else { 100 QSM.activateTimer(quizID); 101 $('.qsm-quiz-container-' + quizID).find('.stoptimer-p').show(); 102 } 103 jQuery(document).trigger('qsm_init_timer_after', [quizID]); 104 }, 105 /** 106 * Starts the timer for the quiz. 107 * 108 * @param int quizID The ID of the quiz. 109 */ 110 activateTimer: function (quizID) { 111 var timer_ms = jQuery(".qsm-quiz-container-" + quizID + " input[name='timer_ms']").val(); 112 if (timer_ms == 0) { 113 jQuery('.qsm-quiz-container-' + quizID + ' #timer').val(0); 114 qsmTimerInterval[quizID] = setInterval(function () { qmnTimeTakenTimer(quizID) }, 1000); 115 jQuery(".qsm-quiz-container-" + quizID + " input[name='timer_ms']").each(function () { 116 var timems = qsmTimeInMS(); 117 jQuery(this).val(timems); 118 }); 119 } 120 121 jQuery(document).trigger('qsm_activate_time_before', [quizID, qmn_quiz_data]); 122 // Gets our form. 123 var $timer = QSM.getTimer(quizID); 124 125 // Sets up our variables. 126 qmn_quiz_data[quizID].timerStatus = true; 127 var seconds = 0; 128 129 // Calculates starting time. 130 var timerTotal = parseFloat(qmn_quiz_data[quizID].timer_limit) * 60; 131 var timerStarted = localStorage.getItem('mlw_started_quiz' + quizID); 132 var timerConsumed = parseInt(localStorage.getItem('mlw_time_consumed_quiz' + quizID)); 133 var timerRemaning = timerTotal - timerConsumed; 134 if ('yes' == timerStarted && 0 < timerRemaning) { 135 seconds = parseInt(timerRemaning); 136 } else { 137 seconds = parseFloat(qmn_quiz_data[quizID].timer_limit) * 60; 138 } 139 qmn_quiz_data[quizID].timerRemaning = seconds; 140 qmn_quiz_data[quizID].timerConsumed = timerConsumed; 141 142 //hidden timer 143 jQuery(".hiddentimer").html(seconds); 144 145 // Makes the timer appear. 146 $timer.show(); 147 $timer.text(QSM.secondsToTimer(seconds)); 148 149 // Sets up timer interval. 150 if (!isNaN(qmn_quiz_data[quizID].timerRemaning)) { 151 clearInterval(qmn_quiz_data[quizID].timerInterval); 152 qmn_quiz_data[quizID].timerInterval = setInterval(QSM.timer, 1000, quizID); 153 } 154 jQuery(document).trigger('qsm_activate_time_after', [quizID, qmn_quiz_data]); 155 }, 156 /** 157 * Reduces the timer by one second and checks if timer is 0 158 * 159 * @param int quizID The ID of the quiz. 160 */ 161 timer: function (quizID) { 162 qmn_quiz_data[quizID].timerRemaning -= 1; 163 qmn_quiz_data[quizID].timerConsumed += 1; 164 if (0 > qmn_quiz_data[quizID].timerRemaning) { 165 qmn_quiz_data[quizID].timerRemaning = 0; 166 } 167 var secondsRemaining = qmn_quiz_data[quizID].timerRemaning; 168 var secondsConsumed = qmn_quiz_data[quizID].timerConsumed; 169 if (localStorage.getItem('mlw_time_quiz' + quizID) != null ) { 170 secondsRemaining = (parseFloat(qmn_quiz_data[quizID].timer_limit) * 60) - secondsConsumed + 1; 171 if(secondsRemaining < 0) { 172 secondsRemaining = 0; 173 } 174 } 175 var display = QSM.secondsToTimer(secondsRemaining); 176 var systemTime = new Date().getTime() / 1000; 177 systemTime = Math.round(systemTime); 178 if ('1' === qmn_quiz_data[quizID].not_allow_after_expired_time && systemTime > qmn_quiz_data[quizID].scheduled_time_end) { 179 MicroModal.show('modal-4'); 180 return false;
181 } 182 // Sets our local storage values for the timer being started and current timer value. 183 localStorage.setItem('mlw_time_consumed_quiz' + quizID, secondsConsumed ); 184 localStorage.setItem('mlw_time_quiz' + quizID, secondsRemaining); 185 localStorage.setItem('mlw_started_quiz' + quizID, "yes"); 186 187 // Updates timer element and title on browser tab. 188 var $timer = QSM.getTimer(quizID); 189 $timer.text(display); 190 if (0 < qmn_quiz_data[quizID].timer_limit) { 191 document.title = display + ' ' + qsmTitleText; 192 } 193 194 var $quizForm = QSM.getQuizForm(quizID); 195 var total_seconds = parseFloat(qmn_quiz_data[quizID].timer_limit) * 60; 196 var ninety_sec = total_seconds - (total_seconds * 90 / 100); 197 /*CUSTOM TIMER*/ 198 jQuery(document).trigger('load_timer_faces', [quizID, secondsRemaining, total_seconds, display]); 199 if (ninety_sec == secondsRemaining) { 200 $quizForm.closest('.qmn_quiz_container').find('.qsm_ninety_warning').fadeIn(); 201 } 202 203 // If timer is run out, disable fields. 204 if (0 >= secondsRemaining && 0 < qmn_quiz_data[quizID].timer_limit) { 205 clearInterval(qmn_quiz_data[quizID].timerInterval); 206 $(".mlw_qmn_quiz input:radio").attr('disabled', true); 207 $(".mlw_qmn_quiz input:checkbox").attr('disabled', true); 208 $(".mlw_qmn_quiz select").attr('disabled', true); 209 $(".mlw_qmn_question_comment").attr('disabled', true); 210 $(".mlw_answer_open_text").attr('disabled', true); 211 $(".mlw_answer_number").attr('readonly', true); 212 213 $quizForm.closest('.qmn_quiz_container').addClass('qsm_timer_ended'); 214 $quizForm.closest('.qmn_quiz_container').prepend('<p class="qmn_error_message" style="color: red;">' + qmn_ajax_object.quiz_time_over + '</p>'); 215 if (qmn_quiz_data[quizID].enable_result_after_timer_end == 1) { 216 $quizForm.closest('.qmn_quiz_container').find('.qsm-submit-btn').trigger('click'); 217 } else { 218 $('.qsm-quiz-container-' + quizID).find('.stoptimer-p').hide(); 219 MicroModal.show('modal-3'); 220 } 221 return; 222 } 223 }, 224 /** 225 * Clears timer interval 226 * 227 * @param int quizID The ID of the quiz 228 */ 229 endTimer: function (quizID) { 230 localStorage.setItem('mlw_time_quiz' + quizID, 'completed'); 231 localStorage.setItem('mlw_started_quiz' + quizID, 'no'); 232 localStorage.removeItem('mlw_time_consumed_quiz' + quizID); 233 document.title = qsmTitleText; 234 if (typeof qmn_quiz_data[quizID].timerInterval != 'undefined') { 235 clearInterval(qmn_quiz_data[quizID].timerInterval); 236 } 237 jQuery(document).trigger('qsm_end_timer', [quizID, qmn_quiz_data]); 238 }, 239 /** 240 * Converts seconds to 00:00:00 format 241 * 242 * @param int seconds The number of seconds 243 * @return string A string in H:M:S format 244 */ 245 secondsToTimer: function (seconds) { 246 var formattedTime = ''; 247 seconds = parseInt(seconds); 248 249 // Prepares the hours part. 250 var hours = Math.floor(seconds / 3600); 251 if (0 === hours) { 252 formattedTime = '00:'; 253 } else if (10 > hours) { 254 formattedTime = '0' + hours + ':'; 255 } else { 256 formattedTime = hours + ':'; 257 } 258 259 // Prepares the minutes part. 260 var minutes = Math.floor((seconds % 3600) / 60); 261 if (0 === minutes) { 262 formattedTime = formattedTime + '00:'; 263 } else if (10 > minutes) { 264 formattedTime = formattedTime + '0' + minutes + ':'; 265 } else { 266 formattedTime = formattedTime + minutes + ':'; 267 } 268 269 // Prepares the seconds part. 270 var remainder = Math.floor((seconds % 60)); 271 if (0 === remainder) { 272 formattedTime = formattedTime + '00'; 273 } else if (10 > remainder) { 274 formattedTime = formattedTime + '0' + remainder; 275 } else { 276 formattedTime = formattedTime + remainder; 277 } 278 return formattedTime; 279 }, 280 /** 281 * Gets the jQuery object for the timer 282 */ 283 getTimer: function (quizID) { 284 var $quizForm = QSM.getQuizForm(quizID); 285 return $quizForm.children('.mlw_qmn_timer'); 286 }, 287 288 /** 289 * Sets up pagination for a quiz 290 * 291 * @param int quizID The ID of the quiz. 292 */ 293 initPagination: function (quizID) { 294 var $quizForm = QSM.getQuizForm(quizID); 295 /** 296 * 297 * CHecking if the quiz is random 298 */ 299 $is_random = $('.qmn_quiz_container').hasClass('random'); 300 if (0 < $quizForm.children('.qsm-page').length) { 301 $quizForm.children('.qsm-page').hide(); 302 template = wp.template('qsm-pagination-' + quizID); 303 $quizForm.append(template()); 304 if ($quizForm.find('.qsm-pagination > .current_page_hidden').length == 0) { 305 $quizForm.find('.qsm-pagination').append('<input type="hidden" value="
3050" name="current_page" class="current_page_hidden" />'); 306 } 307 if ('1' == qmn_quiz_data[quizID].progress_bar) { 308 jQuery(document).trigger('qsm_init_progressbar_before', [quizID, qmn_quiz_data]); 309 $('#quizForm' + quizID).find('.qsm-progress-bar').show(); 310 qmn_quiz_data[quizID].bar = new ProgressBar.Line('#quizForm' + quizID + ' .qsm-progress-bar', { 311 strokeWidth: 2, 312 easing: 'easeInOut', 313 duration: 1400, 314 color: '#3498db', 315 trailColor: '#eee', 316 trailWidth: 1, 317 svgStyle: { width: '100%', height: '100%' }, 318 text: { 319 style: { 320 // color: '#999', 321 position: 'absolute', 322 padding: 0, 323 margin: 0, 324 top: 0, 325 right: '10px', 326 'font-size': '13px', 327 'font-weight': 'bold', 328 transform: null 329 }, 330 autoStyleContainer: false 331 }, 332 from: { color: '#3498db' }, 333 to: { color: '#ED6A5A' }, 334 step: function (state, bar) { 335 //bar.setText(Math.round(bar.value() * 100) + ' %'); 336 } 337 }); 338 jQuery(document).trigger('qsm_init_progressbar_after', [quizID, qmn_quiz_data]); 339 } 340 QSM.goToPage(quizID, 1); 341 jQuery(document).on('click', '.qsm-quiz-container-' + quizID + ' .qsm-pagination .qsm-next', function (event) { 342 jQuery(document).trigger('qsm_next_button_click_before', [quizID]); 343 event.preventDefault(); 344 let $quizForm = QSM.getQuizForm(quizID); 345 jQuery('.qsm-quiz-container-' + quizID + ' .mlw_custom_next').addClass('qsm-disabled-btn'); 346 jQuery('.qsm-quiz-container-' + quizID + ' .mlw_custom_next').append('<div class="qsm-spinner-loader" style="font-size: 3.5px;margin-right: -5px;margin-left: 10px;"></div>'); 347 jQuery('.qsm-multiple-response-input:checked, .qmn-multiple-choice-input:checked , .qsm_select:visible').each(function () { 348 if (qmn_quiz_data[quizID].end_quiz_if_wrong > 0 && jQuery(this).parents().is(':visible') && jQuery(this).is('input, select')) { 349 if (jQuery(this).parents('.qmn_radio_answers, .qsm_check_answer')) { 350 let question_id = jQuery(this).attr('name').split('question')[1], 351 value = jQuery(this).val(), 352 $this = jQuery(this).parents('.quiz_section'); 353 if (value !== "") { 354 qsm_submit_quiz_if_answer_wrong(question_id, value, $this, $quizForm); 355 } 356 } 357 } 358 }) 359 jQuery('.qsm-quiz-container-' + quizID + ' .mlw_custom_next').removeClass('qsm-disabled-btn'); 360 jQuery('.qsm-quiz-container-' + quizID + ' .qsm-spinner-loader').remove(); 361 QSM.nextPage(quizID); 362 var $container = jQuery('.qsm-quiz-container-' + quizID); 363 if (qmn_quiz_data[quizID].disable_scroll_next_previous_click != 1) { 364 qsmScrollTo($container); 365 } 366 jQuery(document).trigger('qsm_next_button_click_after', [quizID]); 367 }); 368 jQuery(document).on('click', '.qsm-quiz-container-' + quizID + ' .qsm-pagination .qsm-previous', function (event) { 369 jQuery(document).trigger('qsm_previous_button_click_before', [quizID]); 370 event.preventDefault(); 371 QSM.prevPage(quizID); 372 var $container = jQuery('.qsm-quiz-container-' + quizID); 373 if (qmn_quiz_data[quizID].disable_scroll_next_previous_click != 1) { 374 qsmScrollTo($container); 375 } 376 jQuery(document).trigger('qsm_previous_button_click_after', [quizID]); 377 }); 378 } 379 // Gets timer element. 380 let $timer = QSM.getTimer(quizID); 381 382 // Calculates starting time. 383 let timerStarted = localStorage.getItem('mlw_started_quiz' + quizID); 384 let timerConsumed = parseInt(localStorage.getItem('mlw_time_consumed_quiz' + quizID)); 385 let seconds = parseFloat(qmn_quiz_data[quizID].timer_limit) * 60; 386 let timerRemaning = seconds - timerConsumed; 387 if ('yes' == timerStarted && 0 < timerRemaning) { 388 seconds = parseInt(timerRemaning); 389 } 390 $timer.text(QSM.secondsToTimer(seconds)); 391 }, 392 /** 393 * Navigates quiz to specific page 394 * 395 * @param int pageNumber The number of the page 396 */ 397 goToPage: function (quizID, pageNumber) { 398 jQuery(document).trigger('qsm_go_to_page_before', [quizID, pageNumber]); 399 var $quizForm = QSM.getQuizForm(quizID); 400 var $pages = $quizForm.children('.qsm-page'); 401 var $currentPage = $quizForm.children('.qsm-page:nth-of-type(' + pageNumber + ')'); 402 var $container = jQuery( '.qsm-quiz-container-' + quizID ); 403 $pages.hide(); 404 $currentPage.show(); 405 jQuery(document).trigger('end_page_timer_init_page_timer', [quizID, $currentPage]); 406 $quizForm.find('.current_page_hidden').val(pageNumber - 1); 407 $quizForm.find('.qsm-previous').hide(); 408 $quizForm.find('.qsm-next').hide(); 409 $quizForm.find('.qsm-submit-btn').hide(); 410 $quizForm.find('.g-recaptcha').hide(); 411 if (pageNumber < $pages.length) { 412 $quizForm.find('.qsm-next').show(); 413 check_if_show_start_quiz_button($container, $pages.length, pageNumber); 414 } else { 415 $quizForm.find('.qsm-submit-btn').show(); 416 if ( !jQuery('.qsm-quiz-container-'+ quizID +'.random') || !qmn_quiz_data[quizID].hasOwnProperty('pagination') ) { 417 $quizForm.find('.g-recaptcha').show(); 418 } 419 } 420 if (1 < pageNumber) { 421 $quizForm.find('.qsm-previous').show(); 422 } 423 if (1 == $currentPage.data('prevbtn')) { 424 $quizForm.find('.qsm-previous').hide(); 425 } 426 if ('1' == qmn_quiz_data[quizID].disable_first_page) { 427 if (pageNumber == 1) { 428 $quizForm.find(".mlw_previous").hide(); 429 $quizForm.find('.qsm-page-' + (parseInt(pageNumber))).show(); 430 } 431 } 432 if ('1' == qmn_quiz_data[quizID].progress_bar) { 433 var current_page = jQuery('#quizForm' + quizID).find('.current_page_hidden').val(); 434 var total_page_length = $pages.length - 1; 435 if (qmn_quiz_data[quizID].contact_info_location == 0) { 436 //Do nothing. 437 } else if (qmn_quiz_data[quizID].contact_info_location == 1) { 438 if ($quizForm.children('.qsm-page').find('.qsm_contact_div ').length > 0) { 439 //total_page_length = total_page_length - 1; 440 } 441 } 442 var animate_value = current_page / total_page_length; 443 if (animate_value <= 1) { 444 qmn_quiz_data[quizID].bar.animate(animate_value); 445 var old_text = jQuery('#quizForm' + quizID).find('.progressbar-text').text().replace(' %', ''); 446 var new_text = Math.round(animate_value * 100); 447 jQuery({ 448 Counter: old_text 449 }).animate({ 450 Counter: new_text 451 }, {
452 duration: 1000, 453 easing: 'swing', 454 step: function () { 455 jQuery('#quizForm' + quizID).find('.progressbar-text').text(Math.round(this.Counter) + ' %'); 456 } 457 }); 458 } 459 } 460 QSM.savePage(quizID, pageNumber); 461 jQuery(document).trigger('qsm_go_to_page_after', [quizID, pageNumber]); 462 }, 463 /** 464 * Moves forward or backwards through the pages 465 * 466 * @param int quizID The ID of the quiz 467 * @param int difference The number of pages to forward or back 468 */ 469 changePage: function (quizID, difference) { 470 var page = QSM.getPage(quizID); 471 if (qmn_quiz_data[quizID].hasOwnProperty('first_page') && qmn_quiz_data[quizID].first_page) { 472 if (qmn_quiz_data[quizID].hasOwnProperty('advanced_timer') && qmn_quiz_data[quizID].advanced_timer.hasOwnProperty('show_stop_timer') ) { 473 var start_timer = parseInt(qmn_quiz_data[quizID].advanced_timer.start_timer_page); 474 if (page == start_timer) { // check current page 475 QSM.activateTimer(quizID); 476 $('.qsm-quiz-container-' + quizID).find('.stoptimer-p').show(); 477 } 478 } else if (!qmn_quiz_data[quizID].timerStatus) { 479 QSM.activateTimer(quizID); 480 $('.qsm-quiz-container-' + quizID).find('.stoptimer-p').show(); 481 } 482 483 } 484 page += difference; 485 QSM.goToPage(quizID, page); 486 }, 487 nextPage: function (quizID) { 488 if (qmnValidatePage('quizForm' + quizID)) { 489 QSM.changePage(quizID, 1); 490 } 491 }, 492 prevPage: function (quizID) { 493 QSM.changePage(quizID, -1); 494 }, 495 savePage: function (quizID, pageNumber) { 496 sessionStorage.setItem('quiz' + quizID + 'page', pageNumber); 497 }, 498 getPage: function (quizID) { 499 pageNumber = parseInt(sessionStorage.getItem('quiz' + quizID + 'page')); 500 if (isNaN(pageNumber) || null == pageNumber) { 501 pageNumber = 1; 502 } 503 return pageNumber; 504 }, 505 /** 506 * Scrolls to the top of supplied element 507 * 508 * @param jQueryObject The jQuery version of an element. i.e. $('#quizForm3') 509 */ 510 scrollTo: function ($element) { 511 jQuery('html, body').animate( 512 { 513 scrollTop: $element.offset().top - 150 514 }, 515 1000); 516 }, 517 /** 518 * Gets the jQuery object of the quiz form 519 */ 520 getQuizForm: function (quizID) { 521 return $('#quizForm' + quizID); 522 }, 523 q_counter: Backbone.Model.extend({ 524 defaults: { 525 answers: [] 526 } 527 }), 528 changes: function (data, question_id, quiz_id) { 529 answers = qsmLogicModel.get('answers'); 530 answers.push({ 531 'q_id': question_id, 532 'incorrect': data.success == 'correct' ? 0 : 1, 533 }); 534 qsmLogicModel.set({ 'answers': QSM.filter_question(qsmLogicModel.get('answers')) }); 535 let update_answers = qsmLogicModel.get('answers'); 536 let incorrect = 0; 537 538 update_answers.forEach(function(obj){ 539 if(obj.incorrect == 1){ 540 incorrect++; 541 } 542 }); 543 if( qmn_quiz_data[quiz_id].end_quiz_if_wrong <= incorrect ) { 544 submit_status = true; 545 }else{ 546 submit_status = false; 547 } 548 }, 549 filter_question: function(arr) { 550 let result = {}; 551 arr.forEach(function(obj) { 552 if (obj.q_id) { 553 result[obj.q_id] = obj; 554 } 555 }); 556 return Object.values(result); 557 }, 558 }; 559 // On load code 560 $(function () { 561 qmnDoInit(); 562 }); 563}(jQuery)); 564 565// Global Variables 566var qsmTitleText = document.title; 567var qsmLogicModel = new QSM.q_counter({}); 568 569/** 570 * Validates an email ID. 571 * 572 * @param email The Email Id to validate. 573 * @returns Boolean 574 */ 575function isEmail(email) { 576 var regex = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; 577 if (!regex.test(email)) { 578 return false; 579 } else { 580 return true; 581 } 582} 583/** 584 * Validates an email ID from specific domains. 585 * 586 * @param email The Email Id to validate. 587 * @returns Boolean 588 */ 589function isValidDomains(email, domains) { 590 if ('undefined' == domains) { 591 return true; 592 } 593 if (0 == domains.length) { 594 return true; 595 } 596 for (var i = 0; i < domains.length; i++) { 597 if (email.indexOf(domains[i]) != -1) { 598 return true; 599 } 600 } 601 return false; 602} 603/** 604 * Validates a URL. 605 * 606 * @param url URL to validate. 607 * @returns Boolean 608 */ 609function isUrlValid(url) { 610 return /^(http|https|ftp):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/i.test(url); 611} 612 613/** 614 * Limit multiple response based on question limit 615 * @returns 616 */ 617function qsmCheckMR(event, limit) { 618 var checked = jQuery(event).parents('.quiz_section').find(':checkbox:checked').length; 619 if (checked > limit) { 620 event.checked = false;
621 if (jQuery(event).parents('.quiz_section').find('.multi-checkbox-limit-reach').length == 0) { 622 jQuery(event).parents('.quiz_section').append('<span class="multi-checkbox-limit-reach">' + qmn_ajax_object.multicheckbox_limit_reach + '</span>'); 623 } 624 } else { 625 jQuery(event).parents('.quiz_section').find('.multi-checkbox-limit-reach').remove(); 626 } 627} 628 629function qmnDoInit() { 630 // Legacy init. 631 qmnInit(); 632 633 // Call main initialization. 634 qsminstance = QSM.init(); 635 636 jQuery(document).on("qsm_next_button_click_after", function (_event, _quiz_id) { 637 if (quizType == 'paginated') { 638 var timer_ms = jQuery(".qsm-quiz-container-" + _quiz_id + " input[name='timer_ms']").val(); 639 if (timer_ms == 0) { 640 jQuery('.qsm-quiz-container-' + _quiz_id + ' #timer').val(0); 641 qsmTimerInterval[_quiz_id] = setInterval(function () { qmnTimeTakenTimer(_quiz_id) }, 1000); 642 jQuery(".qsm-quiz-container-" + _quiz_id + " input[name='timer_ms']").each(function () { 643 var timems = qsmTimeInMS(); 644 jQuery(this).val(timems); 645 }); 646 } 647 } 648 if ( jQuery('.qsm-quiz-container-' + _quiz_id + ' .qsm-submit-btn').is(':visible') || jQuery('.qsm-quiz-container-' + _quiz_id + ' .qsm-quiz-comment-section').closest('.qsm-page').is(':visible') ) { 649 jQuery('.qsm-quiz-container-' + _quiz_id + ' .qsm-quiz-comment-section').fadeIn(); 650 } 651 }); 652} 653 654function qmnTimeTakenTimer(quizID) { 655 var x = +jQuery('.qsm-quiz-container-' + quizID + ' #timer').val(); 656 if (NaN === x) { 657 x = 0; 658 } 659 x = x + 1; 660 jQuery('.qsm-quiz-container-' + quizID + ' #timer').val(x); 661} 662 663function qsmEndTimeTakenTimer(quiz_id) { 664 clearInterval(qsmTimerInterval[quiz_id]); 665} 666 667function qsmTimeInMS() { 668 var d = new Date(); 669 var n = d.getTime(); 670 return n; 671} 672 673function qmnClearField(field) { 674 if (field.defaultValue == field.value) field.value = ''; 675} 676 677var qsmPagescrolling = false; 678function qsmScrollTo($element) { 679 if ($element.length > 0 && !qsmPagescrolling) { 680 qsmPagescrolling = true; 681 jQuery(document).trigger('qsm_scroll_to_top_before', [$element]); 682 jQuery('html, body').animate({ scrollTop: $element.offset().top - 150 }, 1000, function() { 683 qsmPagescrolling = false; 684 jQuery(document).trigger('qsm_scroll_to_top_after', [$element]); 685 }); 686 } 687} 688 689 690function qmnDisplayError(message, field, quiz_form_id) { 691 jQuery('#' + quiz_form_id + ' .qmn_error_message_section').addClass('qmn_error_message'); 692 jQuery('#' + quiz_form_id + ' .qmn_error_message').text(message); 693 if (field.parents('.qsm_contact_div').length) { 694 field.parents('.qsm_contact_div').addClass('qmn_error'); 695 } else { 696 field.closest('.quiz_section').addClass('qmn_error'); 697 } 698} 699 700function qmnResetError(quiz_form_id) { 701 jQuery('#' + quiz_form_id + ' .qmn_error_message').text(''); 702 jQuery('#' + quiz_form_id + ' .qmn_error_message_section').removeClass('qmn_error_message'); 703 jQuery('#' + quiz_form_id + ' .qsm_contact_div').removeClass('qmn_error'); 704 jQuery('#' + quiz_form_id + ' .quiz_section').removeClass('qmn_error'); 705} 706var show_result_validation = true; 707function qmnValidation(element, quiz_form_id) { 708 show_result_validation = true; 709 jQuery(document).trigger('qsm_before_validation', [element, quiz_form_id]); 710 let quiz_id = quiz_form_id.replace('quizForm', ''); 711 var error_messages = qmn_quiz_data[quiz_id].error_messages; 712 qmnResetError(quiz_form_id); 713 jQuery(element).each(function () { 714 if ( jQuery(this).attr('class') && ( jQuery(this).is(':visible') || jQuery(this).attr('class').indexOf('mlwRequiredAccept') || ( jQuery(this).attr('class').indexOf('mlwRequiredPolar') > -1 && jQuery(this).parent().is(':visible') ) ) ) { 715 if (jQuery(this).attr('class').indexOf('mlwEmail') !== -1 && this.value !== "") { 716 // Remove any trailing and preceeding space. 717 var x = jQuery.trim(this.value); 718 if (!isEmail(x)) { 719 qmnDisplayError(error_messages.email_error_text, jQuery(this), quiz_form_id); 720 show_result_validation = false; 721 } 722 /** 723 * Validate email from allowed domains. 724 */ 725 var domains = jQuery(this).attr('data-domains'); 726 if ('undefined' != typeof domains) { 727 if (!isValidDomains(x, domains.split(","))) { 728 qmnDisplayError(error_messages.email_error_text, jQuery(this), quiz_form_id); 729 show_result_validation = false;
730 } 731 } 732 } 733 if (jQuery(this).attr('class').indexOf('mlwUrl') !== -1 && this.value !== "") { 734 // Remove any trailing and preceeding space. 735 if (!isUrlValid(jQuery.trim(this.value))) { 736 qmnDisplayError(error_messages.url_error_text, jQuery(this), quiz_form_id); 737 show_result_validation = false; 738 } 739 } 740 if (jQuery(this).attr('class').indexOf('mlwMinLength') !== -1 && this.value !== "") { 741 // Remove any trailing and preceeding space. 742 if (jQuery.trim(this.value).length < jQuery(this).attr('minlength')) { 743 var minlength_error = error_messages.minlength_error_text; 744 minlength_error = minlength_error.replace('%minlength%', jQuery(this).attr('minlength')); 745 qmnDisplayError(minlength_error, jQuery(this), quiz_form_id); 746 show_result_validation = false; 747 } 748 } 749 if ( jQuery(this).hasClass('mlw_answer_open_text') || jQuery(this).hasClass('qmn_fill_blank') || jQuery(this).hasClass('mlw_answer_number')) { 750 if (jQuery.trim(this.value).length < jQuery(this).attr('minlength')) { 751 let minCharError = error_messages.minlength_error_text; 752 minCharError = minCharError.replace('%minlength%', jQuery(this).attr('minlength')); 753 qmnDisplayError(minCharError, jQuery(this), quiz_form_id); 754 show_result_validation = false; 755 } 756 } 757 if (jQuery(this).attr('class').indexOf('mlwMaxLength') !== -1 && this.value !== "") { 758 // Remove any trailing and preceeding space. 759 if (jQuery.trim(this.value).length > jQuery(this).attr('maxlength')) { 760 var maxlength_error = error_messages.maxlength_error_text; 761 maxlength_error = maxlength_error.replace('%maxlength%', jQuery(this).attr('maxlength')); 762 qmnDisplayError(maxlength_error, jQuery(this), quiz_form_id); 763 show_result_validation = false; 764 } 765 } 766 var by_pass = true; 767 if (qmn_quiz_data[quiz_id].timer_limit_val > 0 && qmn_quiz_data[quiz_id].hasOwnProperty('skip_validation_time_expire') && qmn_quiz_data[quiz_id].skip_validation_time_expire != 1) { 768 by_pass = false; 769 } 770 if (localStorage.getItem('mlw_time_quiz' + quiz_id) === null || (0 == localStorage.getItem('mlw_time_quiz' + quiz_id) && by_pass == false) || localStorage.getItem('mlw_time_quiz' + quiz_id) > 0.08 || by_pass === false) { 771 if (jQuery(this).attr('class').indexOf('mlwRequiredNumber') > -1 && this.value === "" && +this.value != NaN) { 772 qmnDisplayError(error_messages.number_error_text, jQuery(this), quiz_form_id); 773 show_result_validation = false; 774 } 775 if (jQuery(this).attr('class').indexOf('mlwRequiredDate') > -1 && this.value === "") { 776 qmnDisplayError(error_messages.empty_error_text, jQuery(this), quiz_form_id); 777 show_result_validation = false; 778 } 779 if (jQuery(this).attr('class').indexOf('mlwRequiredText') > -1 && jQuery.trim(this.value) === "") { 780 qmnDisplayError(error_messages.empty_error_text, jQuery(this), quiz_form_id); 781 show_result_validation = false; 782 } 783 if (jQuery(this).attr('class').indexOf('mlwRequiredCaptcha') > -1 && this.value != mlw_code) { 784 qmnDisplayError(error_messages.incorrect_error_text, jQuery(this), quiz_form_id); 785 show_result_validation = false; 786 } 787 if (jQuery(this).attr('class').indexOf('mlwRequiredAccept') > -1 && !jQuery(this).prop('checked')) { 788 qmnDisplayError(error_messages.empty_error_text, jQuery(this), quiz_form_id); 789 show_result_validation = false; 790 } 791 if (jQuery(this).attr('class').indexOf('mlwRequiredRadio') > -1) { 792 check_val = jQuery(this).find('input:checked').val(); 793 if (check_val == "" || check_val == undefined) { 794 qmnDisplayError(error_messages.empty_error_text, jQuery(this), quiz_form_id); 795 show_result_validation = false; 796 } 797 } 798 if (jQuery(this).attr('class').indexOf('mlwRequiredFileUpload') > -1) { 799 var selected_file = jQuery(this).get(0).files.length; 800 if (selected_file === 0) { 801 qmnDisplayError(error_messages.empty_error_text, jQuery(this), quiz_form_id); 802 show_result_validation = false; 803 } 804 } 805 if (jQuery(this).attr('class').indexOf('qsmRequiredSelect') > -1) { 806 check_val = jQuery(this).val(); 807 if (check_val == "" || check_val == null) { 808 qmnDisplayError(error_messages.empty_error_text, jQuery(this), quiz_form_id); 809 show_result_validation = false;
810 } 811 } 812 if (jQuery(this).attr('class').indexOf('mlwRequiredCheck') > -1) { 813 if (!jQuery(this).find('input:checked').length) { 814 qmnDisplayError(error_messages.empty_error_text, jQuery(this), quiz_form_id); 815 show_result_validation = false; 816 } 817 } 818 //Google recaptcha validation 819 if (jQuery(this).attr('class').indexOf('g-recaptcha-response') > -1) { 820 let recaptcha_id = jQuery(this).attr('id'); 821 let recaptcha_index = 'g-recaptcha-response' === recaptcha_id ? 0 : recaptcha_id.replace("g-recaptcha-response-", ""); 822 if (grecaptcha.getResponse(recaptcha_index) == "") { 823 alert(error_messages.recaptcha_error_text); 824 show_result_validation = false; 825 } 826 } 827 } 828 } 829 }); 830 jQuery(document).trigger('qsm_after_validation', [element, quiz_form_id]); 831 return show_result_validation; 832} 833 834function getFormData($form) { 835 var unindexed_array = $form.serializeArray(); 836 var indexed_array = {}; 837 838 jQuery.map(unindexed_array, function (n, i) { 839 indexed_array[n['name']] = n['value']; 840 }); 841 842 return indexed_array; 843} 844 845function qmnFormSubmit(quiz_form_id, $this) { 846 var quiz_id = +jQuery('#' + quiz_form_id).find('.qmn_quiz_id').val(); 847 let $container = jQuery($this).closest('.qmn_quiz_container'); 848 let result = qmnValidation( $container.find('*'), quiz_form_id); 849 if (!result) { return result; } 850 851 /** 852 * Update Timer in MS 853 */ 854 var timer_ms = jQuery('#' + quiz_form_id).find(".qsm-quiz-container-" + quiz_id + " input[name='timer_ms']").val(); 855 var new_timer_ms = qsmTimeInMS(); 856 jQuery('#' + quiz_form_id).find(".qsm-quiz-container-" + quiz_id + " input[name='timer_ms']").val(Math.abs(new_timer_ms - timer_ms)); 857 858 jQuery('.mlw_qmn_quiz input:radio').attr('disabled', false); 859 jQuery('.mlw_qmn_quiz input:checkbox').attr('disabled', false); 860 jQuery('.mlw_qmn_quiz select').attr('disabled', false); 861 jQuery('.mlw_qmn_question_comment').attr('disabled', false); 862 jQuery('.mlw_answer_open_text').attr('disabled', false); 863 //Convert serialize data into index array 864 var unindexed_array = jQuery('#' + quiz_form_id).serializeArray(); 865 unindexed_array.push( 866 { 867 name: 'quiz_start_date', 868 value: localStorage.getItem('mlw_quiz_start_date' + quiz_id) 869 } 870 ) 871 jQuery(document).trigger('qsm_before_form_data_process', [quiz_form_id, unindexed_array]); 872 var fd = new FormData(); 873 jQuery.each(unindexed_array, function (key, input) { 874 fd.append(input.name, input.value); 875 }); 876 fd.append("action", 'qmn_process_quiz'); 877 fd.append("nonce", jQuery('#qsm_nonce_' + quiz_id ).val() ); 878 fd.append("qsm_unique_key", jQuery('#qsm_unique_key_' + quiz_id ).val() ); 879 fd.append("currentuserTime", Math.round(new Date().getTime() / 1000)); 880 fd.append("currentuserTimeZone", Intl.DateTimeFormat().resolvedOptions().timeZone); 881 882 qsmEndTimeTakenTimer(quiz_id); 883 884 if (qmn_quiz_data[quiz_id].hasOwnProperty('timer_limit')) { 885 QSM.endTimer(quiz_id); 886 } 887 jQuery(document).trigger('qsm_before_quiz_submit', [quiz_form_id]); 888 jQuery('#' + quiz_form_id + ' input[type=submit]').attr('disabled', 'disabled'); 889 qsmDisplayLoading($container, quiz_id); 890 jQuery.ajax({ 891 url: qmn_ajax_object.ajaxurl, 892 data: fd, 893 contentType: false, 894 processData: false, 895 type: 'POST', 896 success: function (response) { 897 response = JSON.parse(response); 898 if (window.qsm_results_data === undefined) { 899 window.qsm_results_data = new Object(); 900 } 901 window.qsm_results_data[quiz_id] = { 902 'save_response': response.result_status['save_response'], 903 'id': response.result_status['id'] 904 }; 905 906 if (response.quizExpired) { 907 MicroModal.show('modal-4'); 908 return false; 909 } else { 910 qmnDisplayResults(response, quiz_form_id, $container, quiz_id); 911 // run MathJax on the new content 912 if (1 != qmn_quiz_data[quiz_id].disable_mathjax) { 913 MathJax.typesetPromise(); 914 } 915 jQuery(document).trigger('qsm_after_quiz_submit_load_chart'); 916 jQuery(document).trigger('qsm_after_quiz_submit', [quiz_form_id]); 917 } 918 }, 919 error: function (errorThrown) { 920 let response = { display: errorThrown.responseText + "<br/> Error:" + errorThrown.statusText}; 921 qmnDisplayResults(response, quiz_form_id, $container, quiz_id); 922 console.log(errorThrown); 923 } 924 }); 925 926 return false;
927} 928 929jQuery(document).on('qsm_after_quiz_submit', function(e, quiz_form_id) { 930 let quiz_id = quiz_form_id.replace("quizForm", ""); 931 if( localStorage.getItem('mlw_quiz_start_date' + quiz_id) ) { 932 localStorage.removeItem('mlw_quiz_start_date' + quiz_id); 933 } 934}) 935 936function qsmDisplayLoading($container, quiz_id) { 937 jQuery(document).trigger('qsm_before_loader_init', [$container,quiz_id]); 938 var loader_html = '<div class="qsm_quiz_processing_box">'; 939 loader_html += '<div class="qsm-spinner-loader qsm_quiz_processing_loader"></div>'; 940 if (qmn_quiz_data[quiz_id].hasOwnProperty('quiz_processing_message') && qmn_quiz_data[quiz_id].quiz_processing_message != '') { 941 loader_html += '<div class="qsm_quiz_processing_message">' + qmn_quiz_data[quiz_id].quiz_processing_message + '</div>'; 942 } 943 loader_html += '</div>'; 944 $container.empty(); 945 $container.append(loader_html); 946 if (qmn_quiz_data[quiz_id].hasOwnProperty('disable_scroll_next_previous_click') && qmn_quiz_data[quiz_id].disable_scroll_next_previous_click != 1) { 947 qsmScrollTo($container); 948 } 949 jQuery(document).trigger('qsm_after_loader_init', [$container,quiz_id]); 950} 951 952function qmnDisplayResults(results, quiz_form_id, $container, quiz_id) { 953 $container.empty(); 954 jQuery(document).trigger('qsm_before_display_result', [results, quiz_form_id, $container]); 955 if (results.redirect) { 956 window.location.replace(results.redirect); 957 } else { 958 $container.append('<div class="qmn_results_page"></div>'); 959 $container.find('.qmn_results_page').html(results.display); 960 if (qmn_quiz_data[quiz_id].hasOwnProperty('disable_scroll_next_previous_click') && qmn_quiz_data[quiz_id].disable_scroll_next_previous_click != 1) { 961 qsmScrollTo($container); 962 } 963 // Fires after result is populates via ajax 964 jQuery(document).trigger('qsm_after_display_result', [results, quiz_form_id, $container]); 965 } 966} 967
968function qmnInit() { 969 if (typeof qmn_quiz_data != 'undefined' && qmn_quiz_data) { 970 _.each(qmn_quiz_data, function (quiz) { 971 let key = parseInt(quiz.quiz_id); 972 if (qmn_quiz_data[key].ajax_show_correct === '1') { 973 jQuery('.qmn-multiple-choice-input, .qsm_dropdown, .qsm-multiple-response-input').change(function () { 974 let $this = jQuery(this); 975 let value = $this.val(); 976 let quiz_form_id = $this.parents('.qsm-quiz-form').attr('id'); 977 let quiz_id = quiz_form_id.replace('quizForm', ''); 978 let question_id = $this.attr('name').replace(/question/i, ''); 979 let data = qsm_question_quick_result_js(question_id, value, '', qmn_quiz_data[quiz_id].enable_quick_correct_answer_info,quiz_id); 980 if (data.success == 'correct') { 981 $this.parent().addClass("qmn_correct_answer"); 982 } else if (data.success == 'incorrect') { 983 $this.parent().addClass("qmn_incorrect_answer"); 984 } 985 }); 986 } 987 988 if (qmn_quiz_data[key].disable_answer === '1') { 989 990 jQuery('#quizForm' + qmn_quiz_data[key].quiz_id + ' .qmn_quiz_radio').change(function () { 991 var radio_group = jQuery(this).attr('name'); 992 jQuery('input[type=radio][name=' + radio_group + ']').prop('disabled', true); 993 let radio_value = jQuery(this).val(); 994 let disableAnswer = {}; 995 if (localStorage.getItem("disable_answer")) { 996 disableAnswer = JSON.parse(localStorage.getItem("disable_answer")); 997 } 998 if (!disableAnswer[key]) { 999 disableAnswer[key] = []; 1000 } 1001 let disabledQuestions = disableAnswer[key].map(element => element[0]); 1002 if (!disabledQuestions.includes(radio_group)) { 1003 disableAnswer[key].push([radio_group, radio_value]); 1004 } 1005 localStorage.setItem("disable_answer", JSON.stringify(disableAnswer)); 1006 }); 1007 1008 if (localStorage.getItem("disable_answer")) { 1009 let disabledAnswer = JSON.parse(localStorage.getItem("disable_answer")); 1010 if (disabledAnswer[key]) { 1011 disabledAnswer[key].forEach(element => { 1012 let element1 = element[1].replaceAll(' ', '-'); 1013 jQuery('#' + element[0] + '-' + element1 + ' input').prop('checked', true).trigger('change'); 1014 }); 1015 } 1016 } 1017 jQuery(document).on('qsm_after_quiz_submit', function (event, quiz_form_id) { 1018 event.preventDefault(); 1019 if (localStorage.getItem("disable_answer")) { 1020 let disabledAnswer2 = JSON.parse(localStorage.getItem("disable_answer")); 1021 if (disabledAnswer2[key]) { 1022 delete disabledAnswer2[key]; 1023 localStorage.setItem("disable_answer", JSON.stringify(disabledAnswer2)); 1024 } 1025 } 1026 }); 1027 } 1028 1029 if (qmn_quiz_data[key].hasOwnProperty('pagination')) { 1030 qmnInitPagination(qmn_quiz_data[key].quiz_id); 1031 } 1032 }); 1033 } 1034} 1035 1036//Function to validate the answers provided in quiz 1037function qmnValidatePage(quiz_form_id) { 1038 var result = qmnValidation('#' + quiz_form_id + ' .quiz_section:visible *', quiz_form_id); 1039 return result; 1040} 1041 1042// Show start quiz button if first page is visible 1043function check_if_show_start_quiz_button(container, total_pages, page_number) { 1044 if(container.find('.quiz_begin').is(':visible')){ 1045 container.find(".mlw_custom_start").show(); 1046 container.find(".mlw_custom_next").hide(); 1047 }else{ 1048 container.find(".mlw_custom_start").hide(); 1049 if(total_pages != parseInt(page_number) + 2){ // check if not last page based on condition (1140) 1050 container.find(".mlw_custom_next").show(); 1051 if (jQuery('.quiz_end').is(':visible')) { 1052 container.find(".mlw_custom_next").hide(); 1053 } 1054 } 1055 } 1056} 1057 1058//Function to advance quiz to next page 1059function qmnNextSlide(pagination, go_to_top, quiz_form_id) { 1060 jQuery(document).trigger('qsm_next_button_click_before', [quiz_form_id]); 1061 var quiz_id = +jQuery(quiz_form_id).find('.qmn_quiz_id').val(); 1062 var $container = jQuery(quiz_form_id).closest('.qmn_quiz_container'); 1063 var slide_number = +$container.find('.slide_number_hidden').val(); 1064 var page_number = +$container.find('.current_page_hidden').val(); 1065 var section_totals = +$container.find('.total_sections_hidden').val(); 1066 if (pagination == 1) { 1067 section_totals = section_totals - 1; 1068 } 1069 var total_pages = $container.find('.total_pages_hidden').val(); 1070 1071 jQuery(quiz_form_id + " .qsm-auto-page-row").hide(); 1072 if (page_number >= total_pages) { 1073 alert('Next page not found.'); 1074 $container.find(".mlw_next").hide(); 1075 $container.find(".qsm-submit-btn").show(); 1076 jQuery(quiz_form_id + " .qsm-auto-page-row.quiz_end").show(); 1077 return true; 1078 } 1079 if (slide_number == 0 && page_number == 0) { 1080 jQuery(quiz_form_id + " .qsm-auto-page-row.quiz_begin").show(); 1081 $container.find(".mlw_previous").hide(); 1082 $container.find('.current_page_hidden').val('1'); 1083 } else if (total_pages == parseInt(page_number) + 1) { //Last page 1084 $container.find(".mlw_next").hide(); 1085 $container.find(".qsm-submit-btn").show(); 1086 jQuery(quiz_form_id + " .qsm-auto-page-row.quiz_end").show(); 1087 $container.find('.slide_number_hidden').val(parseInt(slide_number) + 1); 1088 $container.find('.current_page_hidden').val(parseInt(page_number) + 1); 1089 $container.find(".mlw_previous").show(); 1090 $container.find('.g-recaptcha').show(); 1091 } else if (slide_number >= 0 && page_number >= 1) { 1092 if (total_pages == parseInt(page_number) + 2) { // if last page empty 1093 if (jQuery(quiz_form_id + " .qsm-auto-page-row.empty_quiz_end").length) { 1094 jQuery(quiz_form_id + " .qsm-auto-page-row.empty_quiz_end").show(); 1095 $container.find(".qsm-submit-btn").show(); 1096 $container.find(".mlw_next").hide(); 1097 $container.find('.g-recaptcha').show(); 1098 } 1099 if (qmn_quiz_data[quiz_id].contact_info_location == 1) { 1100 $container.find(".qsm-submit-btn").hide(); 1101 $container.find(".mlw_next").show(); 1102 } 1103 } 1104 $container.find('.qsm-auto-page-row.qsm-apc-' + page_number).show(); 1105 $container.find('.slide_number_hidden').val(parseInt(slide_number) + 1); 1106 $container.find('.current_page_hidden').val(parseInt(page_number) + 1); 1107 $container.find(".mlw_previous").show(); 1108 } 1109 check_if_show_start_quiz_button($container, total_pages, page_number);
1110 if (jQuery(quiz_form_id + " .quiz_section.quiz_end").is(':visible')) { 1111 var button_width = jQuery(quiz_form_id + ' .qsm-submit-btn').width(); 1112 var progress_width = jQuery(quiz_form_id).parent().find('.qmn_pagination').width(); 1113 jQuery(quiz_form_id).parent().find('.qmn_pagination').css('width', progress_width - button_width - 40); 1114 } else { 1115 jQuery(quiz_form_id).parent().find('.qmn_pagination').css('width', '100%'); 1116 } 1117 if (go_to_top == 1 && qmn_quiz_data[quiz_id].disable_scroll_next_previous_click != 1) { 1118 qsmScrollTo($container); 1119 } 1120 if (!qmn_quiz_data[quiz_id].hasOwnProperty('first_page') || !qmn_quiz_data[quiz_id].first_page) { 1121 if (slide_number == 0 && page_number == 0) { 1122 $container.find(".qsm-auto-page-row.quiz_begin").hide(); 1123 $container.find('.qsm-auto-page-row.qsm-apc-' + (parseInt(page_number) + 1)).show(); 1124 $container.find('.slide_number_hidden').val(parseInt(slide_number) + 1); 1125 $container.find('.current_page_hidden').val(parseInt(page_number) + 2); 1126 $container.find(".mlw_previous").hide(); 1127 } 1128 } 1129 //Show the page counts 1130 if (page_number > 0 && jQuery(quiz_form_id).closest('.qmn_quiz_container').find('.pages_count').length > 0) { 1131 var actual_pages = total_pages - 2; 1132 if (page_number <= actual_pages) { 1133 jQuery(quiz_form_id).closest('.qmn_quiz_container').find('.pages_count').text('').text(page_number + qmn_ajax_object.out_of_text + actual_pages); 1134 jQuery(quiz_form_id).closest('.qmn_quiz_container').find('.pages_count').show(); 1135 } else { 1136 jQuery(quiz_form_id).closest('.qmn_quiz_container').find('.pages_count').hide(); 1137 } 1138 } else { 1139 jQuery(quiz_form_id).closest('.qmn_quiz_container').find('.pages_count').hide(); 1140 } 1141 qmnInitProgressbarOnClick(quiz_id, page_number, total_pages); 1142 jQuery(document).trigger('qsm_auto_next_button_click_after', [quiz_form_id]); 1143} 1144 1145function qmnPrevSlide(pagination, go_to_top, quiz_form_id) { 1146 jQuery(document).trigger('qsm_previous_button_click_before', [quiz_form_id]); 1147 var quiz_id = +jQuery(quiz_form_id).find('.qmn_quiz_id').val(); 1148 var $container = jQuery(quiz_form_id).closest('.qmn_quiz_container'); 1149 var slide_number = +$container.find('.slide_number_hidden').val(); 1150 var previous = +$container.find('.previous_amount_hidden').val(); 1151 var section_totals = +$container.find('.total_sections_hidden').val(); 1152 var page_number = +$container.find('.current_page_hidden').val(); 1153 var total_pages = $container.find('.total_pages_hidden').val(); 1154 jQuery(quiz_form_id + " .qsm-auto-page-row").hide(); 1155 jQuery(quiz_form_id + " .g-recaptcha").hide(); 1156 var slide_original_val = parseInt(slide_number) - 1; 1157 if (slide_original_val == 0) { 1158 $container.find(".mlw_next").show(); 1159 $container.find(".qsm-submit-btn").hide(); 1160 jQuery(quiz_form_id + " .qsm-auto-page-row.quiz_begin").show(); 1161 $container.find('.slide_number_hidden').val(slide_original_val); 1162 $container.find('.current_page_hidden').val(parseInt(page_number) - 1); 1163 $container.find(".mlw_previous").hide(); 1164 } else { 1165 $container.find('.qsm-auto-page-row.qsm-apc-' + slide_original_val).show(); 1166 $container.find('.slide_number_hidden').val(slide_original_val); 1167 $container.find('.current_page_hidden').val(parseInt(page_number) - 1); 1168 $container.find(".mlw_next").show(); 1169 $container.find(".qsm-submit-btn").hide(); 1170 } 1171 check_if_show_start_quiz_button($container, total_pages, page_number); 1172 if (go_to_top == 1 && qmn_quiz_data[quiz_id].disable_scroll_next_previous_click != 1) { 1173 qsmScrollTo($container); 1174 } 1175 if (qmn_quiz_data[quiz_id].disable_first_page == 1) { 1176 if (page_number == 3) { 1177 $container.find(".qsm-auto-page-row.quiz_begin").hide(); 1178 $container.find(".mlw_previous").hide(); 1179 } 1180 } 1181 if (page_number > 0 && jQuery(quiz_form_id).closest('.qmn_quiz_container').find('.pages_count').length > 0) { 1182 var actual_pages = total_pages - 2; 1183 if (slide_original_val <= actual_pages) { 1184 jQuery(quiz_form_id).closest('.qmn_quiz_container').find('.pages_count').text('').text(slide_original_val + qmn_ajax_object.out_of_text + actual_pages); 1185 if (slide_original_val == 0) { 1186 jQuery(quiz_form_id).closest('.qmn_quiz_container').find('.pages_count').hide(); 1187 } else { 1188 jQuery(quiz_form_id).closest('.qmn_quiz_container').find('.pages_count').show(); 1189 } 1190 } else { 1191 jQuery(quiz_form_id).closest('.qmn_quiz_container').find('.pages_count').hide(); 1192 } 1193 } 1194 jQuery(quiz_form_id).parent().find('.qmn_pagination').css('width', '100%'); 1195 qmnInitProgressbarOnClick(quiz_id, slide_original_val, total_pages); 1196 jQuery(document).trigger('qsm_auto_previous_button_click_after', [quiz_form_id]); 1197} 1198 1199/** 1200 * @since 6.4.11 1201 * @param {int} quiz_id 1202 * @param {int} page_number 1203 * @param {int} total_page_number 1204 * @returns Change progress bar on next and previous button click 1205 */ 1206function qmnInitProgressbarOnClick(quiz_id, page_number, total_page_number) { 1207 if ('1' == qmn_quiz_data[quiz_id].progress_bar) { 1208 if ( ( !qmn_quiz_data[quiz_id].hasOwnProperty('first_page') || !qmn_quiz_data[quiz_id].first_page ) && 0 == page_number ) { 1209 page_number++; 1210 } 1211 var qmn_total_questions = qmn_quiz_data[quiz_id].pagination.total_questions; 1212 var pagination = qmn_quiz_data[quiz_id].pagination.amount;
1213 total_page_number = Math.ceil(qmn_total_questions / pagination); 1214 if (!jQuery('#quizForm' + quiz_id).closest('.qmn_quiz_container').find('.empty_quiz_end').length) { 1215 total_page_number = total_page_number + 1; //Increase for quiz end section 1216 } 1217 var animate_value = page_number / total_page_number; 1218 if (animate_value <= 1) { 1219 qmn_quiz_data[quiz_id].bar.animate(animate_value); 1220 var old_text = jQuery('#qsm_progress_bar_' + quiz_id).find('.progressbar-text').text().replace(' %', ''); 1221 var new_text = Math.round(animate_value * 100); 1222 jQuery({ 1223 Counter: old_text 1224 }).animate({ 1225 Counter: new_text 1226 }, { 1227 duration: 500, 1228 easing: 'swing', 1229 step: function () { 1230 jQuery('#qsm_progress_bar_' + quiz_id).find('.progressbar-text').text(Math.round(this.Counter) + ' %'); 1231 } 1232 }); 1233 } 1234 } 1235} 1236 1237function qmnUpdatePageNumber(amount, quiz_form_id) { 1238 var current_page = +jQuery(quiz_form_id).closest('.qmn_quiz_container').find('.current_page_hidden').val(); 1239 var total_pages = jQuery(quiz_form_id).closest('.qmn_quiz_container').find('.total_pages_hidden').val(); 1240 current_page += amount; 1241 //jQuery( quiz_form_id ).siblings( '.qmn_pagination' ).find( " .qmn_page_counter_message" ).text( current_page + "/" + total_pages ); 1242} 1243 1244function qmnInitPagination(quiz_id) { 1245 var qmn_section_total = +qmn_quiz_data[quiz_id].pagination.total_questions; 1246 var qmn_total_questions = jQuery('#quizForm' + quiz_id).find('#qmn_all_questions_count').val(); 1247 var qmn_total_pages = Math.ceil(qmn_total_questions / +qmn_quiz_data[quiz_id].pagination.amount); 1248 1249 qmn_total_pages = qmn_total_pages + 1; //quiz begin 1250 qmn_total_pages = qmn_total_pages + 1; //quiz end 1251 1252 1253 jQuery('#quizForm' + quiz_id).closest('.qmn_quiz_container').append('<div class="qmn_pagination border margin-bottom"></div>'); 1254 jQuery('#quizForm' + quiz_id).closest('.qmn_quiz_container').find('.qmn_pagination').append('<input type="hidden" value="0" name="slide_number" class="slide_number_hidden" />') 1255 .append('<input type="hidden" value="0" name="current_page" class="current_page_hidden" />') 1256 .append('<input type="hidden" value="' + qmn_total_pages + '" name="total_pages" class="total_pages_hidden" />') 1257 .append('<input type="hidden" value="' + qmn_section_total + '" name="total_sections" class="total_sections_hidden" />') 1258 .append('<input type="hidden" value="0" name="previous_amount" class="previous_amount_hidden" />') 1259 .append('<a class="qmn_btn mlw_qmn_quiz_link mlw_previous" href="javascript:void(0)">' + qmn_quiz_data[quiz_id].pagination.previous_text + '</a>') 1260 .append('<span class="qmn_page_message"></span>') 1261 .append('<div class="qmn_page_counter_message"></div>') 1262 .append('<div class="qsm-progress-bar" id="qsm_progress_bar_' + quiz_id + '" style="display:none;"><div class="progressbar-text"></div></div>') 1263 .append('<a class="qmn_btn mlw_qmn_quiz_link mlw_next mlw_custom_start" href="javascript:void(0)">' + qmn_quiz_data[quiz_id].pagination.start_quiz_survey_text + '</a>') 1264 .append('<input type="submit" value="' + qmn_quiz_data[quiz_id].pagination.submit_quiz_text + '" class="qsm-btn qsm-submit-btn qmn_btn" style="display:none;"/>') 1265 .append('<a class="qmn_btn mlw_qmn_quiz_link mlw_next mlw_custom_next" href="javascript:void(0)">' + qmn_quiz_data[quiz_id].pagination.next_text + '</a>'); 1266 1267 if ('1' == qmn_quiz_data[quiz_id].progress_bar) { 1268 jQuery(document).trigger('qsm_init_progressbar_before', [quiz_id, qmn_quiz_data]); 1269 jQuery('#quizForm' + quiz_id).closest('.qmn_quiz_container').find('.qsm-progress-bar').show(); 1270 qmn_quiz_data[quiz_id].bar = new ProgressBar.Line('#qsm_progress_bar_' + quiz_id, { 1271 strokeWidth: 2, 1272 easing: 'easeInOut', 1273 duration: 500, 1274 color: '#3498db', 1275 trailColor: '#eee', 1276 trailWidth: 1, 1277 svgStyle: { width: '100%', height: '100%' }, 1278 text: { 1279 style: { 1280 // color: '#999', 1281 position: 'absolute', 1282 padding: 0, 1283 margin: 0, 1284 top: 0, 1285 right: '10px', 1286 'font-size': '13px', 1287 'font-weight': 'bold', 1288 transform: null 1289 }, 1290 autoStyleContainer: false 1291 }, 1292 from: { color: '#3498db' }, 1293 to: { color: '#ED6A5A' }, 1294 step: function (state, bar) { 1295 } 1296 }); 1297 jQuery(document).trigger('qsm_init_progressbar_after', [quiz_id, qmn_quiz_data]); 1298 } 1299 1300 jQuery(document).on("click", ".qsm-quiz-container-" + quiz_id + " .mlw_next", function (event) { 1301 let quiz_id = +jQuery(this).closest('.qmn_quiz_container').find('.qmn_quiz_id').val(); 1302 jQuery(document).trigger('qsm_auto_next_button_click_before', [quiz_id]); 1303 event.preventDefault(); 1304 let $quizForm = QSM.getQuizForm(quiz_id); 1305 jQuery('.qsm-quiz-container-' + quiz_id + ' .mlw_custom_next').addClass('qsm-disabled-btn'); 1306 jQuery('.qsm-quiz-container-' + quiz_id + ' .mlw_custom_next').append('<div class="qsm-spinner-loader" style="font-size: 3.5px;margin-right: -5px;margin-left: 10px;"></div>'); 1307 1308 jQuery('.qsm-multiple-response-input:checked, .qmn-multiple-choice-input:checked , .qsm_select:visible').each(function () { 1309 if (qmn_quiz_data[quiz_id].end_quiz_if_wrong > 0 && jQuery(this).parents().is(':visible') && jQuery(this).is('input, select')) { 1310 if (jQuery(this).parents('.qmn_radio_answers, .qsm_check_answer')) { 1311 let question_id = jQuery(this).attr('name').split('question')[1], 1312 value = jQuery(this).val(), 1313 $this = jQuery(this).parents('.quiz_section'); 1314 if (value !== "") { 1315 qsm_submit_quiz_if_answer_wrong(question_id, value, $this, $quizForm); 1316 } 1317 } 1318 } 1319 }); 1320 1321 jQuery('.qsm-quiz-container-' + quiz_id + ' .mlw_custom_next').removeClass('qsm-disabled-btn'); 1322 jQuery('.qsm-quiz-container-' + quiz_id + ' .qsm-spinner-loader').remove(); 1323 if (qmnValidatePage('quizForm' + quiz_id)) { 1324 qmnNextSlide(qmn_quiz_data[quiz_id].pagination.amount, 1, '#quizForm' + quiz_id); 1325 } 1326 1327 jQuery(document).trigger('qsm_next_button_click_after', [quiz_id]); 1328 }); 1329 1330 jQuery(document).on("click", ".qsm-quiz-container-" + quiz_id + " .mlw_previous", function (event) { 1331 event.preventDefault(); 1332 var quiz_id = +jQuery(this).closest('.qmn_quiz_container').find('.qmn_quiz_id').val(); 1333 qmnPrevSlide(qmn_quiz_data[quiz_id].pagination.amount, 1, '#quizForm' + quiz_id); 1334 jQuery(document).trigger('qsm_previous_button_click_after', [quiz_id]); 1335 }); 1336 1337 if (qmn_quiz_data[quiz_id].first_page) { 1338 qmnNextSlide(1, 0, '#quizForm' + quiz_id); 1339 } else { 1340 qmnNextSlide(qmn_quiz_data[quiz_id].pagination.amount, 0, '#quizForm' + quiz_id); 1341 } 1342 1343 jQuery(document).trigger('qsm_init_pagination_after', [quiz_id, qmn_quiz_data]); 1344} 1345jQuery(document).on('qsm_next_button_click_after qsm_previous_button_click_after', function(event, quiz_id) { 1346 jQuery(document).trigger('qsm_before_iframe_section',[quiz_id]); 1347 let video_sections = jQuery('.qsm-quiz-container-' + quiz_id + '.qmn_quiz_container').find('video'); 1348 let iframeVideos = jQuery('.qsm-quiz-container-' + quiz_id + '.qmn_quiz_container .qsm
1348-page, .qsm-quiz-container-' + quiz_id + '.qmn_quiz_container .qsm-auto-page-row').find('iframe'); 1349 let audio_sections = jQuery('.qsm-quiz-container-' + quiz_id + '.qmn_quiz_container').find('audio'); 1350 iframeVideos.each(function() { 1351 let src = this.src; 1352 jQuery(this).attr('src', src); 1353 }); 1354 video_sections.each(function() { 1355 if (!this.paused) { 1356 this.pause(); 1357 } 1358 }); 1359 audio_sections.each(function() { 1360 if (!this.paused) { 1361 this.pause(); 1362 } 1363 }); 1364 jQuery(document).trigger('qsm_after_iframe_section',[quiz_id]); 1365}); 1366function qmnSocialShare(network, mlw_qmn_social_text, mlw_qmn_title, facebook_id, share_url) { 1367 var sTop = window.screen.height / 2 - (218); 1368 var sLeft = window.screen.width / 2 - (313); 1369 var sqShareOptions = "height=400,width=580,toolbar=0,status=0,location=0,menubar=0,directories=0,scrollbars=0,top=" + sTop + ",left=" + sLeft; 1370 var pageUrl = window.location.href; 1371 var pageUrlEncoded = encodeURIComponent(share_url); 1372 var url = ''; 1373 if (network == 'facebook') { 1374 url = "https://www.facebook.com/dialog/feed?" + "display=popup&" + "app_id=" + facebook_id + 1375 "&" + "link=" + pageUrlEncoded + "&" + "name=" + encodeURIComponent(mlw_qmn_social_text) + 1376 "&" + "description="; 1377 } 1378 if (network == 'twitter') { 1379 url = "https://twitter.com/intent/tweet?text=" + encodeURIComponent(mlw_qmn_social_text); 1380 } 1381 window.open(url, "Share", sqShareOptions); 1382 return false; 1383} 1384 1385function maxLengthCheck(object) { 1386 if (object.value.length > object.maxLength) { 1387 object.value = object.value.slice(0, object.maxLength) 1388 } 1389} 1390 1391jQuery(function () { 1392 jQuery('.qmn_quiz_container').tooltip({ 1393 position: { 1394 my: "center top+10", 1395 at: "center bottom", 1396 classes: { 1397 "ui-tooltip": "hint-qsm-tooltip" 1398 }, 1399 using: function( position, feedback ) { 1400 jQuery( this ).css( position ); 1401 jQuery( "<div>" ) 1402 .addClass( "qsm-tooltip-arrow" ) 1403 .addClass( feedback.vertical ) 1404 .addClass( feedback.horizontal ) 1405 .appendTo( this ); 1406 } 1407 } 1408 }); 1409 1410 jQuery('.qmn_quiz_container input').on('keypress', function (e) { 1411 if (e.which === 13) { 1412 e.preventDefault(); 1413 } 1414 }); 1415 1416 jQuery(document).on('click', ".qsm-submit-btn", function (event) { 1417 event.preventDefault(); 1418 let $this = jQuery(this); 1419 let quiz_id = +jQuery(this).closest('.qmn_quiz_container').find('.qmn_quiz_id').val(); 1420 let form_id = "quizForm"+quiz_id; 1421 jQuery(document).trigger('qsm_quiz_submit_trigger', [quiz_id]); 1422 let recaptcha = jQuery('#' + form_id).find("#qsm_grecaptcha_v3"); 1423 if (!recaptcha.length) { 1424 qmnFormSubmit(form_id, $this); 1425 return false; 1426 } 1427 1428 // Proceed reCaptcha v3 1429 let site_key = jQuery('#' + form_id).find("#qsm_grecaptcha_v3_sitekey").val(); 1430 let submit_action = jQuery('#' + form_id).find("#qsm_grecaptcha_v3_nonce").val(); 1431 grecaptcha.ready(function () { 1432 grecaptcha.execute(site_key, { action: submit_action }).then(function (token) { 1433 jQuery('#' + form_id).find("#qsm_grecaptcha_v3_response").val(token); 1434 qmnFormSubmit(form_id, $this); 1435 }); 1436 }); 1437 }); 1438 1439 jQuery(document).on('click', '.btn-reload-quiz', function (e) { 1440 e.preventDefault(); 1441 var quiz_id = jQuery(this).data('quiz_id'); 1442 var parent_div = jQuery(this).parents('.qsm-quiz-container'); 1443 qsmDisplayLoading(parent_div, quiz_id); 1444 jQuery.ajax({ 1445 type: 'POST', 1446 url: qmn_ajax_object.ajaxurl, 1447 data: { 1448 action: "qsm_get_quiz_to_reload", 1449 quiz_id: quiz_id, 1450 }, 1451 success: function (response) { 1452 parent_div.replaceWith(response); 1453 //Reload the timer and pagination 1454 qmnDoInit(); 1455 1456 if (1 != qmn_quiz_data[quiz_id].disable_mathjax) { 1457 MathJax.typesetPromise(); 1458 } 1459 1460 // trigger fired on successfull retake quiz 1461 jQuery(document).trigger('qsm_retake_quiz', [quiz_id]); 1462 }, 1463 error: function (errorThrown) { 1464 console.log('error'); 1465 } 1466 }); 1467 }); 1468 1469 jQuery(document).on('change', '.qmn-multiple-choice-input, .qsm_dropdown' , function (e) { 1470 let $i_this = jQuery(this); 1471 var quizID = jQuery(this).parents('.qsm-quiz-container').find('.qmn_quiz_id').val(); 1472 var $quizForm = QSM.getQuizForm(quizID); 1473 let value = jQuery(this).val(); 1474 let $this = jQuery(this).parents('.quiz_section'); 1475 let question_id = $i_this.attr('name').split('question')[1]; 1476 if (qmn_quiz_data[quizID].enable_quick_result_mc == 1) { 1477 qsm_show_inline_result(quizID, question_id, value, $this, 'radio', $i_this) 1478 } 1479 jQuery(document).trigger('qsm_after_select_answer', [quizID, question_id, value, $this, 'radio']); 1480 if (qmn_quiz_data[quizID].end_quiz_if_wrong > 0 && !jQuery(this).parents('.qsm-quiz-container').find('.mlw_next:visible').length ) { 1481 qsm_submit_quiz_if_answer_wrong(question_id, value, $this, $quizForm); 1482 } 1483 }); 1484 let qsm_inline_result_timer; 1485 jQuery(document).on('keyup', '.mlw_answer_open_text, .mlw_answer_number, .qmn_fill_blank ', function (e) { 1486 let $i_this = jQuery(this); 1487 let quizID = jQuery(this).parents('.qsm-quiz-container').find('.qmn_quiz_id').val(); 1488 let question_id = $i_this.attr('name').split('question')[1]; 1489 let value = $i_this.val();
1490 let $this = $i_this.parents('.quiz_section'); 1491 clearTimeout(qsm_inline_result_timer); 1492 qsm_inline_result_timer = setTimeout(() => { 1493 if (qmn_quiz_data[quizID].enable_quick_result_mc == 1) { 1494 qsm_show_inline_result(quizID, question_id, value, $this, 'input', $i_this, $this.find('.qmn_fill_blank').index($i_this)); 1495 } 1496 jQuery(document).trigger('qsm_after_select_answer', [quizID, question_id, value, $this, 'input', $this.find('.qmn_fill_blank').index($i_this)]); 1497 }, 2000); 1498 }); 1499 1500 //inline result status function 1501 1502 // Autocomplete off 1503 jQuery('.qsm-quiz-container').find('.qmn_quiz_id').each(function () { 1504 var quizID = jQuery(this).val(); 1505 if (qmn_quiz_data[quizID].form_disable_autofill == 1) { 1506 jQuery('#quizForm' + quizID).attr('autocomplete', 'off'); 1507 } 1508 }); 1509 1510 jQuery(document).on('change ', '.qsm-multiple-response-input', function (e) { 1511 let $i_this = jQuery(this); 1512 let quizID = jQuery(this).parents('.qsm-quiz-container').find('.qmn_quiz_id').val(); 1513 let $quizForm = QSM.getQuizForm(quizID); 1514 let question_id = jQuery(this).attr('name').split('question')[1], 1515 $this = jQuery(this).parents('.quiz_section'); 1516 let parent = jQuery(this).closest('.qmn_check_answers'); 1517 let checkedValues = parent.find('input[type="checkbox"]:checked').map(function() { 1518 return jQuery(this).val(); 1519 }).get(); 1520 if (qmn_quiz_data[quizID].end_quiz_if_wrong > 0 && !jQuery(this).parents('.qsm-quiz-container').find('.mlw_next:visible').length ) { 1521 qsm_submit_quiz_if_answer_wrong(question_id, checkedValues, $this, $quizForm, 'checkbox'); 1522 } 1523 if (qmn_quiz_data[quizID].enable_quick_result_mc == 1) { 1524 qsm_show_inline_result(quizID, question_id, checkedValues, $this, 'checkbox', $i_this) 1525 } 1526 jQuery(document).trigger('qsm_after_select_answer', [quizID, question_id, checkedValues, $this, 'checkbox']); 1527 }); 1528 1529 //Ajax upload file code 1530 jQuery('.quiz_section .mlw_answer_file_upload').on('change', function () { 1531 var $this = jQuery(this); 1532 var file_data = jQuery(this).prop('files')[0]; 1533 var form_data = new FormData(); 1534 form_data.append('file', file_data); 1535 form_data.append('action', 'qsm_upload_image_fd_question'); 1536 var question_id = $this.parent('.quiz_section').find('.mlw_file_upload_media_id').attr("name").replace('question', ''); 1537 form_data.append('question_id', question_id); 1538 $this.next('.loading-uploaded-file').show(); 1539 $this.parent('.quiz_section').find('.qsm-file-upload-status').removeClass('qsm-error qsm-success'); 1540 $this.parent('.quiz_section').find('.qsm-file-upload-status').addClass('qsm-processing'); 1541 $this.parent('.quiz_section').find('.qsm-file-upload-status').html('Uploading...').show(); 1542 $this.parent('.quiz_section').find('.qsm-file-upload-name').html(jQuery(this)[0].files[0].name).show(); 1543 jQuery(".qsm-submit-btn, .mlw_custom_next").attr('disabled', true); 1544 jQuery.ajax({ 1545 url: qmn_ajax_object.ajaxurl, 1546 type: 'POST', 1547 data: form_data, 1548 cache: false, 1549 contentType: false, 1550 processData: false, 1551 success: function (response) { 1552 var obj = jQuery.parseJSON(response); 1553 $this.next('.loading-uploaded-file').hide(); 1554 jQuery(".qsm-submit-btn, .mlw_custom_next").attr('disabled', false); 1555 if (obj.type == 'success') { 1556 $this.next().next().next('.remove-uploaded-file').show(); 1557 $this.parent('.quiz_section').find('.mlw_file_upload_hidden_nonce').val(obj.wp_nonoce); 1558 $this.parent('.quiz_section').find('.mlw_file_upload_hidden_path').val(obj.file_path); 1559 $this.parent('.quiz_section').find('.mlw_file_upload_media_id').val(obj.media_id); 1560 $this.parent('.quiz_section').find('.qsm-file-upload-status').hide(); 1561 $this.parent('.quiz_section').find('.qsm-file-upload-status').removeClass('qsm-processing qsm-error'); 1562 $this.parent('.quiz_section').find('.qsm-file-upload-status').addClass('qsm-success').text(obj.message); 1563 $this.parent('.quiz_section').find('.qsm-file-upload-status').show(); 1564 } else { 1565 $this.parent('.quiz_section').find('.qsm-file-upload-status').removeClass('qsm-processing qsm-success'); 1566 $this.parent('.quiz_section').find('.qsm-file-upload-status').addClass('qsm-error').text('').text(obj.message); 1567 $this.parent('.quiz_section').find('.qsm-file-upload-status').show(); 1568 $this.parent('.quiz_section').find('.mlw_answer_file_upload').val(''); 1569 } 1570 // triggers after file uploads 1571 jQuery(document).trigger('qsm_after_file_upload', [$this.parent(), obj]); 1572 } 1573 }); 1574 return false;
1575 }); 1576 1577 //Ajax remove file code 1578 jQuery(document).on('click ', '.quiz_section .remove-uploaded-file', function () { 1579 let $this = jQuery(this); 1580 let media_id = jQuery(this).parent('.quiz_section').find('.mlw_file_upload_media_id').val(); 1581 let nonce = jQuery(this).parent('.quiz_section').find('.mlw_file_upload_hidden_nonce').val(); 1582 let form_data = new FormData(); 1583 form_data.append('action', 'qsm_remove_file_fd_question'); 1584 form_data.append('media_id', media_id); 1585 form_data.append('nonce', nonce); 1586 $this.parent('.quiz_section').find('.qsm-file-upload-status').removeClass('qsm-processing qsm-success'); 1587 $this.parent('.quiz_section').find('.qsm-file-upload-status').addClass('qsm-error'); 1588 $this.parent('.quiz_section').find('.qsm-file-upload-status').html('Removing...').show(); 1589 $this.parent('.quiz_section').find('.qsm-file-upload-name').html('').show(); 1590 jQuery.ajax({ 1591 url: qmn_ajax_object.ajaxurl, 1592 type: 'POST', 1593 data: form_data, 1594 cache: false, 1595 contentType: false, 1596 processData: false, 1597 success: function (response) { 1598 let obj = jQuery.parseJSON(response); 1599 if (obj.type == 'success') { 1600 $this.hide(); 1601 $this.parent('.quiz_section').find('.mlw_file_upload_hidden_path').val(''); 1602 $this.parent('.quiz_section').find('.mlw_file_upload_hidden_nonce').val(''); 1603 $this.parent('.quiz_section').find('.mlw_file_upload_media_id').val(''); 1604 $this.parent('.quiz_section').find('.mlw_answer_file_upload').val(''); 1605 $this.parent('.quiz_section').find('.qsm-file-upload-status').text(obj.message); 1606 } else { 1607 $this.parent('.quiz_section').find('.qsm-file-upload-status').text('').text(obj.message); 1608 $this.parent('.quiz_section').find('.qsm-file-upload-status').show(); 1609 } 1610 } 1611 }); 1612 return false; 1613 }); 1614 jQuery('.quiz_section .qsm-file-upload-container').on('click', function (e) { 1615 e.preventDefault(); 1616 jQuery(this).prev('.mlw_answer_file_upload').trigger('click'); 1617 }); 1618 jQuery('.quiz_section .qsm-file-upload-container').on( 1619 'dragover', 1620 function (e) { 1621 e.preventDefault(); 1622 e.stopPropagation(); 1623 jQuery(this).addClass('file-hover'); 1624 } 1625 ) 1626 jQuery('.quiz_section .qsm-file-upload-container').on( 1627 'dragenter', 1628 function (e) { 1629 e.preventDefault(); 1630 e.stopPropagation(); 1631 } 1632 ) 1633 jQuery('.quiz_section .qsm-file-upload-container').on( 1634 'dragleave', 1635 function (e) { 1636 e.preventDefault(); 1637 e.stopPropagation(); 1638 jQuery(this).removeClass('file-hover'); 1639 } 1640 ) 1641 jQuery('.quiz_section .qsm-file-upload-container').on( 1642 'drop', 1643 function (e) { 1644 jQuery(this).removeClass('file-hover'); 1645 jQuery(this).find('.qsm-file-upload-name').html(e.originalEvent.dataTransfer.files[0].name).fadeIn(); 1646 if (e.originalEvent.dataTransfer) { 1647 if (e.originalEvent.dataTransfer.files.length) { 1648 e.preventDefault(); 1649 e.stopPropagation(); 1650 jQuery(this).prev('.mlw_answer_file_upload').prop('files', e.originalEvent.dataTransfer.files); 1651 jQuery(this).prev('.mlw_answer_file_upload').trigger('change'); 1652 } 1653 } 1654 } 1655 ); 1656 jQuery('.quiz_section .qsm-file-upload-container').on('mouseleave', function () { 1657 jQuery(this).removeClass('file-hover'); 1658 }); 1659 //Deselect all answer on select 1660 jQuery('.qsm-deselect-answer').click(function (e) { 1661 e.preventDefault(); 1662 jQuery(this).parents('.quiz_section').find('input[type="radio"]').prop('checked', false); 1663 jQuery(this).parents('.quiz_section').find('input[type="radio"]:hidden').prop('checked', true); 1664 }); 1665 1666 //Submit the form on popup click 1667 jQuery(document).on('click', '.submit-the-form', function (e) { 1668 e.preventDefault(); 1669 // Triggger the click event on the quiz form's submit button. 1670 jQuery('.qsm-submit-btn').trigger('click'); 1671 jQuery('#modal-3').removeClass('is-open'); 1672 }); 1673 1674 jQuery('.pagetime-goto-nextpage').click(function (e) { 1675 e.preventDefault(); 1676 var quiz_id = jQuery(this).data('quiz_id'); 1677 var $container = jQuery('#quizForm' + quiz_id).closest('.qmn_quiz_container'); 1678 if(!$container.find('.qsm-submit-btn').is(':visible')) { 1679 QSM.nextPage(quiz_id); 1680 qsmScrollTo($container); 1681 }else{ 1682 $container.find(".mlw_custom_next").hide(); 1683 } 1684 }); 1685 1686 jQuery(document).on('keyup', '.mlwPhoneNumber', function (e) { 1687 this.value = this.value.replace(/[^- +()0-9\.]/g, ''); 1688 }); 1689 1690 jQuery(document).on('click', '.qsm_social_share_link', function (e) { 1691 e.preventDefault(); 1692 var network = jQuery(this).attr('data-network'); 1693 var share_url = jQuery(this).attr('data-link'); 1694 var social_text = jQuery(this).attr('data-text'); 1695 var social_id = jQuery(this).attr('data-id'); 1696 var url = ''; 1697 if (network == 'facebook') { 1698 url = "https://www.facebook.com/dialog/feed?" + "display=popup&" + "app_id=" + social_id + 1699 "&" + "link=" + encodeURIComponent(share_url) + "&" + "name=" + social_text; 1700 } 1701 if (network == 'twitter') { 1702 url = "https://twitter.com/intent/tweet?text=" + social_text; 1703 } 1704 var sTop = window.screen.height / 2 - (218); 1705 var sLeft = window.screen.width / 2 - (313); 1706 var sqShareOptions = "height=400,width=580,toolbar=0,status=0,location=0,menubar=0,directories=0,scrollbars=0,top=" + sTop + ",left=" + sLeft; 1707 window.open(url, "Share", sqShareOptions); 1708 return false;
1709 }); 1710}); 1711 1712const videoAttributePatterns = [ 1713 /\ssrc="([^"]+)"/, 1714 /\smp4="([^"]+)"/, 1715 /\sm4v="([^"]+)"/, 1716 /\swebm="([^"]+)"/, 1717 /\sogv="([^"]+)"/, 1718 /\swmv="([^"]+)"/, 1719 /\sflv="([^"]+)"/, 1720 /\swidth="(\d+)"/, 1721 /\sheight="(\d+)"/ 1722]; 1723 1724function parseAttributes(match, src, width, height) { 1725 let videoAttrs = { src: '', width: '', height: '' }; 1726 1727 videoAttributePatterns.forEach(pattern => { 1728 const attrMatch = match.match(pattern); 1729 if (attrMatch) { 1730 const value = attrMatch[1] || ''; 1731 if (pattern.toString().includes('width')) { 1732 videoAttrs.width = value; 1733 } else if (pattern.toString().includes('height')) { 1734 videoAttrs.height = value; 1735 } else { 1736 videoAttrs.src = value; 1737 } 1738 } 1739 }); 1740 1741 return videoAttrs; 1742} 1743 1744function generateVideoTag(src, width, height, content) { 1745 return `<video src="${src}" width="${width}" height="${height}" controls>${content}</video>`; 1746} 1747 1748function qsm_check_shortcode(message = null) { 1749 const videoContentRegex = /\[video(?:\s(?:src|mp4|m4v|webm|ogv|wmv|flv|width|height)="[^"]*")*\](.*?)\[\/video\]/g; 1750 let videoMatch = message.match(videoContentRegex); 1751 1752 if (videoMatch) { 1753 let videoHTML = message.replace(videoContentRegex, function(match, content) { 1754 const { src, width, height } = parseAttributes(match); 1755 const videoTag = generateVideoTag(src, width, height, content); 1756 return `<div class="video-content">${videoTag}</div>`; 1757 }); 1758 return videoHTML; 1759 } 1760 1761 // Check if message contains an image shortcode 1762 let imageRegex = /\[img(?:(?:\ssrc="([^"]+)")|(?:\salt="([^"]+)")|(?:\swidth="(\d+)")|(?:\sheight="(\d+)")){0,4}\s*\]/g; 1763 let imageMatch = message.match(imageRegex); 1764 1765 if (imageMatch) { 1766 let imageHTML = message.replace(imageRegex, function(match, src, alt, width, height) { 1767 return '<img src="' + (src || '') + '" alt="' + (alt || '') + '" width="' + (width || '') + '" height="' + (height || '') + '">'; 1768 }); 1769 return '<div class="image-content">' + imageHTML + '</div>'; 1770 } 1771 1772 return message; 1773} 1774 1775function qsm_show_inline_result(quizID, question_id, value, $this, answer_type, $i_this, index = null) { 1776 jQuery('.qsm-spinner-loader').remove(); 1777 addSpinnerLoader($this,$i_this); 1778 let data = qsm_question_quick_result_js(question_id, value, answer_type, qmn_quiz_data[quizID].enable_quick_correct_answer_info,quizID); 1779 $this.find('.quick-question-res-p, .qsm-inline-correct-info').remove(); 1780 $this.find('.qmn_radio_answers').children().removeClass('data-correct-answer'); 1781 if ( 0 < value.length && data.success == 'correct') { 1782 $this.append('<div style="color: green" class="quick-question-res-p qsm-correct-answer-info">' + qmn_quiz_data[quizID].quick_result_correct_answer_text + '</div>') 1783 $this.append('<div class="qsm-inline-correct-info">' + qsm_check_shortcode(data.message) + '</div>'); 1784 } else if ( 0 < value.length && data.success == 'incorrect') { 1785 $this.find('.qmn_radio_answers').children().eq(parseInt(data.correct_index)).addClass('data-correct-answer'); 1786 $this.append('<div style="color: red" class="quick-question-res-p qsm-incorrect-answer-info">' + qmn_quiz_data[quizID].quick_result_wrong_answer_text + '</div>') 1787 $this.append('<div class="qsm-inline-correct-info">' + qsm_check_shortcode(data.message) + '</div>'); 1788 } 1789 if (1 != qmn_quiz_data[quizID].disable_mathjax) { 1790 MathJax.typesetPromise(); 1791 } 1792 jQuery('.qsm-spinner-loader').remove(); 1793} 1794function addSpinnerLoader($this,$i_this) { 1795 if ($this.find('.mlw_answer_open_text').length) { 1796 $this.find('.mlw_answer_open_text').after('<div class="qsm-spinner-loader" style="font-size: 2.5px;margin-left:10px;"></div>'); 1797 } else if ($this.find('.mlw_answer_number').length) { 1798 $this.find('.mlw_answer_number').after('<div class="qsm-spinner-loader" style="font-size: 2.5px;margin-left:10px;"></div>'); 1799 } else { 1800 $i_this.next('.qsm-input-label').after('<div class="qsm-spinner-loader" style="font-size: 2.5px;"></div>'); 1801 } 1802 } 1803 1804// captcha question type 1805var mlw_code; 1806jQuery(document).ready(function () { 1807 let captchaElement = jQuery('#mlw_code_captcha'); 1808 if (captchaElement.length !== 0) { 1809 mlw_code = ''; 1810 var mlw_chars = '0123456789ABCDEFGHIJKL!@#$%^&*()MNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'; 1811 var mlw_code_length = 5; 1812 for (var i = 0; i < mlw_code_length; i++) { 1813 var rnum = Math.floor(Math.random() * mlw_chars.length); 1814 mlw_code += mlw_chars.substring(rnum, rnum + 1); 1815 } 1816 var mlw_captchaCTX = document.getElementById('mlw_captcha').getContext('2d'); 1817 mlw_captchaCTX.font = 'normal 24px Verdana'; 1818 mlw_captchaCTX.strokeStyle = '#000000'; 1819 mlw_captchaCTX.clearRect(0, 0, 100, 50); 1820 mlw_captchaCTX.strokeText(mlw_code, 10, 30, 70); 1821 mlw_captchaCTX.textBaseline = 'middle'; 1822 document.getElementById('mlw_code_captcha').value = mlw_code; 1823 } 1824}); 1825 1826var quizType = 'default'; 1827 1828//check max lengh 1829function checkMaxLength(obj){ 1830 var value = obj.value; 1831 var maxlength = obj.maxLength; 1832 if (value.length > parseInt(maxlength)) { 1833 obj.value = value.slice(0, parseInt(maxlength)); 1834 } 1835} 1836let submit_status = true; 1837function qsm_submit_quiz_if_answer_wrong(question_id, value, $this, $quizForm, answer_type = '') { 1838 let quiz_id = $quizForm.closest('.qmn_quiz_container').find('.qmn_quiz_id').val(); 1839 let data = qsm_question_quick_result_js(question_id, value, answer_type, qmn_quiz_data[quiz_id].enable_quick_correct_answer_info,quiz_id); 1840 QSM.changes(data, question_id.replace(/\D/g, ""), quiz_id); 1841 if (data.success == 'incorrect' && submit_status) { 1842 $quizForm.closest('.qmn_quiz_container').find('[class*="Required"]').removeClass(); 1843 $quizForm.closest('.qmn_quiz_container').find('.qsm-submit-btn').trigger('click'); 1844 } 1845 if (1 != qmn_quiz_data[quiz_id].disable_mathjax) { 1846 MathJax.typesetPromise(); 1847 } 1848} 1849 1850function qsm_question_quick_result_js(question_id, answer, answer_type = '', show_correct_info = '',quiz_id='') { 1851 if (typeof encryptedData[quiz_id] !== 'undefined') { 1852 let decryptedBytes = CryptoJS.AES.decrypt(encryptedData[quiz_id], encryptionKey[quiz_id]); 1853 let decryptedData = decryptedBytes.toString(CryptoJS.enc.Utf8); 1854 let decrypt = JSON.parse(decryptedData); 1855 question_id = typeof question_id !== 'undefined' ? parseInt(question_id) : 0; 1856 answer = typeof answer !== 'undefined' ? answer : ''; 1857 answer_type = typeof answer_type !== 'undefined' ? answer_type : ''; 1858 let answer_array = decrypt[question_id].answer_array; 1859 let settings = decrypt[question_id].settings;
1860 let correct_info_text = decrypt[question_id].correct_info_text; 1861 let correct_answer_logic = decrypt.correct_answer_logic; 1862 show_correct_info = typeof show_correct_info !== 'undefined' && show_correct_info != 0 ? show_correct_info : ''; 1863 let got_ans = false; 1864 let correct_answer = false; 1865 let count = 0; 1866 var index = typeof index !== 'undefined' ? index : 0; 1867 let correct_index = 0; 1868 let answer_count = 0; 1869 let total_correct_answer = 0; 1870 if (answer_array && false === got_ans) { 1871 for ( let key in answer_array) { 1872 let value = answer_array[key]; 1873 1874 if ('input' === answer_type) { 1875 if (!settings['case_sensitive']) { 1876 answer = answer.toUpperCase(); 1877 value[0] = value[0].toUpperCase(); 1878 } 1879 1880 if (answer == value[0] && (1 === parseInt(value[2]) || 14 === parseInt(decrypt[question_id].question_type_new)) && (!settings['matchAnswer'] || 'random' === settings['matchAnswer'] || key == ans_index)) { 1881 got_ans = true; 1882 correct_answer = true; 1883 break; 1884 } 1885 } else if ('checkbox' === answer_type) { 1886 if (0 == correct_answer_logic) { 1887 for (let anskey in answer) { 1888 let ansvalue = answer[anskey]; 1889 if (parseInt(ansvalue) === parseInt(key) && 1 == value[2]) { 1890 got_ans = true; 1891 correct_answer = true; 1892 break; 1893 } 1894 } 1895 } else { 1896 1897 if (answer_array[answer[key]] !== undefined) { 1898 if (1 == answer_array[answer[key]][2]) { 1899 answer_count++; 1900 } else if (answer[key] !== undefined) { 1901 answer_count--; 1902 } 1903 } 1904 if (1 == value[2]) { 1905 total_correct_answer++; 1906 } 1907 } 1908 } else if (parseInt(answer) === parseInt(key) && 1 === parseInt(value[2])) { 1909 got_ans = true; 1910 correct_answer = true; 1911 break; 1912 } 1913 } 1914 1915 for (let key in answer_array) { 1916 let value = answer_array[key]; 1917 if (false == correct_answer) { 1918 if (1 == value[2]) { 1919 correct_index = count; 1920 } 1921 count++; 1922 } 1923 } 1924 1925 if ('checkbox' === answer_type) { 1926 if (1 == correct_answer_logic) { 1927 if (0 != answer_count && 0 != total_correct_answer && total_correct_answer == answer_count) { 1928 got_ans = true; 1929 correct_answer = true; 1930 } 1931 } 1932 } 1933 } 1934 1935 if (2 == show_correct_info) { 1936 got_ans = true; 1937 } 1938 1939 let returnObject = { 1940 "correct_index": correct_index, 1941 "success": correct_answer ? 'correct' : 'incorrect', 1942 "message": show_correct_info && got_ans ? correct_info_text : "" 1943 }; 1944 1945 jQuery(document).trigger('qsm_question_quick_result_js_after', [returnObject, correct_answer, answer, answer_array, answer_type, settings, decrypt, question_id]); 1946 return returnObject; 1947 } 1948} 1949 1950jQuery(document).on( 'click', '.qsm-quiz-container', function() { 1951 jQuery('.qsm-quiz-container').removeClass('qsm-recently-active'); 1952 jQuery(this).addClass('qsm-recently-active'); 1953}); 1954if (jQuery('.qsm-quiz-container').length > 0) { 1955 jQuery('body .qsm-quiz-container:first').addClass('qsm-recently-active'); 1956} 1957 1958jQuery(document).keydown(function(event) { 1959 if (jQuery('.qsm-quiz-container.qsm-recently-active').length) { 1960 jQuery(document).trigger('qsm_keyboard_quiz_action_start', event); 1961 1962 if ([39, 37, 13, 9].includes(event.keyCode)) { 1963 event.preventDefault(); 1964 } 1965 if (event.keyCode === 39) { 1966 jQuery('.qsm-quiz-container.qsm-recently-active').find('.mlw_next:visible').click(); 1967 } 1968 if (event.keyCode === 37) { 1969 jQuery('.qsm-quiz-container.qsm-recently-active').find('.mlw_previous:visible').click(); 1970 } 1971 if (event.keyCode === 13 && jQuery('textarea:focus').length === 0) { 1972 jQuery('.qsm-quiz-container.qsm-recently-active').find('.qsm-submit-btn:visible').click(); 1973 jQuery('.qsm-quiz-container.qsm-recently-active').find('.mlw_next:visible').click(); 1974 } 1975 if (event.keyCode === 40 && jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question:visible .qmn_radio_answers:not(.qsm_multiple_grid_answers)').length) { 1976 event.preventDefault(); 1977 let checkedInputs = jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question .qmn_radio_answers .qmn_mc_answer_wrap input:checked, .qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question .qmn_radio_answers .mlw_horizontal_choice input:checked'); 1978 if (checkedInputs.length === 0) { 1979 jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question .qmn_radio_answers').find('input
1979:first').click(); 1980 } else { 1981 let nextInput = checkedInputs.closest('.qmn_mc_answer_wrap, .mlw_horizontal_choice').next('.qmn_mc_answer_wrap, .mlw_horizontal_choice').find('input[type="radio"]'); 1982 if (nextInput.length) { 1983 nextInput.click(); 1984 } else { 1985 jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question .qmn_radio_answers').find('input:first').click(); 1986 } 1987 } 1988 } 1989 if (event.keyCode === 38 && jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question:visible .qmn_radio_answers:not(.qsm_multiple_grid_answers)').length) { 1990 event.preventDefault(); 1991 let checkedInputs = jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question .qmn_radio_answers .qmn_mc_answer_wrap input:checked, .qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question .qmn_radio_answers .mlw_horizontal_choice input:checked'); 1992 if (checkedInputs.length === 0) { 1993 jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question .qmn_radio_answers').find('.qmn_mc_answer_wrap input:last, .mlw_horizontal_choice input:last').click(); 1994 } else { 1995 let prevInput = checkedInputs.closest('.qmn_mc_answer_wrap, .mlw_horizontal_choice').prev('.qmn_mc_answer_wrap, .mlw_horizontal_choice').find('input[type="radio"]'); 1996 if (prevInput.length) { 1997 prevInput.click(); 1998 } else { 1999 jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question .qmn_radio_answers').find('.qmn_mc_answer_wrap input:last, .mlw_horizontal_choice input:last').click(); 2000 } 2001 } 2002 } 2003 if (event.shiftKey && event.keyCode === 9) { 2004 let active_question = jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question'); 2005 if (active_question.length) { 2006 jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper').removeClass("qsm-active-question"); 2007 active_question.prev('.qsm-question-wrapper:visible').addClass("qsm-active-question"); 2008 } else { 2009 jQuery(".qsm-quiz-container.qsm-recently-active .qsm-question-wrapper:visible:first-child").addClass("qsm-active-question"); 2010 } 2011 } else if (event.keyCode === 9) { 2012 let active_question = jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question'); 2013 if (active_question.length) { 2014 jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper').removeClass("qsm-active-question"); 2015 active_question.next('.qsm-question-wrapper:visible').addClass("qsm-active-question"); 2016 } else { 2017 jQuery(".qsm-quiz-container.qsm-recently-active .qsm-question-wrapper:visible:first-child").addClass("qsm-active-question"); 2018 } 2019 } 2020 if (event.keyCode === 9) { 2021 let active_question = jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question'); 2022 if (active_question.length) { 2023 jQuery('.qsm-quiz-container.qsm-recently-active .qsm-question-wrapper.qsm-active-question input:first').focus(); 2024 } 2025 } 2026 jQuery(document).trigger('qsm_keyboard_quiz_action_end', event); 2027 } 2028}); 2029 2030
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.