[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