';
+
+ if (checkpoints.length === 0) {
+ modalHtml += '
No checkpoints available.
';
+ } else {
+ // Sort by timestamp descending (newest first)
+ checkpoints.sort((a, b) => b.timestamp - a.timestamp);
+
+ checkpoints.forEach(cp => {
+ var date = new Date(cp.timestamp);
+ var durationMins = Math.floor(cp.duration / 60000);
+ var durationSecs = Math.floor((cp.duration % 60000) / 1000);
+ // Escape all dynamic data to prevent XSS
+ var safeSessionId = escapeHtml(cp.sessionId ? cp.sessionId.substring(0, 16) : '');
+ var safeDateStr = escapeHtml(date.toLocaleString());
+ var safeDuration = escapeHtml(durationMins + ':' + String(durationSecs).padStart(2, '0'));
+ var safeId = escapeHtml(String(cp.id));
+
+ modalHtml += '
' +
+ '
' +
+ '
Session: ' + safeSessionId + '...
' +
+ '
' +
+ 'Saved: ' + safeDateStr + '
' +
+ 'Duration: ' + safeDuration + '' +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ '
';
+ });
+ }
+
+ modalHtml += '