1var QSMPageTimer; 2var QSMAdvanceTimerObject; 3jQuery(document).ready(function () { 4 if (typeof qmn_quiz_data == 'undefined' || !qmn_quiz_data) { 5 return; 6 } 7 _.each(qmn_quiz_data, function (quiz) { 8 let quiz_id = parseInt(quiz.quiz_id); 9 10 //sets the started time of quiz to localStorage 11 if (qmn_quiz_data[quiz_id].hasOwnProperty('advanced_timer') && qmn_quiz_data[quiz_id].advanced_timer.timer_continues_after_closing == 'yes' && localStorage.getItem("begins_at_quiz" + quiz_id) == null) { 12 localStorage.setItem("begins_at_quiz" + quiz_id, new Date().getTime()); 13 } 14 15 let current_page_status = localStorage.getItem("qsm_quiz_current_page_" + quiz_id); 16 17 if (qmn_quiz_data[quiz_id].hasOwnProperty('advanced_timer') && qmn_quiz_data[quiz_id].advanced_timer.timer_continues_after_closing == 'yes' && current_page_status) { 18 _.each(qmn_quiz_data[quiz_id].qpages, function (qpage) { 19 if (localStorage.getItem("qsm_quiz_current_page_started_at_" + quiz_id + "page_" + qpage.id) && qpage.pagetimer != 0) { 20 let started_time = localStorage.getItem("qsm_quiz_current_page_started_at_" + quiz_id + "page_" + qpage.id); 21 let timeDiff = Math.round((new Date().getTime() - started_time) / 1000); 22 let pageTime = qpage.pagetimer * 60; 23 let finalRemainingTime = pageTime - timeDiff; 24 if (undefined != pageTime && finalRemainingTime > 0) { 25 qpage.timerRemaning = finalRemainingTime; 26 } else { 27 qpage.timerRemaning = 1; 28 } 29 } 30 }) 31 } 32 33 if (localStorage.getItem("begins_at_quiz" + quiz_id) !== undefined && qmn_quiz_data[quiz_id].hasOwnProperty('advanced_timer') && qmn_quiz_data[quiz_id].advanced_timer.timer_continues_after_closing == 'yes') { 34 let quizBeginTime = parseInt(localStorage.getItem("begins_at_quiz" + quiz_id)); 35 let timeDifference = Math.round((new Date().getTime() - quizBeginTime) / 1000); 36 let quizTimeInSeconds = qmn_quiz_data[quiz_id].timer_limit * 60; 37 if (quizTimeInSeconds > timeDifference) { 38 localStorage.setItem("mlw_time_consumed_quiz" + quiz_id, timeDifference); 39 } else { 40 localStorage.setItem("mlw_time_consumed_quiz" + quiz_id, quizTimeInSeconds - 1); 41 } 42 } 43 }); 44 45 QSMAdvanceTimerObject = { 46 isNewRender: function (quiz_id) { 47 return ( 48 typeof qmn_quiz_data !== 'undefined' && 49 qmn_quiz_data && 50 qmn_quiz_data[quiz_id] && 51 qmn_quiz_data[quiz_id].hasOwnProperty('render_type') && 52 qmn_quiz_data[quiz_id].render_type == '11' 53 ); 54 } 55 } 56 57 QSMPageTimer = { 58 /** 59 * Init Page Timer 60 */ 61 initPageTimer: function (quizID, $currentpage) { 62 jQuery(document).trigger('qsm_init_page_timer_before', [quizID, $currentpage]); 63 var pid = $currentpage.data('pid'); 64 if (undefined != pid) { 65 /* A rendered page can carry a data-pid that has no matching entry in qpages 66 (pages/qpages out of sync), so never assume the page options exist. */ 67 var $qpages = qmn_quiz_data[quizID] ? qmn_quiz_data[quizID].qpages : undefined; 68 var $curr_page_opt = $qpages ? $qpages[pid] : undefined; 69 if ($curr_page_opt && (($curr_page_opt.hasOwnProperty('pagetimer') && 0 != $curr_page_opt.pagetimer) || ($curr_page_opt.hasOwnProperty('pagetimer_second') && 0 != $curr_page_opt.pagetimer_second))) { 70 var $timer_box = $currentpage.find('.qsm-pagetimer'); 71 var seconds = 0; 72 var timerStarted = localStorage.getItem('mlw_started_q' + quizID + '_page' + pid); 73 var timerStoped = localStorage.getItem('mlw_stoped_q' + quizID + '_page' + pid); 74 var timerRemaning = localStorage.getItem('mlw_time_q' + quizID + '_page' + pid); 75 if (timerStoped != 'undefined' && timerStoped > 0 && 'yes' != timerStarted) { 76 seconds = timerStoped; 77 } else if ('yes' == timerStarted) { 78 if (0 < timerRemaning) { 79 seconds = parseInt(timerRemaning); 80 } 81 } else { 82 seconds = parseFloat($curr_page_opt.pagetimer) * 60; 83 if ($curr_page_opt.hasOwnProperty('pagetimer_second') && "" != $curr_page_opt.pagetimer_second) { 84 seconds = seconds + parseInt($curr_page_opt.pagetimer_second); 85 } 86 } 87 if (qmn_quiz_data[quizID].hasOwnProperty('advanced_timer') && qmn_quiz_data[quizID].advanced_timer.timer_continues_after_closing == "yes" && qmn_quiz_data[quizID].qpages[pid].timerRemaning != undefined) { 88 } else { qmn_quiz_data[quizID].qpages[pid].timerRemaning = seconds; } 89 /* Makes the timer appear. */ 90 if (!qmn_quiz_data[quizID].hasOwnProperty('advanced_timer')) { 91 $timer_box.show(); 92 } 93 $timer_box.text(QSMPageTimer.secondsToTimer(seconds)); 94 /* Sets up timer interval. */ 95 qmn_quiz_data[quizID].qpages[pid].timerInterval = setInterval(function() { 96 QSMPageTimer.timer(quizID, pid, $timer_box); 97 }, 1000); 98 } 99 $currentpage.find('.page_intro_wrapper video').each(function () { 100 var $this = jQuery(this); 101 var src = $this.find('source').attr('src'); 102 $this.attr('src', src) 103 $this.load(); 104 $this.get(0).play(); 105 }); 106 } 107 jQuery(document).trigger('qsm_init_page_timer_after', [quizID, $currentpage]); 108 }, 109 /** 110 * Reduces the timer by one second and checks if timer is 0 111 * @param int quizID The ID of the quiz. 112 */ 113 timer: function (quizID, pid, $timer_box) { 114 var $page = qmn_quiz_data[quizID].qpages[pid]; 115 qmn_quiz_data[quizID].qpages[pid].timerRemaning -= 1; 116 if (0 > qmn_quiz_data[quizID].qpages[pid].timerRemaning) { 117 qmn_quiz_data[quizID].qpages[pid].timerRemaning = 0; 118 } 119 var total_seconds = parseFloat($page.pagetimer) * 60; 120 if ($page.hasOwnProperty('pagetimer_second') && "" != $page.pagetimer_second) { 121 if ($page.pagetimer == "" || $page.pagetimer == 0) { 122 var total_seconds = 0; 123 } 124 total_seconds = parseInt(total_seconds) + parseInt($page.pagetimer_second); 125 } 126 var secondsRemaining = qmn_quiz_data[quizID].qpages[pid].timerRemaning; 127 var display = QSMPageTimer.secondsToTimer(secondsRemaining); 128 $timer_box.text(display); 129 jQuery(document).trigger('qsm_change_timer', [quizID, secondsRemaining, $page.pagetimer, total_seconds]); 130 var pageTimeTaken = total_seconds - secondsRemaining; 131 jQuery('#pagetime_' + pid).val(pageTimeTaken); 132 /* Sets our local storage values for the timer being started and current timer value. */ 133 localStorage.setItem('mlw_started_q' + quizID + '_page' + pid, "yes"); 134 localStorage.setItem('mlw_time_q' + quizID + '_page' + pid, secondsRemaining); 135 jQuery(document).trigger('display_page_timer_warning', [$page, secondsRemaining, $timer_box]); 136 /* If timer is run out, disable fields. */ 137 if (0 >= secondsRemaining) { 138 clearInterval(qmn_quiz_data[quizID].qpages[pid].timerInterval); 139 140 jQuery(".qsm-page:visible input:radio").attr('disabled', true); 141 jQuery(".qsm-page:visible input:checkbox").attr('disabled', true); 142 jQuery(".qsm-page:visible select").attr('disabled', true); 143 jQuery(".qsm-page:visible .mlw_qmn_question_comment").attr('disabled', true); 144 jQuery(".qsm-page:visible .mlw_answer_open_text").attr('disabled', true); 145 jQuery(".qsm-page:visible .mlw_answer_number").attr('disabled', true); 146 147 QSMPageTimer.endPageTimer(quizID); 148 MicroModal.show('modal-page-1'); 149 return; 150 } 151 }, 152 /** 153 * Clears timer interval 154 * @param int quizID The ID of the quiz 155 */ 156 endPageTimer: function (quizID, clearStorage = false) { 157 jQuery.each(qmn_quiz_data[quizID].qpages, function (i, value) { 158 if ((value.hasOwnProperty('pagetimer') && 0 != value.pagetimer) || value.hasOwnProperty('pagetimer_second') && 0 != value.pagetimer_second) { 159 if (clearStorage) { 160 localStorage.removeItem('mlw_started_q' + quizID + '_page' + value.id); 161 localStorage.removeItem('mlw_stoped_q' + quizID + '_page' + value.id); 162 localStorage.removeItem('mlw_time_q' + quizID + '_page' + value.id); 163 } 164 var secondsRemaining = qmn_quiz_data[quizID].qpages[value.id].timerRemaning; 165 var timerStarted = localStorage.getItem('mlw_started_q' + quizID + '_page' + value.id); 166 var timerStoped = localStorage.getItem('mlw_stoped_q' + quizID + '_page' + value.id); 167 var timerRemaning = localStorage.getItem('mlw_time_q' + quizID + '_page' + value.id); 168 if (timerStoped != 'undefined' && timerStoped > 0) { 169 secondsRemaining = timerStoped; 170 } else if ('yes' == timerStarted) { 171 if (0 < timerRemaning) { 172 secondsRemaining = parseInt(timerRemaning); 173 } 174 } else { 175 secondsRemaining = parseFloat(qmn_quiz_data[quizID].qpages[value.id].pagetimer) * 60; 176 if (qmn_quiz_data[quizID].qpages[value.id].hasOwnProperty('pagetimer_second') && "" != qmn_quiz_data[quizID].qpages[value.id].pagetimer_second) { 177 secondsRemaining = secondsRemaining + parseInt(qmn_quiz_data[quizID].qpages[value.id].pagetimer_second); 178 } 179 } 180 localStorage.setItem('mlw_stoped_q' + quizID + '_page' + value.id, secondsRemaining); 181 if (typeof qmn_quiz_data[quizID].qpages[value.id].timerInterval != 'undefined') { 182 clearInterval(qmn_quiz_data[quizID].qpages[value.id].timerInterval); 183 } 184 } 185 }); 186 }, 187 /** 188 * Converts seconds to 00:00:00 format 189 * @param int seconds The number of seconds 190 * @return string A string in H:M:S format 191 */ 192 secondsToTimer: function (seconds) { 193 var formattedTime = ''; 194 seconds = parseInt(seconds); 195 var hours = Math.floor(seconds / 3600); 196 if (0 === hours) { 197 formattedTime = '00:'; 198 } else if (10 > hours) { 199 formattedTime = '0' + hours + ':'; 200 } else { 201 formattedTime = hours + ':'; 202 } 203 var minutes = Math.floor((seconds % 3600) / 60); 204 if (0 === minutes) { 205 formattedTime = formattedTime + '00:'; 206 } else if (10 > minutes) { 207 formattedTime = formattedTime + '0' + minutes + ':'; 208 } else { 209 formattedTime = formattedTime + minutes + ':'; 210 } 211 var remainder = Math.floor((seconds % 60)); 212 if (0 === remainder) { 213 formattedTime = formattedTime + '00'; 214 } else if (10 > remainder) { 215 formattedTime = formattedTime + '0' + remainder; 216 } else { 217 formattedTime = formattedTime + remainder; 218 } 219 return formattedTime; 220 }, 221 } 222 223 jQuery(document).on('end_page_timer_init_page_timer', function (event, quiz_id, $currentPage) { 224 QSMPageTimer.endPageTimer(quiz_id); 225 QSMPageTimer.initPageTimer(quiz_id, $currentPage); 226 }); 227 228 jQuery(document).on('start_stop_page_timer', function (event, quizID) { 229 if (qmn_quiz_data[quizID].hasOwnProperty('advanced_timer') && (qmn_quiz_data[quizID].advanced_timer.hasOwnProperty('show_stop_timer') && qmn_quiz_data[quizID].advanced_timer.hasOwnProperty('show_stop_timer') == 'yes')) { 230 QSMPageTimer.endPageTimer(quizID, true); 231 } 232 }); 233 234 jQuery(document).on('qsm_init_page_timer_after', function (event, quiz_id, $currentpage) { 235 236 var pageId = $currentpage.data('pid'); 237 const isNewRender = QSMAdvanceTimerObject.isNewRender(quiz_id); 238 if (isNewRender) { 239 var $quizForm = QSMPagination.Navigation.quizObjects[quiz_id].form; 240 } else { 241 var $quizForm = QSM.getQuizForm(quiz_id); 242 } 243 var $custom_timer = 0; 244 if ($quizForm.find('.linear-custom-timer').length) { 245 $custom_timer = $quizForm.find('.linear-custom-timer'); 246 } else if ($quizForm.find('.qsm-v-line-timer-top').length) { 247 $custom_timer = $quizForm.find('.qsm-v-line-timer-top'); 248 } else if ($quizForm.find('.box-timer-top').length) { 249 $custom_timer = $quizForm.find('.box-timer-top'); 250 } else if ($quizForm.find('.oval-timer-top').length) { 251 $custom_timer = $quizForm.find('.oval-timer-top'); 252 } else if ($quizForm.find('.half-circle-timer').length) { 253 $custom_timer = $quizForm.find('.half-circle-timer'); 254 } else if ($quizForm.find('.qsm-shade-circle-timer').length) { 255 $custom_timer = $quizForm.find('.qsm-shade-circle-timer'); 256 } else if ($quizForm.find('.circle-custom-timer').length) { 257 $custom_timer = $quizForm.find('.circle-custom-timer'); 258 } else if ($quizForm.find('.custom-mlw_qmn_timer').length) { 259 260 $custom_timer = $quizForm.find('.custom-mlw_qmn_timer'); 261 } 262 if ($custom_timer != 0) { 263 $custom_timer.hide(); 264 } 265 var $page_opt = (qmn_quiz_data[quiz_id] && qmn_quiz_data[quiz_id].qpages) ? qmn_quiz_data[quiz_id].qpages[pageId] : undefined; 266 if (qmn_quiz_data[quiz_id] && qmn_quiz_data[quiz_id].hasOwnProperty('advanced_timer') 267 && qmn_quiz_data[quiz_id].advanced_timer.timer_continues_after_closing == 'yes' 268 && undefined != pageId) { 269 localStorage.setItem("qsm_quiz_current_page_" + quiz_id, pageId); 270 if (localStorage.getItem("qsm_quiz_current_page_started_at_" + quiz_id + "page_" + pageId) == null 271 && $page_opt && $page_opt.pagetimer != null && qmn_quiz_data[quiz_id].advanced_timer.show_stop_timer == 'no') { 272 localStorage.setItem("qsm_quiz_current_page_started_at_" + quiz_id + "page_" + pageId, new Date().getTime()); 273 } 274 } 275 }); 276 277 jQuery(document).on('qsm_before_form_data_process', function (event, quiz_form_id, unindexed_array) { 278 let quiz_id = quiz_form_id.replace("quizForm", ""); 279 let timer_ms = new Date().getTime(); 280 let started_time = localStorage.getItem("begins_at_quiz" + quiz_id); 281 if (qmn_quiz_data[quiz_id] && qmn_quiz_data[quiz_id].hasOwnProperty('advanced_timer') && qmn_quiz_data[quiz_id].advanced_timer.timer_continues_after_closing == 'yes' && started_time) { 282 let time_taken = Math.round(Math.abs(started_time - timer_ms) / 1000); 283 _.each(unindexed_array, function (item) { 284 if (item.name == 'timer') { 285 item.value = time_taken; 286 } 287 }) 288 } 289 }) 290 291 //Unset the started time of quiz to localStorage after quiz submission 292 jQuery(document).on('qsm_after_quiz_submit', function (event, quiz_form_id) { 293 let quiz_id = quiz_form_id.replace("qu
293izForm", ""); 294 localStorage.removeItem("begins_at_quiz" + quiz_id); 295 localStorage.removeItem("qsm_quiz_current_page_" + quiz_id); 296 _.each(qmn_quiz_data[quiz_id].qpages, function (qpage) { 297 localStorage.removeItem("qsm_quiz_current_page_started_at_" + quiz_id + "page_" + qpage.id); 298 localStorage.removeItem('time_taken_' + quiz_id + '_page' + qpage.id); 299 localStorage.removeItem('mlw_started_q' + quiz_id + '_page' + qpage.id); 300 localStorage.removeItem('mlw_stoped_q' + quiz_id + '_page' + qpage.id); 301 localStorage.removeItem('mlw_time_q' + quiz_id + '_page' + qpage.id); 302 }) 303 }); 304 305 jQuery('.stoptimer').click(function (e) { 306 e.preventDefault(); 307 MicroModal.show('stop-timer-popup'); 308 var quiz_id = jQuery("#qmn_quiz_id").val(); 309 310 const isNewRender = QSMAdvanceTimerObject.isNewRender(quiz_id); 311 if (isNewRender) { 312 if (window.QSMPagination && window.QSMPagination.Timer) { 313 window.QSMPagination.Timer.endTimer(quiz_id); 314 clearInterval(QSMPagination.Timer.intervals[quiz_id]); 315 } 316 } else { 317 QSM.endTimer(quiz_id); 318 clearInterval(qsmTimerInterval[quiz_id]); 319 } 320 321 localStorage.setItem('mlw_time_consumed_quiz' + quiz_id, qmn_quiz_data[quiz_id].timerConsumed); 322 QSMPageTimer.endPageTimer(quiz_id); 323 }); 324 325 jQuery(document).on('qsm_before_quiz_submit', function (event, quiz_form_id) { 326 let quiz_id = quiz_form_id.replace("quizForm", ""); 327 if (qmn_quiz_data[quiz_id].hasOwnProperty('advanced_timer') && qmn_quiz_data[quiz_id].advanced_timer.hasOwnProperty('show_stop_timer')) { 328 QSMPageTimer.endPageTimer(quiz_id); 329 } 330 }); 331 332 //Submit the form on popup click 333 jQuery('.stop-timer-submit-the-form').click(function (e) { 334 e.preventDefault(); 335 var quiz_id = jQuery("#qmn_quiz_id").val(); 336 const isNewRender = QSMAdvanceTimerObject.isNewRender(quiz_id); 337 if (isNewRender) { 338 if (window.QSMPagination && window.QSMPagination.Timer) { 339 window.QSMPagination.Timer.endTimer(quiz_id); 340 clearInterval(QSMPagination.Timer.intervals[quiz_id]); 341 } 342 } else { 343 QSM.endTimer(quiz_id); 344 qsmEndTimeTakenTimer(quiz_id); 345 } 346 localStorage.removeItem('mlw_time_quiz' + quiz_id); 347 localStorage.setItem('mlw_time_consumed_quiz' + quiz_id, 1); 348 jQuery('#quizForm' + quiz_id).submit(); 349 jQuery('#stop-timer-popup').removeClass('is-open'); 350 }); 351 352 jQuery('.stop-timer-continue-the-quiz').click(function (e) { 353 e.preventDefault(); 354 var quizID = jQuery("#qmn_quiz_id").val(); 355 if (!isNaN(qmn_quiz_data[quizID].timerRemaning)) { 356 const isNewRender = QSMAdvanceTimerObject.isNewRender(quizID); 357 if (isNewRender) { 358 QSMPagination.Timer.start(quizID) 359 } else { 360 qmn_quiz_data[quizID].timerInterval = setInterval(QSM.timer, 1000, quizID); 361 qsmTimerInterval[quizID] = setInterval(function () { qmnTimeTakenTimer(quizID) }, 1000); 362 } 363 364 // --- Page Timer Logic --- 365 const $pageTimer = jQuery('.qsm-pagetimer:visible'); 366 367 if ($pageTimer.length) { 368 // detect APID based on render type 369 const $page = isNewRender ? jQuery('.qsm-page:visible') : jQuery('.qsm-question-page:visible'); 370 if ($page) { 371 QSMPageTimer.initPageTimer(quizID, $page); 372 } 373 } 374 } 375 jQuery('#stop-timer-popup').removeClass('is-open'); 376 advanceAutoPageTimerContinue(quizID); 377 }); 378 //Check stop timer div 379 if (jQuery('.stoptimer-p').length > 0) { 380 jQuery('.stoptimer-p').parents('.qsm-quiz-container').addClass('qsm-stop-timer-enabled'); 381 } 382 383 jQuery('.pagetime-goto-nextslide').click(function (e) { 384 e.preventDefault(); 385 var quiz_id = jQuery(this).data('quiz_id'); 386 const isNewRender = QSMAdvanceTimerObject.isNewRender(quiz_id); 387 if(isNewRender) { 388 var $pages = jQuery('.qsm-page'); 389 var $apid = jQuery('.qsm-page:visible').data('apid'); 390 }else { 391 var $apid = jQuery('.qsm-auto-page-row:visible').data('apid'); 392 var $pages = jQuery('.qsm-auto-page-row'); 393 } 394 var $container = jQuery('#quizForm' + quiz_id).closest('.qmn_quiz_container'); 395 var maxDataapid = 0; 396 $pages.each(function () { 397 var dataapid = jQuery(this).data('apid'); 398 if (maxDataapid < dataapid) { 399 maxDataapid = dataapid; 400 } 401 }); 402 if (!$container.find('.qsm-submit-btn').is(':visible')) { 403 if (maxDataapid != $apid) { 404 if (isNewRender) { 405 QSMPagination.Navigation.nextPage(quiz_id); 406 } else { 407 qmnNextSlide($apid + 1, 1, '#quizForm' + quiz_id); 408 } 409 advanceAutoPageTimerContinue(quiz_id); 410 } 411 } else { 412 $container.find(".mlw_custom_next").hide(); 413 } 414 }); 415 416 jQuery(document).on('load_timer_faces', function (event, quizID, secondsRemaining, total_seconds, display) { 417 var quizData = qmn_quiz_data[quizID]; 418 var advancedTimer = quizData ? quizData.advanced_timer : null; 419 const isNewRender = QSMAdvanceTimerObject.isNewRender(quizID); 420 if (isNewRender) { 421 var $quizObject = QSMPagination.Navigation.quizObjects[quizID]; 422 var $quizForm = $quizObject.form;; 423 424 if (qmn_quiz_data[quizID].advanced_timer.hasOwnProperty('show_both_timers') && qmn_quiz_data[quizID].advanced_timer.show_both_timers == "no") { 425 var currentPage = $quizObject.currentPage; 426 let $targetPage;
427 if(0 == jQuery('.quiz_begin').length) { 428 $targetPage = quizData.qpages[currentPage]; 429 } else { 430 $targetPage = quizData.qpages[currentPage - 1]; 431 } 432 433 if ($targetPage) { 434 let total_seconds = 0; 435 if ($targetPage.hasOwnProperty('pagetimer') && $targetPage.pagetimer) { 436 total_seconds = parseFloat($targetPage.pagetimer) * 60; 437 if ($targetPage.hasOwnProperty('pagetimer_second') && "" != $targetPage.pagetimer_second) { 438 if ($targetPage.pagetimer == "" || $targetPage.pagetimer == 0) { 439 total_seconds = 0; 440 } 441 total_seconds = parseInt(total_seconds) + parseInt($targetPage.pagetimer_second); 442 } 443 } 444 if(total_seconds > 0) { 445 clearInterval(QSMPagination.Timer.intervals[quizID]); 446 // Restore original title 447 document.title = QSMPagination.Timer.originalTitle; 448 } else { 449 450 } 451 } 452 } 453 } else { 454 var $quizForm = QSM.getQuizForm(quizID); 455 } 456 457 if (advancedTimer && advancedTimer.qsm_timer_count_upwards == 1) { 458 secondsRemaining = quizData.timerConsumed - 1; 459 } 460 if (advancedTimer && advancedTimer.show_stop_timer && advancedTimer.timer_design === 'big_timer') { 461 var $secondCircle = jQuery(".second.circle"); 462 $secondCircle.parent('.mlw_quiz_form').addClass('qsm_big_timer'); 463 $secondCircle.show(); 464 $secondCircle.find('strong').html(display); 465 var hiddenTimerValue = jQuery(".hiddentimer").html(); 466 var datashow = (hiddenTimerValue - secondsRemaining) / hiddenTimerValue; 467 $secondCircle.circleProgress({ 468 startAngle: 11, 469 value: datashow, 470 animation: false, 471 fill: { gradient: ["#00bb40", "#00511c"] } 472 }); 473 } else if ($quizForm.find('.linear-custom-timer').length) { 474 linearFormatTimeLeft(quizID, secondsRemaining, total_seconds); 475 } else if ($quizForm.find('.qsm-v-line-timer-top').length) { 476 vLineFormatTimeLeft(quizID, secondsRemaining, total_seconds); 477 } else if ($quizForm.find('.box-timer-top').length) { 478 boxFormatTimeLeft(quizID, secondsRemaining, total_seconds); 479 } else if ($quizForm.find('.oval-timer-top').length) { 480 ovalFormatTimeLeft(quizID, secondsRemaining, total_seconds); 481 } else if ($quizForm.find('.half-circle-timer').length) { 482 halfFormatTimeLeft(quizID, secondsRemaining, total_seconds); 483 } else if ($quizForm.find('.qsm-shade-circle-timer').length) { 484 shadeFormatTimeLeft(quizID, secondsRemaining, total_seconds); 485 } 486 }); 487 488 jQuery(document).on('display_page_timer_warning', function (event, $page, secondsRemaining, $timer_box) { 489 if (!$page.hasOwnProperty('warning_checkbox') && ($page.hasOwnProperty('pagetimer_warning') && 0 != $page.pagetimer_warning)) { 490 $page.warning_checkbox = "1"; 491 } 492 if ((($page.hasOwnProperty('pagetimer_warning') && 0 != $page.pagetimer_warning) || ($page.hasOwnProperty('pagetimer_warning_second') && 0 != $page.pagetimer_warning_second)) && ($page.hasOwnProperty('warning_checkbox') && 0 != $page.warning_checkbox)) { 493 if ($page.pagetimer_warning == "") { 494 $page.pagetimer_warning = 0; 495 } 496 var page_warning_sec = parseFloat($page.pagetimer_warning) * 60; 497 if ($page.hasOwnProperty('pagetimer_warning_second') && "" != $page.pagetimer_warning_second) { 498 page_warning_sec = page_warning_sec + parseInt($page.pagetimer_warning_second); 499 } 500 if (Math.round(page_warning_sec) == secondsRemaining) { 501 $timer_box.parents('.qsm-page').find('.qsm-pagetimer-warning').fadeIn(); 502 } 503 } 504 }); 505 506 jQuery(document).on('display_page_timer_warning5', function (event, $page, secondsRemaining, $timer_box) { 507 return $page; 508 }); 509 510 jQuery(document).on('qsm_next_button_click_after qsm_previous_button_click_after', function (event, quizID) { 511 advanceAutoPageTimerContinue(quizID); 512 }); 513 514 jQuery(document).on('qsm_change_timer', function (event, quiz_id, seconds, $page, total_duration = 0) { 515 516 const isNewRender = QSMAdvanceTimerObject.isNewRender(quiz_id); 517 if (isNewRender) { 518 var $quizForm = QSMPagination.Navigation.quizObjects[quiz_id].form; 519 } else { 520 var $quizForm = QSM.getQuizForm(quiz_id); 521 } 522 $page_timer = $quizForm.find('.qsm-pagetimer'); 523 $page_timer.hide(); 524 if (qmn_quiz_data[quiz_id].advanced_timer.hasOwnProperty('show_both_timers') && qmn_quiz_data[quiz_id].advanced_timer.show_both_timers == "yes") { 525 $page_timer.show(); 526 } 527 if ($quizForm.find('.linear-custom-timer').length) { 528 $custom_timer = $quizForm.find('.linear-custom-timer'); 529 if (qmn_quiz_data[quiz_id].advanced_timer.hasOwnProperty('show_both_timers') && qmn_quiz_data[quiz_id].advanced_timer.show_both_timers == "yes") { 530 $page_timer.show(); 531 } else { 532 linearFormatTimeLeft(quiz_id, seconds, total_duration); 533 } 534 } else if ($quizForm.find('.box-timer-top').length) { 535 $custom_timer = $quizForm.find('.box-timer-top'); 536 if (qmn_quiz_data[quiz_id].advanced_timer.hasOwnProperty('show_both_timers') && qmn_quiz_data[quiz_id].advanced_timer.show_both_timers == "yes") { 537 $page_timer.show(); 538 } else { 539 boxFormatTimeLeft(quiz_id, seconds, total_duration); 540 } 541 } else if ($quizForm.find('.oval-timer-top').length) { 542 $custom_timer = $quizForm.find('.oval-timer-top'); 543 if (qmn_quiz_data[quiz_id].advanced_timer.hasOwnProperty('show_both_timers') && qmn_quiz_data[quiz_id].advanced_timer.show_both_timers == "yes") { 544 $page_timer.show(); 545 } else { 546 ovalFormatTimeLeft(quiz_id, seconds, total_duration); 547 } 548 } else if ($quizForm.find('.qsm-v-line-timer-top').length) { 549 $custom_timer = $quizForm.find('.qsm-v-line-timer-top'); 550 if (qmn_quiz_data[quiz_id].advanced_timer.hasOwnProperty('show_both_timers') && qmn_quiz_data[quiz_id].advanced_timer.show_both_timers == "yes") { 551 $page_timer.show(); 552 } else { 553 vLineFormatTimeLeft(quiz_id, seconds, total_duration); 554 } 555 } else if ($quizForm.find('.half-circle-timer').length) { 556 $custom_timer = $quizForm.find('.half-circle-timer'); 557 if (qmn_quiz_data[quiz_id].advanced_timer.hasOwnProperty('show_both_timers') && qmn_quiz_data[quiz_id].advanced_timer.show_both_timers == "yes") { 558 $page_timer.show(); 559 } else { 560 halfFormatTimeLeft(quiz_id, seconds, total_duration); 561 } 562 } else if ($quizForm.find('.qsm-shade-circle-timer').length) { 563 $custom_timer = $quizForm.find('.qsm-shade-circle-timer'); 564 if (qmn_quiz_data[quiz_id].advanced_timer.hasOwnProperty('show_both_timers') && qmn_quiz_data[quiz_id].advanced_timer.show_both_timers == "yes") { 565 $page_timer.show(); 566 } else { 567 shadeFormatTimeLeft(quiz_id, seconds, total_duration); 568 } 569 } else if ($quizForm.find('.circle-custom-timer').length) { 570 if (qmn_quiz_data[quiz_id].advanced_timer.hasOwnProperty('show_both_timers') && qmn_quiz_data[quiz_id].advanced_timer.show_both_timers == "yes") { 571 $page_timer.show(); 572 } else { 573 const isNewRender = QSMAdvanceTimerObject.isNewRender(quiz_id); 574 if (isNewRender) { 575 var display = QSMPagination.Timer.secondsToTimer(seconds); 576 } else { 577 var display = QSM.secondsToTimer(seconds); 578 } 579 jQuery(".second.circle").parent('.mlw_quiz_form').addClass('qsm_big_timer'); 580 jQuery(".second.circle").show(); 581 jQuery(".second.circle strong").html(display); 582 var datashow = (total_duration - seconds) / total_duration; 583 jQuery(".second.circle").circleProgress({ 584 startAngle: 11, 585 value: datashow, 586 animation: false, 587 fill: { gradient: ["#00bb40", "#00511c"] } 588 }); 589 } 590 } else if ($quizForm.find('.custom-mlw_qmn_timer').length) { 591 592 if (qmn_quiz_data[quiz_id].advanced_timer.hasOwnProperty('show_both_timers') && qmn_quiz_data[quiz_id].advanced_timer.show_both_timers == "yes") { 593 $page_timer.show(); 594 } else { 595 $quizForm.find('.mlw_qmn_timer').removeClass('mlw_qmn_timer'); 596 const isNewRender = QSMAdvanceTimerObject.isNewRender(quiz_id); 597 if (isNewRender) { 598 var display = QSMPagination.Timer.secondsToTimer(seconds); 599 } else { 600 var display = QSM.secondsToTimer(seconds); 601 } 602 $quizForm.find('.custom-mlw_qmn_timer').text(display); 603 $quizForm.find('.custom-mlw_qmn_timer').show(); 604 } 605 } 606 }); 607 608}); 609 610function shadeFormatTimeLeft(quiz_id, time, total_duration) { 611 const isNewRender = QSMAdvanceTimerObject.isNewRender(quiz_id); 612 if (isNewRender) { 613 var $quizForm = QSMPagination.Navigation.quizObjects[quiz_id].form;; 614 } else { 615 var $quizForm = QSM.getQuizForm(quiz_id); 616 } 617 $custom_timer = $quizForm.find('.qsm-shade-circle-timer'); 618 $custom_timer.show(); 619 var formatHours = ''; 620 var formatMinutes = ''; 621 var formatSeconds = ''; 622 623 var hours = Math.floor(time / 3600); // Calculate hours 624 var minutes = Math.floor((time % 3600) / 60); // Calculate minutes 625 var seconds = Math.floor(time % 60); // Calculate seconds 626 627 // Format hours 628 formatHours = hours < 10 ? '0' + hours : hours; 629 630 // Format minutes 631 formatMinutes = minutes < 10 ? '0' + minutes : minutes; 632 633 // Format seconds 634 formatSeconds = seconds < 10 ? '0' + seconds : seconds; 635 636 if (hours > 0 && qmn_quiz_data[quiz_id].hasOwnProperty('advanced_timer') && qmn_quiz_data[quiz_id].advanced_timer.check_hour === 1) { 637 $custom_timer.find('.qsm-shade-timer-text-label').html(formatHours); 638 $custom_timer.find('.qsm-shade-timer-label').html(qmn_quiz_data[quiz_id].advanced_timer.hrs.toLowerCase()); 639 } else if (hours <= 0 && minutes > 0) { 640 $custom_timer.find('.qsm-shade-timer-text-label').html(formatMinutes); 641 $custom_timer.find('.qsm-shade-timer-label').html(qmn_quiz_data[quiz_id].advanced_timer.min.toLowerCase()); 642 } else { 643 $custom_timer.find('.qsm-shade-timer-text-label').html(formatSeconds); 644 $custom_timer.find('.qsm-shade-timer-label').html(qmn_quiz_data[quiz_id].advanced_timer.sec.toLowerCase()); 645 } 646 647 // Update timer styling 648 if (qmn_quiz_data[quiz_id].advanced_timer.hasOwnProperty('time_text_color')) { 649 $custom_timer.find('.qsm-shade-timer-text-label, .qsm-shade-timer-label').css('color', qmn_quiz_data[quiz_id].advanced_timer.time_text_color); 650 } 651 652 // Calculate stroke dash array for the progress circle 653 var strokeDashArray = Math.floor(time * 295 / total_duration) + ' 295'; 654 $custom_timer.find('.base-timer_path-remaining').css('stroke-dasharray', strokeDashArray); 655 656 // Update timer progress color 657 if (qmn_quiz_data[quiz_id].advanced_timer.hasOwnProperty('time_progress_color')) { 658 $custom_timer.find(".base-timer_path-remaining").css('stroke', qmn_quiz_data[quiz_id].advanced_timer.time_progress_color); 659 } 660} 661 662function halfFormatTimeLeft(quiz_id, time, total_duration) { 663 const isNewRender = QSMAdvanceTimerObject.isNewRender(quiz_id); 664 if (isNewRender) { 665 var $quizForm = QSMPagination.Navigation.quizObjects[quiz_id].form;; 666 } else { 667 var $quizForm = QSM.getQuizForm(quiz_id); 668 } 669 $custom_timer = $quizForm.find('.half-circle-timer'); 670 $custom_timer.show(); 671 var formatHours = ''; 672 var formatMinutes = ''; 673 var formatSeconds = ''; 674 675 var hours = Math.floor(time / 3600); // Calculate hours 676 var minutes = Math.floor((time % 3600) / 60); // Calculate minutes 677 var seconds = Math.floor(time % 60); // Calculate seconds 678 679 // Format hours 680 formatHours = hours < 10 ? '0' + hours : hours; 681 682 // Format minutes 683 formatMinutes = minutes < 10 ? '0' + minutes : minutes; 684 685 // Format seconds 686 formatSeconds = seconds < 10 ? '0' + seconds : seconds; 687 688 if (hours > 0 && qmn_quiz_data[quiz_id].hasOwnProperty('advanced_timer') && qmn_quiz_data[quiz_id].advanced_timer.check_hour === 1) { 689 $custom_timer.find('.half-timer_text_label').html(formatHours); 690 $custom_timer.find('.half-timer_label').html(qmn_quiz_data[quiz_id].advanced_timer.hrs.toLowerCase()); 691 } else if (hours <= 0 && minutes > 0) { 692 $custom_timer.find('.half-timer_text_label').html(formatMinutes); 693 $custom_timer.find('.half-timer_label').html(qmn_quiz_data[quiz_id].advanced_timer.min.toLowerCase()); 694 } else { 695 $custom_timer.find('.half-timer_text_label').html(formatSeconds); 696 $custom_timer.find('.half-timer_label').html(qmn_quiz_data[quiz_id].advanced_timer.sec.toLowerCase()); 697 } 698 699 // Update timer styling 700 if (qmn_quiz_data[quiz_id].advanced_timer.hasOwnProperty('time_text_color')) { 701 $custom_timer.find('.half-timer_label, .half-timer_text_label').css('color', qmn_quiz_data[quiz_id].advanced_timer.time_text_color); 702 } 703 704 // Calculate stroke dash array for the progress circle 705 var strokeDashArray = Math.floor(time * 147.5 / total_duration) + ' 147.5'; 706 $custom_timer.find('.base-timer_path-remaining').css('stroke-dasharray', strokeDashArray); 707 708 // Update timer progress color 709 if (qmn_quiz_data[quiz_id].advanced_timer.hasOwnProperty('time_progress_color')) { 710 $custom_timer.find(".base-timer_path-remaining").css('stroke', qmn_quiz_data[quiz_id].advanced_timer.time_progress_color); 711 } 712} 713 714function vLineFormatTimeLeft(quiz_id, time, total_duration) { 715 const isNewRender = QSMAdvanceTimerObject.isNewRender(quiz_id); 716 if (isNewRender) { 717 var $quizForm = QSMPagination.Navigation.quizObjects[quiz_id].form;; 718 } else { 719 var $quizForm = QSM.getQuizForm(quiz_id); 720 } 721 $custom_timer = $quizForm.find('.qsm-v-line-timer-top'); 722 $custom_timer.show(); 723 var formattedHour = ''; 724 var formattedMinute = ''; 725 var formattedSeconds = ''; 726 var hours = Math.floor(time / 3600); // Calculate hours 727 var minutes = Math.floor((time % 3600) / 60); // Calculate minutes 728 729 // Format hours 730 formattedHour += hours < 10 ? '0' + hours + ':' : hours + ':'; 731 732 // Format minutes 733 if (minutes < 10) { 734 formattedMinute += '0' + minutes; 735 } else { 736 formattedMinute += minutes; 737 } 738 739 // Calculate remaining seconds 740 var seconds = Math.floor(time % 60); 741 742 // Format seconds 743 if (seconds < 10) { 744 formattedSeconds += ':' + '0' + seconds; 745 } else { 746 formattedSeconds += ':' + seconds; 747 } 748 749 if (hours > 0 && qmn_quiz_data[quiz_id].hasOwnProperty('advanced_timer') && qmn_quiz_data[quiz_id].advanced_timer.check_hour === 1) { 750 $custom_timer.find('.qsm-v-line-time-text').html(formattedHour + formattedMinute); 751 $custom_timer.find('.qsm-v-line-time-status').html(qmn_quiz_data[quiz_id].advanced_timer.hours); 752 } else if (hours <= 0 && minutes > 0) { 753 $custom_timer.find('.qsm-v-line-time-text').html(formattedMinute + formattedSeconds); 754 $custom_timer.find('.qsm-v-line-time-status').html(qmn_quiz_data[quiz_id].advanced_timer.minutes); 755 } else { 756 $custom_timer.find('.qsm-v-line-time-text').html(formattedMinute + forma
756ttedSeconds); 757 $custom_timer.find('.qsm-v-line-time-status').html(qmn_quiz_data[quiz_id].advanced_timer.seconds); 758 } 759 760 // Update timer styling 761 if (qmn_quiz_data[quiz_id].advanced_timer.hasOwnProperty('time_text_color')) { 762 $custom_timer.find(".qsm-v-line-time-text").css('color', qmn_quiz_data[quiz_id].advanced_timer.time_text_color); 763 $custom_timer.find(".qsm-v-line-time-status").css('color', qmn_quiz_data[quiz_id].advanced_timer.time_text_color); 764 } 765 766 var width = Math.floor(time * 100 / total_duration); 767 vLineUpdateProgressBar(width); // Update progress bar 768 769 // Update timer color 770 if (qmn_quiz_data[quiz_id].advanced_timer.hasOwnProperty('time_progress_color')) { 771 $custom_timer.find(".qsm-v-line-timer-percentage-line").css('background-color', qmn_quiz_data[quiz_id].advanced_timer.time_progress_color); 772 } 773 774 // Update timer background color 775 if (qmn_quiz_data[quiz_id].advanced_timer.hasOwnProperty('time_background_color')) { 776 $custom_timer.css('background-color', qmn_quiz_data[quiz_id].advanced_timer.time_background_color); 777 } 778} 779 780function vLineUpdateProgressBar(percentage) { 781 const progressBar = document.querySelector('.qsm-v-line-timer-percentage-line'); 782 progressBar.style.width = percentage + '%'; 783} 784 785function boxFormatTimeLeft(quiz_id, time, total_duration) { 786 const isNewRender = QSMAdvanceTimerObject.isNewRender(quiz_id); 787 if (isNewRender) { 788 var $quizForm = QSMPagination.Navigation.quizObjects[quiz_id].form;; 789 } else { 790 var $quizForm = QSM.getQuizForm(quiz_id); 791 } 792 $custom_timer = $quizForm.find('.box-timer-top'); 793 $custom_timer.show(); 794 var hours = Math.floor(time / 3600); // Calculate hours 795 var minutes = Math.floor((time % 3600) / 60); // Calculate minutes 796 var formattedHour = ''; 797 var formattedMinute = ''; 798 var formattedSeconds = ''; 799 800 // Format hours 801 formattedHour += hours < 10 ? '0' + hours + ':' : hours + ':'; 802 803 // Format minutes 804 if (minutes < 10) { 805 formattedMinute += '0' + minutes; 806 } else { 807 formattedMinute += minutes; 808 } 809 810 // Calculate remaining seconds 811 var seconds = Math.floor(time % 60); 812 813 // Format seconds 814 if (seconds < 10) { 815 formattedSeconds += ':' + '0' + seconds; 816 } else { 817 formattedSeconds += ':' + seconds; 818 } 819 820 if (hours > 0 && qmn_quiz_data[quiz_id].hasOwnProperty('advanced_timer') && qmn_quiz_data[quiz_id].advanced_timer.check_hour === 1) { 821 $custom_timer.find('.box-timer-text').html(formattedHour + formattedMinute); 822 $custom_timer.find('.box-timer-status').html(qmn_quiz_data[quiz_id].advanced_timer.hrs + ' ' + qmn_quiz_data[quiz_id].advanced_timer.min); 823 } else if (hours <= 0 && minutes >= 0) { 824 $custom_timer.find('.box-timer-text').html(formattedMinute + formattedSeconds); 825 $custom_timer.find('.box-timer-status').html(qmn_quiz_data[quiz_id].advanced_timer.min + ' ' + qmn_quiz_data[quiz_id].advanced_timer.sec); 826 } 827 828 // Update timer styling 829 if (qmn_quiz_data[quiz_id].advanced_timer.hasOwnProperty('time_text_color')) { 830 $custom_timer.find(".box-timer-text").css('color', qmn_quiz_data[quiz_id].advanced_timer.time_text_color); 831 $custom_timer.find(".box-timer-status").css('color', qmn_quiz_data[quiz_id].advanced_timer.time_text_color); 832 } 833 834 var width = Math.floor(time * 100 / total_duration); 835 if (qmn_quiz_data[quiz_id].advanced_timer.hasOwnProperty('time_progress_color')) { 836 $custom_timer.find(".box-timer-percentage-line").css('background-color', qmn_quiz_data[quiz_id].advanced_timer.time_progress_color); 837 } 838 if (qmn_quiz_data[quiz_id].advanced_timer.hasOwnProperty('time_background_color')) { 839 $custom_timer.css('background-color', qmn_quiz_data[quiz_id].advanced_timer.time_background_color); 840 } 841 842 boxUpdateProgressBar(width); // Update progress bar 843} 844 845function boxUpdateProgressBar(percentage) { 846 const progressBar = document.querySelector('.box-timer-percentage-line'); 847 progressBar.style.width = percentage + '%'; 848} 849 850function ovalFormatTimeLeft(quiz_id, time, total_duration) { 851 const isNewRender = QSMAdvanceTimerObject.isNewRender(quiz_id); 852 if (isNewRender) { 853 var $quizForm = QSMPagination.Navigation.quizObjects[quiz_id].form;; 854 } else { 855 var $quizForm = QSM.getQuizForm(quiz_id); 856 } 857 $custom_timer = $quizForm.find('.oval-timer-top'); 858 $custom_timer.show(); 859 var hours = Math.floor(time / 3600); // Calculate hours 860 var minutes = Math.floor((time % 3600) / 60); // Calculate minutes from the remaining time 861 if (hours > 0 && qmn_quiz_data[quiz_id].hasOwnProperty('advanced_timer') && qmn_quiz_data[quiz_id].advanced_timer.check_hour === 1) { 862 $custom_timer.find('.oval-timer-label-top').html(qmn_quiz_data[quiz_id].advanced_timer.hrs); 863 $custom_timer.find('.oval-timer-label-bottom').html(qmn_quiz_data[quiz_id].advanced_timer.min); 864 $custom_timer.find('.second').hide(); 865 } else { 866 $custom_timer.find('.oval-timer-label-top').html(qmn_quiz_data[quiz_id].advanced_timer.min); 867 $custom_timer.find('.oval-timer-label-bottom').html(qmn_quiz_data[quiz_id].advanced_timer.sec); 868 $custom_timer.find('.hour').hide(); 869 $custom_timer.find('.second').show(); 870 } 871 var formattedTime = ''; 872 // Format hours 873 if (hours < 10) { 874 formattedTime += '0' + hours; 875 } else { 876 formattedTime += hours; 877 } 878 $custom_timer.find('.hour').html(formattedTime); // Update hour display 879 880 formattedTime = ''; 881 // Format minutes 882 if (minutes < 10) { 883 formattedTime += '0' + minutes; 884 } else { 885 formattedTime += minutes; 886 } 887 $custom_timer.find('.minute').html(formattedTime); // Update hour display 888 889 var seconds = Math.floor(time % 60); // Calculate remaining seconds 890 formattedTime = ''; 891 // Format seconds 892 if (seconds < 10) { 893 formattedTime += '0' + seconds; 894 } else { 895 formattedTime += seconds; 896 } 897 $custom_timer.find('.second').html(formattedTime); // Update second display 898 899 // Update timer styling 900 if (qmn_quiz_data[quiz_id].advanced_timer.hasOwnProperty('time_text_color')) { 901 $custom_timer.find("span").css('color', qmn_quiz_data[quiz_id].advanced_timer.time_text_color); 902 } 903 if (qmn_quiz_data[quiz_id].advanced_timer.hasOwnProperty('time_progress_color')) { 904 $custom_timer.find(".oval-timer-percentage-line").css('background-color', qmn_quiz_data[quiz_id].advanced_timer.time_progress_color); 905 } 906 if (qmn_quiz_data[quiz_id].advanced_timer.hasOwnProperty('time_background_color')) { 907 $custom_timer.css('background-color', qmn_quiz_data[quiz_id].advanced_timer.time_background_color); 908 } 909 910 var width = Math.floor(time * 100 / total_duration); 911 ovalUpdateProgressBar(width); // Update progress bar 912} 913 914function ovalUpdateProgressBar(percentage) { 915 const progressBar = document.querySelector('.oval-timer-percentage-line'); 916 progressBar.style.width = percentage + '%'; 917} 918 919function linearFormatTimeLeft(quiz_id, time, total_duration = 0) { 920 const isNewRender = QSMAdvanceTimerObject.isNewRender(quiz_id); 921 if (isNewRender) { 922 var $quizForm = QSMPagination.Navigation.quizObjects[quiz_id].form;; 923 } else { 924 var $quizForm = QSM.getQuizForm(quiz_id); 925 } 926 $custom_timer = $quizForm.find('.linear-custom-timer'); 927 $custom_timer.show(); 928 var formattedHour = ''; 929 var formattedMinute = ''; 930 var formattedSeconds = ''; 931 var hours = Math.floor(time / 3600); // Calculate hours 932 var minutes = Math.floor((time % 3600) / 60); // Calculate minutes 933 934 // Format hours 935 formattedHour += hours < 10 ? '0' + hours + ':' : hours + ':'; 936 937 // Format minutes 938 if (minutes < 10) { 939 formattedMinute += '0' + minutes; 940 } else { 941 formattedMinute += minutes; 942 } 943 944 // Calculate remaining seconds 945 var seconds = Math.floor(time % 60); 946 947 // Format seconds 948 if (seconds < 10) { 949 formattedSeconds += ':' + '0' + seconds; 950 } else { 951 formattedSeconds += ':' + seconds; 952 } 953 954 if (hours > 0 && qmn_quiz_data[quiz_id].hasOwnProperty('advanced_timer') && qmn_quiz_data[quiz_id].advanced_timer.check_hour === 1) { 955 $custom_timer.find('.linear-timer-text').html(formattedHour + formattedMinute); 956 $custom_timer.find('.linear-timer-status').html(qmn_quiz_data[quiz_id].advanced_timer.hours.toUpperCase()); 957 } else if (hours <= 0 && minutes > 0) { 958 $custom_timer.find('.linear-timer-text').html(formattedMinute + formattedSeconds); 959 $custom_timer.find('.linear-timer-status').html(qmn_quiz_data[quiz_id].advanced_timer.minutes.toUpperCase()); 960 } else { 961 $custom_timer.find('.linear-timer-text').html(formattedMinute + formattedSeconds); 962 $custom_timer.find('.linear-timer-status').html(qmn_quiz_data[quiz_id].advanced_timer.seconds.toUpperCase()); 963 } 964 965 // Update timer styling 966 if (qmn_quiz_data[quiz_id].advanced_timer.hasOwnProperty('time_text_color')) { 967 $custom_timer.find(".linear-timer-text, .linear-timer-status").css('color', qmn_quiz_data[quiz_id].advanced_timer.time_text_color); 968 } 969 970 linearChangeColor(quiz_id, time, total_duration); // Update timer color 971} 972 973function linearChangeColor(quiz_id, time, total_duration) { 974 const isNewRender = QSMAdvanceTimerObject.isNewRender(quiz_id); 975 if (isNewRender) { 976 var $quizForm = QSMPagination.Navigation.quizObjects[quiz_id].form;; 977 } else { 978 var $quizForm = QSM.getQuizForm(quiz_id); 979 } 980 $linear_timer = $quizForm.find('.linear-custom-timer'); 981 982 const percentage = (time / total_duration) * 100;
983 const spans = document.querySelectorAll('.linear-timer-span span'); 984 985 spans.forEach((span, index) => { 986 span.style.border = "1px solid #9C9C9C"; 987 span.style.backgroundColor = "#ffffff"; 988 if (index * 10 < percentage) { 989 if (percentage <= 100 && percentage >= 50) { 990 if (qmn_quiz_data[quiz_id].advanced_timer.hasOwnProperty('time_progress_color')) { 991 span.style.border = "1px solid " + qmn_quiz_data[quiz_id].advanced_timer.time_progress_color; 992 span.style.backgroundColor = qmn_quiz_data[quiz_id].advanced_timer.time_progress_color; 993 } 994 } else if (percentage <= 50 && percentage >= 20) { 995 span.style.border = "1px solid #FFB800"; 996 span.style.backgroundColor = "#FFB800"; 997 } else if (percentage <= 20) { 998 span.style.border = "1px solid #FF5555"; 999 span.style.backgroundColor = "#FF5555"; 1000 } 1001 } 1002 }); 1003} 1004 1005function advanceAutoPageTimerContinue(quizID) { 1006 var start_timer = parseInt(qmn_quiz_data[quizID].advanced_timer.start_timer_page); 1007 const isNewRender = QSMAdvanceTimerObject.isNewRender(quizID); 1008 if (isNewRender) { 1009 var $quizForm = QSMPagination.Navigation.quizObjects[quizID].form; 1010 var $pages = jQuery('.qsm-page'); 1011 var $apid = jQuery('.qsm-page:visible').data('apid'); 1012 var $currentpage = jQuery('.qsm-page:visible'); 1013 } else { 1014 var $quizForm = QSM.getQuizForm(quizID); 1015 var $apid = jQuery('.qsm-auto-page-row:visible').data('apid'); 1016 var $pages = jQuery('.qsm-auto-page-row'); 1017 var $currentpage = jQuery('.qsm-auto-page-row:visible'); 1018 } 1019 1020 if (start_timer <= $apid) { 1021 1022 $pages.each(function () { 1023 var dataapid = jQuery(this).data('apid'); 1024 if (typeof dataapid !== 'undefined' && qmn_quiz_data[quizID] && qmn_quiz_data[quizID].qpages && qmn_quiz_data[quizID].qpages[dataapid] && typeof qmn_quiz_data[quizID].qpages[dataapid].timerInterval !== 'undefined') { 1025 if (!isNewRender) { 1026 clearInterval(qmn_quiz_data[quizID].qpages[dataapid].timerInterval); 1027 } 1028 } 1029 }); 1030 1031 if (qmn_quiz_data[quizID].advanced_timer.show_stop_timer == 'yes' && $apid != undefined) { 1032 jQuery('.qsm-quiz-container-' + quizID).find('.stoptimer-p').show(); 1033 } else { 1034 jQuery('.qsm-quiz-container-' + quizID).find('.stoptimer-p').hide(); 1035 } 1036 1037 $quizForm.closest('.qmn_quiz_container').find('.qsm_ninety_warning').hide(); 1038 1039 if (qmn_quiz_data[quizID].hasOwnProperty('advance_per_page_timer') && undefined != $apid && 0 < qmn_quiz_data[quizID].advance_per_page_timer && qmn_quiz_data[quizID].hasOwnProperty('pagination') && 0 < qmn_quiz_data[quizID].pagination.amount) { 1040 1041 var $timer_box = $currentpage.find('.qsm-pagetimer'); 1042 var seconds = 0; 1043 var timerTaken = localStorage.getItem('time_taken_' + quizID + '_page' + $apid); 1044 var per_page_timer_second = parseFloat(qmn_quiz_data[quizID].advance_per_page_timer) * 60; 1045 if (timerTaken >= qmn_quiz_data[quizID].advance_per_page_timer) { 1046 seconds = per_page_timer_second - parseInt(timerTaken); 1047 } else if (timerTaken <= qmn_quiz_data[quizID].advance_per_page_timer && null != timerTaken) { 1048 seconds = per_page_timer_second - parseInt(timerTaken); 1049 } else { 1050 seconds = per_page_timer_second; 1051 if (timerTaken == null) { 1052 localStorage.setItem('time_taken_' + quizID + '_page' + $apid, 0); 1053 } 1054 } 1055 if (qmn_quiz_data[quizID].advanced_timer.timer_continues_after_closing == 'yes' && undefined != $apid) { 1056 localStorage.setItem("qsm_quiz_current_page_" + quizID, $apid); 1057 let started_time = localStorage.getItem("qsm_quiz_current_page_started_at_" + quizID + "page_" + $apid); 1058 1059 if (started_time == null && qmn_quiz_data[quizID].qpages[$apid].pagetimer != null && qmn_quiz_data[quizID].advanced_timer.show_stop_timer == 'no') { 1060 localStorage.setItem("qsm_quiz_current_page_started_at_" + quizID + "page_" + $apid, new Date().getTime()); 1061 } 1062 let timeDiff = Math.round((new Date().getTime() - started_time) / 1000); 1063 let pageTime = qmn_quiz_data[quizID].qpages[$apid].pagetimer * 60; 1064 let finalRemainingTime = pageTime - timeDiff; 1065 if (undefined != pageTime && finalRemainingTime > 0) { 1066 localStorage.setItem('time_taken_' + quizID + '_page' + $apid, timeDiff); 1067 } else { 1068 if (started_time != null && timerTaken != null) { 1069 localStorage.setItem('time_taken_' + quizID + '_page' + $apid, pageTime); 1070 } 1071 } 1072 } 1073 /* Sets up timer interval. */ 1074 qmn_quiz_data[quizID].qpages[$apid].timerInterval = setInterval(advanceAutoPageTimer, 1000, quizID, $apid, $timer_box); 1075 } 1076 } else if (start_timer > $apid) { 1077 var $custom_timer = 0; 1078 if ($quizForm.find('.linear-custom-timer').length) { 1079 $custom_timer = $quizForm.find('.linear-custom-timer'); 1080 } else if ($quizForm.find('.qsm-v-line-timer-top').length) { 1081 $custom_timer = $quizForm.find('.qsm-v-line-timer-top'); 1082 } else if ($quizForm.find('.box-timer-top').length) { 1083 $custom_timer = $quizForm.find('.box-timer-top'); 1084 } else if ($quizForm.find('.oval-timer-top').length) { 1085 $custom_timer = $quizForm.find('.oval-timer-top'); 1086 } else if ($quizForm.find('.half-circle-timer').length) { 1087 $custom_timer = $quizForm.find('.half-circle-timer'); 1088 } else if ($quizForm.find('.qsm-shade-circle-timer').length) { 1089 $custom_timer = $quizForm.find('.qsm-shade-circle-timer'); 1090 } else if ($quizForm.find('.circle-custom-timer').length) { 1091 $custom_timer = $quizForm.find('.circle-custom-timer'); 1092 } else if ($quizForm.find('.custom-mlw_qmn_timer').length) { 1093 1094 $custom_timer = $quizForm.find('.custom-mlw_qmn_timer'); 1095 } 1096 1097 if ($custom_timer != 0) { 1098 clearInterval(qmn_quiz_data[quizID].qpages[start_timer].timerInterval); 1099 if (qmn_quiz_data[quizID].timer_limit_val <= 0 || qmn_quiz_data[quizID].advanced_timer.show_both_timers == "no") { 1100 $custom_timer.hide(); 1101 } 1102 if (qmn_quiz_data[quizID].advanced_timer.show_stop_timer == 'yes') { 1103 if (qmn_quiz_data[quizID].timer_limit_val <= 0 || qmn_quiz_data[quizID].advanced_timer.show_both_timers == "no") { 1104 jQuery('.qsm-quiz-container-' + quizID).find('.stoptimer-p').hide(); 1105 } 1106 } 1107 } 1108 } 1109 var pid = jQuery('.qsm-page:visible').data('pid'); 1110 1111 if (undefined != pid) { 1112 if (start_timer <= pid) { 1113 if (qmn_quiz_data[quizID].advanced_timer.show_stop_timer == 'yes') { 1114 jQuery('.qsm-quiz-container-' + quizID).find('.stoptimer-p').show(); 1115 } else { 1116 jQuery('.qsm-quiz-container-' + quizID).find('.stoptimer-p').hide(); 1117 } 1118 } else { 1119 if (qmn_quiz_data[quizID].advanced_timer.show_stop_timer == 'yes') { 1120 jQuery('.qsm-quiz-container-' + quizID).find('.stoptimer-p').show(); 1121 } 1122 } 1123 } 1124} 1125
1126function advanceAutoPageTimerDisplay(seconds, current_page, quiz_id) { 1127 1128 const isNewRender = QSMAdvanceTimerObject.isNewRender(quiz_id); 1129 if (isNewRender) { 1130 var $apid = jQuery('.qsm-page:visible').data('apid'); 1131 } else { 1132 var $apid = jQuery('.qsm-auto-page-row:visible').data('apid'); 1133 } 1134 var $currentpage = qmn_quiz_data[quiz_id].qpages[$apid]; 1135 var per_page_timer_second = parseFloat(qmn_quiz_data[quiz_id].advance_per_page_timer) * 60; 1136 1137 if (isNewRender) { 1138 var $quizForm = QSMPagination.Navigation.quizObjects[quiz_id].form;; 1139 } else { 1140 var $quizForm = QSM.getQuizForm(quiz_id); 1141 } 1142 var ninety_sec = Math.round(per_page_timer_second) - (Math.round(per_page_timer_second) * 90 / 100); 1143 if (ninety_sec == seconds) { 1144 $quizForm.closest('.qmn_quiz_container').find('.qsm_ninety_warning').fadeIn(); 1145 } 1146 1147 if ($currentpage) { 1148 1149 jQuery(document).trigger('qsm_change_timer', [quiz_id, seconds, $currentpage.pagetimer, Math.round(per_page_timer_second)]); 1150 } 1151 var formattedTime = ''; 1152 seconds = parseInt(seconds); 1153 var hours = Math.floor(seconds / 3600); 1154 if (0 === hours) { 1155 formattedTime = '00:'; 1156 } else if (10 > hours) { 1157 formattedTime = '0' + hours + ':'; 1158 } else { 1159 formattedTime = hours + ':'; 1160 } 1161 var minutes = Math.floor((seconds % 3600) / 60); 1162 if (0 === minutes) { 1163 formattedTime = formattedTime + '00:'; 1164 } else if (10 > minutes) { 1165 formattedTime = formattedTime + '0' + minutes + ':'; 1166 } else { 1167 formattedTime = formattedTime + minutes + ':'; 1168 } 1169 var remainder = Math.floor((seconds % 60)); 1170 if (0 === remainder) { 1171 formattedTime = formattedTime + '00'; 1172 } else if (10 > remainder) { 1173 formattedTime = formattedTime + '0' + remainder; 1174 } else { 1175 formattedTime = formattedTime + remainder; 1176 } 1177 return formattedTime; 1178} 1179 1180function advanceAutoPageTimer(quizID, $apid, $timer_box) { 1181 $timer_box.show(); 1182 var timerTaken = localStorage.getItem('time_taken_' + quizID + '_page' + $apid); 1183 var per_page_timer_second = parseFloat(qmn_quiz_data[quizID].advance_per_page_timer) * 60; 1184 seconds = Math.round(per_page_timer_second) - parseInt(timerTaken); 1185 if (0 < seconds) { 1186 timerTaken++; 1187 seconds--; 1188 localStorage.setItem('time_taken_' + quizID + '_page' + $apid, timerTaken); 1189 $timer_box.text(advanceAutoPageTimerDisplay(parseInt(seconds), $apid, quizID)); 1190 } else { 1191 $timer_box.text(advanceAutoPageTimerDisplay(0, $apid, quizID)); 1192 clearInterval(qmn_quiz_data[quizID].qpages[$apid].timerInterval); 1193 MicroModal.show('modal-page-1'); 1194 } 1195 jQuery('#pagetime_' + $apid).val(timerTaken); 1196} 1197 1198//Remove the themes timer 1199jQuery(document).on('qsm_themes_timer_header_after', function (e, quiz_id, qmn_quiz_data, timerObj) { 1200 if (qmn_quiz_data[quiz_id].advanced_timer.timer_design == "right_bottom_timer"){ 1201 timerObj.timer_template; 1202 } 1203 else if(qmn_quiz_data[quiz_id].hasOwnProperty('advanced_timer') && qmn_quiz_data[quiz_id].advanced_timer.timer_design != "" ) { 1204 timerObj.timer_template = ""; 1205 } 1206}); 1207jQuery(document).on('qmn_timer_consumed_seconds', function (e, quiz_id, qmn_quiz_data, qsm_timer_consumed_obj) { 1208 if(qmn_quiz_data[quiz_id].advanced_timer.qsm_timer_count_upwards != undefined && qmn_quiz_data[quiz_id].advanced_timer.qsm_timer_count_upwards == 1){ 1209 qsm_timer_consumed_obj.qmn_count_upward_status = true; 1210 } 1211}); 1212jQuery(document).on('qsm_timer_ended', function (event, quiz_id, qmn_quiz_data) { 1213 if ( qmn_quiz_data[quiz_id].advanced_timer.qsm_continue_after_timer_ends != undefined && qmn_quiz_data[quiz_id].advanced_timer.qsm_continue_after_timer_ends == 1 ) { 1214 jQuery(".mlw_qmn_quiz input:radio").attr('disabled', false); 1215 jQuery(".mlw_qmn_quiz input:checkbox").attr('disabled', false); 1216 jQuery(".mlw_qmn_quiz select").attr('disabled', false); 1217 jQuery(".mlw_qmn_question_comment").attr('disabled', false); 1218 jQuery(".mlw_answer_open_text").attr('disabled', false); 1219 jQuery(".mlw_answer_number").attr('readonly', false); 1220 } 1221});
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.