[LON-CAPA-cvs] cvs: loncom /interface/statistics lonstudentassessment.pm
bowersj2
lon-capa-cvs@mail.lon-capa.org
Sun, 05 Mar 2006 02:00:02 -0000
bowersj2 Sat Mar 4 21:00:02 2006 EDT
Modified files:
/loncom/interface/statistics lonstudentassessment.pm
Log:
When * is displayed on the chart, add code to make a pop-up-like thing
appear and show the real value for that cell.
Index: loncom/interface/statistics/lonstudentassessment.pm
diff -u loncom/interface/statistics/lonstudentassessment.pm:1.131 loncom/interface/statistics/lonstudentassessment.pm:1.132
--- loncom/interface/statistics/lonstudentassessment.pm:1.131 Mon Feb 27 14:40:30 2006
+++ loncom/interface/statistics/lonstudentassessment.pm Sat Mar 4 21:00:01 2006
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: lonstudentassessment.pm,v 1.131 2006/02/27 19:40:30 albertel Exp $
+# $Id: lonstudentassessment.pm,v 1.132 2006/03/05 02:00:01 bowersj2 Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -719,6 +719,61 @@
$Str .= "<pre>";
$r->print($Str);
$r->rflush();
+
+ $r->print(<<JS);
+<script>
+// get the left offset of a given widget as an absolute position
+function getLeftOffset (element) {
+ return collect(element, "offsetLeft");
+}
+
+// get the top offset of a given widget as an absolute position
+function getTopOffset (element) {
+ return collect(element, "offsetTop");
+}
+
+function collect(element, att) {
+ var val = 0;
+ while(element) {
+ val += element[att];
+ element = element.offsetParent;
+ }
+ return val;
+}
+
+var currentDiv;
+var oldBorder;
+var currentElement;
+function popup_score(element, score) {
+ popdown_score();
+ var left = getLeftOffset(element);
+ var top = getTopOffset(element);
+ var div = document.createElement("div");
+ div.style.border = "1px solid #8888FF";
+ div.style.backgroundColor = "#CCCCFF";
+ div.appendChild(document.createTextNode(score));
+ div.style.position = "absolute";
+ div.style.top = (top - 25) + "px";
+ div.style.left = (left - 10) + "px";
+ currentDiv = div;
+ document.body.insertBefore(div, document.body.children[0]);
+ oldBorder = element.style.border;
+ element.style.border = "1px solid yellow";
+ currentElement = element;
+}
+
+function popdown_score() {
+ if (currentDiv) {
+ document.body.removeChild(currentDiv);
+ }
+ if (currentElement) {
+ currentElement.style.border = oldBorder;
+ }
+ currentDiv = undefined;
+}
+</script>
+JS
+
#
# Let the user know what we are doing
my $studentcount = scalar(@Apache::lonstatistics::Students);
@@ -1748,6 +1803,18 @@
}
+# This function will return an HTML string including a star, with
+# a mouseover popup showing the "real" value. An optional second
+# argument lets you show something other than a star.
+sub show_star {
+ my $popup = shift;
+ my $symbol = shift || '*';
+ # Escape the popup for JS.
+ $popup =~ s/([^-a-zA-Z0-9:;,._ ()|!\/?=&*])/'\\' . sprintf("%lo", ord($1))/ge;
+
+ return "<span onmouseover='popup_score(this, \"$popup\");return false;' onmouseout='popdown_score();return false;' style='border: 1px solid #339933; margin: -1px;'>$symbol</span>";
+}
+
#######################################################
#######################################################
@@ -1818,7 +1885,7 @@
$sum++;
} elsif ($tries > 0) {
if ($tries > 9) {
- $symbol = '*';
+ $symbol = show_star($tries);
} else {
$symbol = $tries;
}
@@ -1953,7 +2020,7 @@
$symbol = sprintf("%.0f",$symbol);
}
if (length($symbol) > 1) {
- $symbol = '*';
+ $symbol = show_star($symbol);
}
if (exists($resource_data->{'resource.'.$part.'.solved'}) &&
$resource_data->{'resource.'.$part.'.solved'} ne '') {