[LON-CAPA-cvs] cvs: loncom /interface lonhtmlcommon.pm
foxr
foxr at source.lon-capa.org
Wed Apr 4 06:47:29 EDT 2012
foxr Wed Apr 4 10:47:29 2012 EDT
Modified files:
/loncom/interface lonhtmlcommon.pm
Log:
BZ 5891 - Add submit early to timer,
- Add method to correct for page compute time.
Index: loncom/interface/lonhtmlcommon.pm
diff -u loncom/interface/lonhtmlcommon.pm:1.306 loncom/interface/lonhtmlcommon.pm:1.307
--- loncom/interface/lonhtmlcommon.pm:1.306 Mon Mar 26 10:24:08 2012
+++ loncom/interface/lonhtmlcommon.pm Wed Apr 4 10:47:29 2012
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# a pile of common html routines
#
-# $Id: lonhtmlcommon.pm,v 1.306 2012/03/26 10:24:08 foxr Exp $
+# $Id: lonhtmlcommon.pm,v 1.307 2012/04/04 10:47:29 foxr Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1316,16 +1316,41 @@
# This is currently located in the breadcrumb headers.
# note that the dueDateLayout is internatinoalized below.
# Here document is used to support the substitution into the javascript below.
- # ..which unfortunately necessitates escaping the $'s in the javascript.
+ # ..which unforunately necessitates escaping the $'s in the javascript.
+ # There are several times of importance
+ #
+ # serverDueDate - The absolute time at which the problem expires.
+ # serverTime - The server's time when the problem finished computing.
+ # clientTime - The client's time...as close to serverTime as possible.
+ # The clientTime will be slightly later due to
+ # 1. The latency between problem computation and
+ # the first network action.
+ # 2. The time required between the page load-start and the actual
+ # initial javascript execution that got clientTime.
+ # These are used as follows:
+ # The difference between clientTime and serverTime are used to
+ # correct for differences in clock settings between the browser's system and the
+ # server's.
+ #
+ # The difference between clientTime and the time at which the ready() method
+ # starts executing is used to estimate latencies for page load and submission.
+ # Since this is an estimate, it is doubled. The latency estimate + one minute
+ # is used to determine when the countdown timer turns red to warn the user
+ # to think about submitting.
- my $dueDateLayout = '<b>' . &mt('Due in: {dn} {dl} {hnn}{sep}{mnn}{sep}{snn}') . '</b>';
+ my $dueDateLayout = '<b>' . &mt('Due in: {dn} {dl} {hnn}{sep}{mnn}{sep}{snn} - Submit early!') . '</b>';
$output .= <<JAVASCRIPT;
+
+ var documentReadyTime;
+
\$(document).ready(function() {
if (typeof(dueDate) != "undefined") {
+ documentReadyTime = (new Date()).getTime();
\$("#duedatecountdown").countdown({until: dueDate, compact: true,
layout: "$dueDateLayout",
onTick: function (periods) {
- if(\$.countdown.periodsToSeconds(periods) < 60) {
+ var latencyEstimate = (documentReadyTime - clientTime) * 2;
+ if(\$.countdown.periodsToSeconds(periods) < (60 + latencyEstimate)) {
\$(this).css("color", "red"); //Highlight last minute.
}
}
@@ -1439,6 +1464,29 @@
</script>
";
+ return $js;
+}
+##
+# Sets the time at which the problem finished computing.
+# This just updates the serverTime and clientTime variables above.
+# Calling this in e.g. end_problem provides a better estimate of the
+# difference beetween the server and client time setting as
+# the difference contains less of the latency/problem compute time.
+#
+sub set_compute_end_time {
+
+ my $now = time()*1000; # Javascript times are in ms.
+ my $js = "
+<script type='text/javascript'>
+//<![CDATA[
+serverTime = $now;
+clientTime = (new Date()).getTime();
+//]]>
+</script>
+
+";
+ return $js;
+
}
############################################################
More information about the LON-CAPA-cvs
mailing list