Index: lams_common/src/java/org/lamsfoundation/lams/lesson/dto/ActivityTimeLimitDTO.java =================================================================== diff -u -r616c7119289412164b78e0f420725a865e60c933 -rd40a833e3c39b4517628fcd947d8da92fc30b37d --- lams_common/src/java/org/lamsfoundation/lams/lesson/dto/ActivityTimeLimitDTO.java (.../ActivityTimeLimitDTO.java) (revision 616c7119289412164b78e0f420725a865e60c933) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/dto/ActivityTimeLimitDTO.java (.../ActivityTimeLimitDTO.java) (revision d40a833e3c39b4517628fcd947d8da92fc30b37d) @@ -1,6 +1,7 @@ package org.lamsfoundation.lams.lesson.dto; import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; public class ActivityTimeLimitDTO { private Long activityId; @@ -21,7 +22,7 @@ return activityTitle; } - public LocalDateTime getAbsoluteTimeLimit() { - return absoluteTimeLimit; + public long getSecondsLeft() { + return ChronoUnit.SECONDS.between(LocalDateTime.now(), absoluteTimeLimit); } } \ No newline at end of file Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringController.java =================================================================== diff -u -r616c7119289412164b78e0f420725a865e60c933 -rd40a833e3c39b4517628fcd947d8da92fc30b37d --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringController.java (.../MonitoringController.java) (revision 616c7119289412164b78e0f420725a865e60c933) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringController.java (.../MonitoringController.java) (revision d40a833e3c39b4517628fcd947d8da92fc30b37d) @@ -1033,8 +1033,6 @@ request.setAttribute("burningQuestionsEnabled", burningQuestionsEnabled); } - List absoluteTimeLimits = lessonService.getRunningAbsoluteTimeLimits(lessonId); - return "monitor" + (useNewUI ? "5" : ""); } @@ -1376,6 +1374,11 @@ } } + List absoluteTimeLimits = lessonService.getRunningAbsoluteTimeLimits(lessonId); + if (!absoluteTimeLimits.isEmpty()) { + responseJSON.set("timeLimits", JsonUtil.readArray(absoluteTimeLimits)); + } + response.setContentType("application/json;charset=utf-8"); return responseJSON.toString(); Index: lams_monitoring/web/css/components-monitoring.css =================================================================== diff -u -rc955a8e34498e3e061ae1e1bd2f11ed41cdca463 -rd40a833e3c39b4517628fcd947d8da92fc30b37d --- lams_monitoring/web/css/components-monitoring.css (.../components-monitoring.css) (revision c955a8e34498e3e061ae1e1bd2f11ed41cdca463) +++ lams_monitoring/web/css/components-monitoring.css (.../components-monitoring.css) (revision d40a833e3c39b4517628fcd947d8da92fc30b37d) @@ -154,6 +154,11 @@ text-align: center; } + +.monitoring-page-wrapper #sequence-tab-content .countdown-timeout { + color: var(--bs-red) !important; +} + .monitoring-page-wrapper #sequence-tab-content .sequence-tab-layout-column { margin-bottom: 2rem; padding-right: 0; Index: lams_monitoring/web/includes/javascript/monitorLesson5.js =================================================================== diff -u -r5b9c9b21910ead6832eb47f7a19fa206a0f4d21b -rd40a833e3c39b4517628fcd947d8da92fc30b37d --- lams_monitoring/web/includes/javascript/monitorLesson5.js (.../monitorLesson5.js) (revision 5b9c9b21910ead6832eb47f7a19fa206a0f4d21b) +++ lams_monitoring/web/includes/javascript/monitorLesson5.js (.../monitorLesson5.js) (revision d40a833e3c39b4517628fcd947d8da92fc30b37d) @@ -614,9 +614,13 @@ clearEventSources(); - let tabContent = $('.monitoring-page-content .tab-content').empty(), + + let tabContent = $('.monitoring-page-content .tab-content'), searchStudentWidget = $('#sequenceSearchPhraseContainer'); + $('.is-countdown', tabContent).countdown('destroy'); + tabContent.empty(); + switch(tabName) { case 'sequence': { tabContent.load(LAMS_URL + 'monitoring/monitoring/displaySequenceTab.do', function(){ @@ -1573,6 +1577,34 @@ updateLiveEdit(); updateContributeActivities(response.contributeActivities); + + let timeLimitsDiv = $('#lesson-time-limits').toggleClass('d-none', !response.timeLimits); + if (response.timeLimits) { + $('.is-countdown', timeLimitsDiv).countdown('destroy').closest('.row').remove(); + + $.each(response.timeLimits, function(){ + let timeLimit = this, + row = $('
').appendTo(timeLimitsDiv) + $('
').text(timeLimit.activityTitle).appendTo(row); + $('
') + .appendTo(row) + .countdown({ + until: '+' + timeLimit.secondsLeft +'S', + format: 'hMS', + compact: true, + alwaysExpire : false, + onTick: function(periods) { + // check for 30 seconds or less and display timer in red + var secondsLeft = $.countdown.periodsToSeconds(periods); + if (secondsLeft <= 30) { + $(this).addClass('countdown-timeout'); + } else { + $(this).removeClass('countdown-timeout'); + } + } + }); + }); + } } }); } Index: lams_monitoring/web/monitor-sequence-tab.jsp =================================================================== diff -u -r5b9c9b21910ead6832eb47f7a19fa206a0f4d21b -rd40a833e3c39b4517628fcd947d8da92fc30b37d --- lams_monitoring/web/monitor-sequence-tab.jsp (.../monitor-sequence-tab.jsp) (revision 5b9c9b21910ead6832eb47f7a19fa206a0f4d21b) +++ lams_monitoring/web/monitor-sequence-tab.jsp (.../monitor-sequence-tab.jsp) (revision d40a833e3c39b4517628fcd947d8da92fc30b37d) @@ -37,6 +37,11 @@
+
+
+ +
+