PageSourceSearch

https://tv78.com/wp-content/plugins/qsm-advanced-timer/js/front.js?ver=2.4.2

js tv78.com collected 2026-09-25 00:08:41 UTC 60,349 bytes, 1,221 lines download raw bytes

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 + '&nbsp;&nbsp;&nbsp;' + 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 + '&nbsp;&nbsp;&nbsp;' + 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.